Google HomeとHome-Radi
この記事は
WORDIAN Advent Calendar 2017 - Adventar
の7日目の記事です。あと何日埋めることになるのか。
Intro
皆さん、ほめられてのびるらじおZ、通称ほめらじ、聴いてますか? 僕は最近聴けてません。
ツイで流れてきて知ったんですけど、ほめらじ初のPCゲームがPOP祭りで出るとか。これは再びほめらじリスナーになる機運が高まりますね。でもブラウザを開いて再生する労力が最近は衰え気味なので、Google Homeから再生してもらえたらな、というのが今回のモチベーションです。とはいえ、音泉のアクセス集計の役のは立ちたいので暖かみのある手動ブラウザアクセスについてはまた検討したいです。
前情報
ほめられてのびるらじお
ゲームメーカーPurple Software*1とぱれっと*2がコンビを組んでお送りしていた筈のネットラジオ。パーソナリティーは風音様と荻原秀樹さん。10周年を迎えた。ネットラジオとしては異例の長寿番組、の筈。
Google Home
Google Homeとは皆の玩具です。もう少し詳しく説明すると、所謂「スマートスピーカー」というヤツで、音声でコマンドのやりとりができます。様々なIoT機器と連携し、目指せスマートホーム。
編集部にも1台あるので、折角だからコイツから ほめらじを流してもらいましょう。
Heroku
ホスティングサービス。対立候補としてGAE*3などがありましたが、料金体系の前に敗北。用途と相談して、これに落ち着きました。アカウントにメールアドレスと名前を登録すればメールが届いて始められます。
基本的な使い方についてはチュートリアルを参考にしてください。
IFTTT(イフト)
"If This Then That" 異なるアプリ、デバイスの中継をやってくれるサービス、で大体間違っていない筈。これでGoogle HomeとHerokuを繋いでもらいます。 比較検討の結果、Dialogflowになりました。ついでにHerokuも無くなりました。
Dialogflow
google-home-notifier
JSライブラリ。解説は
Google Home開発入門 / google-home-notifier解説 - Qiita が良いです。
実装
とはいえ、npmに音泉の謎APIをライブラリ化した先駆者がいらっしゃるので、それを利用させてもらえれば大幅に手間は縮小します*4。
という訳で、流れとしては
- Google Homeに「音泉」と言う。
- Dialogflowでエージェントが起動する。
- Google Homeに「ほめらじを流して」と言う。 1.DialogflowがローカルサーバにJSONを飛ばす。
- ローカルサーバが音源のURLを取得する。
- ローカルサーバがGoogle HomeにURLを飛ばす。
- Google Homeが音声を再生する。
- ほめらじが流れる。
では、やっていきです。
問題発生
case:1
IFTTT、Google AssistantをThatに設定できないんですか!?
— SillySpeaker (@hid_alma1026) 2017年12月3日
できないそうです https://t.co/ESlcZtWNEN
— SillySpeaker (@hid_alma1026) 2017年12月3日
という訳でローカルに転がっているサーバにWebhooksを喰わせて行くことになりました。
ローカルサーバ使うならHeroku要らなかった説は正直ある。
case:2
「Dialogflowとfirebaseで簡単に連携できるし、ファンクションのホスティングもしてくれるからこれだけで良くね?」となって暫く実装を進めたものの、どうにも動作しない。よく見ると料金体系のところに「無料枠ではOutbound Network使えないよ」という旨の記載が。使いたければ富豪になるしかねえ。
この方式で行くなら
が参考になります。app.tell
やapp.ask
に
speak = `<speak><audio src="${url}"></audio></speak>`
喰わせるの(実際はもう一手間要りますが)、ハックという感じがしていいですよね*5。
Outro
進捗:ローカルサーバにDialogflowの応答を受けたら再生可能な状態にした。が、Dialogflowのアカウント設定やエージェント設定やらで謎な状況になってしまったのでここまでです。
ちょっと忙しかったり記事書き足したりして滅茶苦茶になってしまったのでリベンジします。
明日の担当は @linerlock 君です。