Google Homeをスプラトゥーンアシスタント化する
Google Home買いました
遊んでいきます。
**追記**
パート2をqiitaに書きました
何を作る?
正直Google Homeが提供しているリマインダーやら「今日の天気は何?」とかは
外に出ない僕には関係がないので僕に役立つアシスタントに改造して行きます。
ところで、音声入力が必要な場面っていつだと思いますか?
当然手が使えない時ですよね。
つまりゲーム中こそ最もGoogle Homeが役に立つ時
ゲームといえば
スプラトゥーン2 | Nintendo Switch | 任天堂
当然イカです。
という訳でスプラトゥーンアシスタントに改造して行きます。
勝敗の登録
まず、お手軽にIFTTTを使ってGoogleスプレッドシートへ勝敗を入力します。
GoogleAssistant → spreadsheetのIFTTTを作ります。
IFTTTの使い方はQiitaにいっぱいあるのでそちらを参考に
同様に負けた時用のApletも作ります。
これで
「勝利 スプラシューター」「負けた キャンピングシェルター」等と話せば自動的にGoogleDriveのスプレッドシートに勝敗が記入されるようになりました。
登録されると「イカ登録完了」とGoogle Home(以下ほめちゃん)が喋ります。
これで勝敗の登録は完了です。
勝率の呼び出し
次に、Googleスプレッドシートで計算した武器毎の勝率を呼び出してもらいます。
目標とする実装↓
僕「勝率 〇〇(武器名)」
ほめちゃん「〇〇の勝率は××パーセントです」
この機能はGoogleAssistant+IFTTTでは賄えないので、
スプラトゥーンアシスタントAIをDialogflow(2日前に名前がAPI.aiから変わったらしい)で作ります。
これを使って入力を解析(と言ってもブキ名を取得するだけ)し、webhookで外部へ流します。
そこでスプレッドシートの内容を取得し、JSONレスポンスでAI(Bot)へ戻せばBotが受け取った情報を元に喋ってくれるという仕組みです。
こんな流れです。
Dialogflowのセッティング
エージェントの登録等はこちら参照。
"Intents"で入力の受け取りや失敗した際の返答を登録します。
今回はユーザーの発言が「勝率」「成績」だった場合にBotが反応し、
勝率の後に続く部分を"weapon_name"として入力で受け取ります。
入力として受け取る単語は"Entities"から登録しましょう。
都市名や日時はデフォルトでシステム側が用意してくれていますが、
残念ながらスプラトゥーンのブキデータベースは無いそうです。
"Fulfillment"でwebhookの送信先を設定します。
今回はherokuを利用しました。
"Intents" の "Use webhook"に忘れずチェックを入れておきましょう。
ついでにDefaultの返答には検索が失敗した際の文章を入れておきます。
webhookを作る
いよいよAIから受け取った"weapon_name"を元に勝率を返すwebhookを作れば終了です。
こちらの中で使われている
天気をyahooのAPIから取ってくるwebhookを参考に。
以下(イカだけに)がgspreadを使ってスプレッドシートの情報を取得しJSONで返すサーバーです。
gist3a0b28daaa8187c52e306d3ff0f39ef9
gspreadの使い方はこちらから
書けたらテストしてみます。
コンソール右側に入力すればテキストでテストが可能です。
「勝率 スプラシューター」と入力すると…
勝率が出てきました!
ちなみにJSONはこんな感じになります。
完成
動作はこちらの通りです。
とりあえず自分がほしい機能は実装できました!
現在、GoogleAssistantからDialogflowで作ったアプリを呼び出さなければいけないので、登録と呼び出しが別なのですが
次はこれをDialogflowで一括にまとめようかなと思ってます。
まだまだGoogle Homeで遊んでみたいですね。
ちなみにGoogle Homeは定価14000円がビックカメラで買うと2台2万円なので割り勘して買いました。お得です。
みんな買おう!
良きスプラトゥーンライフを!