スマートスピーカー、いいですよね。
Google Homeはセールのときに買って持ってますよね。Echoはそろそろ当選しましたよね。
もしかして、結局片方しか使ってない?それはもったいない。
この記事では、Google HomeとAlexaを一度にフル活用する方法を説明します。
TL;DR
こんな構成のシステムを、コーディングなしで作っていきます。
必要なもの
- Google Home
- Alexa
- IFTTT
- Slack
- Docker
Google HomeからSlackにメッセージを投稿する
IFTTTを使います。設定した言葉に反応して、固定のメッセージをSlackに投稿できるようにしておきます。応答は、何か適当な言葉をセットしておきましょう。1
まず、試しにGoogleHomeに喋りかけて、どんな感じの反応をするか見ましょう。Google - マイ アクティビティから、喋った言葉がどのように認識されたのか確認できます。
既存のコマンドに被らなくて、誤認識されにくい文言がよいです。今回は今日のニュースを聞いておいて
にしておきます。2
Slackにメッセージを投稿する設定です。こういう中継目的のメッセージは、botが全員詰め込まれた専用部屋を作ってミュートすると便利です。
SlackのメッセージををBotで拾う
次に、IFTTTからのメッセージで動くBotを作ります。juntaki/firestarterを使います。
firestarterは、簡単な設定だけで機能を追加していけるSlack用のbotです。GoとVue.jsで書いてます。
どんなことができるかは下記のスライドで紹介しています。
Slackの設定
まずは、Slackに対してBotの設定をします。firestarterはアプリとしてデプロイしたほうが後々フル機能が使えて便利なので、SlackAppにしておきます。
https://api.slack.com/apps の、Create New App
から、Bot Userを適当な名前で作ります。
Basic Information
から、Verification Token
を、OAuth & Permissions
から、Bot User OAuth Access Token
を、コピーしておきます。
firestarterのデプロイ
Dockerにfirestarterをデプロイします。
先程入手したトークンは環境変数にセットして起動します。
docker run \
-v /path/to/config:/app/config \
-p 3000:3000 -p 8080:8080 \
-e SLACK_TOKEN=xoxb-xxxxxxxxxxxxxx \
-e SLACK_VERIFICATION_TOKEN=xxxxxxxxxxxxxx \
juntaki/firestarter
Slackの画面でfirestarterのボットがアクティブになっていることを確認しましょう。
設定は次のgoogle-home-notifier-goの環境構築が終わったあとに行います。
Google Homeに喋らせるには
Alexaにニュースを読んでもらうには、音声でお願いしないといけないので、Google Homeに喋ってもらう必要があります。
そこで、juntaki/google-home-notifier-goを使います。これは、google-home-notifierをGoで書き直して、WebAPIサーバにしたものです。
喋ってもらいたい言葉をPOSTすると、Google Homeを見つけて喋らせます。
firestarterと同じく、Dockerでデプロイしておきます。Google Homeを見つけるためにmDNSを利用するので、--net=host
オプションが必要です。
docker run -d --name ghn -e GHN_PORT=8081 --net=host juntaki/google-home-notifier-go
試しに、何か喋らせてみます。curlコマンドで、メッセージを送ります。
以下、<docker host>
のところは自分のDockerホストマシンのIPアドレスなどに読み替えてください。
curl -XPOST "http://<docker host>:8081?text=てすと&lang=ja"
Google Homeが2台以上ある豪邸にお住まいの方は、次のようにすることで、特定のGoogle Homeだけに喋らせることが可能です。
curl -XPOST "<docker host>:8081?text=てすと&lang=ja&device=Google-Home-xxxxxxx"
Google-Home-xxxxxxx
に入る文字列は、google-home-notifier-goのログに出ています。
$ docker log ghn
...
2018/03/21 12:04:27.789476 Device Google-Home-xxxxx._googlecast._tcp.local. at ...
...
firestarterからGoogle Homeが喋るようにする
firestarterの設定でgoole-home-notifier-goにPOSTリクエストを送るようにしましょう。
firestarterの設定画面(http://<docker host>:8080
)にアクセスして、次のような設定を追加します。
これだけで、Botの設定はおしまいです。