Microsoft Teams リソースの通知を変更する

Microsoft Graph を使用して Microsoft Teams リソースの変更通知を使用すると、リソースの変更 (作成、更新、削除) をサブスクライブできます。 変更通知は待機時間の短いモデルを提供し、サブスクリプションを維持 できます。 通知でリソース データを取得し、API を呼び出してペイロードを取得しないようにすることもできます。

注:

サブスクリプションが持続できる最大時間は 60 分です。ただし、サブスクリプションは、呼び出し元がリソースにアクセスするアクセス許可を持つまで更新できます。

変更通知の種類

Microsoft Teams は、次の 2 種類の変更通知をサポートしています。

  • テナント全体のリソースに関するすべての変更を追跡するための変更通知: たとえば、テナント全体のすべてのチャネルのメッセージの変更を購読し、テナント内のチャネルでメッセージが作成、更新、または削除されるたびに通知を受け取ることができます。 これらの通知には、メッセージメンバーシップの変更通知など、ライセンスと支払いの要件がある場合があります。

  • 特定のリソースのすべての変更を追跡するための変更通知: たとえば、特定のチャネルのメッセージの変更をサブスクライブし、メッセージが作成、更新、または削除されるたびに通知を受け取ることができます。

リソースでサポートされている変更通知の種類の詳細については、「Microsoft Graph の変更通知」を参照してください。

サポートされているリソース

次の表に、変更通知をサポートする Microsoft Teams リソースとそれに対応するリソース パスを示します。 サブスクリプションの作成時に指定したシナリオのリソース パス を適用します。 リソース パス ペイロードの型は、"Resource" 列の下の型、またはその型のコレクションです。

注:

アスタリスク (*) でマークされたリソースへのサブスクリプションは、エンドポイントでのみ使用できます /beta

リソース サポートされるリソースのパス 通知には、リソース データを含めることができます。
Teams callRecording organization内のすべての録音:communications/onlineMeetings/getAllRecordings
特定の会議のすべての記録: communications/onlineMeetings/{onlineMeetingId}/recordings
特定のユーザーが開催した会議で使用できる通話記録: users/{userId}/onlineMeetings/getAllRecordings
特定の Teams アプリがインストールされている会議で使用できる通話記録: appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings *
はい
Teams callTranscript organization内のすべてのトランスクリプト:communications/onlineMeetings/getAllTranscripts
特定の会議のすべてのトランスクリプト: communications/onlineMeetings/{onlineMeetingId}/transcripts
特定のユーザーが開催した会議で使用できる通話トランスクリプト: users/{userId}/onlineMeetings/getAllTranscripts
特定の Teams アプリがインストールされている会議で使用できる通話トランスクリプト: appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTrancripts *
はい
Teams チャネル すべてのチームのチャネルに対する変更:
/teams/getAllChannels
特定のチームのチャネルに対する変更:
/teams/{id}/channels
はい
Teams チャット テナント内のチャットに対する変更:
/chats
特定のユーザーに対する変更:
/chats/{id}
特定の Teams アプリがインストールされているテナント内のチャットに対する変更:
/appCatalogs/teamsApps/{id}/installedToChats
はい
Teams chatMessage すべてのチームのすべてのチャンネル内のチャット メッセージに対する変更:
/teams/getAllMessages
特定のチャンネル内のチャット メッセージに対する変更:
/teams/{id}/channels/{id}/messages
すべてのチャット内のチャット メッセージに対する変更:
/chats/getAllMessages
特定のチャット内のチャット メッセージに対する変更:
/chats/{id}/messages
特定のユーザーが含まれるすべてのチャットでのチャット メッセージの変更:
/users/{id}/chats/getAllMessages
特定の Teams アプリがインストールされているテナント内のすべてのチャット内のチャット メッセージに対する変更:
/appCatalogs/teamsApps/{id}/installedToChats/getAllMessages
はい
Teams conversationMember 特定のチームのメンバーシップに対する変更:
/teams/{id}/members
特定のチャットのメンバーシップに対する変更:
/chats/{id}/members
すべてのチャットのメンバーシップの変更:
/chats/getAllMembers
特定のチームのすべてのチャネルのメンバーシップに対する変更:
teams/{id}/channels/getAllMembers
特定の Teams アプリがインストールされているテナント内のすべてのチャットのメンバーシップに対する変更:
/appCatalogs/teamsApps/{id}/installedToChats/getAllMembers
テナント全体のすべてのチャネルのメンバーシップに対する変更:
teams/getAllChannels/getAllMembers
はい
Teams チーム テナント内のすべてのチームに対する変更:
/teams
特定のチームに対する変更:
/teams/{id}
はい

通知のペイロード

サブスクリプションに応じて、リソース データの有無に応じて通知を受け取ることができます。 リソース データをサブスクライブすると、メッセージ ペイロードと通知を取得できるため、コールバックしてコンテンツを取得する必要がなくなります。

リソース データを使用した通知

リソース データを含む通知の場合、ペイロードは次のようになります。 このペイロードは、チャット メッセージ リソースに対応する通知用です。 実際の通知には、通知をトリガーしたリソースを表す resourceresourceData プロパティが含まれます。

{
    "value": [{
        "subscriptionId": "10493aa0-4d29-4df5-bc0c-ef742cc6cd7f",
        "changeType": "created",
        "clientState": "<<--SpecifiedClientState-->>",
        "subscriptionExpirationDateTime": "2021-02-02T10:30:34.9097561-08:00",
        "resource": "chats('19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces')/messages('1612289765949')",
        "resourceData": {
            "id": "1612289765949",
            "@odata.type": "#Microsoft.Graph.chatMessage",
            "@odata.id": "chats('19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces')/messages('1612289765949')"
        },
        "encryptedContent": {
            "data": "<<--EncryptedContent-->",
            "dataKey": "<<--EnryptedDataKeyUsedForEncryptingContent-->>",
            "encryptionCertificateId": "<<--IdOfTheCertificateUsedForEncryptingDataKey-->>",
            "encryptionCertificateThumbprint": "<<--ThumbprintOfTheCertificateUsedForEncryptingDataKey-->>"
        },
        "tenantId": "<<--TenantForWhichNotificationWasSent-->>"
    }],
    "validationTokens": ["<<--ValidationTokens-->>"]
}

トークンの検証とペイロードの暗号化解除の詳細については、「 リソース データを含む変更通知を設定する」を参照してください。

復号化された通知のペイロードは次のようになります。 前の例の復号化されたペイロードは、chatMessage スキーマに準拠しています。 ペイロードは、GET 操作によって返されるものと同様です。

{
  "id": "1612289992105",
  "replyToId": null,
  "etag": "1612289992105",
  "messageType": "message",
  "createdDateTime": "2021-02-02T18:19:52Z",
  "lastModifiedDateTime": "2021-02-02T18:19:52.105Z",
  "lastEditedDateTime": null,
  "deletedDateTime": null,
  "subject": null,
  "summary": null,
  "chatId": "19:8ea0e38b-efb3-4757-924a-5f94061cf8c2_97f62344-57dc-409c-88ad-c4af14158ff5@unq.gbl.spaces",
  "importance": "normal",
  "locale": "en-us",
  "webUrl": null,
  "from": {
    "application": null,
    "device": null,
    "user": {
      "id": "8ea0e38b-efb3-4757-924a-5f94061cf8c2",
      "displayName": "Ramjot Singh",
      "userIdentityType": "aadUser"
    },
    "conversation": null
  },
  "body": {
    "contentType": "text",
    "content": "test"
  },
  "channelIdentity": null,
  "attachments": [],
  "mentions": [],
  "policyViolation": null,
  "reactions": [],
  "replies": [],
  "hostedContents": []
}

リソース データを使用しない通知

リソース データを含まない通知では、GET 呼び出しを行ってメッセージのリソースを取得するために必要な情報が提供されます。 リソース データのない通知のサブスクリプションでは、暗号化証明書は必要ありません (実際のリソース データは送信されないため)。

ペイロードは次のようになります。 このペイロードは、チャネルで送信されるメッセージ用です。

{
  "subscriptionId": "9f9d1ed0-c9cc-42e7-8d80-a7fc4b0cda3c",
  "changeType": "created",
  "tenantId": "<<--TenantForWhichNotificationWasSent-->>",  
  "clientState": "<<--SpecifiedClientState-->>",
  "subscriptionExpirationDateTime": "2021-02-02T11:26:41.0537895-08:00",
  "resource": "teams('fbe2bf47-16c8-47cf-b4a5-4b9b187c508b')/channels('19:4a95f7d8db4c4e7fae857bcebe0623e6@thread.tacv2')/messages('1612293113399')",
  "resourceData": {
    "id": "1612293113399",
    "@odata.type": "#Microsoft.Graph.chatMessage",
    "@odata.id": "teams('fbe2bf47-16c8-47cf-b4a5-4b9b187c508b')/channels('19:4a95f7d8db4c4e7fae857bcebe0623e6@thread.tacv2')/messages('1612293113399')"
  }
}

前の例では、チャット メッセージ リソースに対応する通知を示しています。 実際の通知には、通知をトリガーしたリソースを表す resourceresourceData プロパティが含まれます。 resource@odata.id プロパティは、Microsoft Graph を呼び出してリソースのペイロードを取得するために使用されます。

注:

GET 呼び出しでは、常にリソースの現在の状態が返されます。 通知が送信されてからリソースが取得されるまでの間にリソースが変更された場合、この操作では更新されたリソースが返されます。