目次
はじめに
PHPを使って、Teamsへ通知するBotを作成する方法です。
メンションを付けて、対象を指定すること方法も記載します。
環境
この記事は、以下の管理人の検証環境にて記事にしています。
PHP | 8.1 |
ソースコードを取得する場合は、以下のURLから取得できます。
Webhookの準備
Teamsへの通知Botを作るには、まず「チーム」の「コネクタ」で「Incoming Webhook」サービスを追加する必要があります。
では、早速やっていきましょう!
チーム選択後の右上にある「・・・」をクリックするとメニューが開きます。
「コネクト」を選択してください。
サービスの一覧から「Incoming Webhook」を探し、追加ボタンをクリックしてください。
ちなみに追加後は、構成というボタンに変わります。
「Incoming Webhook」を開くと、通知するBotの名称とアイコンのアップロードが表示されます。名称は必須項目です。
設定が完了したら、作成を押してください。
ちなみに、この情報は後で変更が可能です。
というか、一つのチャンネルに一つしか作れないっぽいです。
作成が完了すると、WebhookのURLが発行されます。
このURLは後で使うので、忘れずにメモしてください。
これで通知先の準備は完了です。
PHPで通知する
Webhookの準備ができましたら、PHPを使ってTeams宛に通知を行ってみます。
テキストをPOSTする
まずは「Hellow Team」というテキストを通知してみます。
curlを使って、POSTでwebhook宛に送信します。
これが基本の動作になります。
$url = 'https://....';// Incoming Webhook のURL $data = array( 'text' => 'Hellow Teams' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $http_str = curl_exec($ch); curl_close($ch); echo '送信しました';
■結果
テキストに装飾をする
メッセージに装飾を付けて送信します。
「**太文字**」「_イタリック_」「- すいか」のようなMarkdownで設定することができます。
ベタなJSONを変数に突っ込んでるので、フォーマットのブレを整える為に、「json_decode」で配列に書き直してから、「json_encode」で再度JSONに戻す作業を行います。
ココがポイント
文字の「改行(\r)」や「$schema」を使う時には、「\(バックスラッシュ)」を使う必要があります。
$data = <<<TEAMSMESSAGE { "type": "message", "attachments": [{ "contentType": "application/vnd.microsoft.card.adaptive", "content": { "\$schema": "https://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "TextBlock", "text": "これは **太文字** です" }, { "type": "TextBlock", "text": "これは _イタリック_ です" }, { "type": "TextBlock", "text": "- すいか \\r- メロン \\r", "wrap": true }, { "type": "TextBlock", "text": "1. Macbook\\r2. Mac Mini\\r", "wrap": true }, { "type": "TextBlock", "text": "リンクの設定 → [Adaptive Cards](https://adaptivecards.io)" } ] } }] } TEAMSMESSAGE; $data = json_decode($data);// 念のためフォーマットを揃えるためにデコードする
■結果
メンションを送る
メンションが送れなければ、通知Botの魅力が80%ダウンしてしまいます。
ようやくWebhookでも対応しました。
「<at>カバノキ</at>」対象を設定して、「entities」で対象と対象IDと表示名を設定します。
当然ですが、複数のメンションも設定が可能です。
メンションを送る為には、ユーザーのIDを必要になります。「@[*****].onmicrosoft.com」のアドレスがIDになります。
$data = &lt;&lt;&lt;TEAMSMESSAGE { "type": "message", "attachments": [{ "contentType": "application/vnd.microsoft.card.adaptive", "content": { "type": "AdaptiveCard", "body": [ { "type": "TextBlock", "size": "Medium", "weight": "Bolder", "text": "メンションを送信できるかのテストです" }, { "type": "TextBlock", "text": "こんにちは &lt;at&gt;カバノキ&lt;/at&gt;, &lt;at&gt;カバノキ2&lt;/at&gt;" } ], "\$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.2", "msteams": { "entities": [ { "type": "mention", "text": "&lt;at&gt;カバノキ&lt;/at&gt;", "mentioned": { "id": "[email protected]", "name": "カバノキ" } }, { "type": "mention", "text": "&lt;at&gt;カバノキ2&lt;/at&gt;", "mentioned": { "id": "[email protected]", "name": "カバノキ2" } } ] } } }] } TEAMSMESSAGE; $data = json_decode($data);// 念のためフォーマットを揃えるためにデコードする
■結果
画像を送る
画像も送ることができます。
外部サーバーの画像も設定可能です。
$data = &lt;&lt;&lt;TEAMSMESSAGE { "type": "message", "attachments": [{ "contentType": "application/vnd.microsoft.card.adaptive", "content": { "type": "AdaptiveCard", "body": [ { "type": "Image", "url": "https://picsum.photos/200/200?image=110", "msTeams": { "allowExpand": true } } ], "\$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.2" } }] } TEAMSMESSAGE; $data = json_decode($data);// 念のためフォーマットを揃えるためにデコードする
■結果
メッセージのテンプレート
今回は解説しませんが、様々なメッセージのテンプレートも用意されています。
気になる方は下記の参考URLをご覧ください。
メッセージカードのテンプレート
https://messagecardplayground.azurewebsites.net/
現状はレガシーにしか対応していないようです。
Github
Microsoft Frow
Trello
さいごに
PHPを使って、SlackみたいにTeamsにも通知を送れないかなぁと調べる事一年前。
その時点で通知を送る事ができると判明したものの、まだMicrosoftも手探りなのか、メンションの送信することができませんでした。
久々に調べてみたら、メンションも使えるようになってる!というわけで、記事にしてみました。
はたして、この通知機能は何使えるのでしょうか?
今日はこの辺で~