mcpField
C
csm-kb-generation

csm-kb-generation

github.com/happy-technologies-llcドキュメント4141 回インストール2 日前に更新
リポジトリ

csm-kb-generation について

ServiceNow の解決済みカスタマーサービスケースを、顧客向けナレッジ記事に変換するスキルです。サポートチーム向けに、記事構成や FAQ、分類、レビュー申請を扱います。

主な機能

  1. 01原因・手順・回避策の抽出
  2. 02顧客向けの文章への書き換え
  3. 03スクリーンショット用の場所と代替テキスト
  4. 04類似ケースからの FAQ 作成
  5. 05記事の分類とレビュー申請

活用シーン

  1. 01頻出ケースの解決策を記事化
  2. 02特定したナレッジの不足を補うコンテンツ作成
  3. 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-Recordsys_id を指定してケースの詳細全体を取得する
SN-Create-RecordKB 記事とケース・記事の関連付けを作成する
SN-Update-Record記事の内容またはワークフローの状態を更新する
SN-Execute-Background-Script複数の解決済みケースから記事を一括生成する
REST API リファレンス
エンドポイントメソッド目的
/api/now/table/sn_customerservice_caseGET記事の候補として解決済みケースを検索します
/api/now/table/sys_journal_fieldGET解決手順を含む作業メモを取得します
/api/now/table/kb_knowledgeGET/POST/PATCHナレッジ記事を検索、作成、更新します
/api/now/table/kb_knowledge_baseGET利用可能なナレッジベースを一覧表示します
/api/now/table/kb_categoryGETナレッジカテゴリを閲覧します
/api/now/table/kb_feedbackGET改善のために記事のフィードバックを確認します

ベストプラクティス

  • 顧客向けの表現を使用する: 社内用語、ケースへの言及、技術的な略語を、顧客が理解できる明確な表現に置き換えます
  • 一貫した構成にする: 生成するすべての記事で「問題 > 原因 > 解決方法 > 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 - 記事の検索性と品質を最適化します

コメント