Google Home でサーバーに記録された弊社の海洋センサーで取得した温度を返すようにしてみた

#概要
弊社で開発している海洋センサーの温度をGoogle Homeで取得できるようにしてみました。

#はじめに
同じ会社の@h-takaumaがGoogle Homeでの開発をしていることに刺激を受けて、私もGoogle Homeアプリの開発をやってみました。
Google Homeは大阪のビックカメラにて半額（3000円）で販売されていたので購入いたしました。

#構成
弊社で作成している海洋センサーの情報はRedshiftに登録しています。
今回はDialogFlowの設定をメインで解説し、API Gateway経由で取得した情報を使ってサービスを実装します。
※DialogFlowの設定をメインにしてますので、AWS側の設定は今回は割愛してます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/4e0b3e1e-8b12-05c2-9d88-408fed4185e1.png)

#まずはAssistantの呼び出しを試してみる

##Actions on Googleにプロジェクトを追加
①Actions on Googleにログインし、Add/Import Projectをクリック
※Googleアカウントがない場合は作成しておいて下さい。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/ac749429-77c1-5ff7-f373-bb2e7dfc7357.png)
②Project Name とCountry/regionを入力・選択し、CreateProjectをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/6facb212-86fb-fe85-84f2-1ecfd005e946.png)

##DialogFlowのActionを仮で追加
###①作成されたプロジェクトを選択する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/df62c18f-6324-0161-56d3-bba9ac6a5a2b.png)
###②ADD ACTIONSをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/1010fc6e-e549-e74a-5bca-55344653c775.png)
###③DIALOG FLOWのBUILDをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/b2ec521a-e677-237e-7852-a7d70d94d4d1.png)
###④DialogFlowの画面が表示されたらDEFAULT LANGを選択し、CREATEボタンをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/842fb721-1014-7a7a-ac04-58a09a10e2ce.png)
###⑤デフォルトでIntentなどは作成されるので、さっそく動かしてみる。
　Integrationsをクリックして、Google Assistantを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/7a2775e2-a384-03d1-704a-d2bb662d5d34.png)
###⑥「Auto-preview changes」を選択してから、TESTボタンをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/c25552c6-0536-c404-87d0-5b70bd933c38.png)
###⑦「テスト用アプリにつないで」と言えば、「こんにちは！」とかえって来ることを確認する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/7b8c0fcf-2d44-ce6c-5a04-38c65fec12f9.png)

###⑧Google Home Miniでも同様に動くか確認する。
　※テストアプリですので、同じアカウントでGoogle Homeを動かしている必要があります。

　「OK Google」→「テスト用アプリにつないで」と言うと、「こんにちは」と返答を確認できればＯＫ！

##アプリの名前を変更してみる
###①Actions on Googleのコンソール画面を開き、作成したプロジェクトを選択する。
###②App Informationを開き、Editをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/43deec65-b994-f19b-ac90-2c8ddf7d02ad.png)

###③アプリ名と説明を記入し、Saveをクリックする。
※情報が足りなくてエラーが出ますが、テストで稼働させている間は問題ありません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/41dfe3e6-bb93-dad1-0a3e-801c80f62de6.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/597fe1dd-7017-3235-ac79-8527cd0261f3.png)

##問題発生！テストしてみると、反応しない、、
###問題：
　Google Homeに「海洋センサーにつないで」と言っても認識されない。

###調査：
　GoogleのMyActivityにて言葉が正確に認識されているか確認
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/a6770ae5-ad85-c2d7-c4d8-50abf24c5e2f.png)

###原因：
　現状では「海洋センサー」は「海洋センター」に補正されてしまうことが分かりました。
　自分の発音が悪いのかとほかの人にも試してもらいましたが、ダメでした。

###対策：
　アプリの名前を変えることで対応。
　ちなみに「海洋アプリ」も「快用アプリ」として認識されてダメでした。
　結局、「海の情報」というアプリ名でいったん確定。

#海洋センサーから温度を取得するためのDialogFlowの設定
##アプリにつないだ時のメッセージを変更
### ①Intentsの「Default Welcome Intent」を選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/c3f0e7ff-8c12-b938-c45a-47d6b00284d4.png)

### ②Text responseを修正し、Saveボタンをクリックし保存する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/32125bd9-dcb0-fe8a-5e82-916266747d43.png)

##温度データをPOSTするためWebhookを設定
###①Fulfillmentを選択する。
###②WebhookをEnabledに変更する。
###③DialogFlow用のJSONデータを返すURLを指定する。
###④Saveボタンをクリックして保存する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/a32710d6-4fd0-f029-1439-e0ad708748a0.png)

※JSONデータの内容
　followupEventにて、レスポンス後に別のIntentを呼び出すようにイベント名を設定しています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/4a5e10cc-4f33-c3e6-1a6b-f9b697e011cf.png)

##温度取得用のIntentを作成
###①Intentsを選択し、「CREATE INTENT」をクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/41ea92c3-51e6-f0b2-9ee0-65f8df5e74d9.png)

###②Intent名を「Temperature」を入力する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/fdae9916-b300-25cf-ab80-3aa737a4c034.png)

###③「温度を教えて」と言われたら起動するようにTraining phrasesを設定する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/aaf38d20-a54c-1bcc-ae69-908d1994c653.png)

###④［Enable webhook call for this intent］を有効にする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/9011dd06-e622-51dd-4af1-8831d8d42a54.png)

###⑤Saveボタンをクリックして保存する。

##リクエスト後のIntentを作成
###①CREATE INTENTで新しいIntentを作成する。
###②INTENT名「NextQustion」を入力する。
###③イベント稼働するためのEVENT名を入力する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/89240cb5-5f16-edbd-dd6d-d5bac037c258.png)

###④JSONデータのMessageデータをパラメータとして受けるための設定を行う。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/500f0dc3-fe59-2733-64c2-88c3b95cfe71.png)

###⑤Text Responseを設定。
　※取得した情報を伝え、次のアクションを促すメッセージを入れています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/8f6e3076-29c6-69dc-e91d-e2ef531c5ab5.png)

###⑥Saveボタンをクリックして保存する。

##テスト
下記の内容でテストし、想定通り動作していることを確認いたしました。

　「OK Google!」
　「海の情報につないで」→応答「分かりました。海の情報のテストバージョンです。」「海の情報をお伝えします。」
　「温度を教えて」→応答「現在の温度は22.7度です。ほかに知りたい情報はありますか？」

#最後に
今回は個人でGoogleHomeを買ったので嬉しくなって作ってみました。
手を使わなくても、また見える場所に移動しなくても情報を取得できることがすごく便利だと感じています。
また、情報を取得するためのステップがスマホで行うよりも少なくなる可能性が高いことを実感しています。

これからアイデア次第でもっと面白い活用ができると感じているので、さらに技術を調べながらアプリづくりにチャレンジしていきたいと思います。