見出し画像

アドベントカレンダー2023#08: Fulfillmentを使用したWEBHOOKの実行

本日は、DialogflowのFulfillment機能を活用してWebhookの呼び出しに取り組みました。しかし、レスポンスの形式が適切でなかったため、パラメーターへの反映ができませんでした。以下に、設定手順と昨日作成したスタブの動作について詳述します。(2023/12/09 後日談追記)

WEBHOOKの環境設定

サービスのURL設定:昨日デプロイしたGASのURLを使用し、Dialogflowの設定に適用します。

URLの欄に、GASのURLを登録する。

WEBHOOKの実行設定

WEBHOOKを使用する「Intents」の設定「Enable webhook call for this intent」をオンにします。
Intents毎に、異なるWEBHOOKを呼び出す設定はなく、同一のサービスを呼び出すことになる。この辺りは作り方で解決するひと手間が必要。

無料版では、1つのwebhookしか使えず、複数のintentに同じものを設定することになる。

実行結果の確認方法

テスト実行:「Try it now」を使い、目的のintentが発動するフレーズを入力します。

DIAGNOSTIC INFOをクリックするとWEBHOOKの結果を確認できる。

「DIAGNOSTIC INFO」の内容
・Raw API response:実行結果全体。
・Fulfillment request:リクエストの内容。
・Fulfillment response:レスポンスの内容。
・Fulfillment status:実行結果のステータス。

スタブの実行状況
スタブは受け取ったリクエストをシートに転記するため、実行中は以下のような動作が確認できる。実際には、DIAGNOSTIC INFOの内容で作業は進められる。

Stubのシートより

後日追記予定(2023/12/09)
現在、レスポンスの形式に問題があるため、適切なパラメーターセットが行われていない状況です。この問題の解決に向け、調査を続けています。

WebhookResponseの基本構造の理解

前回の記事では、WebhookResponseのJSON構造についての理解が不足していたため、意図したレスポンスを作成することができませんでした。しかし、理解が進み、WebhookResponseの構造の中でも、最もシンプルな形式は以下の通りと判明。

{
  "fulfillmentText": "Chatに表示したいレスポンス文字列を返す。"
}

ここでは、`fulfillmentText`というキーを使用し、表示したい文字列を値として指定します。これは、ユーザーの質問に対してテキスト応答を提供するためのものです。

スタブでの実装例
Google Apps Script(GAS)では、この構造を以下のような構文で実装します。

function fulfillmentText(body) {
  return ContentService.createTextOutput(JSON.stringify({
    "fulfillmentText": "表示したい文字列"
  })).setMimeType(ContentService.MimeType.JSON);
}

このコードで、JSON形式のレスポンスを生成し、dialogflowがユーザーに表示するために使用します。WebhookResponseには6種類の基本構文があり、リッチメディア応答やカスタムペイロードなど、より複雑なレスポンスパターンについては、別の機会に詳しく掘り下げていきたいと思います。今回は、動作の基本を理解するために、なるべく最小のキーと値の設定の実装例に焦点を当ててみました。


この記事が気に入ったらサポートをしてみませんか?