Salesforce連携の構成方法

:bookmark: このガイドでは、Discourse Salesforce プラグインを使用して Discourse を Salesforce に接続するために必要な設定手順を説明します。

:discourse: Discourse Salesforce は Enterprise プランで利用可能です。

:person_raising_hand: 必要なユーザーレベル: 管理者 (Administrator)

ステップ 0: 組織内の適切な担当者を見つける

Discourse で何か作業をする前に、まず Salesforce 側で必要な対応を行うため、組織内で関わるべき適切な人物を把握してください。

Salesforce 管理者

誰か: 多くの組織では、これは一般的にチームが「Salesforce 管理者」と呼ぶ人物です — Salesforce 組織の設定を管理する人物であり、必ずしも IT システム管理者とは限りません。

行うこと: Salesforce Setup 内で External Client App (または Connected App) を作成し、OAuth 設定を構成し、Consumer Key と Consumer Secret を取得することで、Salesforce 側の初期設定を処理します。

必要なもの: Salesforce の Setup へのアクセス、特に External Client App Manager へのアクセスが必要です。Salesforce では、これには Customize Application システム権限が必要です。これは標準の System Administrator プロファイルに含まれています。設定を行う人物が System Administrator プロファイルを所持していない場合、Salesforce 管理者が「Customize Application」を含む権限セットを付与する必要があります。

Salesforce 統合ユーザー

誰か: Discourse プラグインが Salesforce への API 呼び出しに使用するアカウントの認証情報を所有する Salesforce ユーザーです。

行うこと: Discourse から Salesforce へのすべての API 呼び出しを容易にするため、Discourse Salesforce 設定内の salesforce username 設定に入力するユーザー名を提供します。

必要なもの: このユーザーは以下を持っている必要があります:

権限 必要な理由
API Enabled すべての Salesforce API アクセスに必須
Lead の作成、読み取り、編集 Discourse ユーザーから Lead の作成とリンク
Contact の作成、読み取り、編集 Discourse ユーザーから Contact の作成とリンク
Case の作成、読み取り、編集 Discourse トピックから Case の作成
Case Comment の作成 トピックへの返信を Case Comment として同期
FeedItem (Chatter) の作成 トピックのアクティビティを Chatter に投稿

注: Salesforce 統合ユーザーは Salesforce 管理者と同じ人物でも構いません。ただし、セキュリティのベストプラクティスとして、統合ユーザーにはより狭い権限を持つ別のアカウントを使用することをお勧めします。

ステップ 1: 証明書と秘密鍵を生成する

ロール: Discourse 管理者

Discourse Salesforce は、Salesforce と認証を行うために JWT Bearer Flow を使用します。これには RSA キーペアが必要です: プラグインのIDを Salesforce が検証するために使用する公開証明書と、Discourse がリクエストに署名するために使用する秘密鍵です。

  1. これらの手順に従ってキーペアを生成してください:
    • server.crt - Discourse が許可されたアプリであることを証明する公開証明書
    • server.key - Salesforce への Discourse の API リクエストに署名する秘密鍵
  2. server.crt ファイルを Salesforce 管理者に送り、ステップ 3 でアップロードしてもらってください。
  3. ステップ 5 で Discourse Salesforce 設定に貼り付けるため、server.key を手元に控えてください。

ステップ 2: Salesforce で External Client App を作成する

ロール: Salesforce 管理者

  1. Salesforce にログインします。

  2. 右上の歯車アイコン (:gear:) をクリックし、Setup を選択します。

  3. Quick Find ボックスで External Client App Manager を検索し、選択します。

  4. New External Client App をクリックします。

注: これらの手順では、Salesforce Spring '25 で導入された External Client App Manager を使用します。組織が古いリリースを使用している場合、UI は App Manager または Connected Apps と表示される可能性があります — 基本設定は同じです。

ステップ 3: 基本情報と OAuth 設定を入力する

ロール: Salesforce 管理者

  1. Basic Information セクションを入力します (App Name と Contact Email は必須です)。

  2. API (Enable OAuth Settings) セクションを展開し、Enable OAuth 設定にチェックを入れます。

  3. このセクションで以下の設定を構成します:

    • Callback URL: 以下の両方のリンクを追加し、<your-discourse-site> を Discourse サイトの完全な URL (例: meta.discourse.org) に置き換えます:
      https://<your-discourse-site>
      https://<your-discourse-site>/auth/salesforce/callback
      :star: どちらの URL の末尾にもスラッシュ / がないことを確認してください!
    • Available OAuth Scopes: 3 つすべてを追加します:
      • Access the identify URL service (id, profile, email, address, phone)
      • Manage user data via APIs (api)
      • Perform requests at any time (refresh_token, offline_access)
    • Flow Enablement: 両方を有効にします:
      • Enable Client Credentials Flow
      • Enable JWT Bearer Flow — プラグインが Lead、Contact、Case を作成するために必須です
  4. Certificate Upload の下で、Upload files をクリックし、ステップ 1 で生成した server.crt ファイルをアップロードします。

  5. Create をクリックします。

ステップ 4: Consumer Key と Consumer Secret を取得する

ロール: Salesforce 管理者

  1. 新しく作成された External Client App で、Settings タブをクリックします。

  2. 下にスクロールし、OAuth Settings を展開します。

  3. Consumer Key and Secret をクリックします。

  4. プロンプトが表示されたら、Salesforce のログイン資格情報を再入力します。

  5. Consumer Key と Consumer Secret をコピーし、ステップ 5 のために Discourse 管理者に送ります。

ステップ 5: Discourse プラグインの設定を構成する

ロール: Discourse 管理者

  1. Discourse で、Admin → Plugins → Salesforce → Settings に移動します。

  2. 以下の設定を入力します:

    設定 値
    salesforce enabled チェックボックスにチェックを入れて統合を有効化
    salesforce client id ステップ 4 の Consumer Key
    salesforce client secret ステップ 4 の Consumer Secret
    salesforce rsa private key ステップ 1 の server.key ファイルの全内容を貼り付け
    salesforce username Salesforce 統合ユーザーのユーザー名
    salesforce authorization server url カスタム Salesforce ドメイン (例: https://mycompany.my.salesforce.com) を使用する場合のみ必要

  3. Save changes をクリックします。

ステップ 6: Salesforce で Discourse アプリを認証する

ロール: Salesforce 統合ユーザー

  1. https://<your-discourse-site>/salesforce/admin/authorize に移動します。<your-discourse-site> は Discourse サイトの完全な URL (例: meta.discourse.org) に置き換えてください。
  2. Salesforce にリダイレクトされ、アプリの認証を求められます。
  3. Salesforce にログインし、アプリへのアクセスを許可します。

このステップを完了すれば、すべて設定が完了します。動作を確認するには、Discourse 内の任意のユーザープロフィールを開いてください — 管理者メニューに Sync with Salesforce オプションが表示されるはずです。

トラブルシューティング

セットアップ後にプラグインが動作しない場合は、まず以下を確認してください:

  • 管理者ダッシュボードのヘルスチェック: 設定が誤っている場合、プラグインは /admin で 2 つのアラートを提示します:

    • SalesforceInvalidCredentials: Consumer Key、Consumer Secret、RSA 秘密鍵、またはユーザー名が正しくない
    • SalesforceAppNotApproved: 認証ステップ (ステップ 6) が完了していない、または接続アプリが拒否された
  • 詳細ログを有効にする: salesforce_auth_verbose_logging サイト設定をオンにして、詳細な認証出力を Discourse の /logs に書き込みます。よくあるエラーとその原因:

症状 考えられる原因
Lead または Contact の作成時に「Insufficient privileges」 統合ユーザーが Lead または Contact オブジェクトに対する Create/Edit 権限を持っていない
Case の作成時に「Insufficient privileges」 統合ユーザーに Case または Case Comment の権限がない
認証ステップで「Invalid grant」 RSA 鍵がステップ 3 でアップロードした証明書と一致しない、または JWT Bearer Flow が有効になっていない
Lead または Contact の作成時に「DUPLICATE_VALUE」エラー ユーザーが既に Salesforce に存在する場合の予想される動作 — プラグインはこれを処理しますが、詳細はメインのプラグインドキュメントを参照してください
Chatter 投稿が表示されない 統合ユーザーに FeedItem Create 権限がない可能性があります