自己顕示欲の開放治療所

erg, programming and something.

別名:Laughing and Grief 雑記

Latin and Greekは習ったこともない

真面目な記事の他、特定の方には不快と思われる事柄に関して言及を行うことがあります。ちょっと頑張りますが、Blog内で解決できなかった場合要望があれば別ページに技術記事は書き直します

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

という訳で、流れとしては

  1. Google Homeに「音泉」と言う。
  2. Dialogflowでエージェントが起動する。
  3. Google Homeに「ほめらじを流して」と言う。 1.DialogflowがローカルサーバにJSONを飛ばす。
  4. ローカルサーバが音源のURLを取得する。
  5. ローカルサーバがGoogle HomeにURLを飛ばす。
  6. Google Homeが音声を再生する。
  7. ほめらじが流れる。

では、やっていきです。

問題発生

case:1

kotodama.today

という訳でローカルに転がっているサーバにWebhooksを喰わせて行くことになりました。

ローカルサーバ使うならHeroku要らなかった説は正直ある。

case:2

「Dialogflowとfirebaseで簡単に連携できるし、ファンクションのホスティングもしてくれるからこれだけで良くね?」となって暫く実装を進めたものの、どうにも動作しない。よく見ると料金体系のところに「無料枠ではOutbound Network使えないよ」という旨の記載が。使いたければ富豪になるしかねえ。

この方式で行くなら

qiita.com

が参考になります。app.tellapp.ask

speak = `<speak><audio src="${url}"></audio></speak>`

喰わせるの(実際はもう一手間要りますが)、ハックという感じがしていいですよね*5

Outro

進捗:ローカルサーバにDialogflowの応答を受けたら再生可能な状態にした。が、Dialogflowのアカウント設定やエージェント設定やらで謎な状況になってしまったのでここまでです。

ちょっと忙しかったり記事書き足したりして滅茶苦茶になってしまったのでリベンジします。

明日の担当は @linerlock 君です。

*1:最新作は「アオイトリ

*2:最新作は「9 -nine-」シリーズ

*3:Google App Engine

*4:リンクは多分載せない方が良さそうな気がする。ググれ

*5:通常渡したstringは問答無用にTextToSpeech噛ませられるが、こうするとurlを音声ソースとして扱ってくれる