ありったけの愛を叫べ

思ったことを書きます。正確でないものを含みます。極力良く言えば素が色濃くでます。

【ミッション失敗】Google HomeからRaspberry Piにコマンドを送り、コマンドを送ったGoogle Homeで音声を再生する

題名の通り、失敗しているので以下の手順は失敗に終わるという情報しかないです。

目的

Google Homeに「明日はなんのゴミの日?」「火曜日はなんのゴミの日?」などのゴミの日をきいたら予め(VOICEROIDなどで)作成しておいた音声を流す。

複数Google Homeがあれば、コマンドを受け付けたGoogle Homeで音声を再生する。

結果

失敗

試み1

IFTTTを利用したソリューション

  • IFTTTのトリガー(this)をGoogle Assistantの変数文字列を受けるものにする
  • IFTTTのアクション(that)をWebhookにする
  • WebhookとしてBeebotteを使う
  • Raspberry PiでBeebotteのchannelにサブスクライブしておく
  • pychromecastで音声を再生する

なぜ失敗判定なのか

IFTTTではトリガーしたGoogle AssistantのIDを取得できない。(試み2を試して気づいたが)それもそのはず、Google AssistantはGoogle Homeとは限らないのでorigin IDというモノを考えてる時点で不毛なデザインになってしまう。

試み2

DialogFlowを間に挟む

そもそもDialogFlowでもIDは取得できないので間に挟むどころか、Webhookに何かを渡す意味すらない。

だがDialogFlowは名前の通りdialogueを作れるものなので、コマンドに対して(対話として)音声再生はできる。

ではなぜ自分にとって失敗なのか。

  1. DialogFlowはGoogle Actionsなので、そのアプリケーションをGoogle Assistantから起動したときのみDialogFlowが介入できる。つまり「対話に入りたいです」とお願いした後に「ゴミの日」の話をする。2ステップになる。
  2. 音声ファイルを非ローカルネットワークにおいておかないといけない。お外の世界にHTTPSでおいておかないといけない。
  3. DialogFlowのWebhookを使ったとしてもコマンドをトリガーしたデバイスIDは取得できない。

以上の微妙に目的から飛び出している要件により、失敗と判定。