概要
前回の記事( Docker環境でRedmineを立ち上げてslackと連携させてみた )ではプラグインを使用してRedmineとSlackの連携を行いましたが、
今回はSlack APIとRedmine APIを使用してpythonで連携する方法を紹介します。
自分でAPIを操れるようになると自由度が格段にあがります。
ざっくりとしたイメージとしては、SlackとRedmineをpythonが仲介しており、APIとライブラリがインターフェースを担っているような感じです。
[Slack] ⇔ Slack API ⇔ python-slackclient ⇔ [python] ⇔ python-redmine ⇔ Redmine API ⇔ [Redmine]
使用ライブラリ
- python-redmine
- https://github.com/maxtepkeev/python-redmine (GitHub)
- https://python-redmine.com (公式リファレンス)
- python-slackclient
- https://github.com/slackapi/python-slackclient (GitHub)
- https://slackapi.github.io/python-slackclient (公式リファレンス(多分))
事前準備
ここではあまり詳しく解説しません。検索すれば見つかると思うので他の記事をご参照ください。
Slack側の設定
- Slack API( https://api.slack.com/apps )のサイトからSlack Appを作成し、認証設定(authorization)を行う
- Slack APIの設定画面 > OAuth & Permissions から、OAuth Access Tokenを取得する
Redmine側の設定
- 管理者権限でRedmineにログインし、管理 > 設定 > API の画面で「RESTによるWebサービスを有効」にチェックして有効にする
- 個人設定 > APIアクセスキーの画面で、 APIアクセスキーを取得する
環境変数にトークンを設定する
トークンはコードにベタ書きでも使用できますが、環境変数に設定する方がセキュリティ面で安全です。
python-slackclientの公式ドキュメントではこの方法を推奨しています。
環境変数を設定する方法やコマンドはOSに合わせて適宜変えてください。
Linux,Macの場合
$ export SLACK_TOKEN='your token'
$ export REDMINE_TOKEN='your token'
WindowsのPowerShellの場合
> $env:REDMINE_TOKEN = 'your redmine token'
Windowsのコマンドプロンプトの場合
> set REDMINE_TOKEN=your redmine token
内容
Redmineから取得してきたチケットの情報を、Slackへ投稿します。
import os
from redminelib import Redmine
from slackclient import SlackClient
# 環境変数からトークンを取得
slack_token = os.environ["SLACK_TOKEN"]
redmine_token = os.environ["REDMINE_TOKEN"]
# クライアントインスタンスの作成
redminecliant = Redmine('http://your_redmine_url', key=redmine_token)
slackclient = SlackClient(slack_token)
# 投稿用パラメータを設定
channel = "general"
message = dir(redminecliant.issue.get(ticketNumber))
# 投稿
slackclient.api_call(
"chat.postMessage",
channel=channel,
text=message
)
以下のようにSlackに投稿されれば成功です。
Slack APIやRedmine APIはそれぞれ様々な関数が用意されているので、リファレンスなどをご参照ください。
最後に
何か間違いや不明な点があればご指摘ください。