電通総研 テックブログ

電通総研が運営する技術ブログ

Backlogで特定の条件のチケットが起票・更新されたときにだけSlackに通知がほしい…!

はいどーもー!

コミュニケーションIT事業部の宮澤響です!

本記事は電通総研 Advent Calendar 2024 2日目の記事です!
記念すべき1日目である昨日の記事は、小林日菜美さんの「【Salesforce認定アソシエイト試験】知識0から1ヶ月で合格した話」でした!
こちらは単なる学習方法や受験方法の紹介記事ではなく、試験前後に小林さんが実際に見舞われた(誰にでも起こり得そうな)トラブルとその回避方法についても分かりやすくまとまっている記事ですので、同試験を受験予定の方もそうでない方も、ぜひご一読ください!

ということで、本記事では、Power Automateを用いて、Backlogで特定の条件のチケットが起票・更新されたときにだけSlackに通知する方法をご紹介します!

はじめに

ああ…Backlogで特定の条件のチケットが起票・更新されたときにだけ通知がほしい…!

そう思ったこと、ありませんか?
ありますよね?
私はあります!

ですが、以下の公式ドキュメントに記載されている方法では、対象チケットの条件を指定することができず、プロジェクト内のあらゆるチケットの起票・更新が通知されてしまいます。

そのため、例えば「自分が担当者に設定されたチケット」や「優先度が高のチケット」のみを対象としたいケースであっても、Backlogの公式連携機能では実現できません。

とはいえ、上記のようなケースは少なくないと考えています。

そこで、今回は、Power Automateを利用して、上記のようなケースへの対応策をご紹介します。

まずやってみる

大まかな実現方針は以下のとおりです。
最終的に、Backlog -> Power Automate -> Slackの処理フローを実現します。

  • Backlog Webhookを利用して、BacklogからPower Automateにチケット情報を送信する
  • Power Automateのワークフローで条件分岐を設定することで、特定の条件のチケット情報のみをフィルタリングする
  • Power Platform Connectorsを利用して、Power AutomateからSlackにメッセージを送信する

なお、以降の説明は、設定の都合上、上記3項目の逆順で記載します。

SlackへのPower Platform Connectorsの追加

まずはSlackのチャンネルにPower Platform Connectorsを追加します。
(私自身は「チャネル」表記派ですが、Slackは「チャンネル」表記、Power AutomateやTeamsは「チャネル」表記のようですので、本記事ではそれらに合わせて表記します。)

Power Platform Connectorsとは、簡単に言えば、Power AutomateをはじめとするMicrosoft社のローコードツールと、Slackなどの外部アプリケーションとを連携させるためのツールです。

なお、ワークスペースにPower Platform Connectorsがインストールされていない場合は、Slack ワークスペースにアプリを追加するを参考に、事前にインストールする必要があります。

  1. Power Platform Connectorsの追加

    1. チャンネル右上の「︙」から「チャンネル詳細を開く」を押下します。

    2. 「インテグレーション」タブにある「アプリを追加する」を押下します。

    3. Microsoft Power Platform Connectors」を探し、「追加」を押下します。

Power Automateワークフローの作成

次に、Power Automateでワークフローを作成します。
なお、このステップではワークフローの大枠を作成するのみであり、詳細な条件などは後続のステップで作成します。

  1. トリガーの追加
    「要求」コネクタの「HTTP 要求の受信時」というトリガーを追加します。
    少々見つけにくいトリガーなのですが、「HTTP」などと検索すればヒットするかなと思います。

    設定が必要なパラメーターは以下のとおりです。

    • フローをトリガーできるユーザー:誰でも
      ※ここでは誰でもを選択していますが、必要に応じて、セキュリティを考慮したアクセス制限を行うことを推奨します。
  2. アクションの追加
    「Slack」コネクタの「メッセージの投稿 (V2)」というアクションを追加します。
    なお、対象となるSlackワークスペースに対して、これまでに一度もPower Automateを連携させたことがない場合には、こちらのアクションを設定する際に、併せて「接続」も新規作成します。(参考:Power Automate での接続の管理
    設定が必要なパラメーターは以下のとおりです。

    • チャネル名:通知を送信したいチャンネル(プライベートチャンネルの場合はカスタム値を入力)
    • メッセージ テキスト:任意(例:チケットきたでー。
  3. ワークフローの保存
    ここまでの設定で、ワークフローを一旦保存します。
    すると、このタイミングで「HTTP 要求の受信時」トリガーの名称が何故か「manual」に変化し、「HTTP URL」に値が設定されます。
    「HTTP URL」は後続のステップで利用しますので、「URLのコピー」ボタンでコピーしておいてください。

  4. ワークフローの有効化
    「フローの管理」画面に戻り、保存したワークフローを有効化します。
    画面上部の「オンにする」ボタンを押下します。

BacklogへのWebhookの追加

続いて、Backlog側の設定を行います。

  1. Webhookの追加

    1. 対象となるBacklogプロジェクトの「プロジェクト設定」から「インテグレーション」を選択し、「Webhook」の「設定」ボタンを押下します。

    2. 「Webhookを追加する」ボタンを押下します。

    3. Webhookの設定値を入力します。
      今回は、以下のように設定します。

      • Webhook名:任意(例:宮澤テスト
      • Webhook URL:先ほどコピーした「HTTP URL」
      • 通知するイベント:課題の追加課題の更新
    4. デフォルト(「課題の追加」が選択された状態)のまま、実行テスト欄の「実行」ボタンを押下します。
      ダイアログが表示されるので、「OK」ボタンを押下します。
      ここまでの設定に不備がなければ、Slackの指定したチャンネルに以下のような通知が送信されるはずです。

    5. 「Webhookを追加する」ボタンを押下します。

  2. リクエススキーマの取得

    1. Webhook一覧に戻り、「送信履歴」タブを押下します。

    2. 先ほど実行ボタンを押下した時刻の項目の「すべて表示」を押下します。

    3. 最下行のJSON(リクエスト)をコピーします。

Power Automateワークフローの修正

再びPower Automate側に戻ってきます。

  1. リクエススキーマの生成

    1. 「manual」(トリガー)の「要求本文の JSON スキーマ」の「サンプルのペイロードを使用してスキーマを生成する」を押下し、先ほどコピーしたJSONを貼り付けます。

    2. 「完了」ボタンを押下します。
      すると、「要求本文の JSON スキーマ」が自動で生成されます。

    3. 後続のステップで担当者のユーザーIDを利用するため、assignee{}内に以下のJSONを挿入します。

"type": "object",
"properties": {
    "userId": {
        "type": "string"
    }
}

  1. 条件の指定
    ここでは、「自分が担当者に設定されていること」を条件としたいと思います。

    1. 「manual」と「メッセージの投稿 (V2)」の間に、「Control」コネクタの「条件」というアクションを追加します。
      そのまま検索してもヒットしない場合には、ランタイムを「組み込み」に絞った状態で検索するとヒットしやすいかなと思います。

      設定が必要なパラメーターは以下のとおりです。

      • Condition expression:(後続のステップで詳しく説明します。)
    2. 左側の「値を選択してください」にカーソルを合わせた際に表示される雷マークのボタンを押下します。

    3. 「See more」を押下します。

    4. assigneecategoryの上にあるuserIdを押下します。
      userIdは複数存在するため、上記位置のuserIdを選択するようにしてください。

    5. 右側の「値を選択してください」欄に、自分のBacklogのユーザーIDを入力します。
      なお、ユーザーIDはBacklogの個人設定画面から確認可能です。

    6. 設定内容を確認します。
      ミスなく設定できていれば、以下のような状態となっているはずです。
      特に、Code viewの7行目が@triggerBody()?['content']?['assignee']?['userId']となっているかを確認しておいてください。
      (異なるuserIdを選択してしまった場合にはこちらの値が異なって表示されているかと思います。)

    7. 「メッセージの投稿 (V2)」を「True」ブロックの中に移動します。

これで全ての設定は完了です!

実行結果

自分を担当者に設定したチケットを起票したところ、無事に通知が届きました!

なお、スクリーンショットなどは省略しますが、具体的な通知条件の一例については以下のとおりです。
(通知するイベント:課題をまとめて更新については、リクエススキーマの形式が大きく異なるため、ここまでの設定では対応できていません。)

条件 通知の有無
「担当者:自分」のチケットを起票した場合 あり
「担当者:自分以外」のチケットを起票した場合 なし
「担当者:自分」のチケットの内容(詳細、種別、状態、など)を更新した場合 あり
「担当者:自分以外」のチケットの内容(詳細、種別、状態、など)を更新した場合 なし
「担当者:自分」のチケットを「担当者:自分以外」に更新した場合 なし
「担当者:自分以外」のチケットを「担当者:自分」に更新した場合 あり

おまけ(Teamsへの通知)

Microsoft Teams」コネクタの「チャットまたはチャネルでメッセージを投稿する」というアクションを利用することで、Teamsに通知を送ることも可能です。

おわりに

本記事では、Power Automateを用いて、Backlogで特定の条件のチケットが起票・更新されたときにだけSlackに通知する方法をご紹介しました。

工夫した点、というほどでもないですが、ポイントとしては、Power Automateワークフローの修正のところでassigneeの情報を追記したように、フィルタリングに利用したい条件に応じてリクエススキーマを修正する点が挙げられるかなと思います。

なお、私自身も、現在携わっている案件において、実際にこちらの方法を個人的に利用しています。
(以下のようにメンションとリンクを付与した上で通知させています。)
(余談ですが語尾は「ぇー」「しー」「でー」「えふー」「じぇー」「ぉー」「ゅー」「わい」の中からランダムに選択されます。)

さて、電通総研 Advent Calendar 2024 3日目となる明日の記事は、井手稚菜さんの「電通総研IT 文系出身 新卒3年目社員の働き方紹介」です!
お楽しみに!

最後までお読みいただき、本当にありがとうございました!


執筆:@miyazawa.hibiki、レビュー:@nakamura.toshihiro
Shodoで執筆されました