LoginSignup
7
2

More than 3 years have passed since last update.

Slackの受信メッセージをGoogle Homeに音読してもらう

Last updated at Posted at 2020-12-21

概要

自宅の何も会話のない空間が寂しくなったので、Slackのチャンネル上で繰り広げられる会話をGoogle Homeが音読してくれるようにしてみました。何か役に立つかというと立ちません。

ローカルPCでBoltを動作させてSlackのイベントを受け取り、Google Homeにメッセージを送信します。

image.png

やったこと

Slackアプリの設定

Bolt入門ガイドに従ってアプリを作成します。アプリにはチャンネルの内容を読み取る権限を付与しておきます。

アプリケーションの実装

実装内容はシンプルです。

app.js
const { App } = require('@slack/bolt');                
const app = new App({                                  
  token: process.env.SLACK_BOT_TOKEN,                  
  signingSecret: process.env.SLACK_SIGNING_SECRET      
});                                                    

const googlehome = require('google-home-notifier');    
googlehome.ip('192.168.1.174', 'ja');                  

app.message('', async ({ message, say }) => {          
  await googlehome.notify(message.text, function(res) {
    console.log(res);                                  
  });                                                  
});                                                    

(async () => {                                         
  await app.start(process.env.PORT || 3000);           

  console.log('⚡️ Bolt app is running!');              
})();                                                  

Slackからメッセージを受信する

Boltを利用します。

npm install @slack/bolt

下記のような処理をコマンドラインで実行し、Slackからのメッセージを受信します。app.message()の第一引数にある文字列がメッセージに含まれるときにハンドラが動作しますが、今回はすべてのメッセージを対象とするために空文字にしています。

app.js
const { App } = require('@slack/bolt');
const app = new App({
  token: process.env.SLACK_BOT_TOKEN,
  signingSecret: process.env.SLACK_SIGNING_SECRET
});

app.message('', async ({ message, say }) => {
  // チャンネルに何らかのメッセージが投稿されたときの処理
});

(async () => {
  await app.start(process.env.PORT || 3000);

  console.log('⚡️ Bolt app is running!');
})();

Google Homeにメッセージを送信する

google-home-notifierを利用します。

npm install google-home-notifier

下記のようなスクリプトを実行するだけでGoogle Homeは語りだします。

app.js
var googlehome = require('google-home-notifier');
var language = 'ja';

// TODO:同一ネットワーク上のGoogle HomeのIPを指定
googlehome.ip('xxx.xxx.xxx.xxx', language);
googlehome.notify('こんにちは', function(res) {                             
  console.log(res);                                                         
});

意図通りに動作しないときは下記の記事を参考にさせていただきました。

Botの起動

# 事前にSLACK_BOT_TOKENとSLACK_SIGNING_SECRETをexportしておく
node app.js

ローカルの3000番ポートで起動していますが、このままではSlackからのペイロードを受け取れないためngrokでプロキシを作成します。※Bolt入門ガイドのイベントの設定の項目に詳細が記載されています

ngrok http 3000

フォワード用のURL「https://xxxxxxxxxxxx.ngrok.io」が作成されるので、これをRequest URLに登録します。

この状態でSlackのチャンネルにメッセージを投稿すると、Google Homeが内容を音読します。

むすび

私はお遊びで設定しましたが、急ぎの通知や家族の面倒を見るために画面を離れる必要がある場合など、何かしら使い道もあるかもしれません。

なお、ngrokは便利なサービスですが、会話の内容を外部に晒したくない場合は自前でプロキシサーバを立てるのが望ましいと思います。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2