Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@nanakenashi

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

概要

自宅の何も会話のない空間が寂しくなったので、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は便利なサービスですが、会話の内容を外部に晒したくない場合は自前でプロキシサーバを立てるのが望ましいと思います。

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What is going on with this article?