Edited at

DockerとErrbotでお手軽Slackbot

More than 1 year has passed since last update.


概要

ローカル環境のDockerでchatbotを動かして

Slackとのやりとりをさせてみました。

GitHub謹製のHubotやRuby製のLitaと悩みましたが

CoffeeScriptの読解やRedisの事前準備が面倒だったので

Pythonで書かれていて、一番シンプルそうなErrbotを選びました。

ザッと調べた感じでは、大きな優劣はないように思います。


準備

Dockerのコンテナが動作する環境であればどこでも問題ありません。

筆者はDocker for Macを使用してローカルPCに構築しています。

Slackbotを作成する場合には、事前にチームの準備が必要です。


手順


Dockerコンテナの構築

Pythonのバージョン3.3以上が動作するコンテナを構築します。

省力のため、Python込みのAlpine Linuxを使用しました。

FROM python:3.5.2-alpine

# apkの更新
RUN apk update

# Errbotのインストールに必要なパッケージのインストール
RUN apk add gcc g++ libffi-dev openssl-dev

# 開発に必要なパッケージをお好みでインストール
RUN apk add vim bash

Dockerfileのあるディレクトリで以下を入力し、コンテナを起動します。


コンテナの起動

# botという名前で、Dockerfileからイメージを生成

$ docker build -t bot .

# botイメージを起動し、/bin/shを実行
$ docker run -it bot /bin/sh



Errbotの導入

pipを使って必要なパッケージをインストールします。

errbotの本体とSlackとの通信用にslackclientが必要です。


パッケージのインストール

$ pip install errbot slackclient


完了したら、無事インストールできたかどうかを確認します。

結構な数のパッケージに依存していますね…。


パッケージの確認

$ pip freeze

ansi==0.1.3
beautifulsoup4==4.5.1
bottle==0.12.9
cffi==1.8.3
colorlog==2.7.0
cryptography==1.5.2
daemonize==2.4.7
dnspython==1.14.0
dnspython3==1.14.0
errbot==4.3.3
idna==2.1
Jinja2==2.8
Markdown==2.6.7
MarkupSafe==0.23
pyasn1==0.1.9
pycparser==2.14
Pygments==2.1.3
pygments-markdown-lexer==0.1.0.dev39
pyOpenSSL==16.1.0
requests==2.11.1
rocket-errbot==1.2.5
six==1.10.0
slackclient==1.0.2
threadpool==1.3.2
waitress==1.0.0
WebOb==1.6.1
websocket-client==0.37.0
WebTest==2.0.23
Yapsy==1.11.223

無事インストールができたらFirst runを実行してみます。

以下のコマンドで、プロジェクトディレクトリを初期化します。


プロジェクトの初期化

$ mkdir ~/errbot-root

$ cd ~/errbot-root
$ errbot --init

botの設定や実行に必要な複数のファイルが作成されました。

早速コンソール上でerrbotを起動してみます。

>>>が表示されたら、!trymeと入力してみてください。

botから反応が返ってくるはずです。


コンソールでの実行

$ errbot

>>> !tryme
It works !

どうやら、Errbotではbotへの指示のプレフィックスとして!をつけるようです。


botアカウントの準備

こちらのページを開き、'Make a Custom Integration'を選択します。

1.png

Botsの作成を選択します。

2.png

botアカウントの名称を入力し、'Add bot integration'をクリックします。

3.png

遷移先の画面にAPI Tokenが表示されるので、メモりましょう。

4.png

これでbotアカウント作成は完了です。

'DIRECT MESSAGES'欄に作成したアカウントを見つけられるはずです。

5.png


設定ファイルの書き換え

errbot --initにより作成されたconfig.pyを書き換えます。

変更箇所は主に3点です。他の項目はそのままで問題ありません。


config.py

# BACKENDをTextからSlackに修正

BACKEND = 'Slack'

# 前述のAPI Tokenを入力
BOT_IDENTITY = {
'token': 'xxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}

# adminにしたいユーザのアカウント名をタプルのかたちで入力(複数可)
BOT_ADMINS = ('@nanakenashi')


説明のためにtokenをべた書きで記載しています。

GitHubなどでソースを管理する場合は環境変数に埋め込んで

os.getenv('HOGE')などで読み込むかたちが望ましいと思います。

保存したら改めてErrbotを起動します。

今回はデーモンオプションをつけてみます。


Errbotの起動

$ errbot --daemon



動作確認

Slack上で!tryme!help!aboutなど、話しかけてみましょう。

コンソールのときと同様に動作するはずです。

なお、botアカウントのアイコンは愛情が注げるものに変えておくことをオススメします。

6.png


まとめ

かなりお試しの内容ではありましたが

Slackのbotとお話ができるようになりました。

chatbotの真骨頂は指示に対する柔軟な動作なので

次はその部分(プラグイン)に触れてみたいと思います。