Google Home × Dialogflowでクリスマスケーキ予約

![image1.jpeg](https://qiita-image-store.s3.amazonaws.com/0/223295/825a76ac-6605-5feb-a0fa-a4f7da753b7c.jpeg)

GoogleHomeを購入しました!

DialogflowでEntity・Intent・Webhookを作成し、Google Homeで発話しました。
本記事では、発話の内容がわかりやすいように、Actions on GoogleのSimulatorで実行した結果を載せております。

準備したものは、Google Home / Google アカウント / [SenseTecnic アカウント](https://users.sensetecnic.com/login)です。SenseTecnic アカウントは、[FRED - Front end for Node-RED - ](https://fred.sensetecnic.com)というサービスを使用するために作成しました。

# １．Entityを作成

**Cake**と**Request**というEntityを作成します。

![スクリーンショット 2017-12-20 23.09.39.png](https://qiita-image-store.s3.amazonaws.com/0/223295/04e68556-5007-6935-87a5-a21c06b5a9cc.png)

![スクリーンショット 2017-12-20 21.36.23.png](https://qiita-image-store.s3.amazonaws.com/0/223295/861e7f76-61c7-ea08-3edf-c25fd45f5cf1.png)

# ２．Intentを作成

クリスマスケーキを予約する**Booking**というIntentを作成します。

![スクリーンショット 2017-12-20 23.10.25.png](https://qiita-image-store.s3.amazonaws.com/0/223295/ef8827cf-5d3b-f261-4ca9-b7396faf0ad1.png)

![スクリーンショット 2017-12-21 7.30.00.png](https://qiita-image-store.s3.amazonaws.com/0/223295/5d14ed7d-c516-e6a3-e6e7-e779a5e488d6.png)

Simulatorの実行結果

![スクリーンショット 2017-12-20 19.32.40.png](https://qiita-image-store.s3.amazonaws.com/0/223295/52361913-33e2-9c83-9db9-c897c2320b2a.png)

![スクリーンショット 2017-12-21 7.40.51.png](https://qiita-image-store.s3.amazonaws.com/0/223295/df2e5bb2-8834-4900-bdfe-5a7c7eb0e56d.png)

# ３．Webhookを作成

**Use webhook**チェックボックスをチェックONに設定します。

![スクリーンショット 2017-12-21 7.29.53.png](https://qiita-image-store.s3.amazonaws.com/0/223295/f30117da-c2f2-7214-794e-45eb6e049f91.png)

FREDでNode-REDのフローを作成します。次のJSONデータをインポートするとNode-REDのフロー作成完了です。

<pre>[{"id":"ee7f0f11.4ce3d","type":"tab","label":"Webhookサンプル","disabled":false,"info":""},{"id":"cd3794b1.92dfa8","type":"comment","z":"ee7f0f11.4ce3d","name":"Webhookサンプル","info":"","x":110,"y":60,"wires":[]},{"id":"caeac3be.ec691","type":"http in","z":"ee7f0f11.4ce3d","name":"","url":"/sample","method":"post","upload":false,"swaggerDoc":"","x":100,"y":120,"wires":[["40570184.52132"]]},{"id":"40570184.52132","type":"function","z":"ee7f0f11.4ce3d","name":"レスポンス情報セット","func":"node.status({fill:\"green\",shape:\"dot\",text:\"intentName : \" +  msg.payload.result.metadata.intentName + \", resolvedQuery : \" + msg.payload.result.resolvedQuery});\nmsg.payload={ speech: \"予約を承りました。\" };\nreturn msg;","outputs":1,"noerr":0,"x":337,"y":120,"wires":[["b953f25d.4a50d"]]},{"id":"b953f25d.4a50d","type":"http response","z":"ee7f0f11.4ce3d","name":"","statusCode":"","headers":{"content-type":"application/json"},"x":550,"y":120,"wires":[]}]</pre>

![スクリーンショット 2017-12-20 22.32.59.png](https://qiita-image-store.s3.amazonaws.com/0/223295/26a8c105-230a-549e-ba67-381e9d968ec1.png)

ResponseのJSONフィールド名とContent-typeの設定については
[Dialogflowのマニュアル](https://dialogflow.com/docs/fulfillment)を参照ください。

```js:function
node.status({fill:"green",shape:"dot",text:"intentName : " +  msg.payload.result.metadata.intentName + ", resolvedQuery : " + msg.payload.result.resolvedQuery});
msg.payload={ speech: "予約を承りました。" };
return msg;
```

![スクリーンショット 2017-12-20 19.12.01.png](https://qiita-image-store.s3.amazonaws.com/0/223295/19ebdfc3-7e98-b12b-4303-ef433cfb60e5.png)

WebhookのURLとBASIC AUTH欄を入力します。

![スクリーンショット 2017-12-20 19.06.13.png](https://qiita-image-store.s3.amazonaws.com/0/223295/27483c97-d388-a34f-3ddf-1a944c656dc4.png)

Simulatorの実行結果

**「予約を承りました」**という文言になっていることを確認

![スクリーンショット 2017-12-20 19.11.47.png](https://qiita-image-store.s3.amazonaws.com/0/223295/17951666-03be-86ad-1b10-21818940b743.png)

ファンクションノードの下に、Intent名とメッセージが表示されていることを確認

![スクリーンショット 2017-12-20 19.09.04.png](https://qiita-image-store.s3.amazonaws.com/0/223295/84060842-d52c-4718-a6ec-0b4f243713dd.png)

# ４．Google Assistantを終了する

Google Homeを終了するためには、必ず[停止して](https://support.google.com/chromecast/answer/7071994?hl=ja)と言う必要があり「ばいばい」や「さようなら」では、Google Homeを終了できないと思っていました。
しかし、Actions on Googleの[マニュアル](https://developers.google.com/actions/dialogflow/first-app)に終了させる設定が記載されていることがわかりました。

![End conversation.PNG](https://qiita-image-store.s3.amazonaws.com/0/223295/92321a81-d08d-d686-4e3e-1b17ad777475.png)

DialogflowのIntentにGoogle Assistant欄があり、End conversationというチェックボックスをチェックONすると、Google Assistantが終了することがわかりました。

![スクリーンショット 2017-12-20 11.54.08.png](https://qiita-image-store.s3.amazonaws.com/0/223295/cadf7984-e04b-cf8d-ac70-6830e91e1759.png)

![スクリーンショット 2017-12-20 11.54.13.png](https://qiita-image-store.s3.amazonaws.com/0/223295/62cb39af-6eac-b60d-4d89-88c4ab5e9097.png)

Simulatorの実行結果

![スクリーンショット 2017-12-20 19.12.45.png](https://qiita-image-store.s3.amazonaws.com/0/223295/f1055cd0-336e-5b4c-c61a-c973186cc00e.png)