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 リファレンス
| エンドポイント | メソッド | 目的 |
|---|---|---|
/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 統計 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- 話題になっている問題のケースについて、エージェント向けのコンテキストを提供しますcsm/kb-generation- 特定した話題のナレッジベース記事を生成しますreporting/analytics-generation- 運用ダッシュボードで傾向を可視化します