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 的请求,没有任何内容(用邮递员测试)。
这是一个大问题,因为每当请求进来时我都会更新数据库。
有没有人遇到过这个问题?我一直在寻找没有任何结果。
任何投入将不胜感激!!=)。
我有同样的问题。在办公室日历中创建新事件时,我每次都会收到一条通知,ChangeType: Created
同时收到三条通知ChangeType: Updated
。当我在办公室取消活动时,我总是收到 3 x 更新通知,最后是 1 x ChangeType: Deleted
。
您可以在这里做的是使用 ChangeKey 验证。每次您从办公室收到新通知时,您都必须从 API 请求该事件,对吗?
获取该事件后,您可以检查 event.ChangeKey 属性是否已更改。
它与网站中的 etag 相同。如果内容发生变化,etag 哈希值也会发生变化。
因此,当您收到Created
通知时,获取该事件的 ChangeKey 并将其存储到数组或数据库中,每当收到通知时,请记住验证数组或数据库中是否已经有该事件的 ID,以及 ChangeKey 是否已更改。如果 ChangeKey 与上次相同,则无需在 db 中更新该事件。
这也适用于重复发生的事件,即使一个事件发生了变化,SeriesMaster 事件的 ChangeKey 也会发生变化。