当我 create/update/delete 日历时收到两次 outlook 休息推送通知
Receiving outlook rest push notification twice, when I create/update/delete the calender
我有一个要求,我需要在任何日历项目 created/updated/deleted 时收到通知。我按照 Outlook push notification documentation 订阅了日历通知。
我已成功订阅日历活动。但是每当我创建一个新日历时,我都会收到两次通知。
以下是通知请求数据。
第一个通知请求数据:
{
"value": [{
"@odata.type": "#Microsoft.OutlookServices.Notification",
"Id": null,
"SubscriptionId": "OTA0N0MwQj==",
"SubscriptionExpirationDateTime": "2017-09-27T05:30:49.6163119Z",
"SequenceNumber": 1,
"ChangeType": "Created",
"Resource": "https://outlook.office.com/api/v2.0/Users('1520ed5a')/Events('AAMkADAzNDUxODY=')",
"ResourceData": {
"@odata.type": "#Microsoft.OutlookServices.Event",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('1520ed5a')/Events('AAMkADAzNDUxODY=')",
"@odata.etag": "W/\"DwAAABYAAAB4h4N+ELBRSbQKq1A05YT8AADcUdIx\"",
"Id": "AAMkADAzNDUxOD="
}
}]
}
第二次通知请求数据:
{
"value": [{
"@odata.type": "#Microsoft.OutlookServices.Notification",
"Id": null,
"SubscriptionId": "OTA0N0MwQj==",
"SubscriptionExpirationDateTime": "2017-09-27T05:30:49.6163119Z",
"SequenceNumber": 2,
"ChangeType": "Updated",
"Resource": "https://outlook.office.com/api/v2.0/Users('1520ed5a')/Events('AAMkADAzNDUxODY=')",
"ResourceData": {
"@odata.type": "#Microsoft.OutlookServices.Event",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('1520ed5a')/Events('AAMkADAzNDUxODY=')",
"@odata.etag": "DwAAABYAAAB4h4N+ELBRSbQKq1A05YT8AADcUdIy\"",
"Id": "AAMkADAzNDUxOD="
}
}]
}
如果您观察两个请求数据,在第一个请求数据中它显示 ChangeType
作为 Created
,在第二个请求数据中它显示 ChangeType
作为 Updated
。
当我更新或删除日历时出现相同的行为(收到两次通知)。
知道如何摆脱第二次通知吗?
这不是预期的行为,我自己也无法复制它。我最好的猜测是您有一些 other 系统监视日历并自动编辑日历事件。这可以解释为什么您在 create
操作后几乎立即获得更新。
在同步方面,建议使用 Microsoft Graph API 的 /delta
功能。当您收到通知时,您只需拉取 /delta
和 return 仅已更改的记录。如果您收到错误通知,这将消除重复处理,因为您的第二个 /delta
的结果将为空。如果您有更改,但不是您关心的 属性,则您可以丢弃结果并消除对数据存储的任何不必要的写入。
我有一个要求,我需要在任何日历项目 created/updated/deleted 时收到通知。我按照 Outlook push notification documentation 订阅了日历通知。
我已成功订阅日历活动。但是每当我创建一个新日历时,我都会收到两次通知。 以下是通知请求数据。
第一个通知请求数据:
{
"value": [{
"@odata.type": "#Microsoft.OutlookServices.Notification",
"Id": null,
"SubscriptionId": "OTA0N0MwQj==",
"SubscriptionExpirationDateTime": "2017-09-27T05:30:49.6163119Z",
"SequenceNumber": 1,
"ChangeType": "Created",
"Resource": "https://outlook.office.com/api/v2.0/Users('1520ed5a')/Events('AAMkADAzNDUxODY=')",
"ResourceData": {
"@odata.type": "#Microsoft.OutlookServices.Event",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('1520ed5a')/Events('AAMkADAzNDUxODY=')",
"@odata.etag": "W/\"DwAAABYAAAB4h4N+ELBRSbQKq1A05YT8AADcUdIx\"",
"Id": "AAMkADAzNDUxOD="
}
}]
}
第二次通知请求数据:
{
"value": [{
"@odata.type": "#Microsoft.OutlookServices.Notification",
"Id": null,
"SubscriptionId": "OTA0N0MwQj==",
"SubscriptionExpirationDateTime": "2017-09-27T05:30:49.6163119Z",
"SequenceNumber": 2,
"ChangeType": "Updated",
"Resource": "https://outlook.office.com/api/v2.0/Users('1520ed5a')/Events('AAMkADAzNDUxODY=')",
"ResourceData": {
"@odata.type": "#Microsoft.OutlookServices.Event",
"@odata.id": "https://outlook.office.com/api/v2.0/Users('1520ed5a')/Events('AAMkADAzNDUxODY=')",
"@odata.etag": "DwAAABYAAAB4h4N+ELBRSbQKq1A05YT8AADcUdIy\"",
"Id": "AAMkADAzNDUxOD="
}
}]
}
如果您观察两个请求数据,在第一个请求数据中它显示 ChangeType
作为 Created
,在第二个请求数据中它显示 ChangeType
作为 Updated
。
当我更新或删除日历时出现相同的行为(收到两次通知)。
知道如何摆脱第二次通知吗?
这不是预期的行为,我自己也无法复制它。我最好的猜测是您有一些 other 系统监视日历并自动编辑日历事件。这可以解释为什么您在 create
操作后几乎立即获得更新。
在同步方面,建议使用 Microsoft Graph API 的 /delta
功能。当您收到通知时,您只需拉取 /delta
和 return 仅已更改的记录。如果您收到错误通知,这将消除重复处理,因为您的第二个 /delta
的结果将为空。如果您有更改,但不是您关心的 属性,则您可以丢弃结果并消除对数据存储的任何不必要的写入。