Power automate teams チャネル内のメッセージで応答します

Teamsのチャネル投稿されたメッセージに対するリアクション数を集計する方法をご紹介します。

わりとニーズがある要件のようですね。検索してみたら、たくさん関連キーワードが表示されました。

Power automate teams チャネル内のメッセージで応答します

せっかく組織・チームで反応しているんだから数値化してチャネルパフォーマンス、活性化具合を見たいということでしょうか。

この記事では、反応6種類それぞれをカウントしています。メッセージに対して、誰が反応したかの集計方法は別記事にしています(記事最後部にリンク記載)。

Teams標準の「分析」機能

Teamsの標準機能でもチームやチャネルに対する投稿パフォーマンスを見ることができます。小難しいことをする前に、これで要件がこと足りるならそれで済ますのもよいかと思います。

Power automate teams チャネル内のメッセージで応答します
Teams標準のチーム・チャネル分析機能

画像引用 Microsoft「Teamsで分析を表示する」

▲ 任意のチームを選択・右クリックして「チームを管理」をクリックします。

Power automate teams チャネル内のメッセージで応答します
Teams標準のチーム・チャネル分析機能

▲ 「分析」タブを押すことで、チーム内の投稿パフォーマンス見ることできます。チャネルや期間でフィルターも可能。

Power Automateを使ったTeams投稿反応の集計処理

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

フロー仕様の制限

データの出力は、反応単位に行出力したり、メッセージ単位に行出力したりすることができます。私の場合は、後者「メッセージ単位に行出力」させました。

(誰がリアクションしたかなどを調べる反応単位に出力する方法については記事の最後部にリンクがあります)

ちょっと悩んだこと

  • Power Automateで取得できるチャネル投稿数は処理開始時より20件(全件は不可)
  • いつリアクションされるかはわからない。フロー実行後にリアクションが増えることもある
  • メッセージに件名を入れてくれないと投稿概要を把握しづらい
  • 返信の反応は拾えない

取得メッセージ20件

チャネル投稿されたメッセージは、全件は取れない仕様でした。

まぁ、これは仕方ないのかなと。

チャネル内にメッセージがとんでもない量あると、フロー実行がいつまでたっても終わらないケースも考えられます。メッセージを取得したら、そこからは最低一つのループ処理が加わるので、ループ処理内で重たい処理をしようものならパフォーマンス問題に発展しかねないということでマイクロソフトさまが制限を加えたのでしょう。

いつリアクションされるかはわからない

フロー実行直前に、投稿したばかりのメッセージがあるとリアクションの取りこぼしが発生します。時間をおいて「いいね」が付くなんてことはよくあるので、一度きりのフロー実行では正しく集計できないと考えました。

上記2つの理由により、フローは定期実行することとしました。

メッセージに件名を入れてくれないと投稿概要を把握しづらい

メッセージ単位で反応を見たいというケースでは、件名が入っている方がベターです。

本文出力も可能ですが、概要が把握しづらいのとメッセージ装飾が施されると本文内がHTML記述され可読性が落ちます。なるべく件名をつける運用に誘導したほうが良いでしょう。

返信の反応は拾えない

元の投稿に返信があった場合で、スレッド上ではそれに対してもいいねほかリアクションをすることはできるわけですが、返信に対する反応までは拾えません。

返信の反応まで含めてしまうとまたループ要素が増えるので、こういった制限があるのでしょうか。

実際の集計処理

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

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

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

Power automate teams チャネル内のメッセージで応答します

アレコレメモ

超ざっくり言いますと、CSVファイルを連結して、ピボットテーブルでは各反応の最大値で集計すればOKです。パワークエリとピボットテーブルが使えれば、集計は簡単です。パワークエリを使った複数ファイルの読み込み・連結は過去に記事にしています。

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

参考 そのほかのPower Automate書籍

CSV出力イメージ

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

Power automate teams チャネル内のメッセージで応答します
(クリックで拡大)
メッセージID元の投稿に自動付与されるID
メッセージ件名元の投稿に付けられた件名(空欄のケースあり)
メッセージ日時元の投稿が行われた日時
メッセージ投稿者元の投稿をした人の表示名
リアクションタイプ反応6種類(likeほか)

個人アカウントの環境につき、反応の少なさはご容赦ください。

フローの全体像

フローは、ループ処理で癖はありますが、全体としてはシンプルです。

Power automate teams チャネル内のメッセージで応答します
フローの全体像

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

時間トリガーの設定

定期実行させるので、時間を決めます。チャネルに投稿されるメッセージ数でどの程度の定期処理がふさわしいか判断しましょう。ここでは週次処理としました。

Power automate teams チャネル内のメッセージで応答します
スケジュール・トリガー

変数の初期化

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

変数用途
スカラー(文字列) ファイル名を格納
アレイ(配列) 投稿に対するリアクションを格納

Power automate teams チャネル内のメッセージで応答します

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

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

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

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

Power automate teams チャネル内のメッセージで応答します

メッセージ反応のカウント

取得したメッセージ一覧を投稿単位でループ処理させて、反応をカウントします。

Power automate teams チャネル内のメッセージで応答します

アレコレメモ

このフローでちょっと複雑な部分

1. タイムゾーン変更

取得したメッセージの「投稿日時」は、UTC時間となっていますので日本時間へタイムゾーンを変更します。

Power automate teams チャネル内のメッセージで応答します

2. 反応の絞り込み

Teamsの反応は6種類(いいね+ハート+喜怒哀楽)、それぞれを絞り込んでいきます。

Power automate teams チャネル内のメッセージで応答します
ループ内でのリアクション絞り込み

▲ アクショングループ「データ操作」から「アレイのフィルター処理」を選択します。動的コンテンツより「メッセージ反応」を差出人と設定し、そのあとはフィルター処理します。

画像では「reactionType」という動的コンテンツを取得できているように見えていますが、GUI上の操作では取得できません。式を直接入力して取得します。

「reactionType」を取得するために、画像の箇所で次のような式を入れます。

item()?['reactionType']
Power automate teams チャネル内のメッセージで応答します

▲ 取得した直後は、「fx」がついたアイコンとなります。フローを一旦保存すると、Teamsアイコンがついた変数に変わります。

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

単一のメッセージ処理が終わったら、JSON式へ格納します。アクショングループ「データ操作」から「作成」を選択し、JSON式を記述します。

Power automate teams チャネル内のメッセージで応答します

▲ 上4つの要素は、動的コンテンツからの取得です。

そのあとは、式を手動入力しています。

length(body('アレイのフィルター処理_(like)'))

▲ bodyの引数は、前処理の「アレイのフィルター処理」名称を入れます。

4. メッセージ単位処理をCSV出力用の配列へ格納

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

Power automate teams チャネル内のメッセージで応答します

CSVテーブル作成

ループを抜けた後は、CSVテーブルを作成ます。

Power automate teams チャネル内のメッセージで応答します

ファイルの作成

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

Power automate teams チャネル内のメッセージで応答します

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

動作確認

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

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

Power automate teams チャネル内のメッセージで応答します
(クリックで拡大)

まとめ

Power Automateフローを使ってTeams「いいね」数をCSV出力してみた、というテーマで投稿しました。

あとは出力されたCSVファイルを使って集計処理すればOKです。パワーピボットが使えると楽かと思います。機会あれば、記事投稿します。

参考 そのほかのPower Automate書籍

Sharepintリストでいいね!や星評価を取る方法↓

Power Automate Teamsの投稿への返信は?

フローにステップを追加する際に「Microsoft Teams」コネクタを選択します。 「アクション」より「メッセージへの返信投稿」を選択します。 「メッセージへの返信投稿」ステップが追加されるのでパラメーターを設定します。 返信対象のチームを選択します。

Power Automate Teams 何ができる?

コラボレーションプラットフォーム Microsoft Teams(以下、Teams) と、ローコードで定型業務の自動化を実現するRPAツール Power Automate の連携により、社員1人1人が自身の仕事のムダを省き、集中できる時間を生み出せる。

Teams ID どこ?

Microsoft Teams 管理センターで確認する方法.
管理センター上で、左のメニューから[チーム] → [チームを管理] を選択。.
表示された一覧の横スクロールを右端まで持っていくと[グループ ID]という列が確認できます。.