ささみ学習帳 - sasami's study book

ささみ学習帳

Microsoft365 や Power Platform について学んだこと・アイデアのメモ

Teams のメッセージへのリアクション をPower Automate クラウドフローで行う【チャネル限定】

(2024/3/14訂正)Xでおいしみさんに正式版Graph APIでも利用可能ということを教えていただきました!

 

 

はじめに

Power Automate クラウドフローでTeamsのチャネルのメッセージにリアクションするする方法です。

 

考え方

Power Automate のMicrosoft Teams コネクタにはリアクションするアクションは用意されていませんが、2024年3月ごろに追加された「Microsoft Graph HTTP 要求を送信する」アクションを使ってGraph APIを呼び出すことでリアクションが可能です。

  • リアクションを設定する
  • リアクションを解除する
  • メッセージのリアクションを取得する

のパターンを確認してみました。

 

【重要】ベータ版のAPIを利用する為運用環境での利用はお勧めしません

今回利用するリアクションのエンドポイントは、2024年3月時点ではbetaでしか利用できません。この為今後仕様が変わったり廃止される可能性があります。

(2024/3/14訂正)Xでおいしみさんに正式版APIでも利用可能ということを教えていただきました!

 

1.メッセージにリアクションする

Graph API の「chatMessage: setReaction」を利用します。 

learn.microsoft.com

アクション解説

[Microsoft Teams] Microsoft Graph HTTP 要求を送信する-リアクションする

  • URI
    • https://graph.microsoft.com/v1.0/teams/{teamid}/channels/{channelId}/messages/{messageId}/setReaction
    • それぞれ下記を指定します。 
      • {teamId}:チームID
      • {channelId}:チャネルID
      • {messageId}:メッセージID
  • メソッド
    • POST
  • 本文
    • 設定するリアクションをJSONで指定します。
    • {
          "reactionType": "🐈"
      }

再実行することでリアクションを上書きできる

こちらはリアクションを解除する事なく再実行で上書きする事ができます。

 

2.リアクションを解除する

Graph API の「chatMessage: unsetReaction」を利用します。 

learn.microsoft.com

アクション解説

[Microsoft Teams] Microsoft Graph HTTP 要求を送信する-リアクション解除

  • URI
    • https://graph.microsoft.com/v1.0/teams/{teamid}/channels/{channelId}/messages/{messageId}/setReaction
    • それぞれ下記を指定します。 
      • {teamId}:チームID
      • {channelId}:チャネルID
      • {messageId}:メッセージID
  • メソッド
    • POST
  • 本文
    • 解除するリアクションをJSONで指定します。
    • {
          "reactionType": "🐈"
      }

 

必ず現在のリアクションを指定する必要がある

本文に必ず現在のリアクションの絵文字を指定する必要があります。未指定の場合はエラーになり、リアクションと異なる絵文字を指定した場合はリアクションは解除されませんでした。

 

3.メッセージのリアクションを取得する

リアクションを解除するために、メッセージに設定しているリアクションを取得する必要があります。設定済みのリアクションはMicrosoft Teamsコネクタの「メッセージの詳細を取得する」アクションで取得できます。

 

フロー概要

Microsoft Teamsコネクタの「メッセージの詳細を取得する」アクションの出力にある"reaction"にメッセージに対するリアクションの情報が格納されています。対象メッセージにリアクションしたすべての人の情報がありますので、自分のリアクションを識別して文字を取得します。

一例としてこんな感じで取得できます。

 

フロー解説

「メッセージの詳細を取得する」アクションのreactionを、idでフィルタリングして識別しています。自分のidはOffice 365 Usersコネクタの「マイプロフィールの取得(V2)」アクションの出力から参照しています。

  • From
    • @{body('メッセージ詳細を取得する')?['reactions']}
  • Filter Query
    • @{item()?['user']?['user']?['id']}
    • is equal to
    • @{outputs('マイ_プロフィールの取得_(V2)')?['body/id']}

 

フィルターで取り出したリアクションから絵文字を抽出しています。

  • 入力
    • @{first(body('アレイのフィルター処理'))?['reactionType']}

 

 

チャットのメッセージへのリアクション

今回利用したsetReaction, unsetReaction はチャットメッセージへのリアクションにも対応しています。しかし、Microsoft Teamsコネクタの"Microsoft Graph HTTP 要求を送信する"アクションでサポートされていない為、EntraIDへアプリケーション登録する事・HTTPコネクタ等のプレミアムコネクタが必要になります。

 

さいごに

Microsoft Teamsコネクタに念願の "Microsoft Graph HTTP 要求を送信する"アクションが追加された事で、比較的手軽に使えるようになったので試してみました。