mito’s blog

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

[Backlog] [GoogleAppsScript] 本日が期限日の課題を直接Slackに通知する

はじめに

本日が期限日の課題をGoogleAppsScript(以下、GAS)で直接Slackに通知します。
前回の記事ではBacklogのインテグレーションを利用していましたが、今回はGASのみで実装します。


Slackの設定

以下を参考にしてください。
手順5で表示される Incoming Webhook URL をコードに記載します。

Slack での Incoming Webhook の利用 | Slack


サンプルコード

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

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

  // 本日の日付を取得する
  var 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);

  // 複数の課題に対応
  for (let i = 0; i < json_rslt.length ; i++) { 

    // 通知内容。任意のメッセージに変更してください
    const data = { "text": "期限日は" + today + "です\n" +
                           "タイトル:" + json_rslt[i]["summary"] + "\n" + 
                           "URL:https://【サブドメイン】.backlog.com/view/" + json_rslt[i]["issueKey"]
    }

    // Slackに通知するパラメータ
    const parameter_post = {
      "method": "post",
      "Content-type": "application/json",
      "payload": JSON.stringify(data)
    }

    slack_url = "【SlackのIncoming Webhook URL】";

    // Slackに通知する。rsltは無くてもいい
    rslt = UrlFetchApp.fetch(slack_url, parameter_post);

    // ログ出力用。無くてもいい
    console.log("期限日 " + today + " のタスク: " + json_rslt[i]["issueKey"]);
  }
}


課題の検索条件などは、以下を参考にしてください。

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


その他

Slackのワークフローでも実装できるけど、手間は変わらなさそう。
GAS楽しい。