tl;dr

短い冬休みを利用して Python で slack ボットを作ってみることにした。(もう、冬休みは終わったけど)

参考

Learn how to build a simple Slack bot in Python, no prior bot experience needed.

www.fullstackpython.com

上記のサイトをほぼ写経しただけです。

下調べ

Real Time Messaging API

今まで Incoming Webhooks で Slack にアラートを通知したり、RSS インテグレーションは触ったことあったけど、ボットを育てていくにあたっては Real Time Messaging API を利用する必要があるとのことです。

Websocket ベースの Real Time Messaging API(以降 RTM API) を利用することで、手元の端末からでもメッセージの送受信がリアルタイムで行うことが出来るようになり、ボットを手軽に作成し、運用出来るようになるようです。

Python で slack ボット

Python で slack ボットを育てるには以下のようなモジュールを使うと良さそうです。

slackbot と python-rtmbot ちゃんと触っていないので、詳しいことは割愛しますが、Slack API コールや Websocket 周りをうまーくラップしているようで、ボットにさせたいアクションをプラグインとして組み込むような実装になっているようです(プラグインのみの実装に注力すれば良いというのが良いですな)が、今回は python-slackclient を使って RTM API を意識しながらボットを作ってみたいと思います。

出来たもの

github

Contribute to slack_bot-python development by creating an account on GitHub.

github.com

ひとまず

20170104224918

  • 電車遅延
  • 天気

を教えてくれるボット、名付けて pikapika ボット。

使い方

準備

pip install -r requirements.txt

設定(setting.toml)

slack の API トークンやボットの ID を設定する。

[common]
interval = 1
example_command = '教えて'

[slack]
api_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
bot_id    = 'XXXXXXXXXXX'

[get_weather]
uri = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=400010'

[train_delay]
uri = 'http://api.tetsudo.com/traffic/atom.xml?qshu'

bot_id については、以下のように Python スクリプトを実行して確認する。

python print_bot_id.py ${bot_name}

bot_id は以下の xxxxxxxxx のように出力される。

Bot ID for '${bot_name}' is xxxxxxxxx

実行

$ python pika.py
2017-01-04 23:27:34,948 DEBUG Starting new HTTPS connection (1): slack.com
2017-01-04 23:27:35,292 DEBUG https://slack.com:443 "POST /api/rtm.start HTTP/1.1" 200 5147
2017-01-04 23:27:36,126 INFO bot を開始しました...

天気

@pika 教えて 天気

20170105095555

うーん。

遅延

@pika 教えて 遅延

20170105095606

まあ、こんなものかな…

以上

天気とか遅延だけでは面白くないので、この pikapika ボットを色々と育てていきたいと考えています。

(memo) python-slackclient で RTM API

slack への接続

slack_client = SlackClient('api_token')
slack_client.rtm_connect()

各 channel を読み取る

slack_client.rtm_read()

元記事はこちら

短い冬休みに Python で slack ボットを作るぞ(1)