PythonでSlackbotを作る(1)

現在、弊社でもSlackを試験的に利用しているのですが、RTM APIを使えばローカルでもbotが作成できることを知ったのでPythonで作ってみようという記事です。
今回は第1回目です。

さて、SlackのBotといえば…

00_slack

なのですが、残念ながらこのBot君はマスコット的なものなので任意の言葉に反応する程度のカスタマイズできません。もっと賢いBotを作成したいという場合は、SlackのAPIを通じて連携するBotを作成する必要があります。

Slackのbot作成といえばhubotでの作成例が多いのですが、RTM(Real Time Messaging) APIを利用すればWebSocketを用いたイベント受信が行えるので社内PC上でSlack botを稼働させることができます。

Real Time Messaging API | Slack

Slack Botアカウントの作成

まずはともかくSlack Botアカウントを作成しましょう。

Bot Users | Slack

既にチームのSlackは開設済で、権限のあるユーザでログインしているものとします。その状態で、下記リンクを開くと、Botアカウントの作成画面が開きます。

new bot user integration

01_slack

Botアカウントのユーザ名を入力して、「Add bot integration」を押します。

05_slack

「API Token」は後で作成するBotで用いるのでメモしておきましょう。「Customize Icon」や「Customize Name」で作成したBotの名前やアイコン画像を変更できます。変更内容を「Save Integration」で保存します。

この後のテスト用にプライベートチャンネルを作成して作成したBotを登録しておきましょう。

06_slack

Slack Bot環境の構築

さて、いよいよBotの作成にとりかかります。今回の導入環境はこちらです。

$ lsb_release -drc
Description:    Ubuntu 14.04.3 LTS
Release:        14.04
Codename:       trusty

言語は使い慣れたPythonにします。しかも日本語の扱いで面倒な処理はしたくないので3系を使います。

$ python3 -V
Python 3.4.3

以下のPythonライブラリを使います。

lins05/slackbot

※本記事執筆時点(2016/3/8)のバージョンは「0.3.1」です。

導入はpipで行います。今回はインストール直後の環境なのでPython3用のpipもインストールしています。

$ sudo apt-get install python3-pip
$ sudo pip3 install slackbot

Slack Botを起動してみる

任意の場所にbot用のディレクトリを任意の名称で作成します。

$ mkdir bossan
$ cd bossan/
$ touch slackbot_settings.py
$ touch run.py

“slackbot_settings.py”に設定を記述します。API_TOKENは先程メモした値を設定してください。

# -*- coding: utf-8 -*-

API_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

default_reply = "スイマセン。其ノ言葉ワカリマセン"

“run.py”にBotを起動するコードを記述します。

# -*- coding: utf-8 -*-

from slackbot.bot import Bot
def main():
    bot = Bot()
    bot.run()

if __name__ == "__main__":
    main()

いよいよ、Botの起動です。

$ python3 run.py

メンションの特定の言葉に反応したり、チャンネルに投稿された言葉に反応したりします。

07_slack

今回は疎通確認なのでSlackbotライブラリのデフォルトプラグイン(slackbot.plugin)の動作を見ただけなのですが、当然自分でプラグインを登録することで拡張することができます。ということで、次回はプラグインを作成してみましょう。

Share on FacebookTweet about this on TwitterShare on Google+Share on TumblrEmail this to someonePrint this page

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*