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

时间:2016-11-03 22:24:17

标签: node.js http office365api 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,没有任何内容(使用邮递员测试)。

这是一个巨大的问题,因为我会在请求进入时更新数据库。

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

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

1 个答案:

答案 0 :(得分:2)

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

您可以在此处执行的操作是使用ChangeKey验证。每当您从办公室收到新通知时,您都必须从API请求该事件,对吗?

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

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

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

中更新该事件

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