はじめに
久しぶりにPowerAutomateを触ってフローを作ろうとした際、チームのメンションがうまくいかずにかなり困ったのでまとめておきます。
方法
チャネル全体をメンションしたいのであれば、「Microsoft Graph HTTP 要求を送信する」アクションで、
下記エンドポイントを使用します。
POST https://graph.microsoft.com/beta/teams/{teamId}/channels/{channelId}/messages
必要なパラメータ
teamIdとchannelIdが必要ですが、どちらもTeamsのリンクから取得できます。
例えば下記のようなリンクを取得した場合、
https://teams.microsoft.com/l/team/19%aaaaaa%40thread.tacv2/conversations?groupId=12345678-abcd-1234-abcd-abcdef123456&tenantId=99999999-aaaa-bbbb-cccc-123456789abc
teamIdはgroupId=以下、つまり12345678-abcd-1234-abcd-abcdef123456
で、channelIdは19%aaaaaa%40thread.tacv2
の部分です。
channelIdはこれをそのまま入力せず、デコードしましょう。
私はこれで一時間躓きました。
19%aaaaaa%40thread.tacv2
⇒ 19:aaaaaa@thread.tacv2
本文に入れるJSONの構成
GraphAPIを使用してTeamsにメッセージを送る場合、メッセージの中身をJSON形式で渡す必要があります。
渡すJSONには大きく分けて二つの要素があります。
① body
(メッセージの本文)
実際にTeamsに表示されるテキストやHTML形式の内容です。
{
"body": {
"contentType": "html",
"content": "<at id=\"0\">一般</at><br>テスト投稿です。"
}
メンションを含める場合、contentには<at id=\"0\">一般</at>
のようなタグを使いましょう。
<at>
タグを使用することで、だれをメンションするのかを指定できます。
このタグと、後述するmentinos
セクションの内容がセットで初めてメンションとして動作します。
② mentions
(メンションの定義)
メンションの定義部分です。
"mentions": [
{
"id": 0,
"mentionText": "一般",
"mentioned": {
"conversation": {
"id": "19:aaaaaa@thread.tacv2"
}
}
}
]
上述の通り、<at id=\"0\">一般</at>
と書いただけではメンションとして機能しません。
誰をどのIDでメンションするかを、このセクションで定義する必要があります。
mentioned.conversation.id
に、メンション対象のIDを入れます(今回は該当チャンネルのIDを指定してください)。
mentionText
は、body
で<at>
タグに記載した内容と完全に一致させる必要があります。
私はここで30分躓きました。
最終系
{
"body": {
"contentType": "html",
"content": "<at id=\"0\">一般</at><br>これは自動投稿です。"
},
"mentions": [
{
"id": 0,
"mentionText": "一般",
"mentioned": {
"conversation": {
"id": "19:aaaaaa@thread.tacv2"
}
}
}
]
}
おわり
いろいろ調べてチャンネルをメンションする方法はこれしかないと思いましたが、もしより良い実現方法をご存じの方いらっしゃいましたら、教えてください。
久しぶりにPowerAutomateでフローを作成しようとしましたが、アクションが諸々更新されていたり、UI自体がアップデートされていたりで浦島太郎状態でした。
もう少しアップデート情報に気を配っていきたいです…