csm-kb-generation について
ServiceNow の解決済みカスタマーサービスケースを、顧客向けナレッジ記事に変換するスキルです。サポートチーム向けに、記事構成や FAQ、分類、レビュー申請を扱います。
主な機能
- 01原因・手順・回避策の抽出
- 02顧客向けの文章への書き換え
- 03スクリーンショット用の場所と代替テキスト
- 04類似ケースからの FAQ 作成
- 05記事の分類とレビュー申請
活用シーン
- 01頻出ケースの解決策を記事化
- 02特定したナレッジの不足を補うコンテンツ作成
- 03クローズ済みケースからの定期的なナレッジ収集
MCP 対応
ServiceNow の MCP ツールでケースやナレッジレコードを検索し、記事とケースの関連付けを作成できます。記事内容や状態の更新にも利用します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill csm-kb-generationインストール後、Claude Code で/csm-kb-generationを入力して読み込まれたか確認します。
詳細
CSM ケースからのナレッジ記事生成
概要
このスキルは、解決済みのカスタマーサービスケースから、質の高いナレッジベース記事を生成します。ケース解決に関する内部データを、今後の問い合わせを減らし、セルフサービスを促進する顧客向けドキュメントに変換します。次の内容を扱います。
- 解決済みの CSM ケースから、解決手順、根本原因、回避策を抽出する
- 内部用語を取り除き、顧客に分かりやすい表現で記事を構成する
- 視覚的な説明のため、説明的な代替テキスト付きのスクリーンショット用プレースホルダーを挿入する
- 類似ケースでよくある追加質問に基づいて FAQ セクションを生成する
- 検索性を最適化できるよう、記事を分類してタグ付けする
- レビューと承認のため、ナレッジワークフローを通じて記事を公開する
使用するタイミング: よくある問題や繰り返し発生する問題に対処する CSM ケースを解決した後、ケース対応中にナレッジの不足が判明したとき、またはクローズ済みケースのデータから定期的にナレッジを収集するときに使用します。
価値提案: ケースの解決内容に閉じ込められた暗黙知を、再利用可能なセルフサービスコンテンツに変換します。顧客が自分で回答を見つけられるようにすることでケース数を減らし、サポートチーム全体で一貫した解決方法を提供できます。
前提条件
- プラグイン: Customer Service Management(
com.sn_customerservice)、Knowledge Management(com.glideapp.knowledge) - ロール:
knowledge_admin、knowledge_manager、またはknowledge(記事の作成用);sn_customerservice_agent(ケースへのアクセス用) - アクセス権:
sn_customerservice_case、interaction、csm_consumer、sys_journal_fieldへの読み取りアクセス;kb_knowledge、kb_knowledge_base、kb_categoryへの読み取り/書き込みアクセス - 知識: 組織のナレッジベース構造、記事テンプレート、公開ワークフローを理解していること
手順
ステップ 1:KB 生成候補のケースを特定する
頻度、カテゴリ、解決品質に基づいて、ナレッジ記事の候補となる解決済みケースをクエリします。
MCP を使用する場合(Claude Code/Desktop):
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: state=3^resolution_codeISNOTEMPTY^closed_atONLast 30 days@javascript:gs.beginningOfLast30Days()@javascript:gs.endOfLast30Days()^ORDERBYDESCclosed_at
fields: sys_id,number,short_description,category,subcategory,resolution_code,resolved_by,product,close_notes,opened_at,closed_at
limit: 20
REST API を使用する場合:
GET /api/now/table/sn_customerservice_case?sysparm_query=state=3^resolution_codeISNOTEMPTY^closed_atONLast 30 days@javascript:gs.beginningOfLast30Days()@javascript:gs.endOfLast30Days()^ORDERBYDESCclosed_at&sysparm_fields=sys_id,number,short_description,category,subcategory,resolution_code,resolved_by,product,close_notes,opened_at,closed_at&sysparm_limit=20&sysparm_display_value=true
ステップ 2:ケースから解決の詳細をすべて抽出する
クローズ時のメモ、作業メモ、解決情報を含むケースレコード全体を取得します。
MCP を使用する場合:
Tool: SN-Get-Record
Parameters:
table_name: sn_customerservice_case
sys_id: [case_sys_id]
fields: sys_id,number,short_description,description,state,category,subcategory,resolution_code,close_notes,cause,product,contact_type,opened_at,closed_at,resolved_by
次に、解決の手順を把握するため、作業メモを取得します。
Tool: SN-Query-Table
Parameters:
table_name: sys_journal_field
query: element_id=[case_sys_id]^elementINwork_notes,comments^ORDERBYsys_created_on
fields: sys_id,element,value,sys_created_on,sys_created_by
limit: 30
REST API を使用する場合:
GET /api/now/table/sn_customerservice_case/{case_sys_id}?sysparm_fields=sys_id,number,short_description,description,state,category,subcategory,resolution_code,close_notes,cause,product,contact_type,opened_at,closed_at,resolved_by&sysparm_display_value=true
GET /api/now/table/sys_journal_field?sysparm_query=element_id=[case_sys_id]^elementINwork_notes,comments^ORDERBYsys_created_on&sysparm_fields=sys_id,element,value,sys_created_on,sys_created_by&sysparm_limit=30
ステップ 3:FAQ 生成のために類似の解決済みケースを探す
関連するケースをクエリして、よくある追加質問や別の解決方法を特定します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: category=[case_category]^subcategory=[case_subcategory]^state=3^sys_id!=[case_sys_id]^ORDERBYDESCclosed_at
fields: sys_id,number,short_description,close_notes,resolution_code,description
limit: 10
REST API を使用する場合:
GET /api/now/table/sn_customerservice_case?sysparm_query=category=[case_category]^subcategory=[case_subcategory]^state=3^sys_id!=[case_sys_id]^ORDERBYDESCclosed_at&sysparm_fields=sys_id,number,short_description,close_notes,resolution_code,description&sysparm_limit=10&sysparm_display_value=true
ステップ 4:既存のナレッジ記事を確認する
重複を避けるため、重複記事や関連する記事を検索します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
query: workflow_state=published^123TEXTQUERY321=[case_short_description]
table_name: kb_knowledge
limit: 5
REST API を使用する場合:
GET /api/now/table/kb_knowledge?sysparm_query=short_descriptionLIKE[key_terms]^workflow_stateINpublished,draft&sysparm_fields=sys_id,number,short_description,workflow_state,sys_view_count,kb_knowledge_base&sysparm_limit=5&sysparm_display_value=true
ステップ 5:公開先のナレッジベースとカテゴリを特定する
記事の公開先を決定します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: kb_knowledge_base
query: active=true
fields: sys_id,title,description,owner,kb_version
limit: 10
Tool: SN-Query-Table
Parameters:
table_name: kb_category
query: kb_knowledge_base=[kb_sys_id]^active=true
fields: sys_id,label,parent_id,full_category
limit: 20
REST API を使用する場合:
GET /api/now/table/kb_knowledge_base?sysparm_query=active=true&sysparm_fields=sys_id,title,description,owner&sysparm_limit=10&sysparm_display_value=true
GET /api/now/table/kb_category?sysparm_query=kb_knowledge_base=[kb_sys_id]^active=true&sysparm_fields=sys_id,label,parent_id,full_category&sysparm_limit=20&sysparm_display_value=true
ステップ 6:ナレッジ記事を生成して作成する
顧客向けの表現で記事を作成し、ServiceNow に登録します。
MCP を使用する場合:
Tool: SN-Create-Record
Parameters:
table_name: kb_knowledge
fields:
short_description: "How to Resolve Online Return Processing Errors"
kb_knowledge_base: [kb_sys_id]
kb_category: [category_sys_id]
text: |
<h2>Problem</h2>
<p>When attempting to process a return through the online portal, you may encounter an error message stating "Unable to process return" or the page may time out during submission.</p>
<h2>Cause</h2>
<p>This issue occurs when the browser session expires during the return process, typically after being idle for more than 15 minutes on the return form.</p>
<h2>Resolution</h2>
<ol>
<li>Clear your browser cache and cookies for the portal domain</li>
<li>Log out and log back in to establish a fresh session</li>
<li>Navigate to <strong>My Orders > Returns</strong></li>
<li>Select the order containing the item(s) to return</li>
<li>Click <strong>Start Return</strong> and complete the form within 10 minutes</li>
<li>Submit the return request and note the confirmation number</li>
</ol>
<h2>If the Issue Persists</h2>
<p>If you continue to experience errors after following the steps above:</p>
<ul>
<li>Try using a different browser (Chrome, Firefox, or Edge recommended)</li>
<li>Disable browser extensions that may interfere with the portal</li>
<li>Contact support with your order number and the error message</li>
</ul>
<h2>Frequently Asked Questions</h2>
<p><strong>Q: Will I lose my return information if the page times out?</strong></p>
<p>A: Yes, you will need to re-enter the return details. The system does not save partial return submissions.</p>
<p><strong>Q: Can I process returns through the mobile app instead?</strong></p>
<p>A: Yes, the mobile app maintains a longer session and is recommended for complex returns with multiple items.</p>
<p><strong>Q: How long does the return take to process after submission?</strong></p>
<p>A: Returns are typically processed within 3-5 business days. You will receive an email confirmation when the return is approved.</p>
workflow_state: draft
article_type: text
valid_to: "2027-03-19"
source: case_resolution
REST API を使用する場合:
POST /api/now/table/kb_knowledge
Content-Type: application/json
{
"short_description": "How to Resolve Online Return Processing Errors",
"kb_knowledge_base": "[kb_sys_id]",
"kb_category": "[category_sys_id]",
"text": "<h2>Problem</h2><p>When attempting to process a return...</p>",
"workflow_state": "draft",
"article_type": "text",
"source": "case_resolution"
}
ステップ 7:記事を元のケースに関連付ける
追跡可能にするため、新しい記事を元のケースに関連付けます。
MCP を使用する場合:
Tool: SN-Create-Record
Parameters:
table_name: m2m_kb_task
fields:
kb_knowledge: [article_sys_id]
task: [case_sys_id]
REST API を使用する場合:
POST /api/now/table/m2m_kb_task
Content-Type: application/json
{
"kb_knowledge": "[article_sys_id]",
"task": "[case_sys_id]"
}
ツールの使用方法
MCP ツールリファレンス
| ツール | 使用するタイミング |
|---|---|
SN-Natural-Language-Search | ケースのトピックに意味的に一致する既存の KB 記事を探す |
SN-Query-Table | 解決済みケース、作業メモ、KB ベース、カテゴリをクエリする |
SN-Get-Record | sys_id を指定してケースの詳細全体を取得する |
SN-Create-Record | KB 記事とケース・記事の関連付けを作成する |
SN-Update-Record | 記事の内容またはワークフローの状態を更新する |
SN-Execute-Background-Script | 複数の解決済みケースから記事を一括生成する |
REST API リファレンス
| エンドポイント | メソッド | 目的 |
|---|---|---|
/api/now/table/sn_customerservice_case | GET | 記事の候補として解決済みケースを検索します |
/api/now/table/sys_journal_field | GET | 解決手順を含む作業メモを取得します |
/api/now/table/kb_knowledge | GET/POST/PATCH | ナレッジ記事を検索、作成、更新します |
/api/now/table/kb_knowledge_base | GET | 利用可能なナレッジベースを一覧表示します |
/api/now/table/kb_category | GET | ナレッジカテゴリを閲覧します |
/api/now/table/kb_feedback | GET | 改善のために記事のフィードバックを確認します |
ベストプラクティス
- 顧客向けの表現を使用する: 社内用語、ケースへの言及、技術的な略語を、顧客が理解できる明確な表現に置き換えます
- 一貫した構成にする: 生成するすべての記事で「問題 > 原因 > 解決方法 > FAQ」の形式を使用します
- スクリーンショットのプレースホルダーを含める: コンテンツチームが記入できるよう、画像による説明の挿入箇所を `` で示します
- ケースのパターンから FAQ を生成する: 類似の解決済みケースを分析し、よくある追加質問に答える FAQ セクションを作成します
- 有効期限を設定する:
valid_toの日付を追加して定期的なレビューを促し、記事の正確性を保ちます - 内部情報の公開を避ける: 顧客向けの記事には、エージェント名、社内のエスカレーション経路、システムアーキテクチャの詳細を含めないでください
- 製品とバージョンのタグを付ける: メタデータフィールドを使用して記事を特定の製品やバージョンに関連付け、検索結果を適切に絞り込みます
- ドラフトとして送信する: 品質基準を維持するため、公開前のレビュー用に記事を必ずドラフト状態で作成します
トラブルシューティング
「記事の内容が技術的すぎます」
原因: 作業メモには、社内チーム向けの技術的な略語が含まれていることがよくあります。 解決方法: 生成されたテキストを後処理して、技術用語を置き換えます。記事を作成する前に、用語集の対応表(例:「GlideRecord」->「database query」、「BR」->「automated rule」)を使用します。
「重複する記事が検出されました」
原因: 同じトピックを扱うナレッジ記事がすでに存在します。 解決方法: 既存の記事と新しい解決内容を比較します。新しいケースに追加の情報が含まれている場合は、重複記事を作成するのではなく、既存の記事を更新します。
「解決メモがありません」
原因: 解決担当のエージェントが、ケースに解決メモを入力していません。 解決方法: 作業メモを使って解決手順を再構成します。「resolved」、「fixed」、「solution」、「workaround」などのキーワードを検索して、解決に関する内容を作業メモから抽出します。
「FAQ セクションが空です」
原因: よくある質問を抽出できる類似ケースが見つかりませんでした。 解決方法: 記事カテゴリに基づいて一般的な FAQ を生成します(例:「どのくらい時間がかかりますか?」「うまくいかない場合はどうすればよいですか?」「どこに問い合わせればよいですか?」)。
例
例 1:単一の解決済みケースから記事を生成する
シナリオ: ケース CS0045678 で、繰り返し発生していたログインの問題が解決されました。
Tool: SN-Get-Record
Parameters:
table_name: sn_customerservice_case
sys_id: [case_sys_id]
fields: number,short_description,description,close_notes,resolution_code,category,product
生成される記事の構成:
- タイトル:「パスワードのリセット後にログインできない場合の解決方法」
- 問題:ログインエラーの症状についての説明
- 原因:ID プロバイダーとポータル間のパスワードポリシー同期の遅延
- 解決方法:スクリーンショットのプレースホルダーを含む、段階的な手順
- FAQ:類似する 8 件の解決済みケースから抽出した 3 つの質問
例 2:ケースカテゴリから記事を一括生成する
シナリオ: 過去 30 日間に「Billing」カテゴリで解決されたすべてのケースを対象に記事を生成します。
Tool: SN-Query-Table
Parameters:
table_name: sn_customerservice_case
query: category=billing^state=3^closed_atONLast 30 days@javascript:gs.beginningOfLast30Days()@javascript:gs.endOfLast30Days()^close_notesISNOTEMPTY
fields: sys_id,number,short_description,close_notes,resolution_code
limit: 50
ケースをサブカテゴリごとにグループ化し、よくある解決方法を網羅する記事をサブカテゴリごとに 1 つ生成します。
例 3:新しいケースデータで既存の記事を充実させる
シナリオ: 新たに解決したケースに基づいて、既存の KB 記事の解決手順を更新する必要があります。
Tool: SN-Query-Table
Parameters:
table_name: kb_knowledge
query: number=KB0045123
fields: sys_id,short_description,text,workflow_state
limit: 1
Tool: SN-Update-Record
Parameters:
table_name: kb_knowledge
sys_id: [article_sys_id]
fields:
text: [updated_html_content_with_new_resolution_steps]
workflow_state: draft
関連スキル
csm/case-summarization- ナレッジベースの生成前に、コンテキストとしてケースを要約しますcsm/resolution-notes- ケースのクローズ時に、構造化された解決メモを生成しますcsm/suggested-steps- ナレッジベースのコンテンツのもととなる解決手順を生成しますknowledge/content-recommendation- 重複を避けるため、既存の記事を提案しますknowledge/article-generation- 記事の検索性と品質を最適化します