Создание подписки

Пространство имен: microsoft.graph

Важно!

API версии /beta в Microsoft Graph могут быть изменены. Использование этих API в производственных приложениях не поддерживается. Чтобы определить, доступен ли API в версии 1.0, используйте селектор версий.

Создание подписки для приложения прослушивателя, позволяющей ему получать уведомления об изменениях определенного типа в указанном ресурсе в Microsoft Graph.

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

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

Этот API доступен в следующих национальных облачных развертываниях.

Глобальная служба Правительство США L4 Правительство США L5 (DOD) Китай управляется 21Vianet

Разрешения

Для создания подписки требуется разрешение на чтение ресурса. Например, чтобы получать уведомления об изменениях в сообщениях, приложению требуются разрешения Mail.Read.

В зависимости от ресурса и типа требующегося разрешения (делегированное или для приложения) разрешение, указанное в приведенной ниже таблице, является наименее привилегированным разрешением, необходимым для вызова этого API. Чтобы узнать больше, в том числе, как соблюдать осторожность перед выбором разрешений, найдите следующие разрешения в Разрешениях.

Примечание.

  • Из-за ограничений безопасности подписки Microsoft Graph не поддерживают разрешения на доступ на запись, если требуются только разрешения на доступ на чтение.
  • Некоторые ресурсы поддерживают уведомления об изменениях в нескольких сценариях, каждый из которых может требовать разных разрешений. В таких случаях используйте путь к ресурсу, чтобы дифференцировать сценарии.
Поддерживаемый ресурс Делегированное (рабочая или учебная учетная запись) Делегированное (личная учетная запись Майкрософт) Приложение
callRecord Не поддерживается. Не поддерживается. CallRecords.Read.All
callRecording
communications/onlineMeetings/getAllRecordings
Любая запись становится доступной в клиенте.
Не поддерживается. Не поддерживается. OnlineMeetingRecording.Read.All
callRecording
communications/onlineMeetings/{onlineMeetingId}/recordings
Любая запись становится доступной для определенного собрания.
OnlineMeetingRecording.Read.All Не поддерживается. OnlineMeetingRecording.Read.All
callRecording
users/{userId}/onlineMeetings/getAllRecordings
Запись звонка, которая становится доступной на собрании, организованном определенным пользователем.
OnlineMeetingRecording.Read.All Не поддерживается. OnlineMeetingRecording.Read.All
callRecording
appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings
Запись звонков, которая становится доступной на собрании, где установлено определенное приложение Teams.
Не поддерживается. Не поддерживается. OnlineMeetingRecording.Read.All, OnlineMeetingRecording.Read.Chat
callTranscript
communications/onlineMeetings/getAllTranscripts
Любая расшифровка становится доступной в клиенте.
Не поддерживается. Не поддерживается. OnlineMeetingTranscript.Read.All
callTranscript
communications/onlineMeetings/{onlineMeetingId}/transcripts
Любое расшифровка становится доступной для определенного собрания.
OnlineMeetingTranscript.Read.All Не поддерживается. OnlineMeetingTranscript.Read.All
callTranscript
users/{userId}/onlineMeetings/getAllTranscripts
Расшифровка звонка, которая становится доступной на собрании, организованном определенным пользователем.
OnlineMeetingTranscript.Read.All Не поддерживается. OnlineMeetingTranscript.Read.All
callTranscript
appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTranscripts
Расшифровка звонка, которая становится доступной на собрании, где установлено определенное приложение Teams.
Не поддерживается. Не поддерживается. OnlineMeetingTranscript.Read.All, OnlineMeetingTranscript.Read.Chat
channel
/teams/getAllChannels
Все каналы в организации.
Не поддерживается. Не поддерживается. Channel.ReadBasic.All, ChannelSettings.Read.All
channel
/teams/{id}/channels
Все каналы в определенной команде в организации.
Channel.ReadBasic.All, ChannelSettings.Read.All Не поддерживается. Channel.ReadBasic.All, ChannelSettings.Read.All
chat
/chats
Все чаты в организации.
Не поддерживается. Не поддерживается. Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All
chat
/chats/{id}
Определенный чат.
Chat.ReadBasic, Chat.Read, Chat.ReadWrite Не поддерживается. ChatSettings.Read.Chat, ChatSettings.ReadWrite.Chat, Chat.Manage.Chat, Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All
chat
/appCatalogs/teamsApps/{id}/installedToChats
Все чаты в организации, где установлено определенное приложение Teams.
Не поддерживается. Не поддерживается. Chat.ReadBasic.WhereInstalled, Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled
chatMessage
/teams/{id}/channels/{id}/messages
Все сообщения и ответы в определенном канале.
ChannelMessage.Read.All, Group.Read.All, Group.ReadWrite.All Не поддерживается. ChannelMessage.Read.Group, ChannelMessage.Read.All
chatMessage
/teams/getAllMessages
Все сообщения канала в организации.
Не поддерживается. Не поддерживается. ChannelMessage.Read.All
chatMessage
/chats/{id}/messages
Все сообщения в чате.
Chat.Read, Chat.ReadWrite Не поддерживается. Chat.Read.All
chatMessage
/chats/getAllMessages
Все сообщения чата в организации.
Не поддерживается. Не поддерживается. Chat.Read.All
chatMessage
/users/{id}/chats/getAllMessages
Сообщения чата для всех чатов, в которые входит конкретный пользователь.
Chat.Read, Chat.ReadWrite Не поддерживается. Chat.Read.All, Chat.ReadWrite.All
chatMessage
/appCatalogs/teamsApps/{id}/installedToChats/getAllMessages
Сообщения чата для всех чатов в организации, где установлено определенное приложение Teams.
Не поддерживается. Не поддерживается. Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled
contact Contacts.Read Contacts.Read Contacts.Read
conversationMember
/chats/getAllMembers
Участники всех чатов в организации.
Не поддерживается. Не поддерживается. ChatMember.Read.All, ChatMember.ReadWrite.All, Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All
conversationMember
/chats/{id}/members
Участники определенного чата.
ChatMember.Read, ChatMember.ReadWrite, Chat.ReadBasic, Chat.Read, Chat.ReadWrite Не поддерживается. ChatMember.Read.Chat, Chat.Manage.Chat, ChatMember.Read.All, ChatMember.ReadWrite.All, Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All
conversationMember
/appCatalogs/teamsApps/{id}/installedToChats/getAllMembers
Участники чата для всех чатов в организации, в которой установлено определенное приложение Teams.
Не поддерживается. Не поддерживается. ChatMember.Read.WhereInstalled, ChatMember.ReadWrite.WhereInstalled, Chat.ReadBasic.WhereInstalled, Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled
conversationMember
/teams/getAllMembers
Участники во всех командах в организации.
Не поддерживается. Не поддерживается. TeamMember.Read.All, TeamMember.ReadWrite.All
conversationMember
/teams/{id}/members
Участники определенной команды.
TeamMember.Read.All Не поддерживается. TeamMember.Read.All
conversationMember
/teams/{id}/channels/getAllMembers
Участники всех частных каналов определенной команды.
Не поддерживается. Не поддерживается. ChannelMember.Read.All
conversationMember
/teams/getAllChannels/getAllMembers
Не поддерживается. Не поддерживается. ChannelMember.Read.All
driveItem (личное хранилище OneDrive пользователя) Не поддерживается. Files.ReadWrite Не поддерживается.
driveItem (OneDrive для бизнеса) Files.ReadWrite.All Не поддерживается. Files.ReadWrite.All
event Calendars.Read Calendars.Read Calendars.Read
group Group.Read.All Не поддерживается. Group.Read.All
group conversation Group.Read.All Не поддерживается. Не поддерживается.
list Sites.ReadWrite.All Не поддерживается. Sites.ReadWrite.All
message Mail.ReadBasic, Mail.Read Mail.ReadBasic, Mail.Read Mail.Read
onlineMeeting Не поддерживается. Не поддерживается. OnlineMeetings.Read.All, OnlineMeetings.ReadWrite.All
presence Presence.Read.All Не поддерживается. Не поддерживается.
printer Не поддерживается. Не поддерживается. Printer.Read.All, Printer.ReadWrite.All
printTaskDefinition Не поддерживается. Не поддерживается. PrintTaskDefinition.ReadWrite.All
security alert SecurityEvents.ReadWrite.All Не поддерживается. SecurityEvents.ReadWrite.All
team
/teams
Все команды в организации.
Не поддерживается. Не поддерживается. Team.ReadBasic.All, TeamSettings.Read.All
team
/teams/{id}
Определенная команда.
Team.ReadBasic.All, TeamSettings.Read.All Не поддерживается. Team.ReadBasic.All, TeamSettings.Read.All
todoTask Tasks.ReadWrite Tasks.ReadWrite Не поддерживается.
user User.Read.All User.Read.All User.Read.All
virtualEventWebinar VirtualEvent.Read Не поддерживается. VirtualEvent.Read.All
baseTask (не рекомендуется) Tasks.ReadWrite Tasks.ReadWrite Не поддерживается.

Примечание.

Следующие разрешения используют согласие для конкретного ресурса:

  • OnlineMeetingRecording.Read.Chat
  • OnlineMeetingTranscript.Read.Chat
  • ChatSettings.Read.Chat
  • ChatSettings.ReadWrite.Chat
  • Chat.Manage.Chat
  • ChannelMessage.Read.Group
  • ChatMember.Read.Chat

chatMessage

Подписки chatMessage можно указать, чтобы включить данные ресурсов. Если задано включение данных ресурсов (includeResourceData имеет значение true), требуется шифрование. Подписку нельзя создать, если для таких подписок не указан encryptionCertificate.

Необходимо использовать Prefer: include-unknown-enum-members заголовок запроса, чтобы получить следующие значения в перечислении chatMessagemessageTypeс возможностью развития: systemEventMessage for /teams/{id}/channels/{id}/messages и /chats/{id}/messages resource.

Примечание.

/teams/getAllMessages, /chats/getAllMessages, /me/chats/getAllMessages, /users/{id}/chats/getAllMessagesи /appCatalogs/teamsApps/{id}/installedToChats/getAllMessages являются лимитными API; могут применяться модели оплаты и требования к лицензированию . /teams/getAllMessages и /chats/getAllMessages поддерживают как model=Amodel=B модели оплаты, /me/chats/getAllMessagesтак и , /users/{id}/chats/getAllMessagesи /appCatalogs/teamsApps/{id}/installedToChats/getAllMessages поддерживают только model=B. Если в запросе не указана модель оплаты, будет использоваться режим оценки по умолчанию.

Примечание.

Чтобы добавить или изменить модель оплаты для подписанного ресурса уведомления об изменениях, необходимо создать новую подписку на уведомление об изменениях с новой моделью оплаты. Обновление существующего уведомления об изменениях не работает.

conversationMember

Подписки conversationMember можно указать для включения данных ресурсов. Если задано включение данных ресурсов (includeResourceData имеет значение true), требуется шифрование. Создание подписки завершается сбоем, если не указан encryptionCertificate.

Примечание.

/teams/getAllMembers, /chats/getAllMembersи /appCatalogs/teamsApps/{id}/installedToChats/getAllMembers являются лимитными API- интерфейсами; могут применяться модели оплаты и требования к лицензированию . /teams/getAllMembers и /chats/getAllMembers поддерживают как модели оплаты, так model=A и model=B . /appCatalogs/teamsApps/{id}/installedToChats/getAllMembers поддерживает только model=B. Если в запросе не указана модель оплаты, будет использоваться режим оценки по умолчанию.

Примечание.

Чтобы добавить или изменить модель оплаты для подписанного ресурса уведомления об изменениях, необходимо создать новую подписку на уведомление об изменениях с новой моделью оплаты. Обновление существующего уведомления об изменениях не работает.

команда, канал и чат

Подписки на команды, каналы и чат можно указать для включения данных ресурсов. Если задано включение данных ресурсов (includeResourceData имеет значение true), требуется шифрование. Создание подписки завершается сбоем, если не указан encryptionCertificate.

Примечание.

/appCatalogs/teamsApps/{id}/installedToChats имеет требования к лицензированию и оплате, в частности, поддерживает только model=B. Если модель не указана, будет использоваться режим оценки.

Примечание.

Чтобы добавить или изменить модель оплаты для подписанного ресурса уведомления об изменениях, необходимо создать новую подписку на уведомление об изменениях с новой моделью оплаты. Обновление существующего уведомления об изменениях не работает.

Пример запроса

Укажите параметр запроса model в свойстве ресурса в тексте запроса.

POST https://graph.microsoft.com/v1.0/subscriptions
Content-type: application/json

{
   "changeType": "created",
   "notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
   "resource": "chats/getAllMessages?model=A",
   "expirationDateTime":"2016-11-20T18:23:45.9356913Z",
   "clientState": "secretClientValue",
   "latestSupportedTlsVersion": "v1_2"
}

driveItem

К подпискам на элементы OneDrive применяются дополнительные ограничения. Ограничения применяются для создания, а также управления (получение, обновление и удаление) подписками.

В личном хранилище OneDrive можно подписаться на корневую папку или любую вложенную папку в этом хранилище. В OneDrive для бизнеса можно подписаться только на корневую папку. Уведомления об изменениях отправляются для запрошенных изменений в папке с подпиской или любом файле, папке или других экземплярах driveItem в ее иерархии. Вы не можете подписаться на экземпляры drive или driveItem , которые не являются папками, например на отдельные файлы.

OneDrive для бизнеса и SharePoint поддерживают отправку уведомлений приложений о событиях безопасности, которые происходят в driveItem. Чтобы подписаться на эти события, добавьте заголовок prefer:includesecuritywebhooks в запрос на создание подписки. После создания подписки вы будете получать уведомления об изменениях разрешений для элемента. Этот заголовок относится к SharePoint и OneDrive для бизнеса, но не к потребительским учетным записям OneDrive.

contact, event и message

Вы можете подписаться на изменения в ресурсах контактов, событий или сообщений Outlook и при необходимости указать в полезных данных запроса POST, включать ли зашифрованные данные ресурсов в уведомления.

Для операций создания и управления (получение, обновление и удаление) подписке требуется область чтения ресурса. Например, чтобы получать уведомления об изменениях в сообщениях, приложению необходимо разрешение Mail.Read. Уведомления об изменениях Outlook поддерживают области делегированных разрешений и разрешений приложений. Обратите внимание на указанные ниже ограничения.

  • Делегированные разрешения поддерживают подписку на элементы в папках только в почтовом ящике пользователя, выполнившего вход. Например, вы не можете использовать делегированное разрешение Calendars.Read для подписки на события в почтовом ящике другого пользователя.

  • Чтобы подписаться на уведомления об изменениях контактов Outlook, событий или сообщений в общих или делегированных папках:

    • Используйте соответствующее разрешение приложения для подписки на изменения элементов в папке или почтовом ящике любого пользователя в клиенте.
    • Не используйте разрешения на общий доступ Outlook (Contacts.Read.Shared, Calendars.Read.Shared, Mail.Read.Shared и их коллеги на чтение и запись), так как они не поддерживают подписку на уведомления об изменении элементов в общих или делегированных папках.

onlineMeetings, присутствие

Подпискам в onlineMeetings и присутствии требуется свойство encryptionCertificate и encryptionCertificateId при создании подписки для уведомлений с зашифрованными данными ресурсов. Дополнительные сведения см. в статье Настройка уведомлений об изменениях для включения данных ресурсов. Дополнительные сведения о подписках на собрания по сети см. в статье Получение уведомлений об изменениях для собраний по сети.

virtualEventWebinar

Подписки на виртуальные события поддерживают только базовые уведомления и ограничены несколькими сущностями виртуального события. Дополнительные сведения о поддерживаемых типах подписок см. в статье Получение уведомлений об изменениях для обновлений виртуальных событий Microsoft Teams.

HTTP-запрос

POST /subscriptions

Заголовки запросов

Имя Тип Описание
Authorization string Bearer {token}. Обязательно.

Текст запроса

Предоставьте в тексте запроса описание объекта subscription в формате JSON.

Отклик

В случае успешного выполнения этот метод возвращает код отклика 201 Created и объект подписки в тексте ответа.

Подробнее о том, как возвращаются ошибки, см. в статье Возвращение ошибок.

Пример

Запрос

Предоставьте в тексте запроса описание объекта subscription в формате JSON. Поля clientState и latestSupportedTlsVersion необязательны.

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

POST https://graph.microsoft.com/beta/subscriptions
Content-type: application/json

{
   "changeType": "created",
   "notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
   "resource": "me/mailFolders('Inbox')/messages",
   "expirationDateTime":"2016-11-20T18:23:45.9356913Z",
   "clientState": "secretClientValue",
   "latestSupportedTlsVersion": "v1_2"
}

Предоставьте в тексте запроса описание объекта subscription в формате JSON. Поля clientState и latestSupportedTlsVersion необязательны.

Поведение повторяющихся подписок

Дублирование подписок запрещено. Если запрос подписки содержит те же значения для changeType и ресурса , что и в существующей подписке, запрос завершается ошибкой с кодом 409 ConflictHTTP и сообщением Subscription Id <> already exists for the requested combinationоб ошибке .

Примеры ресурсов

Ниже приведены допустимые значения для свойства ресурса.

Тип ресурса Примеры
callRecord communications/callRecords
callRecording communications/onlineMeetings/getAllRecordings, communications/onlineMeetings/{onlineMeetingId}/recordings, users/{userId}/onlineMeetings/getAllRecordings, appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings
callTranscript communications/onlineMeetings/getAllTranscripts, communications/onlineMeetings/{onlineMeetingId}/transcripts, users/{userId}/onlineMeetings/getAllTranscripts, appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTranscripts
channel /teams/getAllChannels, /teams/{id}/channels
chat /chats, /chats/{id}
chatMessage chats/{id}/messages, chats/getAllMessages, teams/{id}/channels/{id}/messages, teams/getAllMessages
contact me/contacts
conversationMember /chats/{id}/members, /chats/getAllMembers, /teams/{id}/members, /teams/getAllMembers, /teams/{id}/channels/getAllMembers
driveItem me/drive/root
event me/events
group groups
group conversation groups('{id}')/conversations
list sites/{site-id}/lists/{list-id}
message me/mailfolders('inbox')/messages, me/messages
onlineMeeting /communications/onlineMeetings/?$filter=JoinWebUrl eq '{JoinWebUrl}'
presence /communications/presences/{id} (один пользователь), /communications/presences?$filter=id in ('{id}','{id}',…) (несколько пользователей)
printer print/printers/{id}/jobs
printTaskDefinition print/taskDefinitions/{id}/tasks
team /teams, /teams/{id}
user users
todoTask /me/todo/lists/{todoTaskListId}/tasks
security alert security/alerts?$filter=status eq 'NewAlert'
baseTask (не рекомендуется) /me/tasks/lists/{Id}/tasks

Примечание.

Любой путь, начинающийся с, me также можно использовать с users/{id} вместо me , чтобы нацелиться на конкретного пользователя, а не на текущего пользователя.

Отклик

Ниже показан пример отклика.

Примечание. Объект отклика, показанный здесь, может быть сокращен для удобочитаемости.

HTTP/1.1 201 Created
Content-type: application/json

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#subscriptions/$entity",
  "id": "7f105c7d-2dc5-4530-97cd-4e7ae6534c07",
  "resource": "me/mailFolders('Inbox')/messages",
  "applicationId": "24d3b144-21ae-4080-943f-7067b395b913",
  "changeType": "created",
  "clientState": "secretClientValue",
  "notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
  "expirationDateTime": "2016-11-20T18:23:45.9356913Z",
  "creatorId": "8ee44408-0679-472c-bc2a-692812af3437",
  "latestSupportedTlsVersion": "v1_2",
  "notificationContentType": "application/json"
}

Проверка конечной точки уведомлений

Конечная точка уведомления о подписке (указанная в свойстве notificationUrl ) должна быть способна отвечать на запрос на проверку, как описано в разделе Настройка уведомлений об изменениях данных пользователя. Если проверка завершилась сбоем, запрос на создание подписки возвращает ошибку 400 (неверный запрос).