こんにちは。おいかわです。
今回もBacklogです。Backlogには期限が切れる課題をメールで通知する機能がありますが、埋もれてしまい見なくなってしまいがちです。通知といえばSlackです!Slackならみんな見てくれるんです!今回はメンションも付けて名指ししてやります!
動作環境
- CentOS 6.4
- PHP5.6
前準備
- BacklogアカウントとSlackアカウントは一致させておく必要があります。
- BacklogAPIの使用に必要なAPIキーを取得しておきます。Backlogの個人設定→API→新しいAPIキーの発行 から取得できます。
スクリプトの実装
// slack通知クラス require "slack_util.php"; // 課題一覧の取得API $base_url = "https://your-backlog-domain-name.backlog.jp/api/v2/issues?"; $api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; $projectId = "1234"; const STATUS_COMPLETE = 4; // パラメータをセット $params = array( 'apiKey' => $api_key, 'projectId[0]' => $projectId, 'dueDateSince' => date("Y-m-d"), 'dueDateUntil' => date("Y-m-d", strtotime("+1 day")) //実際の期限日より+1日しないと取れない ); // APIのURLを構築する $url = $base_url.http_build_query($params); // API実行 $result = file_get_contents($url); // 取得したJSONをデコード(オブジェクト形式) $issues = json_decode($result, false); $slack = new SlackUtil(); $message = "下記の課題の期限が今日までですよ。完了させるか期限を延ばすか選ぶが良い。\n"; foreach($issues as $issue){ if ($issue->{status}->{id} != STATUS_COMPLETE) { // 担当者が設定されていない場合は登録者へ通知する if (empty($issue->{assignee}->{userId})) { $message .= "<@".$issue->{createdUser}->{userId} . ">"; } else { $message .= "<@".$issue->{assignee}->{userId} . ">"; } $message .= ":bow:\n"; $message .= $issue->{summary}; $slack->send($message); $message = ""; } }
BacklogAPIを使って課題の検索、情報の取得を行っています。メンション付ける場合は<>で囲む必要がありますよ。
Slack通知クラスも公開します!(作ったのは弊社のおにぎりエンジニアです)
class SlackUtil { const CHANNLE_NAME = '#backlog-notify'; const USER_NAME = 'backlog-admin'; const ICON = ':golf:'; const SLACK_TOKEN = 'xxxxxxxxxxxxxxxxxx'; public function send($message='', $channle=SELF::CHANNLE_NAME, $userName=SELF::USER_NAME, $icon=SELF::ICON, $token=SELF::SLACK_TOKEN) { $fields = array( 'channel' => $channle, 'username' => $userName, 'icon_emoji' => $icon, 'text' => $message, ); $payload = "payload=" . json_encode($fields); $url = 'https://your-slack-team.slack.com/services/hooks/incoming-webhook?token='.$token; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_POST, count($fields)); curl_setopt($ch,CURLOPT_POSTFIELDS, $payload); $result = curl_exec($ch); curl_close($ch); } }
こんな感じで表示されます。
これでバーンダウンチャートも炎上しないで済みます!今回は期限を迎えた課題を1回だけお知らせするのですが、期限切れの課題を毎日通知し続けても良いかもしれませんね。