MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Power Automate でプレミアムアクションを使わずに Teams のチャネルやチームにメンションを送る

f:id:mofumofu_dance:20210830232157p:plain

Microsoft Teams と Power Automate の組み合わせで皆さんモヤモヤするのは『個人には@メンション送れるけどチームやチャネルには送れない!』ではないでしょうか。

これを打開するために、これまでにHTTPアクションでGraph APIを使う方法や、あるいはAzure ADへのHTTPリクエストで同様にGraph APIを実行する方法が考えられてきました。 しかしいずれも Power Automate 的にはプレミアムライセンスが必要で、みんなが簡単に使えるようなものではなかったです。

そんな中、(一部の)Graph APIをスタンダードアクションで実行する方法がPaul によって発見されました。

彼のビデオでは、Excelテーブルへのデータ登録を行うためにGraph APIを使っています。詳細は以下をご覧ください。

本投稿では、このPaulの方法を使って、Teamsのチャネルに対して、チーム/チャネルへのメンション入りメッセージを送信してみます。

準備

この方法に限らず、メンションを送るときには チーム名/チャネル名、チームID/チャネルIDが必要になります。

それぞれのIDの取得方法についてはやまさんの投稿で確認してください。UIからだとこれが一番手っ取り早いです。

qiita.com

フロー上ではまずこれら4つ (チーム名、チャネル名、チームID、チャネルID) をそれぞれ「作成」(Compose)アクションで定義しておきます。

f:id:mofumofu_dance:20210830225903p:plain

プレミアムアクションなしでGraph APIを使う

ここが Paul の大きな発見です。 なんと

Office 365 Groups コネクター の 「Send HTTP request」を利用すればGraph APIを実行できます。

※少なくとも今のところは。

たしかに、アクションの説明を見てみるとGraph APIを実行するよ~と書かれていますね。

f:id:mofumofu_dance:20210830230210p:plain

チーム/チャネルへのメンション入りメッセージ送信

Graph API が使えるなら、あとは簡単です。メッセージは決まった形式(例えば本文中には <at id="0">チーム名</at>を入れるなど) があり、またメンション用にリクエストボディでチーム/チャネルのIDを指定する必要があります。

URI

https://graph.microsoft.com/v1.0/teams/@{outputs('Compose_TeamID')}/channels/@{outputs('Compose_ChannelID')}/messages

Body (チームの場合)

{
    "body": {
      "content": "Graph Messages Endpoint <br> This works for any scenario: <br><at id=\"0\">@{outputs('Compose_TeamName')}</at>",
      "contentType": "html"
    },
    "mentions": [
      {
        "id": 0,
        "mentionText": "@{outputs('Compose_TeamName')}",
        "mentioned": {
                          "conversation": {
                              "@odata.type": "#microsoft.graph.teamworkConversationIdentity",
                              "id": "@{outputs('Compose_TeamID')}",
                              "displayName": "@{outputs('Compose_TeamName')}",
                              "conversationIdentityType": "team"
                          }
        }
      }
    ]
  }

Body (チャネルの場合)

{
    "body": {
      "content": "Graph Messages Endpoint <br> This works for any scenario: <br><at id=\"0\">@{outputs('Compose_ChannelName')}</at>",
      "contentType": "html"
    },
    "mentions": [
      {
        "id": 0,
        "mentionText": "@{outputs('Compose_ChannelName')}",
        "mentioned": {
                          "conversation": {
                              "@odata.type": "#microsoft.graph.teamworkConversationIdentity",
                              "id": "@{outputs('Compose_ChannelID')}",
                              "displayName": "@{outputs('Compose_ChannelName')}",
                              "conversationIdentityType": "channel"
                          }
        }
      }
    ]
  }

これだけです。基本的な構成は同じですが、mentionTextidが異なる点、またconversationIdentityTypeteamまたはchannelである点に注意してください。

f:id:mofumofu_dance:20210830231424p:plain

※ちょっと古い記事だと、odata.typeが違うものがありました。そっちはエラーになっています。

結果は期待通り、チーム、チャネルにメンションされていることが分かります。

f:id:mofumofu_dance:20210830231621p:plain

おわり

Power Automate のスタンダードアクションでチームやチャネルにメンションを送ることはできないと考えられてきました。

Office 365 Groups コネクターの 「Send HTTP request」アクションを利用することで、一部のGraph API実行はスタンダードの範囲内で実行可能です。

これを活用して本投稿では チーム/チャネルへの@メンション入りメッセージ送信の方法をご紹介しました。

Graph API を利用できれば色々できますね。ただすべてのエンドポイントがサポートされているわけではなさそうなので注意してください。