
アドベントカレンダー2023#08: Fulfillmentを使用したWEBHOOKの実行
本日は、DialogflowのFulfillment機能を活用してWebhookの呼び出しに取り組みました。しかし、レスポンスの形式が適切でなかったため、パラメーターへの反映ができませんでした。以下に、設定手順と昨日作成したスタブの動作について詳述します。(2023/12/09 後日談追記)
WEBHOOKの環境設定
サービスのURL設定:昨日デプロイしたGASのURLを使用し、Dialogflowの設定に適用します。

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

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

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

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

後日追記予定(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種類の基本構文があり、リッチメディア応答やカスタムペイロードなど、より複雑なレスポンスパターンについては、別の機会に詳しく掘り下げていきたいと思います。今回は、動作の基本を理解するために、なるべく最小のキーと値の設定の実装例に焦点を当ててみました。