課題管理のツールとして Backlog は便利なんですが、自分が担当者になった場合や通知対象に含まれた場合にいちいちメールで通知を受けるのは鬱陶しいので、Slack の Direct Message で受け取れるようにしてみました。
こんな感じで、Backlog への課題の追加や更新等があった場合、bot から DM が届きます。
自分宛ての通知のみ DM で来るので、担当者が自分以外の課題に惑わされることがないので安心です。
Hubot で channel 投稿する例は既にいくつかありますが、せっかくなので API Gateway + AWS Lambda でさくっと組んでみました。
2017/08/10: CloudFormation 化しました
Slack API Token の準備
Slack にメッセージを投稿するためには、API Token が必要です。
Slack の Integration で API Token が使える App (Hubot 等) を入れ、API Token をメモしておきます。
既に Hubot を使っているなら、既存の Hubot の API Token をそのまま利用してもOKです。
Backlog API Key の準備
Backlog
Backlog の API にアクセスするため、Backlog 側の API Key を発行し、メモしておきます。
「個人設定」->「API」から辿れます。
Lambda のビルド・S3 への設置
https://github.com/u-minor/backlog2slack からコードを clone し、ビルドします。
yarn install
yarn build
dist 以下に lambda.zip
ができていれば OK です。
作成した lambda.zip を 適当な S3 bucket にアップロードしておきます。
bucket 名と、パスは覚えておきましょう。
CloudFormation でスタックを構築する
この作業で、Lambda 用 IAM Role の作成、Lambda function の作成、API Gateway 関連の設定が自動で行われます。
CloudFormation の Create stack に行き、template 選択で ローカルの cf/stack.yml
をアップロードします。
次に進むとスタック名やパラメータの設定画面になりますので、メモしておいた API Key 等を設定します。
後は、特に何も設定せず次へ進んでいけば OK です。
最後の
I acknowledge that AWS CloudFormation might create IAM resources.
のチェックを入れ忘れないようにします。
Backlog の Webhook に 作成した API を設定する
作成されたスタックの Outputs を確認すると、デプロイした API のベース URL が確認できます。
Backlog の「プロジェクト設定」->「Webhook」に行き、Webhook を追加します。
API のベース URL に /notify
を追加したものを登録します。
うまく行けば、Backlog 課題の通知が Slack に流れてくるはずです。
補足
Backlog ユーザと Slack ユーザの連携は、メールアドレスベースで行っています。
Backlog の更新で通知があった場合、
- Backlog のプロジェクト ID を取得
- Backlog の該当プロジェクトのユーザリストを Backlog API 経由で取得
- Slack のユーザリストを Slack API 経由で取得
- 通知対象の Backlog ユーザ ID から Backlog ユーザのメールアドレスを参照
- Slack ユーザのメールアドレスをサーチし、一致する Slack ユーザを選択
- 通知先の Slack ユーザ ID を特定、DM 通知
といった処理が行われますので、Backlog と Slack のメールアドレスは一致させておく必要があります。