この記事は 『CRESCO Advent Calendar 2017』 8日目の記事です。

 

はじめまして。あかみーと申します。

今年はAmazon Echo、Google home、Clova WAVEと様々なスマートスピーカーが発売された一年でした。
これから更に普及してスマートスピーカーがある日常が当たり前になる日がすぐ来るかもしれません。

今回はスマートスピーカーの中でもGoogle Homeに自分で指定した何かを言わせる方法を簡単に紹介します。
この方法は Googleのアカウントさえあれば誰でも試すことができます。
コーディングをする必要もありません!
Google Homeを持っていない人も、Google Assistantのアプリさえスマホにインストールすれば誰でも試す事が可能です。(Googe Homeの中身はGoogle Assistantだからです。)
今回紹介するものは、約20~30分程度でできます。興味のある方は是非トライしてみてください。

用意するもの

  • Google Home(無い場合はGoogle Assistantアプリ)
  • Googleアカウント(Google HomeまたはGoogle Assistantでログインするユーザアカウント)
  • 恥ずかしがらずにGoogle Homeに話しかける勇気

Google Homeに何か言わせるために、Actions on GoogleとDialogflow(旧 API.AI)を使用します。

Actions on googleとは

Google Assistant用のアプリケーションを作成するプラットフォームです。
これを使用してGoogle HomeやGoogle Assistantのアプリを作成することができます。

Dialogflowとは

旧称はAPI.AI。会話をできるボットを作るためのツールを提供しているサービスです。
様々なプラットフォームのSDKも提供しています。

それでは、手順を紹介します。

Actions on Googleに新規プロジェクトを作成する

はじめに以下のURLからActions on Googleにログインします。
https://developers.google.com/actions/

ログインしたら、画面右上のActions Consoleをクリックします。
次に、Add/import projectをクリックしてプロジェクトを作成します。
プロジェクト名と国を指定したらCREATE PROJECTをクリックします。

プロジェクトを作成したら、Dialogflowを使用してGoogle Homeに喋らせるものを作ります。
まずはDialogflowを使えるようにします。
Dialog Flowの右下にあるBUILDをクリックします。
すると、以下のような画面が表示されるので、CREATE ACTIONS ON DIALOGFLOWをクリックします。

その後アカウントの選択画面に遷移するので、ログインしているユーザを選択してDialogflowのアクセスを許可し、Dialogflowにログインします。(Actions on Googleと同じアカウントでログイン)
以下のURLからもDialogflowにログインできます。
https://console.dialogflow.com/api-client/#/login
これでDialogflowを使用する準備ができました。

Dialog flowを使用して会話内容を作成する

Dialogflowにログインしたら、ここでGoogle Homeに言わせる内容を作成します。
左上のCreate Agentをクリックします。

Agent NameにActions on Googleで作成したプロジェクトと同じ名前を設定し、LanguageとTimezoneを以下のように設定してCREATEボタンをクリックします。

Agentを作成したら次はIntentsを追加します。
Intentsはユーザが言ったことに対してどう返答するかを設定するところです。
デフォルトでは、Default Welcome IntentとDefault Fallback Intentが設定されています。
左上のIntentsをクリックして新たなIntentsを追加します。

Intentsを作成していきます。
まずはIntent nameにIntentの名前をつけます。
User SaysにGoogle Homeにユーザが話しかける内容を設定し、Text ResponseにGoogle Homeから返してくれる言葉を入力します。
User SaysとText Responseは一つだけでなく、複数のパターンを追加することができます。
Text Responseを複数入力すると、その中からランダムで一つ選んで返してくれます。
今回は以下のような物を作りました。

Intentsを追加したら右上のSAVEボタンを押します。
DONEと表示されたら追加完了です。

次に作成したDialogfrowで作成したIntentsをGoogle Homeで使用できるようにIntegrationsの設定をします。
画面左のIntegrationsをクリックしてGoogle AssistantをオンにしてSETTINGSをクリックします。

すると以下のような設定画面が出るのでAUTHORISEをクリックします。
ここでもログインしているユーザを選択してアクセスを許可します。
許可をするとAUTHORISEがUPDATE DRAFTに変わります。

Additional triggering Intentsに使用するIntentsの設定をします。
Welcome Intentは作成したアプリを起動したときに最初に動作するIntentです。
デフォルトだと「こんにちは」と言ってくれます。
変えたい場合はIntentsのDefault Welcome Intentを編集したり、自分でWelcome用のIntentsを作成し、作成したものを指定します。

Additional triggering intentsの下にあるSelect intentから作成したIntentを選んで追加します。
追加が完了したらUPDATE DRAFTをクリックします。
更新が完了するとVISIT CONSOLEというボタンが表示されるのでそれをクリックします。
これでDialogflow側の作業は完了です。

Actions on googleで作成したアプリの設定をする

DialogflowでVISIT CONSOLEをクリックすると、Actions on googleの以下の画面に移動します。
App InformationのEDITをクリックします。

Assistant app nameにアプリの名前、Detailsでアプリの詳細の説明やアプリで喋る声の設定(男性2種類、女性2種類の中から選べます)、作成したアプリ起動のトリガーとなるワードの設定をし、画面右下のSAVEをクリックします。
クリックするとbannerが設定されてない等のメッセージが出ますが、SAVEした際、画面右上にSuccessのメッセージが出たらOKです。(必要最低限な設定は完了済み)

作ったものはSimulatorで確認ができます。
画面右のSimulatorをクリックします。
Simulatorを起動するとアプリを起動するワードがデフォルトで表示されていて、そのワードで話しかけるとアプリを起動できます。
起動後はUser Saysで設定した言葉で話しかけたり、入力してText Responseで設定した返答が返ってくることを確認してください。

Simulatorで確認ができたらGoogle Homeでもやってみましょう!
今回使用したGoogleアカウントでGoogle Homeにログインし、作成したアプリ起動させるワードで話しかければ起動できます。
ここで実際に作ったものをGoogle Homeに言ってもらう動画を上げるべきなのですが、Google Homeが筆者の手元に無いため動画はありません。(すみません…)持っている方は是非試してみてください。

Google Homeを持っていない場合は、Google Assistantに話しかけると以下のようなテキストと音声で返答が返ってきます。
Google Assistantの場合、喋らずに文字を入力して確認することも可能ですが、せっかく作ったアプリなのでGoogle Homeと同様に声で試してみてください。

他にも様々な機能がある

今回紹介したのは設定した発話に対して決められた返答をランダムで返すチャットボット的なものを作りました。
他にも発話した内容の一部を認識させ、認識した言葉を返答する。という会話をすることもできます。
例えば「ご飯が食べたい」といったら「ご飯が食べたいのですね。承知しました。」と食べたいものを復唱させるといったことも可能です。
このやり方についても簡単に紹介します。

例に上げたものを実現させるために、DialogflowのEntitiesを使用します。
Entitiesは会話を認識するための単語をまとめておく場所です。
例えばFoodというEntitiesを作り、以下のような単語を登録します。

IntentsはUser Saysに「Food食べたい」と追加し、Foodの部分をクリックし、先程登録したFoodを選択します。
するとPARAMETER NAME、ENTITY、RESOLVED VALUEに自動で登録されます。

Text responseは「$Food食べたいのですね。承知しました。」という一文のみ追加します。
$FoodはActionに自動で登録されているEntityのValueが入るようになります。
これで、User Saysの「Food」の部分を喋らせることができます。

実際に話しかけると以下のようになります。(Google Assistantの場合)

このようにActions on GoogleとDialogflowを使ってGoogle HomeやGoogle Assistantで利用できる様々なものを作ることができます。
他にも色々なサービスがあるので、興味のある方は是非利用して様々なアプリを作ってみてください。