Salesforce ナレッジ:技術アーキテクトのための実装とベストプラクティスガイド

背景と応用シーン

Salesforce Knowledge(Salesforce ナレッジ)は、企業が情報を一元的に作成、管理、共有するための強力なナレッジマネジメントツールです。Service Cloud の中核機能の一つとして、顧客サポートの効率化、ケース解決時間の短縮、顧客満足度の向上に大きく貢献します。また、社内利用においても、新入社員のオンボーディング資料、業務プロセスの標準化、部門間の情報共有など、幅広い応用が可能です。

技術アーキテクトの視点から見ると、Salesforce Knowledge は単なるコンテンツリポジトリではありません。データモデル、セキュリティ、そして自動化プロセスを適切に設計することで、その価値を最大化できるプラットフォームです。例えば、以下のようなシーンで活用されます。

  • カスタマーセルフサービス:Experience Cloud (旧 Community Cloud) サイトに FAQ やトラブルシューティングガイドを公開し、顧客が自己解決できる環境を提供する。
  • コンタクトセンターの効率化:サービスコンソール内で、エージェントが対応中のケースに関連するナレッジ記事を迅速に検索・参照し、顧客へ正確な情報を提供する。
  • 社内情報共有基盤:営業部門向けの製品情報、人事部門向けの手続きガイドなど、社内の特定部門・役職者向けの情報をセキュアに管理・共有する。

原理説明

Salesforce Knowledge の効果的な実装には、その中核となるコンポーネントの理解が不可欠です。ここでは Lightning Knowledge を前提に、主要な概念を解説します。

Knowledge オブジェクトとレコードタイプ

すべてのナレッジ記事は、Knowledge (__kav) という標準オブジェクトに保存されます。これはバージョン管理機能を持つ特殊なオブジェクトです。Lightning Knowledge では、標準のレコードタイプ (Record Types) を使用して、記事の種別(例:「FAQ」「手順書」「トラブルシューティング」)を定義します。レコードタイプごとに異なるページレイアウト、項目、テンプレートを割り当てることができ、コンテンツの一貫性を保ち、作成プロセスを標準化するのに役立ちます。

データカテゴリによる分類と可視性

データカテゴリ (Data Categories) は、ナレッジ記事を階層的に分類・整理するための仕組みです。これはナレッジベースの「目次」のような役割を果たします。例えば、「製品」というデータカテゴリグループの下に「製品A」「製品B」といったカテゴリを作成し、さらにその下に「機能」「仕様」といったサブカテゴリを設けることができます。

データカテゴリの最も重要な機能は、記事の可視性制御です。プロファイルや権限セットに対して、各データカテゴリへのアクセス権を設定することで、「どのユーザーがどの記事を閲覧できるか」をきめ細かくコントロールできます。これにより、顧客向け、パートナー向け、社内向けといった異なるオーディエンスに対して、同じナレッジベースから適切な情報だけを提供することが可能になります。

記事のライフサイクルとバージョン管理

ナレッジ記事には明確なライフサイクル(下書き → 公開 → アーカイブ)が存在します。記事は作成されるとまず「下書き」バージョンとなり、承認プロセスを経て「公開」されます。公開済みの記事を編集すると、新しい「下書き」バージョンが作成され、元の公開バージョンはそのまま維持されます。新しいバージョンが公開されると、それが古いバージョンに取って代わります。このバージョン管理機能により、常に承認された最新のコンテンツがユーザーに提供されることが保証されます。


示例コード

Salesforce Knowledge は、Apex や SOQL を用いてプログラムから操作することも可能です。これにより、記事作成の自動化や外部システムとの連携が実現できます。

SOQLによるナレッジ記事の検索

特定のデータカテゴリに属する公開済みの記事を検索するには、SOQL の WITH DATA CATEGORY 句を使用します。これはナレッジ記事を検索する際の非常に重要な構文です。

// '製品情報' というデータカテゴリグループ内の 'ラップトップ' カテゴリに属する
// 公開済み(Online)で言語が日本語(ja)の記事のタイトルと要約を取得する
List<Knowledge__kav> articles = [
    SELECT Id, Title, Summary 
    FROM Knowledge__kav 
    WHERE PublishStatus = 'Online' AND Language = 'ja'
    WITH DATA CATEGORY 製品情報__c AT ラップトップ__c
];

// 取得した記事の情報をデバッグログに出力
for (Knowledge__kav article : articles) {
    System.debug('Article Title: ' + article.Title);
}

コード解説:

  • Knowledge__kav: Lightning Knowledge の記事バージョンを表す API 参照名です。
  • PublishStatus = 'Online': 公開中の記事のみを対象とするための必須フィルタです。「Draft」や「Archived」といったステータスも指定可能です。
  • WITH DATA CATEGORY 製品情報__c AT ラップトップ__c: `製品情報__c` という API 参照名のデータカテゴリグループにおいて、`ラップトップ__c` という API 参照名のカテゴリに分類されている記事を絞り込みます。`ABOVE` や `BELOW` といった演算子を使い、階層構造を利用した絞り込みも可能です。

Apexによるナレッジ記事の公開

Apex を使用してナレッジ記事をプログラムで公開するには、KbManagement.PublishingService クラスを利用します。これは、ナレッジのライフサイクルを管理するための専用 Apex クラスです。

⚠️ このクラスのメソッドは、公式には Apex テストクラスからコールアウトとして扱われるため、`@isTest(SeeAllData=true)` やスタブ API を使用したテスト戦略が必要になる場合があります。

// このコードは、指定されたIDの記事を公開する例です。
// 実際には、まず下書きバージョンの記事を作成し、そのIDを取得する必要があります。

public class KnowledgePublisher {
    public static void publishArticleById(Id articleVersionId) {
        try {
            // KbManagement.PublishingService を使用して記事を公開
            // 第2引数 (flagAsNew) が true の場合、この記事は「新規」として扱われ、
            // 購読者への通知などが行われる可能性があります。
            KbManagement.PublishingService.publishArticle(articleVersionId, true);
            System.debug('記事 ' + articleVersionId + ' が正常に公開されました。');

        } catch (Exception e) {
            // エラーハンドリング
            System.debug('記事の公開中にエラーが発生しました: ' + e.getMessage());
        }
    }
}

// 実行例:
// Id draftArticleId = 'kav010000000example'; // 公開したい下書き記事のバージョンID
// KnowledgePublisher.publishArticleById(draftArticleId);

コード解説:

  • KbManagement.PublishingService.publishArticle(articleVersionId, flagAsNew): 指定した記事バージョンIDを公開するための主要メソッドです。このメソッドを呼び出すには、実行ユーザーが記事を公開するための適切な権限を持っている必要があります。
  • try-catch ブロック: 記事の公開は、権限不足、必須項目の未入力、検証ルール違反など、様々な理由で失敗する可能性があります。そのため、必ず try-catch ブロックで例外を捕捉し、適切なエラー処理を実装することが重要です。

注意事項

権限とライセンス

Salesforce Knowledge を利用するには、ユーザーに Knowledge User ライセンスが付与されている必要があります。その上で、プロファイルまたは権限セットを通じて、Knowledge オブジェクトに対する CRUD (作成、参照、更新、削除) 権限や、記事の公開・アーカイブといったアプリケーション権限を適切に設定する必要があります。また、データカテゴリの可視性設定もユーザーのアクセス範囲を決定する重要な要素です。

API制限とガバナンス

Apex や API を介してナレッジ記事を操作する場合、Salesforce の標準的なガバナ制限(SOQL クエリの発行回数、DML ステートメントの実行回数など)が適用されます。特に、大量の記事データを一括で処理するバッチ処理などを実装する際には、処理をバルク化し、ガバナ制限に抵触しないように設計することが不可欠です。

データ移行

既存のナレッジベースから Salesforce Knowledge へデータを移行する作業は複雑になることがあります。HTML コンテンツのクレンジング、画像のインポート、データカテゴリのマッピングなど、事前の計画とテストがプロジェクトの成否を分けます。データローダなどのツールを利用しますが、リッチテキスト形式の項目を移行する際には特に注意が必要です。


まとめとベストプラクティス

Salesforce Knowledge は、顧客と従業員の両方にとって価値ある情報資産を構築するための強力な基盤です。その機能を最大限に引き出すためには、技術的な側面を深く理解した上でのアーキテクチャ設計が求められます。

以下に、ナレッジベースを成功に導くためのベストプラクティスを挙げます。

1. 綿密なデータカテゴリ設計:ビジネス要件に基づき、拡張性とメンテナンス性を考慮したデータカテゴリ構造を設計します。これはナレッジベースの骨格であり、後からの大幅な変更は困難です。

2. レコードタイプの一貫した利用:コンテンツの種類ごとにレコードタイプを定義し、テンプレートとして活用することで、記事の品質と一貫性を保ちます。

3. 明確なガバナンスプロセスの確立:誰が記事を作成し、誰がレビューし、誰が公開するのか、といった役割と責任を明確に定義します。承認プロセスを活用して、品質管理を徹底します。

4. 検索性を意識したコンテンツ作成:ユーザーが求める情報にたどり着けるよう、記事のタイトルや本文に適切なキーワードを盛り込み、簡潔で分かりやすい文章を心がけます。

5. 他チャネルとの積極的な連携:サービスコンソール、Experience Cloud サイト、ボットなど、ユーザーが情報を必要とするあらゆるタッチポイントにナレッジを組み込み、その利用価値を高めます。

コメント