我正在尝试通过 Microsoft Graph 接收有关日历事件的推送通知
notificationURL 指向运行在 NodeJS 上的 webservice
我的订阅有这些选项。
{
"changeType": "created,updated,deleted",
"notificationUrl": "myurl",
"resource": "users/userid/events?$filter=sensitivity%20eq%20%27Normal%27",
"expirationDateTime":"2016-11-05T18:23:45.9356913Z",
"clientState": "customclientstate"
}
然而,每当单个事件发生更改时,我都会收到来自订阅的多个 POST 调用(2~4)(它们都具有相同的主体)。
只有一个订阅处于活动状态,一个日历,我正在响应状态代码为 204 且没有任何内容的请求(已通过邮递员测试)。
这是一个巨大的问题,因为每当有请求时我都会更新数据库。
有人遇到过这个问题吗?我一直在寻找,没有任何结果。
任何输入将不胜感激!! =).
我有同样的问题。在办公室日历中创建新事件时,我每次都会收到一个带有
ChangeType: Created
的通知,同时会收到三个带有ChangeType: Updated
的通知。当我在办公室取消活动时,我总是收到 3 x 更新通知,最后收到 1 x ChangeType: Deleted
.
你可以在这里做的是使用 ChangeKey 验证。每次你从办公室收到新通知时,你都必须从 API 请求该事件,对吗?
获取该事件后,您可以检查 event.ChangeKey 属性是否已更改。
和网站中的etag一样。如果内容发生变化,etag 哈希也会发生变化。
因此,当您收到
Created
通知时,获取该事件的 ChangeKey 并将其存储到数组或数据库中,每当您收到通知时,请记住验证您是否已经在数组或数据库中拥有该事件的 ID,以及 ChangeKey 是否已更改。如果 ChangeKey 与上次相同,则无需在数据库中更新该事件。
这也适用于重复发生的事件,即使一次发生改变了 SeriesMaster 事件的 ChangeKey 也会改变。
收到更改通知后,您需要使用 2xx 代码将其确认回 Microsoft Graph。
https://learn.microsoft.com/zh-cn/graph/change-notifications-delivery-webhooks?tabs=http
》收到更改通知后,向 Microsoft Graph 发回 2xx 类代码。如果 Microsoft Graph 在 3 秒内没有收到 2xx 类代码,它会尝试多次重新发送更改通知,最多 4 小时。如果Microsoft Graph 在此期间仍未收到 2xx 代码,它会丢弃更改通知。如果客户端应用程序在 3 秒内始终未响应,则通知可能会受到限制。”