Microsoft TeamsのIncoming Webhook が廃止になるので、PowerAutomate に移行する

Yossy
2024-09-06
2024-09-06

記事を書こうと思ったら、背景も含め大変詳しい記事を書いていくださっている方がいらっしゃいました。

https://blog.devplatform.techmatrix.jp/blog/teams_workflows_notification/

この記事を見たら解決してしまうのですが、私の要求事項を加えて補完的な記事を書いてみようと思います。

(1) PHP で処理する必要がある
(2) メンションを付ける

という2点について、補完的に書いてみようと思います。

(1) PHP で処理するには

元の記事では、python で記述されていたので、PHP 用に書き変えます。
JSON は、直接書かずに、PHPの配列として記述して、json_encode で JSON に変換するようにしました。

<?php
// Webhook POST URL
$url = '★★★';
// メッセージ
$message = <<< EOT
PHP から送信_1行目\n
PHP から送信_2行目\n
EOT;
// adaptive card の JSON データを作成
$data = json_encode (
    [
        "type" => "message",
        "attachments" =>  [
            [
                "contentType" => "application/vnd.microsoft.card.adaptive",
                "content" => [
                    "type" => "AdaptiveCard",
                    "body" => [
                        [
                            "type" => "TextBlock",
                            "text" => $message,
                        ]
                    ]
                ]
            ]
        ]
    ]
);

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

if ($statusCode == 200 || $statusCode == 202) {
    echo('メッセージが送信されました');
} else {
    echo('エラーが発生しました');
}


(2) メンションを付ける

前のコードの「メッセージ」と「 adaptive card の JSON データを作成」部分にメンションを送信するための情報をを書き加えます。

// メッセージ
$message = <<< EOT
<at>replaceName</at>\n
PHP から送信_1行目\n
PHP から送信_2行目\n
EOT;
// adaptive card の JSON データを作成
$data = json_encode (
    [
        "type" => "message",
        "attachments" =>  [
            [
                "contentType" => "application/vnd.microsoft.card.adaptive",
                "content" => [
                    "type" => "AdaptiveCard",
                    "body" => [
                        [
                            "type" => "TextBlock",
                            "text" => $message,
                        ]
                    ],
                    "msteams" => [
                        "entities" => [
                            [
                                "type" => "mention",
                                "text" => "<at>replaceName</at>",
                                "mentioned" => 
                                [
                                    "id" => "t.yoshikawa@future-s.com",
                                    "name" => "(表示名)",
                                ]
                            ]
                        ]
                    ]
                ]
            ]
        ]
    ]
);


追加した、ポイントとしては、

a.メッセージ内に、メンションを記述する部分を <at> タグで名称指定します。サンプルでは、replaceName としています。

<at>replaceName</at>\n

b.メンションの情報を JSON に加えます。msteams"以下の部分ですね。

・"text" に、メッセージで指定した <at> タグ部分の名前と完全一致させる。
・"id" に、Teams のログインID(メールドレス)を指定する。
・"name" にメッセージに表示する名前を指定する。

とすることで、メンション付きで通知が送信できました。