フルフィルメント

エージェントの会話のターンでは、エージェントはエンドユーザーに対し、質問への回答、情報に対するクエリ、セッションの終了のいずれかで応答する必要があります。また、動的レスポンスの生成や、ターンのアクションを実行するには、エージェントによるサービスへの問い合わせが必要な場合があります。フルフィルメントは、このすべてを行うために使用されます。

フルフィルメントには次のいずれかを含めることができます。

  • 静的レスポンス メッセージ。
  • 動的レスポンスやアクションの実行のための Webhook 呼び出し。
  • パラメータ値を設定またはオーバーライドするパラメータのプリセット。

エージェントのターンの間に、複数のフルフィルメントを呼び出して、それぞれがレスポンス メッセージを生成することが可能です(生成が必要な場合もあります)。Dialogflow CX は、こうしたレスポンスをレスポンス キューに保持します。エージェントのターンが終了すると、Dialogflow CX は順序付けされたレスポンスをエンドユーザーに送信します。

フルフィルメントのユースケース

フルフィルメントを使用すると、次の場所にレスポンス メッセージを提供できます。

これらの各ユースケースで、コンソールによりフルフィルメント編集パネルが開かれます。

フルフィルメントのスクリーンショット

エージェント レスポンス(ダイアログ オプション)

フルフィルメントの作成時に、設計時にエージェント レスポンス メッセージを定義します。実行時に、これらのレスポンスはレスポンス キューに追加されます。

レスポンス メッセージにはいくつかの種類があり、次のサブセクションで説明します。コンソールを使用する場合、フルフィルメント パネルには 初期の [Agent dialogue] カードがありますが、 [Add dialogue response] をクリックすると他のレスポンス メッセージの種類のカードをさらに追加できます。

静的なテキスト レスポンス

静的なテキスト レスポンス メッセージは、ユーザーにテキスト ダイアログを提供します。インテント検出 API 呼び出しまたは統合呼び出しで音声合成を使用する場合、このテキストによって音声コンテンツが生成されます。これらのメッセージでは、指定されたテキストで 音声合成マークアップ言語(SSML)が使用されます。

複数のテキスト レスポンス カードと、各カード内に複数のテキスト レスポンスを定義できます。複数のカードを定義すると、実行時に 1 つのレスポンスに連結されます。1 つのカード内で複数のレスポンスを定義すると、カード内のメッセージのいずれかが実行時にランダムに選択されます。

このテキスト メッセージには、パラメータ参照 とインラインのシステム関数を含めることができます。

カスタム ペイロード

一部の統合では、リッチ レスポンスを処理するカスタム ペイロード レスポンスがサポートされています。これらのカスタム ペイロードは、統合ドキュメントで定義されている JSON 形式で指定する必要があります。例については、 Dialogflow CX Messenger のカスタム ペイロード形式をご覧ください

カスタム ペイロード JSON にはパラメータ参照 を含めることができます。これらを JSON 文字列値として扱うには、二重引用符で囲みます。次に例を示します。

{
  "someField": "$session.params.date"
}

カスタム ペイロード JSON は、24 レベルの深さに制限する必要があります。

開発した統合にカスタム ペイロードを送信することもできます。これは Dialogflow CX で処理されないため、独自のビジネス ロジックで処理する必要があります。

詳細については、カスタム ペイロード テンプレートをご覧ください。

人間のエージェントへの引き継ぎ

このレスポンスは、会話を人間のエージェントに引き渡す必要があることをインテント検出 API 呼び出し元に通知します。Dialogflow CX は、このシグナルのみを使用して、測定の目的で引き渡された会話を識別します。このセッション状態がなんらかの形で変更されることはありません。

システムまたは統合では、このシグナルを使用して、会話を引き渡すために必要なアクションを実行できます。Dialogflow CX はこのデータに構造を課さないため、システムに適した構造を選択できます。

会話の成功メタデータ

このレスポンスは、Dialogflow CX エージェントとの会話が成功したことをインテント検出 API 呼び出し元に通知します。Dialogflow CX はこのシグナルを使用して、測定の目的で成功した会話を識別します。このセッション状態がなんらかの形で変更されることはありません。

システムまたは統合では、このシグナルを使用して必要なアクションを実行できます。Dialogflow CX はこのデータに構造を課さないため、システムに適した構造を選択できます。

事前に録音した音声を再生する

このレスポンスは、この機能をサポートする 統合の音声ファイルを再生します。

音声ファイルの形式要件は、統合によって異なる場合があります。たとえば、Dialogflow CX Phone Gateway の要件をご覧ください。

パートナーのテレフォニー統合の場合、 音声ファイルの URL はパートナーがアクセスできる必要があります。Cloud Storage の公開ファイルなど、一般公開されている URL には、パートナーが常にアクセスできます。パートナーは、音声ファイルへのアクセスを制限することもできます。詳細については、パートナーのドキュメントをご覧ください。

出力音声テキスト

このレスポンスはテキスト レスポンスに似ていますが、音声合成にのみ 適用されます。エージェントがテキスト セッションと音声 セッションの両方を処理できる場合は、一意のテキスト レスポンスと出力音声テキストのレスポンスを使用して、テキストと音声にそれぞれ別のユーザー エクスペリエンスを作成できます。音声セッションに出力音声テキストが指定されている場合、プレーン テキストのレスポンスは無視されます。

エージェントがテキスト セッションと音声セッションの両方を処理し、同じレスポンス メッセージが必要な場合は、テキスト セッションと音声セッションの両方にテキスト レスポンスを使用します。

出力音声テキストは、テキスト レスポンスと同様に連結されます。出力音声テキストのレスポンスがテキストと SSML の組み合わせである場合、連結された結果は SSML として扱われます。理想的には、テキストまたは SSML のいずれかを一貫して使用する必要があります。

条件付きレスポンス

このレスポンス タイプは、条件付きレスポンスを提供します。

一般的な形式を次に示します。

if [condition]
  [response]
elif [condition]
  [response]
elif [condition]
  [response]
else
  [response]
endif

ここで

  • [condition][condition] は、ルート条件で使用される形式と同じ形式です。
  • [response] はテキスト レスポンスです。
  • elif ブロックと else ブロックは省略可能です。

次に例を示します。

if $session.params.user-age >= 21
  Ok, you may enter.
else
  Sorry, you cannot enter.
endif

[condition][response] はどちらも、インライン システム関数を使用して、会話中に動的な値を生成できます。詳細については、 システム関数ルート条件をご覧ください。[condition] は、フルフィルメントの開始時のセッション状態に基づいて解決されます。[response] がセッション状態に依存している場合は、フルフィルメントの終了時の更新されたセッション状態に基づいて解決されます。

多言語エージェントの場合、 [condition] はすべての言語に共通ですが、[response] は 言語に固有です。コンソールで 1 つの言語の [condition] を変更すると、エージェントのすべての言語でこの部分が更新されます。新しい条件になるため、[condition] の更新時に選択した言語以外のすべての言語で [response] がクリアされます。

テレフォニー通話の転送

通話の転送は、 Dialogflow CX Phone Gateway でのみ使用できます。

一部のテレフォニー統合では、通話の転送先に米国の電話番号を指定できます。実行時に、Dialogflow CX エージェントが通話の転送を使用してフルフィルメントをトリガーすると、通話は指定された番号に転送され、エージェントの処理は一時停止します。

データストア ツールのレスポンス

このレスポンス タイプは、リンクされた データストア ツールから返されるエージェント レスポンスを構成します。このフルフィルメントでデータストア ツールを構成した場合、データストア ツールのレスポンス カードが自動的に入力されます。

  • ソースリンク: レスポンス後にユーザーに返す引用の最大数を設定します。引用は、データストア内の情報源へのリンクで、ボタンとしてレンダリングされます。デフォルトは 1 です。
  • インライン引用: レスポンス後にリンクを一覧表示するのではなく、文ごとに返されるインライン引用の数を制限します。
  • 生成的フォールバック: データストアから空の結果が返された場合に、AI 生成レスポンスを試行するようにエージェントを構成します。これが失敗した場合、エージェントは静的レスポンスを使用します。
  • 静的レスポンス: 最後の フィールドに静的なテキスト レスポンスを入力して、ユーザーに単語ごとに送信します。

チャネル固有のレスポンス メッセージ

フルフィルメントを定義する際に、チャネル固有のレスポンス メッセージを作成して、テキスト チャット、音声、SMS、チャネルをサポートする特定の統合を対象としたターゲット レスポンスなどを作成できます。 チャネルに固有ではないレスポンス メッセージは、デフォルトのレスポンス メッセージと呼ばれます。

実行時に、インテント検出リクエストでチャネルが指定されている場合は、Dialogflow CX はデフォルトのレスポンス メッセージまたはチャネル固有のレスポンス メッセージを選択します。チャネル固有のレスポンス メッセージを使用している場合でも、デフォルトのレスポンス メッセージを定義することをおすすめします。デフォルトのレスポンス メッセージは、システムが有効なチャネルを提供できない場合のフォールバックとして機能します。

チャネル名は、任意のテキストに設定できるカスタム フィールドです。ランタイム呼び出しに Dialogflow CX API を直接使用している場合は、任意のチャネル名を使用できます。既存の統合を使用している場合は、統合で認識されるチャネル名を使用する必要があります。

設計時にチャネル固有のレスポンス メッセージを設定する

コンソールを使用してフルフィルメントにチャネル固有のレスポンス メッセージを提供するには:

  • デフォルトのレスポンス メッセージを追加したら、[チャネルを追加] をクリックしてチャネル固有のレスポンス メッセージを追加します。[チャネルを追加] をもう一度クリックして、追加のチャネルを追加します。

API を使用してフルフィルメントにチャネル固有のレスポンス メッセージを提供するには:

  • 各レスポンス メッセージで、Fulfillment.messages[i].channel フィールドを選択したチャネルに設定します。このフィールドが設定されていない場合、レスポンスはデフォルトのレスポンス メッセージとして扱われます。

実行時にチャネル固有のレスポンス メッセージを利用する

チャネルをサポートする既存の統合を使用している場合、統合の実装で次の手順が実行されます。

チャネル固有のレスポンス メッセージを受信するには、インテント検出リクエスト メッセージでチャネルを指定する必要があります。Sessions タイプの detectIntent メソッドの queryParams.channel フィールドをご覧ください。

セッション リファレンスのプロトコルとバージョンを選択:

プロトコル V3 V3beta1
REST セッション リソース セッション リソース
RPC セッション インターフェース セッション インターフェース
C++ SessionsClient 利用不可
C# SessionsClient 利用不可
Go SessionsClient 利用不可
Java SessionsClient SessionsClient
Node.js SessionsClient SessionsClient
PHP 利用不可 利用不可
Python SessionsClient SessionsClient
Ruby 利用不可 利用不可

リクエストでチャネルが定義されていない場合、またはフルフィルメントで一致するチャネルが見つからない場合、Dialogflow CX はデフォルトのレスポンス メッセージを返します。

カスタムのペイロード テンプレート

カスタム ペイロードを頻繁に使用する場合は、カスタム ペイロード テンプレートを使用します。カスタム ペイロード テンプレート。 カスタム ペイロードは大きくて複雑になることがあるため、テンプレートを使用するとエージェントの作成プロセスが簡素化されます。

これらのテンプレートをエージェントの設定で指定すると、エージェントのフルフィルメントを作成するときに選択できるようになります。

たとえば、[はい] ボタンと [いいえ] ボタンの JSON ペイロードをカスタム ペイロード テンプレートとして定義できます。これらのボタンが必要なフルフィルメントを作成する場合は、フルフィルメントの作成時にテンプレートを選択します。

フルフィルメントのカスタム ペイロードのテンプレートを選択すると、テンプレートの内容がペイロードに挿入されます。その後、必要に応じてペイロードを編集できます。

テンプレートを変更しても、参照されているすべてのフルフィルメント ペイロードに自動的に反映されることはありません。

カスタム ペイロード テンプレートを作成するには、エージェントの全般設定をご覧ください。

フルフィルメントの作成時にカスタム ペイロード テンプレートを選択するには、フルフィルメントのカスタム ペイロードの作成時に [テンプレートを選択] をクリックします。

Webhook の呼び出し

フルフィルメントが Webhook をトリガーすると、 エージェントはサービスにリクエストを送信します。Webhook は、アクションの実行、動的レスポンス メッセージの提供、パラメータ値のオーバーライド、現在のページの変更を行うことができます。

フルフィルメントの Webhook 設定は次のとおりです。

X 項目
Webhook を有効にする フルフィルメントの Webhook を有効にします。
Webhook Webhook リソースを選択します。
タグ ここで指定したテキストタグは、Webhook サービスに送信される Webhook リクエストの WebhookRequest.fulfillmentInfo.tag フィールドに入力されます。これは、フルフィルメント固有の方法で Webhook の動作を制御するために使用できます。
部分的なレスポンスを返す 部分的なレスポンスの再生をキャンセルできるようにします。詳細については、音声の詳細設定をご覧ください。

パラメータのプリセット

フルフィルメントを使用して、現在のパラメータ値を設定またはオーバーライドするプリセットを指定します。これらのプリセットは、静的レスポンス メッセージを解決する前、または Webhook を呼び出す前に適用されます。

システム関数 を使用して、動的に生成される値へのパラメータにプリセットすることもできます。

以下にいくつか例を示します。

  • パラメータ now を現在の時刻に設定します。

    パラメータ
    $sys.func.NOW()
  • 既存のパラメータ counter を 1 増やします。

    パラメータ
    カウンタ $sys.func.ADD($session.params.counter, 1)
  • パラメータ new-costother-cost パラメータ値に設定し、複合オブジェクト値全体を維持します。

    パラメータ
    new-cost $sys.func.IDENTITY($session.params.other-cost)

データストア ツール

この機能の詳細については、データストア ツールのドキュメントをご覧ください。

音声の詳細設定

これらの音声の詳細設定 は、ページの音声設定フローの音声設定、および エージェントの音声設定をオーバーライドできます。

レスポンス キュー

エージェントのターン中に、複数のフルフィルメントを呼び出して、それぞれがレスポンス メッセージを生成することが可能です(生成が必要な場合もあります)。Dialogflow CX は、こうしたレスポンスをレスポンス キューに保持します。

ストリーミング API に対する部分的な回答

デフォルトでは、Dialogflow CX はエージェントのターンが終了した後にのみ、順序付けされたレスポンスをエンドユーザーに送信します。Streaming API を使用する場合に、現在キューに入っているレスポンスを部分レスポンスとして返すには、フルフィルメントで部分レスポンスを返す オプションを有効にします。詳細については、ページのライフサイクルをご覧ください。

たとえば、Webhook が長時間実行される可能性がある場合に、フルフィルメントに静的レスポンスを追加して部分的なレスポンスを有効にできます。これにより、Dialogflow CX はレスポンス キューをフラッシュし、Webhook を呼び出す前にすべてのメッセージを部分的なレスポンスとして送信します。

部分レスポンスは、次のものには対応していません。

  • シミュレータでの音声入力
  • パートナーのテレフォニー統合 では、部分的な回答がサポートされていない場合があります。パートナーのドキュメントを参照してご確認ください。

シミュレータでこの機能をテストするには、部分的なレスポンスを有効にします。

シミュレータの部分レスポンスのスクリーンショット

次の例では、Webhook が完了するまでに 5 秒かかり、部分的な回答は有効にしないものとします。Dialogflow CX エージェントの会話のターンは、Webhook が完了するまで終了しません。この 5 秒間のターンでは、Webhook を待機している間にレスポンスがキューに格納され、ターンが完了するまでエンドユーザーに返されません。これにより、ユーザー エクスペリエンスが低下します。

部分的なレスポンスを使用しない場合。

最初のフルフィルメントで部分的な回答を有効にすると、Dialogflow CX は直ちに最初のフルフィルメント メッセージを返して Webhook を呼び出します。Webhook が完了すると、Dialogflow CX は最終的なレスポンスを返します。このシナリオでは、エンドユーザーがしばらく待つように指示されるため、エンドユーザー エクスペリエンスが向上します。また、Webhook 呼び出しはエンドユーザーに送信されるレスポンスと同時に実行されます。

部分的なレスポンスを使用します。

音声合成マークアップ言語(SSML)

テキストまたは出力音声テキストのフルフィルメント フィールドで音声合成マークアップ言語(SSML)を使用できます。これにより、頭字語、日付、時刻、略語、または検閲する必要があるテキストのポーズと音声形式の詳細を指定して、音声レスポンスをカスタマイズできます。

構文の詳細については、 Text-to-Speech SSML のドキュメントをご覧ください