Уведомления об изменениях для ресурсов Microsoft Teams

Уведомления об изменениях для ресурсов Microsoft Teams с помощью Microsoft Graph позволяют подписаться на изменения ресурса (создание, обновление и удаление). Уведомления об изменениях предоставляют модель с низкой задержкой, что позволяет поддерживать подписку. Вы также можете получить данные ресурсов в уведомлениях и избежать вызова API для получения полезных данных.

Примечание.

Максимальный срок действия подписки — 60 минут. однако подписки можно продлевать до тех пор, пока вызывающий объект не получите разрешение на доступ к ресурсу.

Типы уведомлений об изменениях

Microsoft Teams поддерживает два типа уведомлений об изменениях:

  • Уведомление об изменении для отслеживания всех изменений, связанных с ресурсом в клиенте: например, вы можете подписаться на изменения в сообщениях в любом канале в клиенте и получать уведомления всякий раз, когда сообщение создается, обновляется или удаляется в любом канале в клиенте. Эти уведомления могут иметь требования к лицензированию и оплате, например уведомления об изменениях для сообщений и членства.

  • Уведомление об изменениях для отслеживания всех изменений для определенного ресурса: Например, вы можете подписаться на изменения в сообщениях в определенном канале и получать уведомления при создании, обновлении или удалении сообщения.

Дополнительные сведения о том, какие ресурсы поддерживают определенные типы уведомлений об изменениях, см. в статье Уведомления об изменениях Microsoft Graph.

Поддерживаемые ресурсы

В следующей таблице перечислены ресурсы Microsoft Teams, поддерживающие уведомления об изменениях, и соответствующие пути к ресурсам. Примените путь к ресурсу для сценария, как указано при создании подписки. Тип полезных данных пути к ресурсу — это тип в столбце "Ресурс" или в коллекции этого типа.

Примечание.

Подписки на ресурсы, помеченные звездочкой (*), доступны только в конечной точке /beta .

Ресурс Поддерживаемые пути ресурсов Можно ли данные ресурсов включать в уведомления
Вызовы TeamsRecording Все записи в организации: communications/onlineMeetings/getAllRecordings
Все записи для определенного собрания: communications/onlineMeetings/{onlineMeetingId}/recordings
Запись звонка, которая становится доступной на собрании, организованном определенным пользователем: users/{userId}/onlineMeetings/getAllRecordings
Запись звонка, которая становится доступной на собрании, где установлено определенное приложение Teams: appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings *
Да
Вызов TeamsTranscript Все расшифровки в организации: 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
Да
chatMessage Teams Изменения в сообщениях чата во всех каналах во всех командах:
/teams/getAllMessages
Изменения в сообщениях чата на определенном канале:
/teams/{id}/channels/{id}/messages
Изменения в сообщениях чата во всех чатах:
/chats/getAllMessages
Изменения в сообщениях чата в конкретном чате:
/chats/{id}/messages
Изменения в сообщениях чата во всех чатах, в которых участвует конкретный пользователь:
/users/{id}/chats/getAllMessages
Изменения в сообщениях чата во всех чатах в клиенте, где установлено определенное приложение Teams:
/appCatalogs/teamsApps/{id}/installedToChats/getAllMessages
Да
conversationMember в Teams Изменения участия в определенной команде:
/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}
Да

Полезные данные уведомлений

Вы можете получать уведомление с данными ресурса или без нее в зависимости от подписки. Подписка с данными ресурса позволяет получить полезные данные сообщения и уведомление, устраняя необходимость обратного вызова и получения содержимого.

Уведомления с данными ресурсов

Для уведомлений с данными ресурсов полезные данные выглядят следующим образом. Эти полезные данные предназначены для уведомления, соответствующего ресурсу сообщения чата. Фактическое уведомление включает свойства resource и resourceData, представляющие ресурс, который вызвал уведомление.

{
    "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')"
  }
}

В предыдущем примере показано уведомление, соответствующее ресурсу сообщений чата. Фактическое уведомление включает свойства resource и resourceData, представляющие ресурс, который вызвал уведомление. Свойства resource и @odata.id можно использовать для вызовов в Microsoft Graph, чтобы получить полезные данные ресурса.

Примечание.

Вызовы GET всегда возвращают текущее состояние ресурса. Если ресурс изменяется между отправкой уведомления и получением ресурса, операция возвращает обновленный ресурс.