概要
ローカル環境の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'を選択します。
Botsの作成を選択します。
botアカウントの名称を入力し、'Add bot integration'をクリックします。
遷移先の画面にAPI Tokenが表示されるので、メモりましょう。
これでbotアカウント作成は完了です。
'DIRECT MESSAGES'欄に作成したアカウントを見つけられるはずです。
設定ファイルの書き換え
errbot --init
により作成されたconfig.py
を書き換えます。
変更箇所は主に3点です。他の項目はそのままで問題ありません。
# BACKENDをTextからSlackに修正
BACKEND = 'Slack'
# 前述のAPI Tokenを入力
BOT_IDENTITY = {
'token': 'xxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}
# adminにしたいユーザのアカウント名をタプルのかたちで入力(複数可)
BOT_ADMINS = ('@nanakenashi')
説明のためにtokenをべた書きで記載しています。
GitHubなどでソースを管理する場合は環境変数に埋め込んで
os.getenv('HOGE')
などで読み込むかたちが望ましいと思います。
保存したら改めてErrbotを起動します。
今回はデーモンオプションをつけてみます。
$ errbot --daemon
動作確認
Slack上で!tryme
、!help
、!about
など、話しかけてみましょう。
コンソールのときと同様に動作するはずです。
なお、botアカウントのアイコンは愛情が注げるものに変えておくことをオススメします。
まとめ
かなりお試しの内容ではありましたが
Slackのbotとお話ができるようになりました。
chatbotの真骨頂は指示に対する柔軟な動作なので
次はその部分(プラグイン)に触れてみたいと思います。