DialogflowのフルフィルメントWebhookで会話をすぐに終了させる方法
Google Homeを活用しようと思い、Google Cloud Functionsで外部APIを叩き、テキストを整形してその結果をGoogle Homeに喋らせるようなサンプルコードを作っています。
Webhookでレスポンスを返すと、会話待機状態になってしまう
サンプル通りにActions On Googleでプロジェクトを作り、
Dialogflowのfulfillment Webhookを設定するような連携です。
Cloud Functionsを使用したのは、Always Free枠がたくさんあるのでWebhook endpointとして使うのにリーズナブルだったためです。
Google Home -> Actions On Google -> Dialogflow -> Cloud Functions -> 外部API
Google Home <- Actions On Google <- Dialogflow <- Cloud Functions <-
Google Homeに喋らせることはできたのですが、 レスポンスを喋ったあと、会話待機状態になり、次の会話を受け付けようとする という現象が発生しました。
レスポンスとして返却していたのは、喋らせたいテキストだけの非常にシンプルなJSONです。
{
"fulfillmentText": "今日のタスクは1件で、期限切れタスクが3件あります。..."
}
フルフィルメントだからなのかどうかまでは調べられていませんが、サンプルとして作ったGoogle Home用アプリは、アプリに接続し、接続状態を維持するようなアプリの挙動になっていました。
この状態のGoogle Homeアプリは、わざわざ「ねぇ、Google、ストップ」と話しかけないっとアプリが終了してくれないので、使い勝手が悪いです。
会話を終わらせるWebhookレスポンス
会話を終わらせる方法を調べると、とても簡単な方法がありました。
以下は、Dialogflowの Webhookフォーマットの会話を終了させるレスポンス例として載っていたものです。
End conversation example - Dialogflow Webhook Format | Conversational Actions | Google Developers
End conversation example
The snippet below shows an example of a simple response to end a conversation session in the Dialogflow webhook format. The
expectUserResponse
value offalse
in the response message signals to the Assistant that no further user input is expected and that it should end the current conversation.
{
"payload": {
"google": {
"expectUserResponse": false,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Goodbye!"
}
}
]
}
}
}
}
上記のサンプルのとおりに、 payload.google.expectUserResponse
に false
を指定します。そうすると、Google Homeに話しかけてレスポンスを喋ったあとに、アプリ自体が終了します。接続状態を維持するようなことがなくなりました。
Author And Source
この問題について(DialogflowのフルフィルメントWebhookで会話をすぐに終了させる方法), 我々は、より多くの情報をここで見つけました https://qiita.com/uechoco@github/items/7d0a5b30a1ac7b4fbb25著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .