Teamsリアクション(誰がいいねを押したか)を一覧出力する。投稿の未読・既読管理に使えるか

Microsoft365

Teamsのチャネル投稿されたメッセージに対して「誰がリアクションしたか」の情報を取得したく、Power Automateでフロー処理を作成してみました。

以前、似たような記事を投稿しており、その際は投稿に対して6種類の反応をカウントすると言う内容でした(最後にリンクを貼っておきます)。

今回は、「投稿に対して誰が反応したか」を調べてみたいと思います。

世間的に、Teams投稿の「いいね」は「既読」の意味を持つことがあります。そう言う場合に、未読・既読を洗い出すという使い方で今回のフローが使えるのではないかと思います。

スポンサーリンク

Power Automateを使ったTeamsリアクション一覧出力

一部のアクション作成で、動的なコンテンツが取得できないのでGUIを使わずに直接「式」を記述している箇所があります。マイクロソフトの仕様変更などにより、動作しなくなる可能性があります。

以前にも触れていますが、Power AutomateのTeamsコネクタ「メッセージを取得します」アクションは仕様上、処理開始時点より取得できるメッセージは20件と制限されています。それ以上のメッセージを取得する場合には、定期的にフローを回しておく必要があります。

実際の一覧出力処理

Power Automateフローを使ったCSV出力のやり方を記載します。

定期実行する場合は、CSVファイルは複数生成されます。また、チャネル内のメッセージ量がそれほどでなければ、当然のことながら重複も発生します。

正しい集計を行うにはさらにひと手間必要となります。

アレコレメモ
アレコレメモ

ピボットテーブルが扱えれば、楽に集計できます。

アンナ
アンナ

扱えない人は、エクセル切り貼りテキトーに整形して。

以降は、多少なりともPowerAutomateに触れたことある人向けの書き方をするので、基礎から把握したい人は次のような書籍でトレーニングするのがよいかと思います。

参考 そのほかのPower Automate書籍

CSV出力イメージ

まずは出力するCSVを設計します。次のような形式で出力することとしました。

Teamsリアクション(誰がいいねを押したか)を出力する(出力CSVイメージ)
画像はクリックで拡大します
メッセージID 元の投稿に自動付与されるID
メッセージ件名 元の投稿に付けられた件名(空欄のケースあり)
メッセージ投稿者 元の投稿をした人の表示名
メッセージ日時 元の投稿が行われた日時
メッセージ本文 元の投稿内容
リアクションタイプ 反応6種類(likeほか)
リアクションした日時 リアクションを行った日時
リアクションした人 投稿にリアクションした人の表示名

個人アカウントの環境につき、テナント内に1名しかメンバーが存在しません。複数人の反応があれば一つのメッセージIDで複数の反応が行単位で表示されます。

フローの全体像

フローの構成は次のとおりです。

Teamsリアクション(誰がいいねを押したか)を出力する(フローの全体像)

チャネル内のまとまったメッセージを取得して、一つ一つを解析、結果をCSVファイルへ出力するフローです。

トリガーの設定(一時か定期か)

トリガーは、インスタントクラウドフローから「手動でフローをトリガーします」か、スケジュール済みクラウドフローを使うといいでしょう。

ここではスケジュール実行させます。

Teamsリアクション(誰がいいねを押したか)を出力する(スケジュール実行するようにトリガーする)
スケジュール実行するようにトリガーする

変数の初期化

フロー内で使う変数を定義します。

Teamsリアクション(誰がいいねを押したか)を出力する(変数の初期化)
変数 名前 用途
配列変数 リアクション集計 投稿に対するリアクションを格納(アレイ)
スカラー変数 出力用CSV ファイル名を格納
Teamsリアクション(誰がいいねを押したか)を出力する(出力ファイル名の定義)

▲ ファイル名には、addHours関数を使い「yyyyMMdd-hhmmss」というように日時を含ませています。

addHours('<timestamp>', <hours>, '<format>'?)

チャネル投稿メッセージの取得

Teamsチームのメッセージを取得します。アクションの設定として、チーム名・チャネル名を指定します。

Teamsリアクション(誰がいいねを押したか)を出力する(チャネル投稿メッセージの取得)

繰り返しになりますが、ここで取得できるメッセージは最大20件です。

投稿メッセージ本文からHTML要素を除去

ここからメッセージ解析に入ります。ループ処理が二段となり、その一段目。

アクション「メッセージを取得します」で得られた動的コンテンツ内の「メッセージ本文コンテンツ」は、そのままだとHTML要素が含まれた形で出力されます。可読性がよくないので「HTMLからテキスト」というアクションを使い、HTML要素を除去します。

Teamsリアクション(誰がいいねを押したか)を出力する(メッセージ本文からHTML要素を除去する)
メッセージ本文からHTML要素を除去する

このアクションを選んだ直後に、Apply to eachの一つが自動生成されます。

メッセージ反応を解析する

ループ処理の二段目、入れ子の方に入ります。

Teamsメッセージを取得すると、「メッセージ反応(reactions)」という動的コンテンツが取得できます。この動的コンテンツは、配列になっていますのでループ処理で解析します。

以下は、「メッセージ反応(reactions)」に含まれたデータの一例です。これを一つずつ取り出していきます。

Teamsリアクション(誰がいいねを押したか)を出力する(メッセージ反応のJSON表記)
メッセージ反応のJSON表記
Teamsリアクション(誰がいいねを押したか)を出力する(ループの制御構文を加える)
ループの制御構文を加える

▲ アクションを追加して、「コントロール」から「Apply to each」を選びます。

Teamsリアクション(誰がいいねを押したか)を出力する(ループの制御構文を加える)

▲ 引数に動的コンテンツ「メッセージ反応」を指定します。

以降はループ内で次の処理を行います。

入れ子のループでやること
  1. メッセージに反応した人のプロフィール取得
  2. メッセージ処理をJSONへ格納
  3. メッセージ単位の処理をCSV出力用の配列へ格納
1. メッセージに反応した人のプロフィール取得

ユーザープロフィールの取得」というアクションを使い、リアクションした人のプロフィール情報を取得します。ここではGUI上に動的コンテンツが表示されませんので、式で直接取り出します。

Teamsリアクション(誰がいいねを押したか)を出力する(式で直接コンテンツを取得する)
式で直接コンテンツを取得する
items('Apply_to_each_2')?['user']['user']['id']

▲ 「’Apply_to_each_2’」の部分は直前のループ名称を入れます。

Teamsリアクション(誰がいいねを押したか)を出力する(式で直接コンテンツを取得する)

▲ 式を入れた直後は、「fx」がついたアイコンとなります。フローを保存して画面をリフレッシュすると、Teamsアイコンが表示されます。

2. メッセージ処理をJSONへ格納

必要な動的コンテンツが揃ったら、JSON式へ格納します。アクショングループ「データ操作」から「作成」を選択し、JSON式を記述します。

Teamsリアクション(誰がいいねを押したか)を出力する(取得したコンテンツをJSONへ格納)

取得アクションと動的コンテンツの関係性は次のとおりです。

項目 動的コンテンツ 取得元のアクション名
メッセージID メッセージID Teamsアクショングループ>
「メッセージを取得します」
メッセージ件名 メッセージ件名
メッセージ投稿者 メッセージ from ユーザー displayName
メッセージ日時 メッセージ createdDateTime
メッセージ本文 本文 「HTMLからテキストへ」
リアクションタイプ reactionType 式で直接指定する
リアクションした日時 createdDateTime
リアクションした人 表示名 ユーザープロフィールの取得

リアクションタイプと日時の式・指定方法は次のとおり。「’Apply_to_each_2’」の部分は直前のループ名称を入れます。

items('Apply_to_each_2')?['reactionType']
items('Apply_to_each_2')?['createdDateTime']
3. メッセージ単位の処理をCSV出力用の配列へ格納

これまでメッセージ単位で処理していた結果をフロー冒頭で初期化した配列変数に格納します。「出力」はこの前の処理で生成される動的コンテンツです。

Teamsリアクション(誰がいいねを押したか)を出力する()

CSVテーブル作成

2段のループ処理を抜け、CSVテーブルを作成ます。「CSVテーブルの作成」の引数は、やはり冒頭で定義した配列変数です。

Teamsリアクション(誰がいいねを押したか)を出力する()

ファイルの作成

これまでの処理が完成したら、ファイルへ結果を出力します。画像では、Sharepointを格納先としていますがOnedriveほか、任意の出力先を選択できます。

Teamsリアクション(誰がいいねを押したか)を出力する()

▲ 出力させたファイル、ファイル内のメッセージは重複していることがあります。そのままでは正しい反応をカウントしづらいのでファイル結合などが必要となります。

動作確認

フローが出来たら動作確認します。

出力されたCSVファイルは、文字コーディング「UTF-8」となります。エクセルなどで読み込む際は、該当の文字コードを指定する必要があります。

Teamsリアクション(誰がいいねを押したか)を出力する()
画像はクリックで拡大します
スポンサーリンク

まとめ

Power Automateフローを使ってTeamsメッセージに対して「誰がいいね押したか」の集計を行ってみた、というテーマで投稿しました。

きちんと動作確認してないけど、Yammerのコネクタ仕様を見る限りでは今回の記事と同じようなことができそうです。Teamsのチャネルよりはそちらのほうが規模が大きくなるので、社内SNSのパフォーマンス管理としてこのような集計手法は有効なのかもしれません。

参考 そのほかのPower Automate書籍

タイトルとURLをコピーしました