桜が一気に開花した今頃、桜の木の下を自転車で通り抜けるときの風は暖かいというより暑いですね。
んなことは置いといて、先日面白いものを買いました。
前から気になってたんですが、半額セールを逃してケチ性分のせいで買えないでいたところ、ヨドバシで「5,000円以上の買い物で半額セール」をやっていたので買いました。
すぐさま開封して、設定して、PCから音をキャストしたり、音楽を流したりして、興奮状態だったんですが、やっぱり自分で色々設定したいと思うのが、この世の常。
先日、俺の話を聞け!!LT大会 #8においてDialogFlowの使い方を軽く知ったので、もっと詳しく調べてみることに。
DialogFlowは無料で使えるのですぐにログインして、早速作成。ここらへんの方法は調べたら山ほど出てくるので、飛ばします。
んで、調べたらわかりますが、状況に応じて違う文章を返すなど少し高度なことをしようとするとDialogFlowだけでは、能力不足になります。(それでも文法解析などしてくれて非常にありがたい。)
というわけで、WebHookでバックエンドサーバに投げる必要があります。
調べてるとたいていNode.jsを使ってまして、色々ゴニョゴニョしてるようですが、買った勢いでNode.js環境整備は熱が冷めます。
手っ取り早くかける言語はPHPしか思いつかなかったのでPHPで実装することにしました。
というわけで今回の構成は
PHP-FPM <-(呼び出し・JSON返却)-> Nginx <-(WebHook)-> DialogFlow <-(接続)-> Actions on Google <-(「OK,Google アプリに繋いで」)-> Google Home
なんか見てる限りではJSONで{“speech”:”hoge”}と返しとけば、喋ってくれそうだと思い、すぐさまテストしたんですが、これまた喋らない。
しょうがないからドキュメント見てたらV1 APIとV2 APIがある。V2はbeta版で有効にしてるとV1 APIは使えなくなるらしい。
設定を確認してみるとV2 APIがONになってて、「無意識にONにしてたんだろうな〜」とbetaに無意識に反応する自分の習性を笑いながら読み進めると、「fulfillmentText」を埋めときゃなんとかなることを発見。
おまけに、’payload’ => ‘google’ => ‘expectUserResponse’ をfalseに設定しておくとアプリを終了できることも発見。
これはエラー処理に便利そう。
また、やり取りするJSONにはContextsというのがあり、どのIntentsを動作させるか制御するのに使うみたいなんですが、’parameters’の中に{‘parameter-name’ : ‘body’ }のように好きなデータを
詰め込めるので、サーバーにデータを保存せず、そこから取り出すことでセッション周りも考えなくていい素晴らしい設計になってることも発見。
技術的な話はまあいいとして、たまたま思いついたアプリ(正確にはアプリの移植)を2,3日で完成させまして、テストして修正をしてを繰り返し、まともに動く気がしてようやく欲が満たされました。
しかし、テストアプリは一週間に一度Action on Googleから「Test App」を押さないと使えなくなると判明。
これはめんどくさい。回避するには、隣の「Submit draft for review」を押せと。つまり公開しろという意味らしい。
高揚感に浸ってた自分は、Google Homeアプリをリリースしてみた(申請編) – Qittaなどのページを参考にさせていただきながら、プライバシーポリシーページなどを作成。
気をつけたのは
- アプリ起動後にユーザが次に何をすべきか、終了方法をすべて音声で案内すること。
- プライバシーポリシーのページは、個人情報を引き出すつもりはないことを明記すること。
- 「もう一度」ということで再度読み上げる機能をつけること
こんな感じですかな。
土曜の夜に提出して、月曜になるのを待ってたんですが、日曜のうちに「こんなん相手にされないのではないか。」「実装が信用ならないと言われるんじゃないか。」と不安になるばかり。
そして月曜、早速メールが来てました。
題名は「〇〇 was not approved」でした。どんなどぎついお叱りが書かれてるのかと恐る恐る開けると、なんとも丁寧な文章で「カテゴリ変えたほうがいいんじゃないかな。」とありました。
優しいお言葉に背中を押されて、「あと一回は再挑戦してみようかな」とカテゴリを変えて送信すると、4時間後…
通ってました。
ネットを見る限りは4,5回はやり直しを食らってたので、正直何かの間違いじゃないかと何回もカレンダーの「4/2」を見直しました…4/1じゃない…エイプリルフールネタではない…だと…
で、何作ったのさ
これです。
もともとアマチュア無線技士3級問題集があったので、「この問題を読み上げて、数字で回答できたら手軽に練習できていいんじゃないの」と思いまして作りました。
もう一個、レビューしてもらいやすいようにと、県庁所在地当てクイズをつけたので、そちらの方も暇なときに遊んでみてください。
問題は思いついたら追加します。
以上、稚拙な文章ですが読んでいただきありがとうございます。
…ところでMN2問題集の「MN2」ってなんだよと思われたかもしれませんが、由来は「MaNa Application Software MoNdaisyu」からの「MNAS MN」からの「MN MN」からの「MN2」なんですが、なにせHSP実装のMN2初版は中学時代の黒産物でして、「MNが二個あるやん。略して短くしたろ。」みたいな軽い気持ちでつけたものです。略し方がガバガバで全くわけがわかんない。今回、別の名前を考えたんですが、アプリのアイコンから察せるようにセンス皆無なので、良い案が出ず、なんのアプリなのかひと目でわかるように「問題集」を付け足して「MN2問題集」となったわけです。「問題集が重複しとるやんけ。」と思ったあなた、そのとおりです。おまけに「エムエヌツー」という発音のしづらさ。自分は「OK Google、問題集」でショートカットを作成してます。