mcpField
T
trending-topics

trending-topics

github.com/happy-technologies-llc数据与数据库4141 次安装2 天前更新
代码仓库

关于 trending-topics

trending-topics 是面向 ServiceNow 客户服务支持管理人员的分析技能,可分析案例数量、渠道、产品、客户细分和情绪信号,发现新兴问题并生成趋势报告。

主要功能

  1. 01比较不同时间窗口的案例数量
  2. 02检测问题类别的数量激增
  3. 03分析渠道和产品趋势
  4. 04关联问题与客户细分
  5. 05生成管理层趋势报告

适用场景

  1. 01在每日支持例会上查看趋势
  2. 02调查某主题案例量上升
  3. 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 参考
EndpointMethodPurpose
/api/now/table/sn_customerservice_caseGET查询案例以进行趋势分析
/api/now/stats/sn_customerservice_caseGET按类别、产品和优先级汇总统计数据
/api/now/table/interactionGET分析渠道分布
/api/now/table/csm_consumerGET分析消费者细分群体的相关性
/api/now/table/sys_journal_fieldGET从案例沟通记录中挖掘文本

最佳实践

  • 先建立基准: 始终与基准时段(上周、滚动 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 - 在运营仪表板上可视化趋势

评论

支持 Markdown