Google I/O 2017 API.AI セッション
Google I/O 2017 API.AIのセッションでベーグルを注文するデモが行われました。Google Assistant、Slackなどのチャットベースでベーグルを注文していきます。こちらのデモをそのまま紹介してもいいのですが、ベーグルではなくお寿司を注文するデモに変更したいと思います。一部日本語では対応できない機能もありますが、別の方法で対応してみたいと思います。
API.AIの紹介とデモはこちらで見れます。
Building Rich Cross-Platform Conversational UX with API.AI (Google I/O '17)
###ベーグル注文の会話例
ユーザー「お腹が空いた」
Bot「私はベーグル注文システムです。どんなベーグルが食べたいですか?」
ユーザー「プレーンがいいです」
Bot「かしこまりました。一緒に飲み物はいかがでしょうか。」
ユーザー「もちろん、飲みたいです!」
Bot「かしこまりました。これからベーグルをお届けいたします。」
##下準備
-
API.AIにサインアップorログイン
- Googleアカウントを使用します。
- Create new agentで新しいagentを作成
- sushi-order-demoという名前にします。
- 言語は日本語を選択します。
- 入力が終わったらSaveを押します
![Screen Shot 0029-05-26 at 14.41.10.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2F4bc21168-08f9-7322-c9f8-17ad7dd395d6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f8ff7580a365d95d96325e9a1c40db8b)
##Intentsの作成
Intents > Create Intentsで新しいIntentsを作成します。Intentsはユーザーのアクションにどう対応するかを定義する場所です。
- Intents nameに「Sushi Order」と入れます
- User saysに「お寿司が食べたい」と入れます
- Text Responseに「へい、かしこまりました!」と入れます
- 入力が終えたらSaveを押します。
![Screen Shot 0029-05-26 at 15.02.48.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2F855025ae-63c0-5e36-61f5-4bc043d0aa6e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c50ffdcbdece0265dd8373e046d4a018)
![Screen Shot 0029-05-26 at 15.07.01.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2F21a65ac7-0e44-320f-046d-d35b448a3304.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=903facac553a2cbc0c7c4b9366cbde68)
##とりあえずテスト!
左のテキスト入力欄に「お寿司が食べたい」と入れてみましょう、すると「へい、かしこまりました!」と返答してくれます。 ※マイクを選択すれば音声入力もできます。
![Screen Shot 0029-05-26 at 15.21.20.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2Fcf280ae7-2bf6-5fe9-64dc-73db5c955e0b.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b26381f40f9d64cb2c3d91276d986912)
##わさびの有無を尋ねる機能を追加しよう
さび有りかどうかを注文を確定する前に必ず決めてもらうようにします。
###Entityの作成
Entitiesで新しいEntityを作成します。Entityは物事(時間や住所)などを特定するための辞書のようなものです。API.AIでは基本的な時間や住所はデフォルトで登録されています。今回は寿司の種類やさびの有無を特定するために使用したいと思います。
以下のようにサビの有無を登録します。
![Screen Shot 0029-05-26 at 16.13.00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2F94b913ba-723e-71cb-db86-c3d829148383.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a0dd787d234dd4b8be8f44f6198dd330)
###Intentsに追加
IntentsのSushi Orderに戻ります。User saysに「さび抜きでお願いします」と入力してください。するとActionの中にWasabiが追加されます。追加を確認したら以下の情報を追加します。
- Action nameに「order」
- REQUIREDにチェック
- PROMPTSに「さびはどうさないますか?」
![Screen Shot 0029-05-26 at 15.59.02.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2F0645f519-2185-bffe-e06b-f7dd678d88d5.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=366599671e21fb1c71e0ebdace3b2d73)
##テスト
先ほどと同じように左のテキスト入力欄に「お寿司が食べたい」と入れてみましょう、すると今度は「さびはどうさないますか。」と聞かれます。
![Screen Shot 0029-05-26 at 16.01.14.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2Fc4fe6a7b-f898-6f47-e4b0-a6d2568e30cd.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=060bad9ad17702b0c9ef1b5311cd6226)
「さび抜きでと言ってみる。」
![Screen Shot 0029-05-26 at 16.01.58.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2F90bd41a7-5667-dd0b-30b8-83f77c698874.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=58dda5ae43ff9f110ef2d84976b2c163)
##肝心の寿司の内容を決める機能を追加しよう
###Entityの作成
新しいEntityに寿司のメニューを追加していきます。お好きなものを入れていきましょう。
![Screen Shot 0029-05-26 at 16.06.23.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2Fba06718f-524c-cd59-7a62-2e81cb7ccb68.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7c5f60ca3b00e42fedd7e77f6da38fbb)
###Intentsに追加
先ほどと同じようにMenuのEntityも追加します。ここで気をつけたいことはREQUIREDだけではなく、IS LISTにもチェックを入れ複数に注文に対応できるようにします。
- REQUIREDにチェック
- IS LISTにチェック
- PROMPTSに「何を食べたいですか?」
![Screen Shot 0029-05-26 at 16.14.18.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2Fca93ae2b-cbf3-1274-0b89-493fed7d2aa0.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=11f9ef4f1df470d94e3043a9796b5e78)
##テスト
まぐろとサーモンをさび入りで注文してみます。
##Slackで試してみよう
api.aiではFacebookやSlackなどのメッセージングBotに簡単に対応できます。本当はGoogle Assistantで試したかったのですが、現在は日本語未対応なのでSlackで実行してみたいと思います。
####IntegrationsのSlackをOnにしてください。
####TEST IN SLACK を選択し好きなSlackに登録してください。
![Screen Shot 0029-05-26 at 16.22.46.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2F091ea1b1-4809-ae22-dd65-e55e79f06679.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=42b791b36410c7f1d7db3dd1690da35f)
![Screen Shot 0029-05-26 at 16.24.07.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2F85aff602-2cb1-9a16-1170-776d69b51402.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=70de4b47d877c00b31508a9dccfd735e)
####登録が終わるとBotが登録され簡単にテストができます。
##おまけ
もし意図した反応が無かった時はトレーニングをすることで頭が良くなります。
例えば「寿司食べたい」に反応しなかったとします。
![Screen Shot 0029-05-26 at 16.36.00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F114922%2Fcd008d98-92a0-7449-6a96-67f811df2f47.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=aec530b626083f7cf1640ff9ab6c1cf4)
TrainingのWhat's the sound of a tieから「寿司食べたい」を選択します。
そしてClick to Assign から Sushi Orderを選択しAPPROVEを押します。
もう一度「寿司食べたい」と入れてみましょう。意図した返答があれば成功です!
##ネクストチャレンジ
API.AIのイベントをCloud functionsで受け取りユーザーにテキストを返してみる
##参考リンク
##API.AIの記事