ご安全に!角田です。
このエントリは、Backlog Advent Calendar 2018の26日目(勝手にやっているだけ)です。
この記事でやること
先の記事 でGAS使って興が乗ったので、ついでに期限切れのタスクをSlackに通知するBacklog警察もGASで実装してしまおうと思います。
よろしくお願いします。
🔑BacklogのAPIキー発行
個人設定 - API から、Backlog警察用のAPIキーを発行します。管理用のユーザとかでやるのが無難でしょうか。
🖇SlackのIncoming Webhook設定
SlackのアプリにIncoming Webhookを追加します。
WebhookのURLができました。
💨GASを書く
function BacklogPolice() { var response = fetchBacklogIssues(); postSlack(JSON.parse(response)); } var backlogNamespace = 'your_backlog_namespace'; var backlogUrl = 'https://' + backlogNamespace + '.backlog.jp/'; function fetchBacklogIssues() { var baseUrl = backlogUrl + 'api/v2/issues'; var apiKey = 'your_backlog_api_key' // 取得対象のプロジェクトIDのリストを指定 var projectIds = [n]; var statusIds = [0, 1, 2, 3]; var sysdate = new Date(); sysdate.setDate(sysdate.getDate() - 1); var params = { 'apiKey': apiKey, 'dueDateUntil': formatDate(sysdate) }; for (var i = 0; i < projectIds.length; i++) { params['projectId[' + i + ']'] = projectIds[i]; } for (var i = 0; i < statusIds.length; i++) { params['statusId[' + i + ']'] = statusIds[i]; } var paramString = ''; for (var key in params) { if (0 < paramString.length) { paramString += '&'; } paramString += key + '=' + params[key]; } return UrlFetchApp.fetch(baseUrl + '?' + paramString); } function postSlack(issues) { if (issues.length <= 0) { return; } var baseUrl = 'your_slack_incoming_webhook_url'; var headers = { 'Content-Type': 'application/json' }; // ここはお好みでいい感じにカスタマイズしてください! var params = { 'channel': '#backlog_notify', 'username': 'Backlog警察', 'icon_emoji': ':backlog:', 'text': createPostMessage(issues), } var options = { 'method': 'POST', 'headers' : headers, 'payload': JSON.stringify(params) }; UrlFetchApp.fetch(baseUrl, options); } function createPostMessage(issues) { var message = '<!channel> Backlogのタスクが期限切れになっています!速やかにタスクを処理するか、期限日を調整してください。\n'; for (var i = 0; i < issues.length; i++) { var issue = issues[i]; message += '[' + issue.issueKey + ']: '; message += '<' + backlogUrl + 'view/' + issue.issueKey + '|' + issue.summary + '>'; message += '[' + issue.status.name + '], '; message += formatDate(new Date(issue.dueDate)) + ', '; message += issue.assignee.name + '\n'; return message; } } function formatDate(date) { var format = 'YYYY-MM-DD'; format = format.replace(/YYYY/g, date.getFullYear()); format = format.replace(/MM/g, ('0' + (date.getMonth() + 1)).slice(-2)); format = format.replace(/DD/g, ('0' + date.getDate()).slice(-2)); return format; }
🔫GASのトリガーを追加
💪できあがったものがこちらになります
よかったですね。
いやよくないですね。あまりBacklog警察にはお世話になりたくないものです!