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

问题描述 投票:0回答:2

我正在尝试通过 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 且没有任何内容的请求(已通过邮递员测试)。

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

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

任何输入将不胜感激!! =).

node.js http office365api microsoft-graph-api
2个回答
8
投票

我有同样的问题。在办公室日历中创建新事件时,我每次都会收到一个带有

ChangeType: Created
的通知,同时会收到三个带有
ChangeType: Updated
的通知。当我在办公室取消活动时,我总是收到 3 x 更新通知,最后收到 1 x
ChangeType: Deleted
.

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

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

和网站中的etag一样。如果内容发生变化,etag 哈希也会发生变化。

因此,当您收到

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

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


0
投票

收到更改通知后,您需要使用 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 秒内始终未响应,则通知可能会受到限制。”

© www.soinside.com 2019 - 2024. All rights reserved.