SlackでBacklogの課題を貼り付ける時、URLだとリンク踏んでみないと何の課題かわかりません。
前の現場でRedmineのURLを貼るとタイトル教えてくれるBotがあったので、それのBacklog版を作りました。
事前準備
hubotのインストールとSlackの接続をします。ここだけで長くなってしまうので省略で。
こちらが纏まっています。
HUBOT_SLACK_TOKEN
取得して、ping pongのやりとりできるところまで行っておきます。
開発
パッケージインストール
必要なパッケージをダウンロードしておきます。Backlog接続は本家nulab製のやつを使います。
$ npm install --save isomorphic-fetch backlog-js
スクリプト配置
hubotにスクリプトを配置します。
CoffeeScript慣れてないので普通のJSで書きました。
以下を <bot-dir>/scripts/backlog.js
のように保存します。
host
と apiKey
の変数は自身の環境の設定に変更してください。
require('isomorphic-fetch'); let backlogjs = require('backlog-js'); // 'xxx.backlog.jp' or 'xxx.backlogtool.com' or 'your package host' let host = 'xxxx.backlog.com'; let apiKey = 'your-api-key'; let backlog = new backlogjs.Backlog({ host, apiKey }); let matchIssue = new RegExp(`https://${host}/view/([\\w]+-[\\d]+)`); let regexpIssue = new RegExp(`${host}/view/`, 'i'); module.exports = function(robot) { robot.hear(regexpIssue, function(msg) { let m = msg.message.text.match(matchIssue); backlog .getIssue(m[1]) .then(data => { msg.send(`Backlog課題は\n\`「${data.summary}」\`\nです`); }) .catch(err => { console.log(err); }); }); };
メッセージ内容の調整
このdata
変数に色々入っているので、デバッグ等で中身見てメッセージは調整してください。
.then(data => { msg.send(`Backlog課題は\n\`${data.summary}」\`\nです`); })
hubot起動
HUBOT_SLACK_TOKENをexportしてhubotにadapterオプションにslackを渡して起動します。
$ export HUBOT_SLACK_TOKEN=<API Token> $ bin/hubot -a slack # 省略 [Thu Sep 06 2018 09:24:00 GMT+0000 (UTC)] INFO hubot-redis-brain: Using default redis on localhost:6379 [Thu Sep 06 2018 09:24:00 GMT+0000 (UTC)] INFO hubot-redis-brain: Data for hubot brain retrieved from Redis
hubotをチャネルに招待
Slackで特定のチャネルにhubotを招待します。
/invite @hubot
後はBacklogの課題のURL貼り付ければ、Hubotが裏で情報取って教えてくれます。
サービス化
最後に自動起動するためにsystemdに登録しておきます。
$ cat start.sh #!/bin/sh cd /home/your-user/mybot export HUBOT_SLACK_TOKEN=<API Token> sudo -E -u your-user bin/hubot --adapter slack
$ cat /etc/systemd/system/mybot.service [Unit] Description = my bot for backlog tasks [Service] ExecStart=/botpath/mybot/start.sh Restart=always Type=simple [Install] WantedBy=multi-user.target
# 定義反映 $ sudo systemctl daemon-reload # 起動 $ sudo systemctl start mybot # ステータス確認 $ sudo systemctl status mybot # 自動起動 $ sudo systemctl enable mybot