Я использую Microsoft Graph API для подписки на уведомления о событиях календаря через Node. После прочтения документации по рекомендациям для Сокращение недостающих подписок и уведомлений для ресурсов Outlook (предварительный просмотр) , он сообщает, что:
Некоторые события в Outlook могут привести к удалению подписки,Эти события включают в себя:
- Пароль пользователя был сброшен
- Устройство пользователя не соответствует требованиям
- Учетная запись пользователя была аннулирована
Когда такое событие происходит, Outlook отправляет специальное уведомление о жизненном цикле subscriptionRemoved.
Outlook также отправляет другое уведомление о жизненном цикле, пропущенное, если уведомление не может быть доставлено приложению.
Приложение, подписавшееся наУведомления для ресурсов Outlook, таких как сообщения и события, должны прослушивать subscriptionRemoved и пропущенные сигналы:
- После получения уведомления subscriptionRemoved приложение должно заново создать подписку, чтобы поддерживать непрерывный поток.
- При получении пропущенного уведомления приложение должно синхронизировать данные ресурса с помощью Microsoft Graph.
Чтобы получать уведомления о жизненном цикле, вы можете использовать существующую конечную точку messagesUrl, которая уже получает уведомления о ресурсах, или вы можете зарегистрировать отдельный lifecycleNotificationUrl для получения subscriptionRemoved и пропущенных уведомлений в отдельной конечной точке.
После того, как я подписался на события календаря пользователя, я получаю уведомления об изменениях без каких-либо проблем, но если я изменяю пароль пользователя, я должен получить уведомление lifecycleEvent subscriptionRemoved
, как сказано выше;однако после изменения пароля примерно 30 раз я так и не получил уведомление. В чем может быть проблема здесь? Я не смог найти больше информации о том, как вызвать уведомление.
Если это поможет, я подписываюсь на ресурс me/events
с changeType: "created,updated,deleted"
.
const subscriptionOptions = {
changeType: 'created,updated,deleted',
notificationUrl: `node-service-url/outlook-events/${userId}`,
resource: 'me/events',
expirationDateTime: 'someExpirationDateTime',
clientState: 'someClientState'
}
const subscription = await client
.api('/subscriptions')
.post(subscriptionOptions)