node.js - Microsoft Graph Webhook/订阅,将多个帖子发送到我的 notificationUrl

标签 node.js http office365api microsoft-graph-api

我正在尝试通过 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/

相关文章:

node.js - axios 内请求/Express 上的 POST 请求

node.js - 获取 req.param 未定义

node.js - 使用 express 在 nodejs 中延迟 ack

office365 - 创建群组日历事件失败

office365 - Office 365 邮件统计

c# - 通过 odata.context Url 获取 Office 365 Service Communications API 的元数据

node.js - Node : node-gyp rebuild - Access is denied

Node.js、Socket.io、Redis pub/sub 大容量、低延迟困难

web-services - RESTEasy 客户端代理抢占式基本身份验证

javascript - 在 HTTP 仍在进行时进行过滤 Angular