GoogleHomeをActions on Google&DialogFlowで機能拡張(第2回)
こんにちは。ミーヤキャットです。
我が家にも定着したGoogleHomeですが、音声を使った新しいユーザインタフェースとしてどんなことができるのか、エンジニアとして突っ込んで調べてみました。
まずGoogleHomeの機能拡張で思い浮かぶのはIFTTTを使ったアプリケーションの連携です。
IFTTTでは「if this then that」というコンセプトに沿ったレシピを作成してアプリケーション同士を連携することができます。
例えば、GoogleHomeに「〇〇」と言ったらTwitterで「○○」とつぶやくといったことができます。
連携できるサービスはTwitter以外にもFacebookやDropboxのような有名なものを含め、60個以上あります。
しかし、調べてみたところ2018年4月時点ではGoogleHomeに「〇〇」と言わせるといった使い方はできないようでした。
それだと少し寂しいのでサーバを立てて独自アプリを呼び出し、GoogleHomeと対話ができるようにしてみようと思います。
次回以降数回にわけてGoogleHomeで自分の作った独自アプリを利用する方法について解説しますので、興味のある所から読んでください。
まず今回はGoogleHomeから独自アプリを起動するまでの仕組みについてです。
- GoogleHomeの初期設定と使い方(第1回)
- Action on Google&DialogFlowで機能拡張(第2回)
- 機能拡張準備~クライアント編~(第3回)
- 機能拡張準備~サーバ編~(第4回)
- 窓口業務アシスタント作成(第5回)
- GoogleHome×ラズベリーパイ~カメラとの連動~(第6回)
GoogleHomeから独自アプリを起動するまでの仕組みとは
GoogleHomeとのやり取りは大まかにこの図のようになります。

- ユーザーの発声をGoogleHomeで認識する
- 認識した言葉をGoogleアシスタントに送付する
- Googleアシスタントが言葉を解釈し、スピーカーに発声させる応答を返す
- 応答を受け取ったGoogleHomeが発声する
3番目の部分が、検索エンジンでユーザの問いである「キーワード」に対して検索結果を返すノウハウを持つGoogleの強みを生かせる部分ですね。
今回のテーマである機能拡張をするにはどうすればよいでしょうか?
拡張できるのは3番目の部分です。図を見ながら少し細かく見てみましょう。

3-1.Googleアシスタントはアプリケーションの起動を要請する内容の音声だったらActions on Googleにアプリケーションの起動を要請し、独自のサーバへリクエストを転送します。
3-2.独自サーバではJSON形式のリクエストを受け取り、呼び出しに応じた処理を行ったうえでスピーカーに発声させるJSON形式のレスポンスを返却します。
3-3.Googleアシスタントは独自サーバから受け取った応答をスピーカーに返します
3-4.対話が終了するまで3-2~3-3を行います
図にある用語については表の通りです。
それぞれの詳しい説明は次回以降、実際に使うときに行いますね。
| キーワード | 説明 |
| Googleアシスタント | Googleの提供するAIアシスタントです |
| Actions on Google | Googleアシスタントで動作させるアプリケーションを開発するプラットフォームです |
| DialogFlow | 自然言語解釈を行うことができ、Googleアシスタント以外と連携することもできます。これによって日本語の曖昧さを柔軟に解釈してくれます。 |
| webhook | WebAPI連携の仕組みです。この仕組みを使ってDialogFlowが解析した結果をパラメータとして独自サーバへJSON形式でリクエストを送り、レスポンスを受け取ることができます。 |
| JSON形式 | CSV形式のようなデータフォーマットの一種です。要素の個数が決まっていない非構造型のフォーマットで、拡張性が高いのが特徴です。 |
今回はGoogleHomeの機能拡張の流れについて紹介しました、
次回は機能拡張に必要な準備について書く予定です。
それではまたよろしくお願いいたします。
=======================
記事についてはリンクフリーですが、著作権は放棄していません。
また、この記事は個人の見解を示したものであり、書かれている情報を元に生じた損害についての保証は行いません。
書かれている内容が事実と異なる場合や、人権、知的財産権を侵害している場合は、問合せフォームよりご連絡ください。訂正、削除を行います。
=======================

