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

ささみ学習帳

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

Power Automate クラウドフローでGraph APIを使って Teams の「チャット一覧を作成」アクションより多くの情報を取得する

 

はじめに

Microsoft Teams コネクタの「チャット一覧を作成」アクションを使ってチャットの一覧を取得することができます。

しかし

  • 取得できる件数が少ない
  • 参照できるプロパティが少ない
  • "会議チャットを除いたチャット"といった条件で取得できない

といったいまいちポイントがあります。

 

[取得できる件数が少ない]

コネクタのリファレンスページに「最近のチャット」と記載されているように取得できる数には限りがあります。

※テストしたアカウントでは97件のチャットが取得できていました。このアカウントには実際にはもっと多くのチャットが存在しています。

 

※取得できるアイテム数に制限があるアクションのなかには、改ページ処理をonにすることでより多くのアイテムが取得できるものもありますが、「チャット一覧を作成」アクションにはありません。

 

[取得できるプロパティが少ない]

出力として参照できるプロパティがやや少なめです。せめてメンバーの情報は欲しいところです。

 

 

 

Graph API を使えばもっと取得できる

ですが、Graph API を利用することでもっと多くのチャットを取得することができます。Microsoft Teams コネクタの「Microsoft Graph HTTP 要求を送信する」アクションから実行できますので、Premiumコネクタが利用できないPower Automate Basicライセンス(Microsoft 365 付属のPower Automate)でも利用できます。

learn.microsoft.com

 

「チャット一覧を作成」アクションと比較すると、下記のようなメリットがあります。

  • 「チャット一覧を作成」アクションより多くのアイテムが取得できる
  • メンバー情報も取得できる
  • 最後に投稿されたメッセージも取得できる
  • 取得したチャットのリストをソートすることができる
  • 「チャット一覧を作成」アクションより複雑なフィルター条件が指定できる

 

 

取得できる情報

データ件数

テストしたアカウントでは「チャット一覧を作成」アクションでは97件のチャットが取得できていました。

一方Graph APIで取得した場合は433件のチャットを取得できています。

 

プロパティ

同じチャットをGraph APIで取得した情報と「チャット一覧を作成」アクションの出力を比較してみます。「チャット一覧を作成」アクションの出力と比較すると情報量の差は歴然です。

[Graph APIで取得]

 

[「チャット一覧を作成」アクションの出力]

 

プロパティにどのような情報が含まれているかはこちらのページで確認できます。

learn.microsoft.com

 

 

フロー全体図

サンプルフローの解説です。

今回使用するGraph API の「チャットを一覧表示する」は、一度に最大50件までしか取得できません。しかし、50件以上のチャットが存在する場合は50件ごとにページ処理が行われ、@odata.nextLink プロパティに次のページのURLが含まれます。この為、Do UntilアクションでnextLinkが無くなるまで取得を繰り返す処理になります。

 

フロー解説

1.フロー手動でトリガーする

今回はサンプルフローの為、このトリガーでユーザー操作で実行します。

 

2.[Variable]変数の初期化-NextLink

@odata.nextLink プロパティの値を格納するための変数です。

  • Name
    • NextLink
  • Type
    • String

 

3.[Variable]変数の初期化-Chats

取得したチャットを格納する変数です。

  • Name
    • Chats
  • Type
    • Array

 

3.[Microsoft Teams]Microsoft Graph HTTP 要求を送信する-chats

Graph APIでチャットの一覧を取得します(1回目)

 

4.[Variable]変数の設定-chats

変数に取得したチャットを格納します。

 

5.[Variable]変数の設定-NextLink

次ページのURLを変数に格納します。

  • Name
    • NextLink
  • Value
    • @{outputs('Microsoft_Graph_HTTP_要求を送信する-chats')?['body']?['@odata.nextLink']}

 

6.[Control]Do Until

NextLinkが空になるまで処理を繰り返します。

  • Loop Until
    • length(variables('NextLink'))
    • is equal to
    • 0

 

6-1.[Microsoft Teams]Microsoft Graph HTTP 要求を送信する-chats-2

Graph APIでチャットの一覧を取得します(2回目以降)

  • URI
    • @{variables('NextLink')}
    • 直前のHTTPアクション実行で取得したnextLinkのURLを指定することで続きの50件を取得する形になります。
  • メソッド
    • GET

 

6-2.[Data Control]作成-union

union関数で、変数chatsの値と6-1で取得した値を結合します。

  • 入力
    • union(
      variables('Chats'),
      body('Microsoft_Graph_HTTP_要求を送信する-chats-2')?['value']
      )

 

6-3.[Vairiables]変数の設定-chats-2

6-2で結合したものを変数chatsに格納します。

  • Name
    • Chats
  • Value
    • @{outputs('作成-union')}

 

6-4.[Vairiables]変数の設定-NextLink-2

6-1の出力に含まれるnextLinkの値を変数nextLinkに格納します。

  • Name
    • NextLink
  • Value
    • @{body('Microsoft_Graph_HTTP_要求を送信する-chats-2')?['@odata.nextLink']}

 

 

7.[Data Control]作成-Chats

処理後の変数Chatsの中身を確認するためのアクションです。

  • 入力
    • @{variables('Chats')}

 

8.[Data Control]作成-件数確認

取得したチャットの件数を確認するためのアクションです。

  • 入力
    • length(variables('Chats'))

 

 

さいごに

Microsoft Graph HTTP 要求を送信する」アクションでGraph APIを利用することで、Microsoft Teamsコネクタの制限を超えたことができるようになります。

すべてのGraph APIgが利用できるわけではないという点に注意が必要です。

また、Graph APIを利用することで、ローコードのクラウドフローとしては複雑さが格段に増します。業務利用する場合は後々の引継ぎができるかといった観点でも要検討かもしれません。