約5分で読めます

【Teams×Graph API】チャネル投稿のリアクションが5件しか取れない、起票方法で結果が変わった


目次

はじめに

Teamsのチャネル投稿に付いたリアクションを、Power Automateで集計したいと考えました。「誰がどの投稿に👍したか」を取得できれば、確認済みの管理や簡単なアンケート集計に使えるからです。

次のように、Teamsの画面(スレッド)上では15件の「いいね」リアクションが付いている状態です。

ところが、この投稿のリアクションをAPIで取得すると5件しか返ってきませんでした。

この記事では、切り分けでわかったことと、公式ドキュメントなどで確認できたことを共有します。

抱えていた課題

  • 画面と取得結果が合わない: Teamsの画面では15件のリアクションが、Graph APIの chatMessage.reactions では5件しか返ってこない。
  • v1.0でもbetaでも同じ: エンドポイントを変えても結果が変わらない。
  • Power Automateでも同じ: Teamsコネクタの「メッセージ詳細を取得する」でも5件だった。

切り分けでわかったこと

1. 取得方法を変えても、5件は変わらなかった

次の3つを試しましたが、どれも同じ5件でした。

  • Graph API v1.0 の「チャネルのメッセージを取得」(GET /teams/{teamId}/channels/{channelId}/messages/{messageId})
  • Graph API beta の同じエンドポイント
  • Power Automate Teamsコネクタの「メッセージ詳細を取得する」

つまり、Power Automate側の問題ではなく、API(Graph)が返す内容そのものが5件になっているようです。コネクタの裏でGraphを呼んでいるので、同じ制限を受けていると考えられます。

2. 起票の仕方で結果が違った

ここが一番の気づきでした。別の投稿で比べてみると、次のようになりました。

  • メール転送で起票したスレッド(スレッドの種類:メール共有/Adaptive Card投稿): リアクションは5件しか取得できない
  • 手作業で起票したスレッド(スレッドの種類:通常投稿): リアクションは全20件取得できた

同じチャネルでも、投稿の作られ方(メッセージの種類)によって取得できる件数が変わるようです。メール転送で作られる投稿はAdaptive Cardを使った投稿で、通常のテキスト投稿とは扱いが違うことが関係していそうです。

ただし、これは今回の検証で見えた結果です。5件という数字が仕様上の上限なのか、投稿の種類による制限なのかは、公開情報からは断定できません。

同様の現象が出たらこれをやってみて

もし「Teamsのリアクションがなぜか5件しか取れない」「画面とAPIの件数が合わない」という同じような現象に遭遇したら、次のポイントを試してみてください。

  • 投稿の起票方法(種類)を確認する: リアクションが取れない投稿が、メール転送やAdaptive Cardなどで作られたものではないか確認します。
  • リアクション集計が必要な投稿は、手作業の「通常投稿」にする: メール転送起票のスレッドだと5件で止まりますが、手作業の通常投稿なら全件取得できました。集計したい運用であれば、起票方法を通常の投稿に変えてみるのが一番確実な回避策です。
  • 取得件数を鵜呑みにせず、キリのいい数字(5件など)を疑う: エラーにならず一見成功しているように見えても、件数が5件ぴったりなど不自然にキリがいい場合は、API側の制限による取りこぼしを疑ってみてください。

公式ドキュメントで確認できたこと

原因そのものを書いた公開情報は見つかりませんでしたが、関連する事実がいくつかありました。

  • 画面に出るリアクションの数は最大20種類: Teamsは1人が複数のリアクションを付けられ、画面には人気順に最大20個が表示される、と紹介されています(Office 365 for IT Pros)。ただし、APIが返す件数についての記載はありません。
  • リアクションは「単一メッセージの取得」で取る: メッセージ一覧の取得ではリアクションが空で返る、という報告があります(Microsoft Q&A)。今回は単一メッセージの取得で試しているので、これは当てはまりません。
  • 投稿サイズの上限がある: チャネルの投稿は、リアクションを含めて約28KBまで、とされています(Microsoft Q&A)。

一方で、「メール転送で起票した投稿だと5件に絞られる」ことを書いた情報は見つかりませんでした。この点は、今回の検証で見えた事実として扱うのが正確です。

なお、chatMessageReaction のドキュメントには、リアクションは「チャネルのメッセージを取得」APIの結果の一部として返ると書かれているだけで、件数の上限は書かれていません。

まとめ

Teamsのチャネル投稿のリアクションは、画面に表示される件数とGraph APIの取得結果が一致しないことがありました。わかったことは次の2つです。

1.v1.0・beta・Power Automateのコネクタ、どれで取っても同じ結果だった。

2.メール転送で起票した投稿は5件、手作業で起票した通常投稿は全20件と、投稿の種類で結果が違った。

公開されている情報では、5件になる理由までは説明されていません。リアクションの集計をAPIでやりたい方は、まず対象の投稿がどういう種類のものかを確かめて、通常投稿で運用できるか検討してみてください。