mito’s blog

IT技術メインの雑記。思い立ったが吉日。

[Backlog] [GoogleAppsScript] 本日が期限日だけど完了していない課題をSlackやTeamsに通知する

はじめに

Backlogのインテグレーションでは、本日が期限日だけど完了していない課題を通知出来ません。そのため、GoogleAppsScriptで課題にコメントを登録するコードを作成し、Backlogのインテグレーションで通知できるようにしました。
GoogleAppsScriptを選んだ理由は、触ってみたかったのとトリガーの定時実行があるからです。


サンプルコード

サブドメインやプロジェクトIDは、Backlogを開いたURLに含まれています。
検索する課題のステータスのIDはデフォルトとし、完了していない課題は未処理・処理中・処理済みとしています


function func_backlog() {
  // 課題一覧を取得するためのパラメータ
  let parameter_get = {
    "method" : "GET",
    "contentType": "application/json",
  };

  // 本日の日付を取得する
  let today = Utilities.formatDate(new Date(), "JST","yyyy-MM-dd")

  // 取得したい課題の検索条件をURLの後に記載する
  let issues_url = "https://【サブドメイン】.backlog.com/api/v2/issues?apiKey=【API Key】&projectId[]=【プロジェクトID】&statusId[]=1&statusId[]=2&statusId[]=3&dueDateSince=" + today + "&dueDateUntil=" + today;

  // 課題一覧を取得する
  let rslt = UrlFetchApp.fetch(issues_url, parameter_get);

  // JSONにパースする
  let json_rslt = JSON.parse(rslt);

  // 課題にコメントを登録するパラメータ
  let parameter_post = {
    "method": "POST",
    "contentType": "application/x-www-form-urlencoded",
    "payload" : {
      // 任意のメッセージに変更してください
      "content" : "本日が期限日です",
    },
  };

  // 複数の課題に対応
  for (let i = 0; i < json_rslt.length ; i++) {
    // コメントを登録したい課題を指定する
    issues_comments_url = "https://【サブドメイン】.backlog.com/api/v2/issues/" + json_rslt[i]["issueKey"] + "/comments?apiKey=【API Key】";

    // 課題にコメントを登録する。rsltは無くてもいい
    rslt = UrlFetchApp.fetch(issues_comments_url, parameter_post);
    
    // ログ出力用。無くてもいい
    console.log("期限日 " + today + " のタスク: " + json_rslt[i]["issueKey"]);
  }
}


課題の検索条件について

  • projectId
    • 複数のプロジェクトIDを指定できます
    • 複数の指定例(&は検索条件をorでつなぐイメージ)
      • projectId=100001&projectId=100002&projectId=100003
  • statusId
    • デフォルト設定の場合、1=未処理、2=処理中、3=処理済みです
    • 複数の指定例(&は検索条件をorでつなぐイメージ)
      • statusId=1&statusId=2&statusId=3
  • dueDateSince
    • 期限日の範囲(開始日)を指定する
  • dueDateUntil
    • 期限日の範囲(終了日)を指定する
    • dueDateUntil以前の課題をすべて検索したい場合は、dueDateSinceを指定しない


BacklogのAPI Key取得手順

API Keyを発行した、個人アカウント名でコメントが書かれます。そのため、あたかもその個人から言われたと感じる恐れがあり、人を連想しないアカウント(例えばシステム、またはチコちゃん)でAPI Keyの発行することをお勧めします。


Backlogのインテグレーション設定

下記を参考に設定します。SlackやTeamsなどがあります。


GoogleAppsScriptのトリガー実行設定

GUIでさっと時間や日、週指定などが設定でき、なんならログも保存されます。便利ですね。