💻

Teams Export API のライセンスの考え方

2022/02/15に公開

はじめに

Microsoft Graph には、Microsoft Teams に関する API も存在します。その中で、チャットやチャネルでのメッセージを取得するための Graph API のアクセス許可として、以下のようなものが存在しています。

  • Chat
    • Chat.Read.All
    • Chat.ReadBasic.All
    • Chat.ReadWrite.All
  • ChannelMessage
    • ChannelMessage.Read.All

Microsoft Graph を使用して Microsoft Teams 内で行われたメッセージを取得したいニーズは、アプリケーションで Microsoft Teams で送信されたメッセージ内容を使用したい他にも、組織のコンプライアンス管理やガバナンスの観点で必要になることがあるかと思います。
しかしながら、Microsoft Teams でメッセージを取得する際には、Teams Export API というものが存在するため、メッセージの取得時にはその方法に注意をしなければなりません。

Teams Export API とは何か

Microsoft Teams には、 Teams Export API と呼ばれる API があります。これは組織内にいるユーザーが行った DM やチャネルメッセージをエクスポートできる機能で、基本的には監査やコンプライアンスなどの観点で利用されるものになります。公式ドキュメントはこちらです。

https://docs.microsoft.com/en-us/microsoftteams/export-teams-content

Teams Export API を使用すると、以下のことが実現可能になります。

  • Teams チーム内のメッセージを一括で出力(ただしリアクション情報はなし)
  • ユーザー削除済みメッセージの出力(ただし、削除後 21 日が経過したものは不可)

出力されるチャットデータは、JSON 形式となります。JSON 内の各プロパティについての説明は、こちらを参照してください。

https://docs.microsoft.com/en-us/graph/api/resources/chatmessage?view=graph-rest-beta#properties

Teams Export API については、基本的には以下でアクセスし、情報を取得します。

GET https://graph.microsoft.com/v1.0/users/{id}/chats/getAllMessages

または

GET https://graph.microsoft.com/v1.0/teams/{id}/channels/getAllMessages

{id} には、ユーザーのオブジェクト ID や Teams チーム (Microsoft 365 グループ) のオブジェクト ID が入ります。こちらは Microsoft Graph API をはじめ、Azure AD 管理センターなどを利用することで確認可能です。
基本的に、getAllMessages = Teams Export API を利用 と覚えておけば良いです。
なお、こちらの API は アプリケーションの許可 レベルでの実行が必要であり、 委任されたアクセス許可 では実行できません。実行にあたっては、以下の API アクセス許可が必要としますので、事前にアクセス許可を付与する必要があります。

  • Chat.Read.All
  • ChannelMessage.Read.All
  • User.Read.All

また、こちらの API は非常に強力なものになるため、使用する場合は事前に専用フォームから申請を行う必要がある点も留意してください。
Teams Export API を使用する対象、アプリ情報、利用目的などを入力する必要があります。

https://aka.ms/teamsgraph/requestaccess

Teams Export API の課金体系

Teams Export API には、いくつかの課金体系が存在します。つまり、誰でも簡単に無償で利用することはできない、ということです。
先述の通り、利用には事前に専用フォームへの申請が必要というのはありますが、それ以外に課金の観点でも注意が必要です。

Teams Export API には、モデル Aモデル B評価モード の 3 つの種類があります。
Teams Export API を使用する際は、基本的にはモデルパラメーター (model=A/model=B) を付与します。付与していない場合は、既定で評価モードが適用されます。

モデル 利用用途 説明
A セキュリティ または コンプライアンス機能としての利用 特定の E5 ライセンスを所持しているユーザーに対してアプリケーションから Teams Export API を実行する場合、適用することが可能
月単位で各 E5 ライセンス所有ユーザーに対し シード容量 と呼ばれる容量が提供されており、シード容量の範囲内であれば E5 ライセンスのみで Teams Export API を利用できる
シード容量は 1 アプリごとに対して適用される
シード容量を超過した分については、別途課金が行われる
B セキュリティ または コンプライアンス機能以外としての利用 ライセンスの有無に関係なく利用可能
すべての Teams Export API 利用に対して課金が行われる
評価 検証やテストなど ライセンスの有無に関係なく利用可能
アプリごとに月間で シード容量 が提供されており、シード容量の範囲内であれば無償で利用可能
シード容量を超過した際は HTTP 402 エラー が返される

なお、現在 モデル B については無償で利用可能です (2022/2 時点)
実際にモデル A や評価モードで提供されるシード容量、課金時のコスト計算については、公式ドキュメントで確認してください。

https://docs.microsoft.com/en-us/graph/teams-licenses#modela-requirements

(補足) Teams Export API を使用しない形で Teams のメッセージを取得したい場合

Teams チームのチャネルでメッセージを取得したい場合は、以下の手順でメッセージを取得することができます。

  1. チャネル内のメッセージ一覧を取得
  2. 特定の投稿メッセージに対する返信メッセージを取得

詳細については、下記を確認してください。

https://docs.microsoft.com/en-us/graph/api/chat-get?view=graph-rest-1.0&tabs=http

https://docs.microsoft.com/en-us/graph/api/chatmessage-list-replies?view=graph-rest-1.0&tabs=http

こちらの API 利用についてはライセンスの要件などはなく、API 利用時の課金コストもありません。ただし、一部の API については、Teams Export API 同様、API が保護されているため、先述の専用フォームにて申請が必要です。

1:1 チャットについても、同様の流れになります。
詳細は以下を確認してください。

https://docs.microsoft.com/en-us/graph/api/chat-list?view=graph-rest-1.0&tabs=http

https://docs.microsoft.com/en-us/graph/api/chat-list-messages?view=graph-rest-1.0&tabs=http

Discussion