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

ささみ学習帳

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

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

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

 

 

はじめに

Teamsでメッセージにリアクションするとき既定で表示されているリアクションが無難なこともあり、いつも同じリアクションをしていませんか?

新しいTeamsでは既定のリアクションを変更できるようになりましたが、よりアグレッシブにリアクションできるようにランダムでリアクションをするフローを作成してみました。

どんなリアクションが出るかわからない新たな刺激が得られます。

 

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

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

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

 

実行イメージ

 

フロー全体図

 

フロー解説

1.[Microsoft Teams]選択したメッセージの場合 (V2)

このトリガーを利用する事でメッセージの「…」からフローを実行できます。

※このトリガーを利用する場合は必ず既定の環境でフローを作成する必要があります。

  • パラメーター未設定

 

2.[変数]変数を初期化する-emoji

設定する候補の絵文字をアレイ型変数で定義します。

  • 名前
    • emoji
  • 種類
    • アレイ
    • リアクションで使いたい絵文字を↓のように記述します。
    • ["🗿","😀","😃","😄","😁","😆","😅","🤣","😂","🙂","🙃","😉","😊","😇","🥰","😍","🤩","😘","😗","☺","😚","😙","🥲","😋","😛","😜","🤪","😝","🤑","🤗","🤭","🤫","🤔","🤐","🤨","😐","😑","😶","😏","😒","🙄","😬","🤥","😌","😔","😪","🤤","😴","😷","🤒","🤕","🤢","🤮","🤧","🥵","🥶","🥴","😵","🤯","🤠","🥳","🥸","😎","🤓","🧐","😕","😟","🙁","☹","😮","😯","😲","😳","🥺","😦","😧","😨","😰","😥","😢","😭","😱","😖","😣","😞","😓","😩","😫","🥱","😤","😡","😠","🤬","😈","👿","💀","☠","💩","🤡","👹","👺","👻","👽","👾","🤖","😺","😸","😹","😻","😼","😽","🙀","😿","😾","🙈","🙉","🙊","💋","💌","💘","💝","💖","💗","💓","💞","💕","💟","❣","💔","❤","🧡","💛","💚","💙","💜","🤎","🖤","🤍","💯","💢","💥","💫","💦","💨","🕳","💬","👁️‍🗨️","🗨","🗯","💭","💤"]
    • 全ての絵文字が対応しているわけではないようです。対応していない文字を指定するとエラーが発生します。

    • 対応している絵文字の情報は見つけられませんでした。TeamsのリアクションUIで選択できる絵文字を使うのが安全でしょう。

 

3.[変数]変数を初期化する-Response

応答メッセージを格納する変数を定義します。

  • 名前
    • Response
  • 種類
    • 文字列
    • ランダムでリアクションしました!

 

4.[コントロール]条件-呼び出し元がチャットかチャネルかで分岐

呼び出し元がチャットかチャネルかで分岐します。

トリガーの出力の「チームID」の値の有無で判断します。

  • 条件
    • empty(triggerBody()?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId'])
    • 次の値に等しい
    • true

 

5.(はいの場合)変数の設定-Response

チャットから呼び出された場合は、Response変数にメッセージをセットします。

今回のフローはチャットからの呼び出しに対応しない為このメッセージを表示して終了します。

  • 名前
    • Response
    • このフローはチャネルのメッセージのみ利用できます。

 

6.(いいえの場合)[データ操作]作成-emoji count

アレイに格納された要素数をカウントしています。

  • 入力
    • add(length(variables('emoji')),-1)

 

7.(いいえの場合)変数の設定-SelectedEmoji

アレイからランダムで1文字を選択しSelectedEmoji変数に格納します。

  • 名前
    • SelectedEmoji
    • variables('emoji')[rand(0,outputs('作成-emoji_count'))]

 

8.(いいえの場合)[Microsoft Teams]Microsoft Graph HTTP要求を送信する-リアクションする

HTTP要求を送信するアクションでGraph API のsetReactionを呼び出しています。

  • URI
    • https://graph.microsoft.com/v1.0/teams/@{triggerBody()?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId']}/channels/@{triggerBody()?['teamsFlowRunContext']?['channelData']?['channel']?['id']}/messages/@{triggerBody()?['teamsFlowRunContext']?['messagePayload']?['id']}/setReaction
    • チームID,チャネルID,メッセージIDの3つのパラメーターはトリガーの出力を利用しています。
  •  メソッド
    • POST
  • 本文
    • {
        "reactionType": "@{variables('SelectedEmoji')}"
      }
  • コンテンツタイプ

 

9.[Microsoft Teams]Teamsのタスクモジュールで応答

処理結果を返します。

  • 応答のアダプティブカード
    • {
          "type": "AdaptiveCard",
          "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
          "version": "1.4",
          "body": [
              {
                  "type": "TextBlock",
                  "text": "@{variables('Response')}",
                  "wrap": true,
                  "size": "Medium"
              },
              {
                  "type": "TextBlock",
                  "text": "@{variables('SelectedEmoji')}",
                  "wrap": true,
                  "size": "ExtraLarge",
                  "horizontalAlignment": "Center"
              }
          ]
      }

 

チャネルから実行した場合

チャットから実行した場合

 

制限事項

フローの結果表示と設定される絵文字のデザインに差異があります

Teamsの絵文字とWindows/Mac等OSごとの絵文字のデザインの差異によるものです。

 

チャットメッセージへの対応について

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

 

非対応絵文字を指定した場合への対処

非対応絵文字でリアクションを試みてエラーが発生した場合、絵文字を変更して再度リアクションを試みる、とした方が万全ではありますが今回はそこまで考慮していません。

 

参考にしたページ

learn.microsoft.com

 

このAPIについてはこちらでも記事にしています。

sasami-axis.hatenablog.com

 

さいごに

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

絵文字のアレイ化が一番大変な作業でした。

リアクション関係のAPIが正式版になった時にはもっとまじめに活用法を考えたいと思います。