本記事はSlackbotを複数のワークスペースで使う方法について説明するものです。

複数のワークスペースで作業をしていると同じSlackbotを違うワークスペースで使いたい場合も出てくると思います。

Slackbotはワークスペース単位でAPIトークンを取得しなければならないため、1つのインスタンスで2つのワークスペースにログインすることはでできません。

インスタンスを複数起動してそれぞれのワークスペースにログインするという形を取ります。

Slackで複数のワークスペースを使う方法については「Slackで複数のワークスペースを利用する」をお読みください。

Slackbotを複数のワークスペースで使用するための手順

Pythonはモジュール間のグローバル変数の制御がなかなか難しいので今回はOSの環境変数を使用しています。
Botを起動する前に環境変数を書き換えることでログイン先のワークスペースを変更することができます。

複数のワークスペースでBotを使用する為に必要な作業は、

・使用する全てのワークスペースでトークンを取得
・コード修正:環境変数を受け取れるようにする
・別々のインスタンスでBotを起動する

の3つとなります。

Slackbotを使用する全てのワークスペースでトークンを取得

1つのAPIトークンで複数のワークスペースで使い回すことはできません。
使用する全てのワークスペースでトークンを取得する必要があります。

◆APIトークンの取得手順
1.ワークスペースのAPPフォルダに移動します。
https://xxxxxxxxx.slack.com/apps

2.サイドメニューの「カテゴリ」から「Bot関連を選択」します。
3.「Hubot」を選択します。
4.「設定の追加」ボタンをクリックします。
5.名前を入力して「Hubotインテグレーションの追加」を押します。
6.「API トークン」に書かれている内容をコピーします。

◆関連記事
SlackbotのAPIトークンを環境変数から取得する
SlackbotのAPIトークンを取得する(動画あり)

Slackbotで複数のワークスペースを使うためのコード修正

Slackbotのコード修正について説明します。

修正内容は以下の2つです。
・環境変数を受け取れるようにする
・別々のインスタンスでSlackbotを起動する処理を追加

環境変数を受け取れるようにする

パラメータファイル「slackbot_settings.py」の内容を修正し、環境変数を受け取れるようにします。
Pythonでは「os.environ[“Key”]」で環境変数の値を取得することができます。(「key」には環境変数が入ります。)

PythonでのSlackbotの作成方法については「SlackbotをPythonで作成しよう」をお読みください。

別々のインスタンスでSlackbotを起動する処理を追加

以下の操作をワークスペース(取得したトークンの数)だけ繰り返します。

1.新しいターミナルを開きます。

2.環境変数にトークンを設定します。環境変数に設定する場合はシングルクウォートやダブルクウォートは不要です。

export BOT_API_TOKEN=xxxxxxxxxxxxxxxxxx

3.Botを起動します。

python bot.py

2,3個の起動であればこれで問題ありませんが、数が多かったり毎回2つ起動するのはなかなか手間です。
一括起動のスクリプトを作成する方法もあります。

◆スクリプトの内容
・以下の処理をトークン分ループ
1.新しいターミナルを開く
2.環境変数を設定
3.Botを起動

◆準備
foreverコマンドというPythonをデーモンプロセス化できるコマンドがあるのでこちらを使用します。

[sudo] npm install forever -g

◆foreverコマンドの使い方
・プロセスを開始する

forever start -c python3 xxxx.py

・実行中のforeverプロセスの表示

forever list

★実行例

(venv) bash-3.2$ forever list
info: Forever processes running
data: uid command script forever pid id logfile uptime
data: [0] QD2t python3 bot.py 17632 17633 /Users/super/.forever/QD2t.log 0:0:0:7.299

・プロセスを終了する

forever stop [プロセス番号]

◆スクリプト(bot_start.sh)の記述内容
トークンの数だけ回してBotをforeverコマンドで繰り返し起動します。トークンをプログラムに記述する場合は

#!/bin/sh
# ワークスペースの数だけAPIトークンを記載する
tokens=(“xoxb-xxxxxxxxxxxxxxx” “xoxb-yyyyyyyyyyyyyyy”)

for token in ${tokens[@]}
do
# トークンを書き換える
export BOT_API_TOKEN=$token
# Botを起動する
forever start -c python bot.py
done

プロセスがワークスペースの数だけ起動できていれば成功です。

(venv) bash-3.2$ forever list
info: Forever processes running
data: uid command script forever pid id logfile uptime
data: [0] 0GlS python bot.py 18330 18334 /Users/super/.forever/0GlS.log 0:0:0:1.994
data: [1] f-2j python bot.py 18335 18336 /Users/super/.forever/f-2j.log 0:0:0:1.690

uptimeが「STOPPED」になっている場合は失敗です。
指定したトークンの値が正しいか見直しましょう。

以上、Slackbotを複数のワークスペースで起動する方法でした。

まとめ

今回は複数のワークスペースでSlackbotを起動する方法を紹介しました。
APIトークンはワークスペース間で使い回すことができないのでワークスペース単位でトークンを取得する必要があります。

複数のワークスペースでBotを使用するために必要な作業は、

・使用する全てのワークスペースでトークンを取得
・コード修正:環境変数を受け取れるようにする
・別々のインスタンスでBotを起動する

の3つです。

同じBotを複数のワークスペースで使い回せれば作業効率化が進むので是非活用してみてください。

Slackbot+PythonまとめTOP>>Slackbotの作り方マニュアル〜Python編〜

◆関連記事
SlackbotのAPIトークンを環境変数から取得する
SlackbotのAPIトークンを取得する(動画あり)
Slackbotをレンタルサーバーで動かす