フォールバックインテントからユーザーの発話内容を取る
下記の Google Home 用アプリを作っているときに、ユーザーの発話内容をそのままアプリ側で受け取る方法を調べていました。また同じことやるときに調べるような気がするので、ここにメモしておきます。
cheerio-the-bear.hatenablog.com
フォールバックインテントで発話内容を全て取る
ユーザーに自由に発話された内容の全てを取得したかったので、通常の(フォールバック用ではない)インテントを使って発話例の全てを @sys.any にしちゃってました。確かにその方法でもユーザーの発話内容の全てを期待通りに取得することができるのですが、@sys.any 指定時に下の警告が表示されるようになっています。
特に問題ないならいいかと思って使い続けていたのですが、どうも駄目みたいです。別のコンテキストで同様に全ての発話内容を取りたくなって、同じようなインテントを追加したのですが、優先順位をうまく制御することができませんでした。そうなる理由の見当も付かなかったのですが、低い優先順位にしている方にマッチングしてくれたりしたので、方針を転換。警告に従ってフォールバックインテントを使うことで、不思議な現象から解放されました。
arguments のパラメータを get() で取る
Dialogflow の Web UI 上では見せてもらえていませんが、フォールバックインテントの JSON リクエストにはユーザーの発話内容も載せられます。実際の JSON リクエストから引用したものがこちらですが、ユーザーが発話した "hello" が "text" 引数として載せてくれています。
"inputs": [ { ... "arguments": [ { "rawText": "hello", "textValue": "hello", "name": "text" } ], "intent": "actions.intent.TEXT" } ],
これをどのように取るんだろうと思案していたのですが、これで取れました。
let conv = agent.conv(); conv.arguments.get('text')