我正在尝试通过 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 且没有任何内容的请求(已通过 postman 测试)。
这是个大问题,因为每当有请求时我都会更新数据库。
有人遇到过这个问题吗?我一直在寻找,没有任何结果。
任何输入将不胜感激!! =).
最佳答案
我也有同样的问题。在办公室日历中创建新事件时,我每次都会收到一个带有 ChangeType: Created
的通知,同时会收到三个带有 ChangeType: Updated
的通知。当我在办公室取消事件时,我总是收到 3 条更新通知,最后收到 1 条 ChangeType: Deleted
。
您在这里可以做的是使用 ChangeKey 验证。每次从办公室收到新通知时,您都必须从 API 请求该事件,对吧?
获取该事件后,您可以检查 event.ChangeKey 属性是否已更改。
这与网站中的 etag 相同。如果内容发生变化,etag 哈希也会发生变化。
因此,当您收到 Created
通知时,获取该事件的 ChangeKey 并将其存储到数组或数据库中,每当您收到通知时,请记住验证您是否已经在数组或数据库中拥有该事件的 ID,以及是否ChangeKey 已更改。如果 ChangeKey 与上次相同,则无需在数据库中更新该事件。
这也适用于重复发生的事件,即使一次事件发生了变化,SeriesMaster 事件的 ChangeKey 也会发生变化。
关于node.js - Microsoft Graph Webhook/订阅,将多个帖子发送到我的 notificationUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40412261/