我订阅日历事件更改使用webhook API :
GraphAPI.api('subscriptions')
.post({
changeType: 'created,updated,deleted',
notificationUrl: 'https://www.example.com/callback/newevent',
resource: `users/user@example.com/calendar/events`,
expirationDateTime: moment().add(expireInMinutes, 'minutes').toDate(),
clientState: 'subscription-identifier'
}, (err, res) => {
// ...
})
这非常有效。
当我创建一个定期事件时,我得到了type: 'seriesMaster'
属性,这是有意义的。
但是,如果我删除或修改某个事件,我仍然会收到seriesMaster事件,而不是我修改的事件。
这里的资源返回到我的webhook:
[ { subscriptionId: '12345-sub-id',
subscriptionExpirationDateTime: '2018-02-15T01:28:52.836+00:00',
changeType: 'updated',
resource: 'Users/12345-user-id/Events/12345-event-id',
resourceData:
{ '@odata.type': '#Microsoft.Graph.Event',
'@odata.id': 'Users/12345-user-id/Events/12345-event-id',
'@odata.etag': 'W/"12345-tag-id"',
id: '12345-event-id' },
clientState: 'subscription-identifier' } ]
获取活动ID,我们获得系列大师:
{ '@odata.context': 'https://graph.microsoft.com/v1.0/$metadata#users(\'user@example.com\')/calendar/events/$entity',
'@odata.etag': 'W/"12345-etag-val"',
id: '12345-event-id',
createdDateTime: '2018-02-14T21:20:47.7698185Z',
lastModifiedDateTime: '2018-02-15T01:27:00.3099975Z',
changeKey: '12345-etag-val',
categories: [],
originalStartTimeZone: 'Mountain Standard Time',
originalEndTimeZone: 'Mountain Standard Time',
iCalUId: '12345-icaluid',
reminderMinutesBeforeStart: 15,
isReminderOn: true,
hasAttachments: false,
subject: 'test 201802141420',
bodyPreview: 'testing',
importance: 'normal',
sensitivity: 'normal',
isAllDay: false,
isCancelled: false,
isOrganizer: false,
responseRequested: true,
seriesMasterId: null,
showAs: 'tentative',
type: 'seriesMaster',
...
}
那么,在这种情况下如何获得事件的修改/删除事件?
答案 0 :(得分:1)
这很棘手,没有真正的干切方法来覆盖所有场景。这是因为实际存在的唯一项目是系列主数据,事件都是从中派生的。
基本上你可以做的是扩展事件的instances
属性,但是你必须提供一个开始和结束时间来给出服务器扩展范围的界限。
因此,如果您知道重复发生模式的开始和结束日期(假设有结束日期!),则可以展开所有实例。然后,您必须将其与之前的内容进行比较,以确定哪个特定实例已更改。