見出し画像

BotkitとGoogleHomeでSlackメッセージを喋らせる

Slack便利ですよね。

とりあえずSlackに通知させておくと人の目に止まるので気付きやすいし、何があったのか?おきたのか?がログとして残されますね。

その中で絶対に見逃してはいけないメッセージがありますよね。
来訪者受付システムからの通知、エラーメッセージ、他サービスのコメントの通知... などなど、重要度の高いメッセージは絶対にスルーさせたくない場合があります。

そこで、Botkit ✕ GoogleHomeでSlackメッセージのスルー漏れを防ぐ事ができます。

何をするのか?

BotkitでSlackのメッセージを検知し、GoogleHomeへメッセージ内容を喋らせます。

検知するメッセージは自分で指定できますし、GoogleHomeに喋らせる内容も好きなようにカスタマイズできます。

Botkitとは?

Node.js製のメッセージングプラットフォーム用のChatBotツールです。

Slack以外にもfacebookメッセージやtwilioでも利用できます

ソースはGithubにも公開されてます。


何が必要なのか

・SlackBotのAPIトークン
・Wifi接続済みPC(ラズパイがベスト)
・GoogleHome(Miniでも可)

SlackBotのAPIトークン
SlackのApp Directory > Manage > Custom Integrations > Bots へ進んで、
Add Configurationから新たなBotを作成します。
Bot名は gsbot としておいてください。
作成したらAPI Tokenを取得してください。(xoxbから始まる長い文字列です)

Wifi接続済みPC(ラズパイがベスト)
まずお試しの場合は、コードが書きやすいMacなどノートPCがいいでしょう。長らく動作させる場合は、電気代やコスト面も考えてRaspberry Piで稼働させるのがベストです。

GoogleHome(Miniでも可)
GoogleHomeでもGoogleHomeMiniでも構いません。
google-home-notifierで簡単に喋らせることができるのでGoogleHomeを選択してますが、USBスピーカーでも構いません。

USBスピーカーの場合はgoogle-home-notifierを使用しないため、この記事の方法は使えません。

どうやって作るのか?

ここから開発内容の説明です。

まず以下の前提をクリアしてください
・npmとNode.jsのインストール
・PCとGoogleHomeのWifi回線は同じにする

Wifi回線を同じにするにはgoogle-home-notifierを使用するからです。


Slackの設定

Slackのチャンネルに「invite more people」から作成Bot「gsbot」を招待してください。

Botkitの実装

まず作業ディレクトリを作成します
名前はslack-google-home-notifierとでもしておきます

mkdir slack-google-home-notifier; cd slack-google-home-notifier

ディレクトリ内でnpm initしてpackage.jsonを作成します。

npm init -y

次に必要なnpmモジュールをインストールします。
以下のコマンドを実行してください。

npm install -S botkit google-home-notifier

インストールが完了したら準備完了です。
ここから実際にコードを実装していきます。

まず、index.jsを作成します。

touch index.js

index.jsをエディタorIDEで開いて以下コードをコピペして貼り付けてください。

const Botkit = require('botkit')
const googlehome = require('google-home-notifier')

//GoogleHome
const language = 'ja'
const deviceName = 'Google-Home' //なんでもいい
googlehome.device(deviceName, language)

//Slack
const slackToken = 'xoxb-***' //ここにSlackToken

//Botkit
const controller = Botkit.slackbot({
    debug: false,
    status_optout: true
})
controller.spawn({
    token: slackToken
}).startRTM(err => {
    if (err) {
        throw new Error(err)
    }
})

controller.hears([''], 'ambient,bot_message', (bot, message) => {
    console.log(message.text)
    googlehome.notify(message.text, res => {
        console.log(res)
    })
    bot.api.reactions.add({
        timestamp:message.ts,
        channel: message.channel,
        name:"ok"
    })
})

GoogleHomeが1台のみならデバイス名は何でもいいです。
用意したSlack Tokenを「xoxb-***」の箇所に置き換えてください。
保存したら実装完了です。

Botを起動させる

ターミナルに以下のコマンドで起動させてみてください

node index.js

ターミナルにエラーが出ず、チャンネルに追加したgsbotがアクティブになれば起動成功です。

あとはチャンネル内に発言してみてください。
botkitがなんの発言でも反応してGoogleHomeから喋らせてくれるはずです。

指定した発言のみ反応させる

このままだと全発言に反応しているので、指定した発言にのみ反応させるようにコードを修正します。

controller.hears(['こんにちは'], 'ambient,bot_message', (bot, message) => {

controller.hearsの最初のパラメータに反応させるワードを入れます。
これで「こんにちは」という単語にのみ反応するようになりました。

もし汎用的な発言に反応させる場合は以下のようにしてください。

controller.hears(['(.*)してください'], 'ambient,bot_message', (bot, message) => {

この「 (.*)してください」 とすると、〜してください系の発言に反応するようになります。
・ビルドしてください
・デプロイしてください
・エラーを通知してください  (これも反応します)
あとは(.*) の部分をコードで判定できるので、処理を振り分ける事ができます。
自分のスルーさせたくない通知は発言に反応するようカスタマイズしてください。

最後に

これでSlack + Botkit + GoogleHomeで発言を喋らせる事ができるようになりました。
しかし、まだとりあえず動く段階なので、長期で動作させるにはまだやることがあります。
そこは自分もまだ手探りなので、色々と調べて試してみてください。

この記事が気に入ったらサポートをしてみませんか?