Power Automate から Microsoft Graph を使って Teams にチャネルメンションする
タイトルの通り。
なんでチームメンション、チャネルメンションはサポートされてないの??
背景
Power Automate から Teams へのユーザーメンションはサポートされてるけど、全体へのメンションはサポートされていないという話があって、どうにか出来ないかと思ってやってみた次第です。
なかなか情報が少ないのよ。。
下準備
Microsoft Graph で API を使う準備をします。
Azure ポータルから、 [Azure Active Directory] - [アプリの登録] - [新規登録] と進み、今回 API を扱うアプリを登録します。
今回のケースでは自身の属するテナントだけを対象にし、リダイレクトも必要ないので、名前以外はそのままで進めます。
登録を終えたら、そのまま [APIのアクセス許可] - [+アクセス許可の追加] と進み、[Microsoft Graph] を選択します。
サインインしたユーザーでアクセスをするので [委任されたアクセス許可] を選択し、[ChannelMessage.Send] にチェックを入れてアクセス許可を追加します。
フローの作成
Power Apps から呼び出して Teams に投稿するイメージで作成します。
チームID
と チャネルID
が必要になります。
メンション時の表示名のために、 チャネル名
または チーム名
もあると尚良いです。
今回はフローの中で宣言してしまいます。
適当に変数を設定します。
このとき、APIのURLには
https://graph.microsoft.com/v1.0/teams/チームID/channels/チャネルID/messages
を設定します。
次に、[HTTP with Azure AD] コネクタを利用します。
[HTTP 要求を呼び出します] アクションを指定すると、最初はサインインを求められます。
リソースURLにはいずれも
https://graph.microsoft.com
を入力します。
HTTP要求の各項目は以下のように入力します。
方法: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 へ
あとはテスト実行してみて、設定したチャネルにチャネルメンション付きで投稿できているかを確認します。
実際の運用を考えると、クライアントアプリ側で投稿先を選択し、フローの中で動的に各種IDを取得して投稿するという形になるかなぁとか考えたりしてます。
参考
今日はここまで。