フルフィルメント

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

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

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

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

ES フルフィルメントは、Webhook サービスの接続に限定されます。フルフィルメントのスコープが CX 向けに拡張され、すべてのタイプのプロンプトとレスポンスが対象になりました。

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

フルフィルメントは、レスポンス メッセージが必要なすべての場所で使用されます。

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

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

静的レスポンス メッセージ(ダイアログ オプション)

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

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

テキスト

テキスト レスポンス メッセージは、エンドユーザーにテキスト ダイアログを送信します。インテント検出 API 呼び出しまたは統合呼び出しで音声合成が使用されている場合、このテキストを使用して音声コンテンツが生成されます。この場合、指定されたテキストで必要に応じて音声合成マークアップ言語(SSML)を使用できます。

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

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

カスタム ペイロード

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

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

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

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

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

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

会話の成功メタデータ

このレスポンスは、Dialogflow エージェントとの会話が成功したことをインテント検出 API 呼び出し元に通知します。Dialogflow はこのシグナルのみを使用して、測定の目的で成功した会話を識別します。このセッション状態がなんらかの形で変更されることはありません。システムまたは統合でこのシグナルを使用して、必要なアクションを実行できます。Dialogflow ではこのデータに対して構造が適用されないため、システムに適した構造を選択できます。

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

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

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

パートナーのテレフォニー統合の場合、音声ファイルに一般公開の URL を指定する必要があります。たとえば、Cloud Storage で一般公開のファイルをホストできます。

出力音声テキスト

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

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

出力音声テキストは、テキスト レスポンスと同様に連結されます。出力音声テキストのレスポンスがテキストと SSML の組み合わせである場合、連結された結果は SSML として扱われます。エージェントの設計者は、テキストまたは SSML を一貫して使用することをおすすめします。

条件付きレスポンス

このレスポンス タイプは、条件付きレスポンスに使用されます。一般的な形式を次に示します。

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

ここで

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

次に例を示します。

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

[condition][response] はどちらも、インライン システム関数を使用して、会話中に動的な値を生成できます。詳細については、システム関数ルート条件のリファレンスをご覧ください。

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

テレフォニー転送の呼び出し

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

Webhook の呼び出し

Webhook があるフルフィルメントが呼び出される場合、エージェントは Webhook にリクエストを送信します。Webhook は、サービス内で必要なアクションをすべて実行し、動的レスポンス メッセージを提供し、パラメータ値をオーバーライドして、現在のページを変更できます。

パラメータのプリセット

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

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

次にその例を紹介します。

  • パラメータ now を現在の時刻に設定します。
    パラメータ
    now $sys.func.NOW()
  • 既存のパラメータ counter を 1 増やします。
    パラメータ
    counter $sys.func.ADD($session.params.counter, 1)

音声の詳細設定

これらの音声設定は、必要に応じて同じページの音声設定フローの音声設定エージェントの音声設定をオーバーライドできます。

レスポンス キュー

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

ストリーミング API に対する部分レスポンス

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

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

シミュレータでこの機能をテストするには、部分的なレスポンスもオンにする必要があります。

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

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

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

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

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