Slackに貼られたBacklog課題URLからタイトルを教えてくれるHubot

SlackでBacklogの課題を貼り付ける時、URLだとリンク踏んでみないと何の課題かわかりません。

前の現場でRedmineのURLを貼るとタイトル教えてくれるBotがあったので、それのBacklog版を作りました。

事前準備

hubotのインストールとSlackの接続をします。ここだけで長くなってしまうので省略で。

こちらが纏まっています。

HUBOT_SLACK_TOKEN 取得して、ping pongのやりとりできるところまで行っておきます。

qiita.com

開発

パッケージインストール

必要なパッケージをダウンロードしておきます。Backlog接続は本家nulab製のやつを使います。

github.com

$ npm install --save isomorphic-fetch backlog-js

スクリプト配置

hubotにスクリプトを配置します。

CoffeeScript慣れてないので普通のJSで書きました。

以下を <bot-dir>/scripts/backlog.js のように保存します。

hostapiKey の変数は自身の環境の設定に変更してください。

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が裏で情報取って教えてくれます。

f:id:yomon8:20180906183053p:plain

サービス化

最後に自動起動するために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