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

JuH*_*Lee 6 http node.js 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"
}
Run Code Online (Sandbox Code Playgroud)

但是,每当更改单个事件时,我都会收到来自订阅的多个 POST 调用(2~4)(所有这些调用都具有相同的主体)。

只有一个订阅有效,一个日历,我正在响应状态代码 204 的请求,没有任何内容(用邮递员测试)。

这是一个大问题,因为每当请求进来时我都会更新数据库。

有没有人遇到过这个问题?我一直在寻找没有任何结果。

任何投入将不胜感激!!=)。

leh*_*htu 8

我有同样的问题。在办公室日历中创建新事件时,我每次都会收到一条通知,ChangeType: Created同时收到三条通知ChangeType: Updated。当我在办公室取消活动时,我总是收到 3 x 更新通知,最后是 1 x ChangeType: Deleted

您可以在这里做的是使用 ChangeKey 验证。每次您从办公室收到新通知时,您都必须从 API 请求该事件,对吗?

获取该事件后,您可以检查 event.ChangeKey 属性是否已更改。

它与网站中的 etag 相同。如果内容发生变化,etag 哈希值也会发生变化。

因此,当您收到Created通知时,获取该事件的 ChangeKey 并将其存储到数组或数据库中,每当收到通知时,请记住验证数组或数据库中是否已经有该事件的 ID,以及 ChangeKey 是否已更改。如果 ChangeKey 与上次相同,则无需在 db 中更新该事件。

这也适用于重复发生的事件,即使一个事件发生了变化,SeriesMaster 事件的 ChangeKey 也会发生变化。

  • 谢谢,非常有用。现在是 2020 年,我希望 Microsoft 首先在其通知中发送 ChangeKey(或某种更改日志)。这可以节省大量时间,而且对他们也有好处(更少的传入流量来推断更改)。 (3认同)
  • 现在已经2023年了,我仍然面临着上述的烦恼。任何有关此的帮助将不胜感激。 (3认同)
  • 现在已经 2022 年了,我仍然无法度过这个难关……我收到了多个通知。有没有一种方法可以跟踪我们最初在通知中收到的数据是否确实发生了任何变化。非常感谢任何人的帮助! (2认同)
  • 快到 2024 年了。同样的问题,微软的反应很差。当我有 20000 个用户时,这是一个大问题,因为没有办法阻止这种回调泛滥, (2认同)