LoginSignup
6
7

Power Automate でチームやチャネルにメンションする

Posted at

はじめに

Power Automate でこれまでできなかった、チーム宛てのメンションやチャネル宛てのメンションを、TeamsコネクタのHTTPリクエストを使用して実現します。

この方法はプレミアムコネクタこそ必要ないものの、少し難しいアクションを使用しますので、本当に必要かどうかは慎重にご判断の上ご利用ください。

これまで

Power Automate のMicrosoft Teamsコネクタであつかえるメンションは、個人宛てのメンションとタグメンションの2種類だけでした。
image.png

<at>タグで何とか頑張ってみても、チームやチャネルに対するメンションはできませんでした。
image.png

参考資料

Microsoft Graph API を使用することで、これまでできなかったことができるようになります。
下記のページの2つの例を参考に、Power Automate からリクエストを送信します。


  • 例 7: @mention チャネル・メッセージ内のチャネル
  • 例 8: @mention チャネル メッセージ内のチーム

やりかた

このチームを使って実演します。
既定で作成される一般(Genaral)チャネルに加えて、3種類すべてのチャネルを用意しています。

image.png

情報の取得

メッセージの投稿やメンションのために、チームとチャネルそれぞれのIdが必要になります。

今回はすべての種類のチャネルでメンションが遅れるか確認するために、すべてのチャネルの情報を取得します。
下記のアクションで、チームの情報とそのチームのチャネルの一覧の情報を取得します。

  • チームを取得
    image.png

  • チャネルの一覧を取得
    image.png

今回は取得したすべてのチャネルを対象にするため、そのまま「それぞれに適応する(Apply to each)」を使用します。
image.png

送信先のチャネルを絞り込みたい場合は、アレイのフィルター処理を使うなどするとよいと思います。
image.png

チームメンション

取得した情報を使って、「Microsoft Graph HTTP 要求を送信する」アクションを使用することで、チームメンションを行います。
image.png

URI
https://graph.microsoft.com/v1.0/teams/@{outputs('チームの取得')?['body/id']}/channels/@{items('それぞれに適用する')?['id']}/messages

チーム宛てのメンションはconversationIdentityTypeteamにします。

本文
{
    "body": {
        "contentType": "html",
        "content": "<div><div><at id=\"0\">@{outputs('チームの取得')?['body/displayName']}</at>&nbsp;チームメンションができるよ!</div></div>"
    },
    "mentions": [
        {
            "id": 0,
            "mentionText": "@{outputs('チームの取得')?['body/displayName']}",
            "mentioned": {
                "conversation": {
                    "id": "@{outputs('チームの取得')?['body/id']}",
                    "conversationIdentityType": "team"
                }
            }
        }
    ]
}

この本文で大事な点が3つあります。

  1. mentionscontentで指定しているidを揃える
  2. mentionText<at>タグ内のテキストを揃える
  3. チームのIdを使用する

image.png

ここを守っていれば、メンションとしての表示名を、チーム名以外にすることもできるようです。

また、displayNameはあってもなくても問題ありませんでした。
image.png

チャネルメンション

チャネルメンションを行う場合も、「Microsoft Graph HTTP 要求を送信する」アクションを使用します。
image.png

URL
https://graph.microsoft.com/v1.0/teams/@{outputs('チームの取得')?['body/id']}/channels/@{items('それぞれに適用する')?['id']}/messages

チャネル宛てのメンションはconversationIdentityTypechannelにします。

本文
{
    "body": {
        "contentType": "html",
        "content": "<div><div><at id=\"0\">@{items('それぞれに適用する')?['displayName']}</at>&nbsp;チャネルメンションもできるよ!</div></div>"
    },
    "mentions": [
        {
            "id": 0,
            "mentionText": "@{items('それぞれに適用する')?['displayName']}",
            "mentioned": {
                "conversation": {
                    "id": "@{items('それぞれに適用する')?['id']}",
                    "conversationIdentityType": "channel"
                }
            }
        }
    ]
}

こちらも注意点はチーム宛ての場合と同様です。

結果

結果は以下の通り、すべてのチャネルでチーム・チャネルメンションをそれぞれ行うことができました。
2024-05-12_00h44_53.png
2024-05-12_00h45_09.png
2024-05-12_00h45_14.png
2024-05-12_00h45_20.png

ちょっと不思議な結果

本来、チームメンションができないはずの、プライベートチャネル・共有チャネルでも、Graph API を使うとチームメンションができてしまうようです。
だからと言ってこれといった用途や不都合は思いつきませんが、仕様の違いには注意しておきましょう。
image.png

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7