こんにちは。おいかわです。
今回も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回だけお知らせするのですが、期限切れの課題を毎日通知し続けても良いかもしれませんね。