【必読】なぜ今、Aura ではなく LWR を選ぶべきなのか?

Agentforce連携における安全なユーザー識別:Experience Cloudでの個人認証とコンテキスト継承

A professional 3D isometric illustration representing a seamless digital connection between a web portal and a customer relationship management system. In the foreground, a sleek, translucent interface displays a modern chat window. From this interface, a vibrant stream of glowing data particles flows toward a central, sophisticated cloud server node. This node illuminates a secure user profile silhouette, symbolizing the automatic identification and mapping of a logged-in user. The setting is a clean, minimalist digital environment with soft bokeh lighting and a professional color palette of navy blue, white, and electric cyan. The image conveys the concepts of background data relay, secure integration, and personalized digital customer service without using any text or branding. データ・AI連携

この記事はバージョン Summer ’26 において執筆しています。
現在の動作と異なる場合がありますので、ご認識おきください。

ログイン必須のLWRサイトに組み込みメッセージング(MIAW)を配置し、Agentforceによる一次対応から有人オペレーターへのエスカレーションを設計する際、避けて通れないのが「顧客の確実な識別とコンテキストの継承」です。

過去のチャット実装では、フロントエンドのLWCやJavaScript(Pre-Chat API)を用いてユーザーIDを非表示パラメータとして渡す手法が一般的でした。しかし、この手法にはクライアント側で値が改ざんされる「なりすまし(スプーフィング)」の脆弱性が存在します。

本記事では、フロントエンドのスクリプトに依存せず、プラットフォームの標準認証機能とバックエンドのフローを組み合わせた、セキュアで最新の実装アプローチを解説します。

LWRって何?どんなメリットがあるの?
そんな疑問を解決するにはまずは以下の記事をご覧ください。
Salesforce LWRとは? Experience Cloudの次世代ランタイムを徹底解説

【仕様】ユーザー検証の有効化に必要な2つの設定

Experience Cloud環境において、JavaScriptによるPre-Chat APIは不要です。Salesforceの標準機能である「ユーザー検証」を使用します。この機能を正しく動作させるには、バックエンドとフロントエンドの双方で以下の設定を行う必要があります。

これら2つの設定が揃うことで、プラットフォーム側で以下の処理が自動実行されます。

  • セッションの利用: ログインユーザーの AuthSession を直接利用して、バックエンドで安全にユーザーを特定します。
  • メッセージングユーザーの生成: システムは該当ユーザー用の MessagingEndUser(メッセージングユーザー)レコードを生成し、システムレベルで認証を行います。

この仕様により、悪意のあるユーザーがブラウザの開発者ツール等で他人のIDに書き換えてチャットを送信するリスクを根本的に排除できます。

DXforce Point

ユーザー検証を有効にすると、MIAWは「非同期・永続的メッセージング」として動作し、過去の会話履歴が維持されるようになります。「チャットを終了する」を押すとメッセージングセッションレコードとしては区切られますが、同ユーザーがチャットを再開すると前回の続きから始まるように見えます。

メッセージング設定での定義(バックエンド)

[設定] > [メッセージング設定] から対象のメッセージングチャネルの右にある▼から[編集]を選択し、「ユーザー検証を追加」 を有効化して、認証レイヤーをチャネルに関連付けます。

エクスペリエンスビルダーでの有効化(フロントエンド)

サイト上に配置した組み込みメッセージングコンポーネントの設定項目において、「ログイン情報ベースのユーザー検証の追加」 のチェックボックスをオンにします。

【実装】オムニチャネルフローによる取引先責任者の明示的な紐付け

前述のユーザー検証により、システムは「チャットの主が誰か」を把握していますが、新しく生成される MessagingEndUser(メッセージングユーザー)レコードの ContactId 項目に、その情報が自動でコピー(スタンプ)されるわけではありません。

Agentforceがカスタムアクション内で ContactId を使用したり、有人エスカレーション時にオペレーターの画面に顧客情報をポップアップさせたりするには、ルーティングを司るインバウンドフロー内で明示的なデータ紐付けを行う必要があります。

実装手順例:

  1. メッセージングセッションの取得: フローの入力変数 recordId から対象の MessagingSession を取得します。
  2. メッセージングユーザーの取得: MessagingSession.MessagingEndUserId をキーとして MessagingEndUser レコードを取得します。
  3. ユーザーの取得: 取得した MessagingEndUser.MessagingPlatformKey には、システムによって検証済みの UserId を含む文字列が保持されています(例: v2/iamessage/AUTH/SFDC/uid:005xxxxxxxxxxxxxxx)。
    この値を数式 RIGHT({!get_MessagingEndUser.MessagingPlatformKey}, 18) を使用して右から18桁を切り出した値をキーとして User レコードを取得します。
  4. 取引先責任者の取得: User.ContactId をキーに取引先責任者を取得します。
  5. レコードの更新: Contact のIDを MessagingSession.ContactId に割り当て、セッションレコードを更新します。

このステップを「作業をルート」アクションの前に挟むことで、以後の全プロセス(AIも人間も)が安全に顧客コンテキストを参照できるようになります。

【実装】会話体験の最適化(ダミーチャットの回避)

ユーザー検証を有効にすると、MIAWは「非同期・永続的メッセージング」として動作し、過去の会話履歴が維持されます。この環境下において、2回目以降の新しい会話セッションを始める際、デフォルトのAgentforce設定ではUX上の問題が発生します。

ユーザーが最初のメッセージとして送信した際にAgentforceが起動するため、Agentforce自身の「Welcome Message(ようこそメッセージ)」を優先して送信し、ユーザーの最初の発言が処理されずに「ご用件は何ですか?」と聞き返してしまう現象です。

対策をしないと会話を再開するために無駄なメッセージを送ることになる

これを解消し、ユーザーの最初の発言に即座に回答させるには、チャネル設定とAgentforce設定の役割分担を行います。

推奨される構成

Agentforceの挨拶バイパス

エージェントビルダーの [システムメッセージ] を開き、[ようこそメッセージ] フィールドを完全に空白(未設定)にします。

system:
    instructions: "私たち DXforce.site 社は、..."
    messages:
        welcome: "" ←空白にする
        error: "申し訳ございません。問題が..."

【仕様】 公式ドキュメントの記載どおり、Agentforceのようこそメッセージを空白にすることで、オムニチャネルから会話を引き継いだ際のウェルカムメッセージがバイパスされます。

これにより、ユーザーはAgentforceを起こすための無意味な挨拶を送信する必要がなくなり、最初のメッセージから直ちにAIによる課題解決プロセスを開始させることが可能になります。

オムニチャネルフローでの [会話メッセージを送信] アクション

前項の対応によって2回目以降の会話開始の問題はクリアできますが、1回目の会話が無言で開始になってしまいます。これに対処するため、オムニチャネルフロー(インバウンドフロー)で初回セッションかどうかを判定してメッセージを送信する仕組みを作ります。

メッセージングコンポーネントを作成

[設定] > [メッセージングコンポーネント] で「通知」種別のメッセージングコンポーネントを作成します。

  • プレーンテキスト数式: (例:{!$Parameters.MessagingSession.MessagingEndUser.Contact.FirstName}さん、はじめまして。私は DXforce のサポートエージェントです。何かお困りですか?)
  • 画像: 任意の画像(表示しません)
オムニチャネルフローを編集

続いてAgentforceにルーティングしているオムニチャネルフローを編集します。

  1. 関連メッセージングセッションを取得: MessagingEndUser.Id に関連する、かつ recordId と一致しない MessagingSession を取得します。
  2. 取得件数を記録: 関連メッセージングセッションの件数を数値変数に割り当てます。
  3. 分岐(メッセージングユーザーの会話は初回?): 関連メッセージングセッションの件数が1件以上なら処理をスキップしてAgentforceに転送します。それ以外(現在処理中のレコードのみ)なら次の処理を行います。
  4. 送信先コレクション追加: MessagingEndUser.Id をテキストコレクション変数にセットします。次の要素で使用します。
  5. 会話メッセージを送信: メッセージングユーザー(テキストコレクション)に対して通知メッセージングコンポーネントの内容を送信します。

この設定により、初回の会話の時にだけ「○○さん、はじめまして。私は DXforce のサポートエージェントです。何かお困りですか?」というメッセージが送られるようになります。

DXforce Point

上記の方法で実現する場合に「会話メッセージを送信」アクションによって即時終了するメッセージングセッションレコード(ユーザーが開始したレコードとは別)が生成されます。このレコードを削除したい場合はメッセージングセッションレコードのトリガーフローを作成し、以下の条件でエントリさせた後に「スケジュール済みパス」で削除処理を行います。「スケジュール済みパス」は、トリガー元となるメインのトランザクションから完全に切り離された、独立したトランザクションとして非同期に実行されます。

エントリ条件:
Status 次の文字列と一致する Ended
EndedByType 次の文字列と一致する System
※数式条件にして StartTimeEndTime が同値であることの評価を後続の判定に挟むと、より安全です。

まとめ

Experience Cloudにおける組み込みメッセージング(MIAW)とAgentforceの連携において、セキュアなユーザー識別とスムーズなUXを両立するための要点は以下の通りです。

  1. バックエンドとフロントエンドの連携設定: [メッセージング設定]での「ユーザー検証を追加」と、エクスペリエンスビルダーでの「ログイン情報ベースのユーザー検証」の両方を有効化します。これにより、プラットフォーム基盤での安全な認証が行われます。
  2. オムニチャネルフローによる確実なデータ紐付け: システムが保持する ContactId を、ルーティングフロー内で明示的に MessagingEndUser に設定します。これにより、後続の有人オペレーターへのエスカレーションにおいて、正確な顧客コンテキストの参照が可能になります。
  3. ウェルカムメッセージのバイパス: Agentforceの [ようこそメッセージ] を空白にし、チャネル側の自動レスポンスと組み合わせることで、履歴が保持される環境下でもユーザーの初回入力(本題)を妨げない自然な対話フローを実現します。

これらの設定と実装を組み合わせることで、なりすましのリスクを排除しつつ、AIと有人オペレーターが連携する実戦的なカスタマーサポート基盤を構築できます。

参考URL

ログイン情報ベースのユーザー検証の設定

Agentforce アクションへのユーザー ID の追加

メッセージングチャネルでの自動レスポンスのカスタマイズ

Agentforce サービスエージェントに進行中の会話を渡すときの歓迎メッセージのバイパス

メッセージングコンポーネントの種類と形式

[会話メッセージを送信] アクション

DXforceの管理人

福島 瑛二

2013年にJavaエンジニアとしてのキャリアをスタート。2019年にSalesforceと出会い、Salesforceエンジニアの道へ。

デザインや UI/UX の観点からもシステムを捉え、ユーザーにとって心地よい体験を実装することにやりがいを感じています。

CRM(顧客データ)や Data Cloud と連携した高度なサイトを目に見える形で表現できる Experience Cloud に大きな可能性を見出しており、バックエンドのデータ構造とフロントエンドの表現力を極めることがこれからの Salesforce エンジニアに求められるスキルだと確信しています。

Trailblazer: efukushima

福島 瑛二をフォローする

読者の声

タイトルとURLをコピーしました
DXforce 案内エージェント