Slack BOT + Backlog APIでタスク管理する。
仕事の管理ツール
現在、仕事でプロジェクト管理は backlog をコミュニケーションツールは slack を使っています。 会議はあまりないので、仕事の打ち合わせはslack上が多いです!
slackとbacklogを使う際の問題点・・・
最近になってようやく(汗)、slackとbacklogに慣れてきたのですが、 両方使ってきて自分なりの不満点も見えてきました。
- backlogにあがった課題URLのリンクをSLACKにいちいちコピペするのがだるい。
- backlogページにログインしたくない (仕事で用いるページ、アプリは少なくしたい→slack、エディタに集中)
上記の課題点を克服すべく、Slack Botを作成してみました!
SLACK BOT環境
python version 主に使用したモジュール
モジュール slackbotについて
slackbotを作成する場合、RealTimeMessaging APIを 用いる必要があります。(APIはWebSocketベース)
こちらのモジュールを用いると
Websocket周りの通信をうまいことラップしてくれます。
モジュールインストールは pip install slackbot
で大丈夫です。
setup(hello world的なヤツ)
最低限の実行に必要な手順は以下
1. SLACBOT API KEYの取得
2. 実行ファイル、環境設定ファイルの指定となります。
※ 1についてはググると色々とあるので、割愛します!
実行ファイル、環境設定ファイルの指定
実行フォルダ直下に
API_TOKEN = <slack_api_key> # デフォルトの返信 default_reply = "hello!" #カスタマイズプログラム読み込み指定 PLUGINS = ['plugins.reply_backlog_task']
from slackbot.bot import Bot def main(): bot = Bot() bot.run() if __name__ == "__main__": main()
と記述し、run.pyを実行すると、botが起動します。
カスタマイズ
次に特定のフレーズに反応した際の処理を作成します。
slackbot_settings.py
に PLUGINSというで指定したファイル(./plugins/reply_backlog_task.py)
に独自の処理を追加することが出来ます。
今回は、以下の処理をプログラムすることにしました。
処理手順
1. pj:プロジェクト名とスラックでメンション(slack)
2. pj:に続くプロジェクト名をキャプチャする。(python)
3. キャプチャした単語をtrelloAPIでを呼び出して未完了タスクを呼び出す。(python)
4. backlog担当PJ未完了タスクを表示(slack)
プログラム
from slackbot.bot import respond_to from slackbot.bot import listen_to import json import re import requests # backlogクエリパラメータ dict返し def issue_data(projectId): issue_data = { 'parentChild':0, 'count':100, #取得上限数 'projectId[]':projectId, 'statusId[]': [1,2],#1→未対応、2→処理中 } return issue_data # backlog api convert pj_name → pj_id def convert_project_num(project_name): dict = { "pj1":11111, "pj2":22222 } return dict[project_name] # backlog api request def backlog_get_issues(projectId): url = HOST + '/api/v2/issues?apiKey=' + <backlog_api_key> r = requests.get(url,issue_data(projectId)) return r.json() # デコレータの引数にマッチするキーワードを指定し、マッチした後続の関数を実行 # デコレータの引数は正規表現も可能 # 正規表現パターンでマッチした、キャプチャは第二引数に引き渡される @respond_to(r'pj:(.+)[\s ]?$') def mention_func(message,project): texts = backlog_get_issues(convert_project_num(project)) for t in texts: text = "【未対応案件リスト】" text += "\n" text += "担当者:" text += str(t['assignee']['name']) text += "\n" text += str(t['description']) message.reply(text) # slackに返信 time.sleep(1)
ごちゃごちゃしてダサいですが、動きました(^^)
これからもカスタマイズしていって、便利なslack仕事アシスタントbotを作っていきたいです!