【发布时间】:2020-02-14 13:50:02
【问题描述】:
我正在使用 Microsoft Graph API 通过 Node.js 订阅日历事件的通知。在阅读Reduce missing subscriptions and notifications for Outlook resources (preview) 最佳实践的文档后,它说:
Outlook 中的某些事件可能会导致订阅被删除。 这些事件包括:
- 用户密码已重置
- 用户的设备不合规
- 用户的帐户已被撤销
当此类事件发生时,Outlook 会发送一个特殊的生命周期 通知、订阅已移除。
Outlook 还会发送另一个生命周期通知,如果有 无法将通知发送到应用。
订阅 Outlook 资源通知的应用,例如 消息和事件,应该监听订阅已移除和错过 信号:
- 收到订阅已移除通知后,应用程序应 重新创建订阅以保持连续流动。
- 收到错过的通知后,应用程序应重新同步资源 使用 Microsoft Graph 的数据。
要接收生命周期通知,您 可以使用已经收到的现有 notificationUrl 端点 资源通知,或者您可以注册一个单独的 接收订阅的生命周期通知网址已删除和错过 通知在单独的端点中。
订阅用户的日历事件后,我会毫无问题地收到更改通知,但如果我更改用户的密码,我应该会收到生命周期事件通知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)
【问题讨论】:
-
永远不要依赖 Microsoft 通知和 API,您需要捕获任何类型的通知和 API 调用错误。如果您的 API 调用响应 4xx 标头,那么您必须根据错误代码和消息执行相关操作。
-
请注意“我/事件”,它仅适用于主日历。如果有,您必须为每个日历创建一个额外的通知渠道。
-
我也注意到@Luis Leon 分享的完全相同的问题。任何人都可以回答这个问题。
标签: javascript node.js outlook notifications microsoft-graph-api