夢が広がるMackerelのTeams通知

これは [Mackerel Advent Calendar 2024](https://qiita.com/advent-calendar/2024/mackerel) の22日目の記事です。

## 2024年 Teams通知の仕様変更
MackerelにはアラートをTeamsへ通知する機能がありますが、今年のMicrosoftによるTeams側の受信仕様の変更により、これまでの方式であるIncoming Webhook方式が使えなくなりました。
早速Mackerelさんでも仕様変更に対応したようで、新しいワークフロー方式に対応していました。
[こちら](https://mackerel.io/ja/docs/entry/howto/alerts/microsoft-teams)の手順で試してみたところ、ちゃんとteamsに通知されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/9977c2c4-cc2d-b68c-fbb7-9e7d1ce5bfd6.png)

## どういう仕組みなのか
このワークフロー方式によるteams通知というのは、どうやら裏でMicrosoftのオートメーションサービスPowerAutomateが動いているようで、実際にPowerAutomateのサイトを見に行くと、マイフローとして作成されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/7b82923c-ceea-c202-787a-f34e97c840e2.png)

このフローの中身を覗いてみると、
Webhookで受信したコンテンツをAdaptiveCardというJsonデータの方式でTeamsのチャネルに投稿していることが分かりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/29d72b55-1410-b0c9-ea7d-2be97dbda187.png)

## これなら色んなことが出来る
この仕組みを理解した時に、夢が広がりました。PowerAutomateは強力な自動化ツールであり、ノーコードで色んな自動化フローを作れます。
アラート通知がPowerAutomateの仕組みに入ってくるなら、アラートをきっかけに色んなフローを展開できるじゃないか...と。

## Teams通知を拡張してみる
Mackerel標準のTeams通知は以下の通りですが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/fd6a9e03-dfa5-5bf7-4de5-d865123e5445.png)

これを以下のような**双方向**のフローに拡張してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/29e6f642-2bc8-d085-042f-87c5ad67f9f2.png)

##### ①PowerAutomateで「アダプティブ カードを投稿して応答を待機する」アクション追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/fa276369-271b-a3ef-cb16-c7306c932ece.png)
メッセージには以下のようなjsonを追記
```
{
    "type": "AdaptiveCard",
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.4",
    "body": [
        {
            "type": "ImageSet",
            "images": [
                {
                    "type": "Image",
                    "size": "Medium",
                    "url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizl0stbZDuXfC5d82z8wiKa3Z_msRxq9ByGG5OBNLx3ZMnj9yiyxJtMVohJhcYK5MpmEw5QvlgRamRnvdeHcT2R8cfLMWddi_JZ-99r_kKyxhjnODlFEKQcD71svPR-sGZvdB33vwybCE/s800/christmas_mark01_santa.png"
                }
            ]
        },
        {
            "type": "TextBlock",
            "text": "このアラート対応するひと～?",
            "wrap": true,
            "size": "Large",
            "weight": "Bolder"
        },
        {
            "type": "ActionSet",
            "actions": [
                {
                    "type": "Action.Submit",
                    "title": "私がやる"
                }
            ]
        }
    ]
}
```

##### ②PowerAutomateで「チャネル内のメッセージで応答します」アクション追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/ba22226c-f809-44f0-92fc-9940162fda6a.png)
メッセージIDでは元のアラートメッセージのID、メッセージでは応答者の名前を取得してメッセージ追記。

##### ③ SharePointのチームサイトでアラート対応履歴用のリストを作成
- 新規リストの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/13530374-ffe9-c8a3-9270-4bc3725fdc23.png)
- 「アラート内容」と「対応者」の2つの列を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/be8be6b3-b36c-4d55-973b-57d4f20f86fb.png)

##### ④ PowerAutomateで「項目の作成」アクションを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/e4020274-1545-4789-2dc8-3d69231879c3.png)
パラメーターの「タイトル」「アラート内容」には元のアラート通知の対応する情報を割り当て、「対応者」には応答者を割り当てる。

フローが完成しましたので保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/6c55cbe3-a249-6d81-7701-9284c4027a25.png)


## アラートを送信してみる

Mackerelでteamsの通知テスト実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/6b416b5c-4754-6a4e-7ffa-d4c3b7936e73.png)

通常の通知のあとに...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/708f0b29-9704-2129-b79f-cbdc2b10ff8d.png)

アラート対応者を求める呼びかけが来ました。アドベントカレンダーということで素敵なクリスマス仕様のアラートプレゼントです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/8059002f-057c-d382-64b3-16e0ce1c5725.png)

「私がやる」ボタンを押すと...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/340aea3e-f0ea-1f77-11ca-ea9da2a897d9.png)
アラートメッセージに返信する形で、対応者の名前とメッセージが届きました。
これを見た人は対応者に敬意を表してハートなどのリアクションをすると良いですね。

Sharepointリストの方を見てみると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/477254/8c42a6e7-a266-4450-7cb2-add9c707ef89.png)
アラート内容としてアラート通知チャットのリンクと、対応者が記録されていました。

成功しましたっ!!

実際に運用するには、回復通知も考慮する必要があるでしょう。
また、アラート通知の中身をjsonで読み取ればもっと拡張が出来るかもしれません。
夢が広がりました。