前回はSlackの特定チャンネルに投稿したらAlexaが読み上げるという状態にするため、Slack Botの作成、ngrokで公開するところまでを行いました。 codelife.cafe
今回は Google Home / Google Home mini / Google Nest なども喋れるように「node-red-contrib-cast」モジュールを追加・設定していきます。
モジュール node-red-contrib-cast を追加してテスト
パレットの管理 > ノードを追加 >node-red-contrib-castを検索して追加。
node-red-contrib-castv2という新しいモジュールも出てきますが、GUIだけで設定できる項目が少なかったのでnode-red-contrib-castがおすすめ。
castノードを追加
IP横の検索ボタンをクリックするとChromecast対応端末のリストが表示されるので対象のデバイスを選択する。
スピーカーグループを作成していた場合は「Google Cast Group」が表示され、これを選択すれば対象のスピーカーグループに一斉配信することも可能。
languageはデフォルトで en
となっているので ja
に変更。Volumeは任意で設定。
前のノードから読み込み可能な値は下部に列挙されており、Messageとして受け取るには msg.message
または msg.payload.message
を渡せば喋ってくれる。
injectノードを追加
値は msg.message
= テストメッセージ
として完了。
inject と castを接続してテスト
正常にcast出来ていればステータスにOKと表示され、Google Homeが喋ります。
前回のフローに組み込む
実際に喋れることがわかったのであとはSlackへの投稿を受け付けるSlack Receiverで取った文字列を流していきます。
しかし、Slack Receiverで取得したJSONで投稿本文が入っているのは msg.payload.content
なのでそのまま繋げても喋ってくれません。
msg.message
に msg.payload.content
を代入してから渡す必要があります。
間にchangeノードを追加する
change を検索して、チャンネルをフィルタしていたswitchノード(画像では"randomのみ"という名前)に接続。
ルールを値の代入として msg.message
に 対象の値 msg.payload.content
をセット。
changeノードの後にcastノードを接続
これで後ろにCastを繋げればSlackへの投稿をGoogleも喋ってくれるようになります。
Slack投稿文章の読み上げ。GoogleとAlexa同時実行に対応。Googleが少し遅いのでAlexaメインかなあ。#Alexa #googlehome #nodered pic.twitter.com/6hovG1Lgef
— marumo (@marumo0014) 2020年9月27日
AlexaとGoogle完全に同時に喋るのは流石に無理ですねー。 てかGoogle喋るの遅い。
けど裏で音声ファイルを生成してそれをChromecastしてるだけなのでその分のラグは仕方ないですね。