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

ささみ学習帳

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

Teamsのチャネルで"関係者各位"として任意の相手にタグメンション付きメッセージを送信するPower Automate クラウドフロー

 

はじめに

メンションを付けてメッセージを送信する際に、日本企業のメールではおなじみの「関係者各位」という形でメンションメッセージを行う試みです。

  • メンションの順番を役職順に並べることを求められる
  • メンションのアカウント表示名に敬称や役職を付記することを求められる

といった、伝統を重んじる日本企業であるかもしれない要求を回避できる…かもしれないバッドノウハウです。

※あくまでネタフローです。本質的にはそのような運用は改めるべきだと思います。

 

フローの仕組み

やっていることは単純です。

  1. 「関係者各位」タグを作成する
  2. メッセージを送信する
  3. 「関係者各位」タグを削除する

といった作業を自動化しているだけです。

 

メッセージ送信後にタグを削除していますので、誰にメンションしたのかを当人以外に知られたくない場合にも有効かもしれません。(どんな時?)

通常Teams上でタグを削除しても「削除済み」として残りますが、Microsoft Temasコネクタでタグを削除した場合は「削除済み」には表れません。この為隠ぺいが可能です。

 

フローVer.1

動作イメージ

 

チャネルの作成ボックスの「+」をクリックし、Workflowsを選びます

表示されたリストからフローを選択するとこのように表示されます。

メンションする関係者を選択し(複数選択可)、件名・メッセージを入力して「送信」

すると、「関係者各位 (....)」というタグメンション付きのメッセージがチャネルに投稿されます。

 

フロー全体図

 

フロー解説

1.[Microsoft Teams]作成ボックスから トリガー

作成ボックスからフローを起動するためにはこのトリガーを利用します。

このトリガーは、2024年7月時点ではPower Automateのモダンデザイナー(新しいデザイナー)には対応していません。クラシックデザイナーで作成する必要があります。

  • アダプティブカード
    • {
          "type": "AdaptiveCard",
          "body": [
              {
                  "type": "TextBlock",
                  "size": "Medium",
                  "weight": "Bolder",
                  "text": "関係者各位としてメンバーにメンションメッセージを送信"
              },
              {
                  "type": "Input.ChoiceSet",
                  "choices.data": {
                      "type": "Data.Query",
                      "dataset": "graph.microsoft.com/users?scope=currentContext"
                  },
                  "id": "people-picker",
                  "isMultiSelect": true,
                  "isRequired": true,
                  "label": "関係者:",
                  "errorMessage": "1名以上選択が必要です",
                  "placeholder": "選択できる関係者は最大200ユーザーまで"
              },
              {
                  "type": "Input.Text",
                  "placeholder": "件名を追加",
                  "label": "件名:",
                  "id": "messageSubject"
              },
              {
                  "type": "Input.Text",
                  "placeholder": "メッセージを入力",
                  "isMultiline": true,
                  "id": "messageBody",
                  "label": "メッセージ:",
                  "isRequired": true,
                  "errorMessage": "メッセージが必要です。"
              }
          ],
          "actions": [
              {
                  "type": "Action.Submit",
                  "title": "送信"
              }
          ],
          "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
          "version": "1.3"
      }

 

こちらのページを参考に、ユーザーピッカーを使用しています。("type": "Input.ChoiceSet"の箇所)

上記の指定で現在のチームのユーザーから選択できるようになっています。

learn.microsoft.com

 

2.[データ操作]作成-改行

改行コードを定義しています。後続の処理で使用します。

 

3.[コントロール]条件-チャットからの呼び出しはキャンセル終了

このフローはチームにタグを作成する必要があるため、チャットからの呼び出しの場合はメッセージを表示して終了しています。

トリガーの出力にteamIdが存在するか否かで処理を分岐しています。



3-1.はいの場合 [Microsoft Teams] タスクモジュールで応答

チャットからの呼び出しに対応してないというメッセージを表示します。

  • 応答のアダプティブカード
    • {
          "type": "AdaptiveCard",
          "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
          "version": "1.3",
          "body": [
              {
                  "type": "TextBlock",
                  "text": "このフローはチャットには対応していません。",
                  "wrap": true,
                  "size": "Medium"
              }
          ]
      }

 

このアクションを使用することで下図のようにメッセージを表示することができます。

 

3-2.はいの場合 [コントロール] 終了
フローを終了します。

  • 状態
    • 取り消し済み

 

4.[Microsoft Teams]チームのタグを作成する-関係者各位タグ

このフローの肝「関係者各位」タグを作成します。

  • チーム
    • @{triggerBody()?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId']}
    • トリガーの出力のチームIDを利用
  • 表示名
    • 関係者各位 (@{replace(guid(),'-','')})
    • 関係者各位だけでは重複する可能性があるため、guid関数を使って極力ユニークな名前になるようにしています。また、タグの表示名は40文字までという制限があるためGUIDの区切り文字を除去して短くしています。
  • メンバーのID
    • @{replace(triggerBody()?['cardOutputs']?['people-picker'],',',';')}
    • トリガーの出力の関係者各位対象者を利用
    • 出力の値はコンマ区切りの為セミコロンに置換しています。

 

5.[Microsoft Teams]タグの@mentionトークンを取得する

関係者各位タグのメンショントークンを取得しています。タグを作成するアクションの出力でパラメータを指定します。

  • チーム
    • @{outputs('チームのタグを作成する-関係者各位タグ')?['body/teamId']}
  • タグ
    • @{outputs('チームのタグを作成する-関係者各位タグ')?['body/id']}

 

6.[Microsoft Teams]チャットまたはチャネルでメッセージを投稿する-関係者各位

チャネルにメッセージを投稿します。

  • 投稿者
    • ユーザー
  • 投稿先
    • Channel
  • Team
    • @{triggerBody()?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId']}
  • Channel
    • @{triggerBody()?['teamsFlowRunContext']?['channelData']?['channel']?['id']}
  • Message
    • @{outputs('タグの_@mention_トークンを取得する')?['body/atMention']}
      @{replace(triggerBody()?['cardOutputs']?['messageBody'],outputs('作成-改行'),'<br>')}
    • トリガー出力のメッセージ本文は、改行をHTMLタグの<BR>に変換しておきます。
  •  Subject
    • @{triggerBody()?['cardOutputs']?['messageSubject']}

 

7.[スケジュール]待ち時間

関係者各位タグを削除するまでの待ち時間を指定します。

念のため30秒ほど待ってから削除するようにしています。

  • カウント
    • 30
    • ※実行環境によっては要調整かも
  • 単位

 

8.[Microsoft Teams]タグを削除

  • チーム
    • @{outputs('チームのタグを作成する-関係者各位タグ')?['body/teamId']}
  • タグ
    • @{outputs('チームのタグを作成する-関係者各位タグ')?['body/id']}

 

参考情報

learn.microsoft.com

 

 

さいごに

アダプティブカードで関係者各位としてチームメンバーを既定で選択した状態にしたかったのですが、今回の方法では実現できませんでした。これを実現したver.2を作成中です。