22
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DockerとErrbotでお手軽Slackbot

Last updated at Posted at 2016-09-27

概要

ローカル環境の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の真骨頂は指示に対する柔軟な動作なので
次はその部分(プラグイン)に触れてみたいと思います。

22
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?