关于 saas-user-resolution
面向 ServiceNow Software Asset Management 中 SAM 分析师的技能,可核对 SaaS 账户与使用情况,发现闲置或重复许可证,并整理优化建议。
主要功能
- 01对比订阅与活跃使用情况
- 02查找休眠及孤立账户
- 03检测重复配置
- 04评估许可证层级匹配度
- 05估算可回收许可证成本
- 06生成用户核对报告
适用场景
- 01在 SaaS 续订前审查许可证
- 02审计入职与离职流程
- 03调查使用报告差异
- 04准备 SaaS 支出分析
MCP 相关
使用 SN-Query-Table、SN-Natural-Language-Search 和 SN-Get-Record 等 ServiceNow MCP 工具检索订阅及用户数据。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill saas-user-resolution安装后在 Claude Code 中输入/saas-user-resolution确认已加载。
详细介绍
SaaS 用户核查
概述
此技能提供了一套结构化方法,用于解决 SaaS 用户差异问题,并优化 ServiceNow 软件资产管理中的 SaaS 许可证利用率。它可帮助 SAM 分析师发现浪费、核对用户账户,并生成可执行的优化建议。
主要功能:
- 将 SaaS 订阅用户数与实际活跃使用情况进行比较
- 识别不活跃、休眠或孤立的 SaaS 用户账户
- 检测 SaaS 应用之间重复配置的用户
- 分析使用模式,以便推荐合适的许可证等级
- 计算回收许可证可能节省的成本
- 为订阅负责人生成用户核对报告
适用场景: SaaS 订阅即将续订时、月度使用报告显示差异时、需要审核入职/离职流程时,或管理层要求分析 SaaS 支出优化情况时。
前提条件
- 角色:
sam_admin、sam_user、license_admin或itil - 访问权限: 对
samp_saas_user、samp_saas_subscription、samp_sw_product、samp_license、samp_sw_install和sys_user表拥有读取权限 - 插件: 已启用软件资产管理(com.snc.samp)及 SaaS 许可证管理模块
- 数据: 已配置 SaaS 集成,并已完成目标应用的用户同步
操作步骤
第 1 步:检索 SaaS 订阅详情
获取目标应用的 SaaS 订阅记录。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_subscription
query: software_product.display_nameLIKESalesforce
fields: sys_id,display_name,software_product,vendor,total_licenses,used_licenses,available_licenses,cost_per_license,total_cost,renewal_date,contract,state,license_metric
limit: 10
使用 REST API:
GET /api/now/table/samp_saas_subscription?sysparm_query=software_product.display_nameLIKESalesforce&sysparm_fields=sys_id,display_name,software_product,vendor,total_licenses,used_licenses,available_licenses,cost_per_license,total_cost,renewal_date,contract,state,license_metric&sysparm_limit=10&sysparm_display_value=true
第 2 步:检索 SaaS 用户账户
获取与订阅关联的所有用户账户。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription=[SUBSCRIPTION_SYS_ID]^ORDERBYlast_login_date
fields: sys_id,user,user.email,user.active,subscription,last_login_date,status,license_type,created_on,role
limit: 500
使用 REST API:
GET /api/now/table/samp_saas_user?sysparm_query=subscription=[SUBSCRIPTION_SYS_ID]^ORDERBYlast_login_date&sysparm_fields=sys_id,user,subscription,last_login_date,status,license_type,created_on,role&sysparm_limit=500&sysparm_display_value=true
第 3 步:识别不活跃和休眠用户
查找在指定的不活跃期限内(通常为 30、60 或 90 天)未登录的用户。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription=[SUBSCRIPTION_SYS_ID]^last_login_date<javascript:gs.daysAgoStart(90)^status=active
fields: sys_id,user,user.email,user.department,last_login_date,license_type,created_on
limit: 200
对于从未登录过的用户:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription=[SUBSCRIPTION_SYS_ID]^last_login_dateISEMPTY^status=active
fields: sys_id,user,user.email,user.department,license_type,created_on
limit: 200
使用 REST API:
GET /api/now/table/samp_saas_user?sysparm_query=subscription=[SUBSCRIPTION_SYS_ID]^last_login_date<javascript:gs.daysAgoStart(90)^status=active&sysparm_fields=sys_id,user,last_login_date,license_type,created_on&sysparm_limit=200&sysparm_display_value=true
GET /api/now/table/samp_saas_user?sysparm_query=subscription=[SUBSCRIPTION_SYS_ID]^last_login_dateISEMPTY^status=active&sysparm_fields=sys_id,user,license_type,created_on&sysparm_limit=200&sysparm_display_value=true
第 4 步:检测孤立用户
识别对应的 ServiceNow 用户记录处于非活动状态(已离职员工)的 SaaS 用户。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription=[SUBSCRIPTION_SYS_ID]^user.active=false^status=active
fields: sys_id,user,user.email,user.active,last_login_date,license_type
limit: 100
使用 REST API:
GET /api/now/table/samp_saas_user?sysparm_query=subscription=[SUBSCRIPTION_SYS_ID]^user.active=false^status=active&sysparm_fields=sys_id,user,last_login_date,license_type&sysparm_limit=100&sysparm_display_value=true
第 5 步:分析许可证等级使用情况
将用户活跃度与其分配的许可证等级进行比较,以发现降级机会。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription=[SUBSCRIPTION_SYS_ID]^status=active^ORDERBYlicense_type
fields: sys_id,user,license_type,last_login_date,role,status
limit: 500
与订阅等级费用交叉核对:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_subscription
query: software_product=[PRODUCT_SYS_ID]
fields: sys_id,display_name,license_metric,cost_per_license,total_licenses,used_licenses
limit: 10
使用 REST API:
GET /api/now/table/samp_saas_user?sysparm_query=subscription=[SUBSCRIPTION_SYS_ID]^status=active^ORDERBYlicense_type&sysparm_fields=sys_id,user,license_type,last_login_date,role&sysparm_limit=500&sysparm_display_value=true
第 6 步:检查重复配置
识别为同一产品配置了多个订阅的用户。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_user
query: subscription.software_product=[PRODUCT_SYS_ID]^status=active^ORDERBYuser
fields: sys_id,user,user.email,subscription,license_type,status
limit: 500
使用 REST API:
GET /api/now/table/samp_saas_user?sysparm_query=subscription.software_product=[PRODUCT_SYS_ID]^status=active^ORDERBYuser&sysparm_fields=sys_id,user,subscription,license_type,status&sysparm_limit=500&sysparm_display_value=true
第 7 步:生成用户核查报告
将调查结果整理为结构化的优化报告:
=== SAAS USER RESOLUTION REPORT ===
Application: [product_name]
Subscription: [subscription_name]
Vendor: [vendor] | Renewal: [renewal_date]
Report Date: [current_date]
SUBSCRIPTION OVERVIEW:
Total Licenses: [total_licenses]
Active Users: [used_licenses]
Available: [available_licenses]
Monthly Cost: $[total_cost] ($[cost_per_license]/user)
USER DISCREPANCY ANALYSIS:
| Category | Count | Monthly Cost Impact |
|----------|-------|-------------------|
| Active & In Use | [count] | - |
| Inactive (90+ days) | [count] | $[savings] |
| Never Logged In | [count] | $[savings] |
| Orphaned (termed employees) | [count] | $[savings] |
| Duplicate Provisioning | [count] | $[savings] |
TOTAL RECLAIMABLE: [total_count] licenses = $[total_savings]/month
TIER OPTIMIZATION:
| Current Tier | Users | Recommended Tier | Savings/User |
|-------------|-------|-----------------|-------------|
| Enterprise | [count] | Standard | $[amount] |
| Professional | [count] | Basic | $[amount] |
TOP RECOMMENDATIONS:
1. [action] - Impact: $[savings]/month - Priority: [High/Med/Low]
2. [action] - Impact: $[savings]/month - Priority: [High/Med/Low]
3. [action] - Impact: $[savings]/month - Priority: [High/Med/Low]
ORPHANED USER DETAILS:
| User | Email | Department | Last Login | License Tier |
|------|-------|-----------|------------|-------------|
| [name] | [email] | [dept] | [date] | [tier] |
工具用法
MCP 工具参考
| 工具 | 使用场景 |
|---|---|
SN-Natural-Language-Search | 自然语言查询(例如,“查找未使用的 Salesforce 许可证”) |
SN-Query-Table | 对订阅、用户和使用情况数据进行结构化查询 |
SN-Get-Record | 根据 sys_id 检索特定订阅或用户记录 |
REST API 参考
| 端点 | 方法 | 用途 |
|---|---|---|
/api/now/table/samp_saas_subscription | GET | SaaS 订阅详情 |
/api/now/table/samp_saas_user | GET | SaaS 用户账户和活动情况 |
/api/now/table/samp_sw_product | GET | 软件产品目录 |
/api/now/table/samp_license | GET | 许可证授权记录 |
/api/now/table/samp_compliance_result | GET | 合规性计算结果 |
/api/now/table/sys_user | GET | 用于交叉核对的 ServiceNow 用户记录 |
最佳实践
- 明确界定不活跃阈值: 在回收许可证前,与相关方商定 30/60/90 天的休眠期限
- 取消配置前先核实: 移除用户访问权限前,务必与部门经理确认
- 考虑季节性使用情况: 一些用户可能存在合理的周期性访问模式(例如,季度报告工具)
- 检查共享账户: 应将服务账户和共享邮箱排除在休眠分析之外
- 跟踪回收结果: 记录回收了哪些许可证,并监控重新配置请求
- 考虑合规性影响: 如果之后添加新用户,移除许可证可能会导致产品不合规
- 自动执行持续监控: 设置定期报告,在续订周期前发现休眠账户
- 与人力资源部门协调: 集成离职工作流,在员工离职时自动标记 SaaS 账户
故障排除
“SaaS 用户记录不可用”
原因: 尚未配置 SaaS 集成,或同步尚未完成。 解决方案: 检查 SAM Workspace 中的 SaaS 集成设置。确认与 SaaS 提供商的 API 连接处于活动状态。如有需要,手动运行同步。
“所有上次登录日期均为空”
原因: SaaS 提供商集成可能不支持同步登录日期。 解决方案: 检查 SaaS 连接器是否支持使用数据。有些连接器只同步配置数据。可考虑使用 SaaS 提供商的原生报告 API 补充登录数据。
“未检测到重复用户”
原因: 用户在不同订阅中的配置可能使用了不同的电子邮件地址或用户标识符。
解决方案: 使用 sys_user.employee_number 或 sys_user.user_name 字段进行交叉引用,而不是使用电子邮件地址。检查电子邮件别名是否存在差异。
“成本计算不准确”
原因: cost_per_license 字段可能未反映协商价格或分级批量折扣。
解决方案: 根据实际合同条款核实成本数据。根据采购部门提供的准确单价更新订阅记录。
示例
示例 1:Salesforce 许可证优化
场景: SAM 分析师在年度续订前审查 Salesforce 许可证。
步骤 1 - 获取订阅:
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_subscription
query: display_nameLIKESalesforce
fields: sys_id,display_name,total_licenses,used_licenses,cost_per_license,renewal_date
limit: 5
输出:
SALESFORCE USER RESOLUTION REPORT
Subscription: Salesforce Enterprise | Renewal: Jun 30, 2026
Total: 800 licenses | Active: 734 | Cost: $150/user/mo
FINDINGS:
- 42 users inactive 90+ days ($6,300/mo reclaimable)
- 18 orphaned accounts (termed employees) ($2,700/mo)
- 6 never-logged-in accounts ($900/mo)
- 23 users eligible for downgrade to Platform license ($1,150/mo)
TOTAL SAVINGS OPPORTUNITY: $11,050/month ($132,600/year)
IMMEDIATE ACTIONS:
1. Deprovision 18 orphaned accounts - $2,700/mo - Priority: High
2. Review 42 inactive users with managers - $6,300/mo - Priority: High
3. Downgrade 23 low-usage users to Platform - $1,150/mo - Priority: Medium
示例 2:多应用 SaaS 支出审查
场景: CIO 请求一份跨应用的 SaaS 优化报告。
Tool: SN-Query-Table
Parameters:
table_name: samp_saas_subscription
query: state=active^ORDERBYDESCtotal_cost
fields: display_name,software_product,total_licenses,used_licenses,available_licenses,cost_per_license,total_cost,renewal_date
limit: 20
输出:
SAAS PORTFOLIO OPTIMIZATION SUMMARY
Total SaaS Spend: $485,000/month across 14 applications
TOP OPTIMIZATION OPPORTUNITIES:
| Application | Unused Licenses | Monthly Waste | Renewal |
|-------------|----------------|---------------|---------|
| Salesforce Enterprise | 66 | $9,900 | Jun 2026 |
| Adobe Creative Cloud | 45 | $2,475 | Sep 2026 |
| Slack Business+ | 112 | $1,456 | Apr 2026 |
| Zoom Enterprise | 89 | $1,691 | Jul 2026 |
TOTAL ADDRESSABLE WASTE: $15,522/month ($186,264/year)
QUICK WINS (next 30 days): $12,356/month from orphaned accounts
相关技能
sam/product-compliance- 软件产品合规性分析与整改procurement/invoice-management- SaaS 发票与合同管理admin/user-provisioning- 用户生命周期与配置工作流reporting/executive-dashboard- 高管 SaaS 支出仪表板