日々ろぐ

人に優しく٩( 'ω' )و

Power Automate から Microsoft Graph を使って Teams にチャネルメンションする

タイトルの通り。

なんでチームメンション、チャネルメンションはサポートされてないの??

背景

Power Automate から Teams へのユーザーメンションはサポートされてるけど、全体へのメンションはサポートされていないという話があって、どうにか出来ないかと思ってやってみた次第です。
なかなか情報が少ないのよ。。

下準備

Microsoft Graph で API を使う準備をします。
Azure ポータルから、 [Azure Active Directory] - [アプリの登録] - [新規登録] と進み、今回 API を扱うアプリを登録します。
今回のケースでは自身の属するテナントだけを対象にし、リダイレクトも必要ないので、名前以外はそのままで進めます。
f:id:massyuu-d:20210915150739p:plain

登録を終えたら、そのまま [APIのアクセス許可] - [+アクセス許可の追加] と進み、[Microsoft Graph] を選択します。
f:id:massyuu-d:20210915143624p:plain

サインインしたユーザーでアクセスをするので [委任されたアクセス許可] を選択し、[ChannelMessage.Send] にチェックを入れてアクセス許可を追加します。
f:id:massyuu-d:20210915144040p:plain

フローの作成

Power Apps から呼び出して Teams に投稿するイメージで作成します。
チームIDチャネルID が必要になります。
メンション時の表示名のために、 チャネル名 または チーム名 もあると尚良いです。
今回はフローの中で宣言してしまいます。

適当に変数を設定します。
f:id:massyuu-d:20210915145944p:plain

このとき、APIのURLには
https://graph.microsoft.com/v1.0/teams/チームID/channels/チャネルID/messages
を設定します。

次に、[HTTP with Azure AD] コネクタを利用します。

f:id:massyuu-d:20210915150213p:plain

[HTTP 要求を呼び出します] アクションを指定すると、最初はサインインを求められます。
リソースURLにはいずれも
https://graph.microsoft.com
を入力します。 f:id:massyuu-d:20210915151231p:plain

HTTP要求の各項目は以下のように入力します。
f:id:massyuu-d:20210915154626p:plain

方法:POST
要求のURL:APIのURL
ヘッダー
 キー:Content-type
 値:application/json

要求の本文は以下のようになります。

{
    "body": {
        "content": "テストコメント <br /><at id=\"0\">チャネル名</at>",
        "contentType": "html"
    },
    "mentions": [
        {
            "id": 0,
            "mentionText": "チャネル名",
            "mentioned": {
                "conversation": {
                    "id": "チャネルID",
                    "displayName": "チャネル名",
                    "conversationIdentityType": "channel"
                }
            }
        }
    ]
}

ここで、 content が投稿する本文になります。

今回はチャネルメンションで作成していますが、チームメンションの場合は上記内容を以下のように変更します。

・チャネル名の箇所をチーム名へ
・チャネルIDの箇所をチームIDへ
・conversationIdentityTypeの値を channel から team へ

あとはテスト実行してみて、設定したチャネルにチャネルメンション付きで投稿できているかを確認します。
f:id:massyuu-d:20210915155008p:plain

実際の運用を考えると、クライアントアプリ側で投稿先を選択し、フローの中で動的に各種IDを取得して投稿するという形になるかなぁとか考えたりしてます。

参考

docs.microsoft.com

docs.microsoft.com

今日はここまで。