こたつにっき

Unityで遊びつつメモとか書きます

Google Homeをスプラトゥーンアシスタント化する

f:id:kotatu99:20171012120639j:plain

Google Home買いました

 

遊んでいきます。

 

 **追記**

パート2をqiitaに書きました

qiita.com

何を作る?

正直Google Homeが提供しているリマインダーやら「」とかは

外に出ない僕には関係がないので僕に役立つアシスタントに改造して行きます。

 

ところで、音声入力が必要な場面っていつだと思いますか?

当然手が使えない時ですよね。

つまりゲーム中こそ最もGoogle Homeが役に立つ時

 

ゲームといえば

f:id:kotatu99:20171012121343j:plain

スプラトゥーン2 | Nintendo Switch | 任天堂

 

当然イカです。

という訳でスプラトゥーンアシスタントに改造して行きます。

 

 

勝敗の登録

まず、お手軽にIFTTTを使ってGoogleスプレッドシートへ勝敗を入力します。

GoogleAssistant → spreadsheetのIFTTTを作ります。

 

f:id:kotatu99:20171012122946p:plain

 

IFTTTの使い方はQiitaにいっぱいあるのでそちらを参考に

qiita.com

 

 同様に負けた時用のApletも作ります。

これで

勝利 スプラシューター」「負けた キャンピングシェルター」等と話せば自動的にGoogleDriveのスプレッドシートに勝敗が記入されるようになりました。

登録されると「イカ登録完了」とGoogle Home(以下ほめちゃん)が喋ります。

 

f:id:kotatu99:20171012123447p:plain

 

これで勝敗の登録は完了です。

 

勝率の呼び出し

次に、Googleスプレッドシートで計算した武器毎の勝率を呼び出してもらいます。

目標とする実装↓

 

僕「勝率 〇〇(武器名)」

 

ほめちゃん「〇〇の勝率は××パーセントです」

 

この機能はGoogleAssistant+IFTTTでは賄えないので、

スプラトゥーンアシスタントAIをDialogflow(2日前に名前がAPI.aiから変わったらしい)で作ります。

 

dialogflow.com

 

 

これを使って入力を解析(と言ってもブキ名を取得するだけ)し、webhookで外部へ流します。

そこでスプレッドシートの内容を取得し、JSONレスポンスでAI(Bot)へ戻せばBotが受け取った情報を元に喋ってくれるという仕組みです。

 

こんな流れです。

f:id:kotatu99:20171012130549p:plain

 

Dialogflowのセッティング

エージェントの登録等はこちら参照。

tokibito.hatenablog.com

 

"Intents"で入力の受け取りや失敗した際の返答を登録します。

今回はユーザーの発言が「勝率」「成績」だった場合にBotが反応し、

勝率の後に続く部分を"weapon_name"として入力で受け取ります。

f:id:kotatu99:20171012131826p:plain

 

入力として受け取る単語は"Entities"から登録しましょう。

都市名や日時はデフォルトでシステム側が用意してくれていますが、

残念ながらスプラトゥーンのブキデータベースは無いそうです。

f:id:kotatu99:20171012132128p:plain

 

"Fulfillment"でwebhookの送信先を設定します。

今回はherokuを利用しました。

f:id:kotatu99:20171012132542p:plain

"Intents" の "Use webhook"に忘れずチェックを入れておきましょう。

ついでにDefaultの返答には検索が失敗した際の文章を入れておきます。

f:id:kotatu99:20171012133200p:plain

webhookを作る

いよいよAIから受け取った"weapon_name"を元に勝率を返すwebhookを作れば終了です。

ai-kenkyujo.com

こちらの中で使われている

天気をyahooのAPIから取ってくるwebhookを参考に。

以下(イカだけに)がgspreadを使ってスプレッドシートの情報を取得しJSONで返すサーバーです。

gist3a0b28daaa8187c52e306d3ff0f39ef9

 

gspreadの使い方はこちらから

 

書けたらテストしてみます。

コンソール右側に入力すればテキストでテストが可能です。

f:id:kotatu99:20171012135115p:plain

「勝率 スプラシューター」と入力すると…

 

f:id:kotatu99:20171012134832p:plain

勝率が出てきました!

 

ちなみにJSONはこんな感じになります。

f:id:kotatu99:20171012135239p:plain

 

 

完成

youtu.be

 動作はこちらの通りです。

とりあえず自分がほしい機能は実装できました!

 

現在、GoogleAssistantからDialogflowで作ったアプリを呼び出さなければいけないので、登録と呼び出しが別なのですが

次はこれをDialogflowで一括にまとめようかなと思ってます。

 

まだまだGoogle Homeで遊んでみたいですね。

ちなみにGoogle Homeは定価14000円がビックカメラで買うと2台2万円なので割り勘して買いました。お得です。

 

みんな買おう!

f:id:kotatu99:20171012173919j:plain

 

良きスプラトゥーンライフを!