关于 trending-topics
trending-topics 是面向 ServiceNow 客户服务支持管理人员的分析技能,可分析案例数量、渠道、产品、客户细分和情绪信号,发现新兴问题并生成趋势报告。
主要功能
- 01比较不同时间窗口的案例数量
- 02检测问题类别的数量激增
- 03分析渠道和产品趋势
- 04关联问题与客户细分
- 05生成管理层趋势报告
适用场景
- 01在每日支持例会上查看趋势
- 02调查某主题案例量上升
- 03监控客户群体的服务状况
MCP 相关
该技能使用 SN-Query-Table、SN-Natural-Language-Search、SN-Get-Record 和 SN-Execute-Background-Script 等 ServiceNow MCP 工具查询和分析案例数据。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill trending-topics安装后在 Claude Code 中输入/trending-topics确认已加载。
详细介绍
CSM 趋势主题分析
概述
此技能通过分析案例创建模式、类别分布、渠道偏好和情绪变化,识别客户服务产品组合中正在兴起和流行的主题。它能及时呈现问题,避免问题扩散,从而实现主动支持管理。涵盖以下内容:
- 按类别、子类别和产品分析可配置时间段内的案例量趋势
- 检测特定问题类型的案例创建量是否突然激增
- 绘制各主题的渠道分布变化(电话、聊天、电子邮件、门户)
- 识别客户沟通中的情绪趋势,以提供早期预警信号
- 将趋势主题与账户层级和客户细分相关联
- 生成包含可执行建议的高管级趋势报告
适用场景: 每日站会回顾、每周运营报告、调查特定主题的案例量疑似增加情况,或主动监控整个客户群的服务状况时。
价值主张: 通过检测新兴问题,避免其影响 SLA,实现主动支持管理。借助数据驱动的趋势分析,支持人员配置决策、识别知识缺口,并形成产品反馈闭环。
前提条件
- 插件: 必须启用 Customer Service Management(
com.sn_customerservice) - 角色:
sn_customerservice_manager、csm_admin或report_admin - 访问权限: 对
sn_customerservice_case、interaction、csm_consumer和sys_journal_field表具有读取权限;可访问聚合/统计 API - 数据: 至少需要 90 天的案例历史数据,才能进行有效的趋势分析;数据越多,基线对比效果越好
- 知识: 了解案例分类体系、客户细分和 SLA 目标
操作步骤
步骤 1:按类别建立案例量基线
查询当前时段和对比时段的案例量,以检测偏差。
使用 MCP(Claude Code/Desktop):
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()
fields: category,subcategory,product,priority,contact_type,state
limit: 500
对比基线(前一个 7 天时段):
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: opened_atBETWEENjavascript:gs.daysAgoStart(14)@javascript:gs.daysAgoEnd(7)
fields: category,subcategory,product,priority,contact_type,state
limit: 500
使用 REST API:
GET /api/now/stats/sn_customerservice_case?sysparm_query=opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()&sysparm_group_by=category&sysparm_count=true
GET /api/now/stats/sn_customerservice_case?sysparm_query=opened_atBETWEENjavascript:gs.daysAgoStart(14)@javascript:gs.daysAgoEnd(7)&sysparm_group_by=category&sysparm_count=true
步骤 2:检测类别量激增
使用后台脚本计算百分比变化并标记异常。
使用 MCP:
Tool: SN-Execute-Background-Script
Parameters:
description: Calculate category volume changes between current and previous week
script: |
var categories = {};
var currentWeek = new GlideAggregate('sn_customerservice_case');
currentWeek.addQuery('opened_at', '>=', gs.daysAgoStart(7));
currentWeek.addAggregate('COUNT');
currentWeek.groupBy('category');
currentWeek.query();
while (currentWeek.next()) {
var cat = currentWeek.category.getDisplayValue() || 'Uncategorized';
categories[cat] = categories[cat] || { current: 0, previous: 0 };
categories[cat].current = parseInt(currentWeek.getAggregate('COUNT'));
}
var prevWeek = new GlideAggregate('sn_customerservice_case');
prevWeek.addQuery('opened_at', '>=', gs.daysAgoStart(14));
prevWeek.addQuery('opened_at', '<', gs.daysAgoStart(7));
prevWeek.addAggregate('COUNT');
prevWeek.groupBy('category');
prevWeek.query();
while (prevWeek.next()) {
var cat2 = prevWeek.category.getDisplayValue() || 'Uncategorized';
categories[cat2] = categories[cat2] || { current: 0, previous: 0 };
categories[cat2].previous = parseInt(prevWeek.getAggregate('COUNT'));
}
var results = [];
for (var c in categories) {
var pctChange = categories[c].previous > 0
? Math.round(((categories[c].current - categories[c].previous) / categories[c].previous) * 100)
: (categories[c].current > 0 ? 100 : 0);
results.push(c + ': ' + categories[c].current + ' (was ' + categories[c].previous + ', ' + pctChange + '% change)');
}
gs.info('Category Trends:\n' + results.join('\n'));
使用 REST API:
GET /api/now/stats/sn_customerservice_case?sysparm_query=opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()&sysparm_group_by=category,subcategory&sysparm_count=true&sysparm_display_value=true
步骤 3:分析各主题的渠道分布
确定客户针对趋势主题使用的渠道,以优化人员配置。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()^category=[trending_category]
fields: contact_type,priority,state
limit: 200
Tool: SN-Query-Table
Parameters:
table_name: interaction
query: opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()
fields: channel,state,parent,opened_at
limit: 200
使用 REST API:
GET /api/now/stats/sn_customerservice_case?sysparm_query=opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()^category=[trending_category]&sysparm_group_by=contact_type&sysparm_count=true&sysparm_display_value=true
步骤 4:识别特定产品的趋势
按产品拆分趋势主题,以识别产品级问题。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()^productISNOTEMPTY
fields: product,category,subcategory,priority,state
limit: 300
使用 REST API:
GET /api/now/stats/sn_customerservice_case?sysparm_query=opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()^productISNOTEMPTY&sysparm_group_by=product,category&sysparm_count=true&sysparm_display_value=true
步骤 5:分析趋势主题的优先级分布
评估严重程度模式,以了解趋势问题对业务的影响。
使用 MCP:
Tool: SN-Execute-Background-Script
Parameters:
description: Analyze priority distribution for top trending categories
script: |
var trendingCategories = ['Portal Access', 'Billing', 'Performance'];
var results = [];
trendingCategories.forEach(function(cat) {
var ga = new GlideAggregate('sn_customerservice_case');
ga.addQuery('opened_at', '>=', gs.daysAgoStart(7));
ga.addQuery('category', cat);
ga.addAggregate('COUNT');
ga.groupBy('priority');
ga.query();
var priorities = {};
while (ga.next()) {
priorities[ga.priority.getDisplayValue()] = parseInt(ga.getAggregate('COUNT'));
}
results.push(cat + ': ' + JSON.stringify(priorities));
});
gs.info('Priority Distribution:\n' + results.join('\n'));
使用 REST API:
GET /api/now/stats/sn_customerservice_case?sysparm_query=opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()^category=[category]&sysparm_group_by=priority&sysparm_count=true&sysparm_display_value=true
步骤 6:评估受影响的客户细分
确定受趋势问题影响最大的客户细分。
使用 MCP:
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()^category=[trending_category]
fields: account,consumer,priority,state
limit: 100
与账户层级交叉对照:
Tool: SN-Query-Table
Parameters:
table_name: customer_account
query: sys_idIN[account_sys_ids_from_cases]
fields: sys_id,name,customer_tier,industry
limit: 50
使用 REST API:
GET /api/now/table/sn_customerservice_case?sysparm_query=opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()^category=[trending_category]&sysparm_fields=account,consumer,priority,state&sysparm_limit=100&sysparm_display_value=true
步骤 7:生成趋势主题报告
汇总所有分析,生成适合高管审阅的报告。
=== TRENDING TOPICS REPORT ===
Period: Mar 12 - Mar 19, 2026
Generated: Mar 19, 2026
TOP TRENDING TOPICS (by volume change):
1. Portal Access Issues [SPIKE]
Volume: 87 cases (+145% vs. prev week)
Priority Mix: P1(5) P2(32) P3(45) P4(5)
Channel: Chat 45% | Phone 30% | Portal 20% | Email 5%
Products: Customer Portal v3.2 (78%), Mobile App (22%)
Segments: Gold accounts 40%, Silver 35%, Bronze 25%
Insight: Spike correlates with Portal v3.2.1 release on Mar 14
Action: Coordinate with Engineering on hotfix; draft KB article
2. Billing Discrepancies [RISING]
Volume: 42 cases (+35% vs. prev week)
Priority Mix: P2(12) P3(25) P4(5)
Channel: Phone 55% | Email 30% | Portal 15%
Products: Billing Module (100%)
Segments: Gold 60% (disproportionate)
Insight: Increase concentrated in enterprise accounts post rate change
Action: Review billing rule changes; proactive outreach to Gold accounts
3. Password Reset Failures [STABLE]
Volume: 28 cases (-5% vs. prev week)
Priority Mix: P3(20) P4(8)
Channel: Chat 60% | Portal 30% | Phone 10%
Insight: Consistent volume; candidate for self-service automation
Action: Review Virtual Agent deflection rates
EMERGING SIGNALS:
- "API timeout" mentions up 200% in case descriptions (12 cases)
- 3 Platinum accounts opened P1 cases for same integration error
- Chat channel usage up 15% overall (staffing review recommended)
RECOMMENDATIONS:
1. Deploy hotfix for Portal v3.2.1 session handling
2. Create proactive communication for billing rate change impact
3. Staff additional chat agents for peak hours (10am-2pm)
4. Investigate API timeout cluster for potential infrastructure issue
工具使用
MCP 工具参考
| 工具 | 使用场景 |
|---|---|
SN-Natural-Language-Search | 对案例描述进行语义搜索,发现新兴关键词模式 |
SN-Query-Table | 结构化聚合查询,用于分析数量、渠道和优先级 |
SN-Get-Record | 深入分析特定趋势案例,以找出根本原因 |
SN-Execute-Background-Script | 对大型数据集执行复杂聚合和统计计算 |
REST API 参考
| Endpoint | Method | Purpose |
|---|---|---|
/api/now/table/sn_customerservice_case | GET | 查询案例以进行趋势分析 |
/api/now/stats/sn_customerservice_case | GET | 按类别、产品和优先级汇总统计数据 |
/api/now/table/interaction | GET | 分析渠道分布 |
/api/now/table/csm_consumer | GET | 分析消费者细分群体的相关性 |
/api/now/table/sys_journal_field | GET | 从案例沟通记录中挖掘文本 |
最佳实践
- 先建立基准: 始终与基准时段(上周、滚动 30 天平均值)比较,而不是使用绝对数值
- 使用多个时间窗口: 分析 7 天、30 天和 90 天的窗口,以区分短暂峰值和持续趋势
- 结合事件分析: 将峰值与已知事件(发布、故障、计费周期、季节性模式)交叉对照
- 按账户等级细分: 优先处理影响高级账户的趋势,以便主动联系客户
- 监控渠道变化: 渠道偏好的变化可能表明客户群体特征或问题紧急程度发生了变化
- 设置警报阈值: 定义百分比变化阈值(例如,增长超过 50%),用于自动发送警报
- 跟踪新关键词: 监控案例描述中出现的、与现有类别不匹配的新关键词
- 提供可执行的报告: 每条趋势洞察都应包含面向运营、产品或工程团队的建议行动
故障排除
“数量似乎偏低”
原因: 查询的时间范围可能未考虑时区差异,或者案例类别分类体系可能已经变更。 解决方案: 确认时间范围使用了服务端 JavaScript 函数。检查近期是否重命名或合并了类别,这可能导致历史数据被拆分。
“渠道分布与交互数据不符”
原因: 案例中的 contact_type 字段可能与交互中的 channel 字段不同。案例可能在创建后被重新分类。
解决方案: 使用交互记录获取权威渠道数据,使用案例记录获取初始联系类型。在报告中核对差异。
“新兴关键词产生误报”
原因: 常见词语出现在无关语境中。 解决方案: 使用多词短语和二元词组进行关键词分析。标记关键词前,要求其达到最低出现频率阈值(例如,出现 5 次或以上)。
“无法对大型数据集运行聚合查询”
原因: GlideAggregate 处理超大型案例表时可能超时。 解决方案: 添加日期范围筛选条件以缩小数据集。使用针对聚合进行优化的 REST stats API。对于定期分析,可考虑使用计划报告。
示例
示例 1:每日站会趋势摘要
场景: 经理需要在晨间站会上快速了解趋势,时长约 5 分钟。
Tool: SN-Execute-Background-Script
Parameters:
description: Generate daily trend summary
script: |
var ga = new GlideAggregate('sn_customerservice_case');
ga.addQuery('opened_at', '>=', gs.daysAgoStart(1));
ga.addAggregate('COUNT');
ga.groupBy('category');
ga.orderByAggregate('COUNT', 'DESC');
ga.query();
var summary = 'Yesterday Case Volume by Category:\n';
while (ga.next()) {
summary += ga.category.getDisplayValue() + ': ' + ga.getAggregate('COUNT') + '\n';
}
gs.info(summary);
示例 2:特定产品趋势深入分析
场景: 产品经理在产品发布后请求对该产品进行趋势分析。
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: product=[product_sys_id]^opened_atONLast 14 days@javascript:gs.beginningOfLast14Days()@javascript:gs.endOfLast14Days()
fields: category,subcategory,priority,state,opened_at,short_description
limit: 200
示例 3:检测情绪变化
场景: 检测客户对热门话题的情绪是否正在恶化。
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: category=[trending_category]^opened_atONLast 7 days@javascript:gs.beginningOfLast7Days()@javascript:gs.endOfLast7Days()^escalation>0
fields: number,short_description,escalation,priority,consumer,account
limit: 50
升级率上升通常与负面情绪变化相关;在没有直接情绪评分时,可将其作为替代指标。
相关技能
csm/case-summarization- 总结热门话题中的个别案例csm/sentiment-analysis- 进行详细的情绪分析,以关联趋势csm/sidebar-summarization- 为涉及热门问题的案例提供 Agent 上下文csm/kb-generation- 为已识别的热门话题生成 KB 文章reporting/analytics-generation- 在运营仪表板上可视化趋势