Reputation: 715
For better efficiency we upgraded our system from polling over to using the webhooks subscriptions and delta queries.
However, for the webhooks, I am finding we are getting a lot of unnecessary/spurious notifications.
For example if a user cancels an event what we see are several update
notifications followed by a single deleted
notification, in a matter of milliseconds.
This is quite annoying as it creates a situation where instead of being able to react to the notifications immediately (if the work queue is empty that is), we have had to add a throttle/debounce, so that we can get a more accurate reading from the webhooks.
An example of a delete also incurring an update is as follows:
[2017-06-28T23:17:40.657Z][meetingroom1.outlookDidNotify] Received notification {
"subscriptionId": "54c27b11-c2e2-4962-89dd-cf316bf3eecb",
"subscriptionExpirationDateTime": "2017-06-28T23:59:59.999+00:00",
"changeType": "updated",
"resource": "Users/f4a2ac63-ddf7-40dc-80da-4e05acf6488a/Events/AAMkADc1MWNjZWM3LTNhZDYtNGYwYi04OWYxLTU0N2E0MmI5YTE4MwBGAAAAAAAKhIOGniPIR6bsTEhp5zDzBwAPLFcVBl_pRZA4tM1jHR47AAAAAAENAAAPLFcVBl_pRZA4tM1jHR47AAD5gM31AAA=",
"resourceData": {
"@odata.type": "#Microsoft.Graph.Event",
"@odata.id": "Users/f4a2ac63-ddf7-40dc-80da-4e05acf6488a/Events/AAMkADc1MWNjZWM3LTNhZDYtNGYwYi04OWYxLTU0N2E0MmI5YTE4MwBGAAAAAAAKhIOGniPIR6bsTEhp5zDzBwAPLFcVBl_pRZA4tM1jHR47AAAAAAENAAAPLFcVBl_pRZA4tM1jHR47AAD5gM31AAA=",
"@odata.etag": "W/\"DwAAABYAAAAPLFcVBl+pRZA4tM1jHR47AAD+zvOL\"",
"id": "AAMkADc1MWNjZWM3LTNhZDYtNGYwYi04OWYxLTU0N2E0MmI5YTE4MwBGAAAAAAAKhIOGniPIR6bsTEhp5zDzBwAPLFcVBl_pRZA4tM1jHR47AAAAAAENAAAPLFcVBl_pRZA4tM1jHR47AAD5gM31AAA="
},
"clientState": "…"
}
[2017-06-28T23:17:40.658Z][meetingroom1.outlookDidNotify] Received notification {
"subscriptionId": "54c27b11-c2e2-4962-89dd-cf316bf3eecb",
"subscriptionExpirationDateTime": "2017-06-28T23:59:59.999+00:00",
"changeType": "deleted",
"resource": "Users/f4a2ac63-ddf7-40dc-80da-4e05acf6488a/Events/AAMkADc1MWNjZWM3LTNhZDYtNGYwYi04OWYxLTU0N2E0MmI5YTE4MwBGAAAAAAAKhIOGniPIR6bsTEhp5zDzBwAPLFcVBl_pRZA4tM1jHR47AAAAAAENAAAPLFcVBl_pRZA4tM1jHR47AAD5gM31AAA=",
"resourceData": {
"@odata.type": "#Microsoft.Graph.Event",
"@odata.id": "Users/f4a2ac63-ddf7-40dc-80da-4e05acf6488a/Events/AAMkADc1MWNjZWM3LTNhZDYtNGYwYi04OWYxLTU0N2E0MmI5YTE4MwBGAAAAAAAKhIOGniPIR6bsTEhp5zDzBwAPLFcVBl_pRZA4tM1jHR47AAAAAAENAAAPLFcVBl_pRZA4tM1jHR47AAD5gM31AAA=",
"@odata.etag": "W/\"CQAAAA==\"",
"id": "AAMkADc1MWNjZWM3LTNhZDYtNGYwYi04OWYxLTU0N2E0MmI5YTE4MwBGAAAAAAAKhIOGniPIR6bsTEhp5zDzBwAPLFcVBl_pRZA4tM1jHR47AAAAAAENAAAPLFcVBl_pRZA4tM1jHR47AAD5gM31AAA="
},
"clientState": "…"
}
Likewise sending multiple update notifications for the same event in a fraction of a second.
Events that are created can be followed by several update events within a second:
[2017-06-28T15:57:45.044Z][meetingroom2.outlookDidNotify] Received notification {
"subscriptionId": "de0147cc-cdef-4141-b601-4eb32cec1377",
"subscriptionExpirationDateTime": "2017-06-28T23:59:59.999+00:00",
"changeType": "created",
"resource": "Users/97e22591-9c20-4030-a11e-102ba89741fc/Events/AAMkADFlY2YyODZiLTc1OGItNGE1Yy1iNDI1LWNjMGQ5MDRjNDU2ZABGAAAAAACfo61cAY_iTZYbfhL-JgzZBwDlDV58cGeaS7ZJcZ6ff_AvAAAAAAENAADlDV58cGeaS7ZJcZ6ff_AvAAD9hgs0AAA=",
"resourceData": {
"@odata.type": "#Microsoft.Graph.Event",
"@odata.id": "Users/97e22591-9c20-4030-a11e-102ba89741fc/Events/AAMkADFlY2YyODZiLTc1OGItNGE1Yy1iNDI1LWNjMGQ5MDRjNDU2ZABGAAAAAACfo61cAY_iTZYbfhL-JgzZBwDlDV58cGeaS7ZJcZ6ff_AvAAAAAAENAADlDV58cGeaS7ZJcZ6ff_AvAAD9hgs0AAA=",
"@odata.etag": "W/\"DwAAABYAAADlDV58cGeaS7ZJcZ6ff+AvAAD9kqa/\"",
"id": "AAMkADFlY2YyODZiLTc1OGItNGE1Yy1iNDI1LWNjMGQ5MDRjNDU2ZABGAAAAAACfo61cAY_iTZYbfhL-JgzZBwDlDV58cGeaS7ZJcZ6ff_AvAAAAAAENAADlDV58cGeaS7ZJcZ6ff_AvAAD9hgs0AAA="
},
"clientState": "…"
}
[2017-06-28T15:57:45.954Z][meetingroom2.outlookDidNotify] Received notification {
"subscriptionId": "de0147cc-cdef-4141-b601-4eb32cec1377",
"subscriptionExpirationDateTime": "2017-06-28T23:59:59.999+00:00",
"changeType": "updated",
"resource": "Users/97e22591-9c20-4030-a11e-102ba89741fc/Events/AAMkADFlY2YyODZiLTc1OGItNGE1Yy1iNDI1LWNjMGQ5MDRjNDU2ZABGAAAAAACfo61cAY_iTZYbfhL-JgzZBwDlDV58cGeaS7ZJcZ6ff_AvAAAAAAENAADlDV58cGeaS7ZJcZ6ff_AvAAD9hgs0AAA=",
"resourceData": {
"@odata.type": "#Microsoft.Graph.Event",
"@odata.id": "Users/97e22591-9c20-4030-a11e-102ba89741fc/Events/AAMkADFlY2YyODZiLTc1OGItNGE1Yy1iNDI1LWNjMGQ5MDRjNDU2ZABGAAAAAACfo61cAY_iTZYbfhL-JgzZBwDlDV58cGeaS7ZJcZ6ff_AvAAAAAAENAADlDV58cGeaS7ZJcZ6ff_AvAAD9hgs0AAA=",
"@odata.etag": "W/\"DwAAABYAAADlDV58cGeaS7ZJcZ6ff+AvAAD9kqa/\"",
"id": "AAMkADFlY2YyODZiLTc1OGItNGE1Yy1iNDI1LWNjMGQ5MDRjNDU2ZABGAAAAAACfo61cAY_iTZYbfhL-JgzZBwDlDV58cGeaS7ZJcZ6ff_AvAAAAAAENAADlDV58cGeaS7ZJcZ6ff_AvAAD9hgs0AAA="
},
"clientState": "…"
}
[2017-06-28T15:57:47.409Z][meetingroom2.outlookDidNotify] Received notification {
"subscriptionId": "de0147cc-cdef-4141-b601-4eb32cec1377",
"subscriptionExpirationDateTime": "2017-06-28T23:59:59.999+00:00",
"changeType": "updated",
"resource": "Users/97e22591-9c20-4030-a11e-102ba89741fc/Events/AAMkADFlY2YyODZiLTc1OGItNGE1Yy1iNDI1LWNjMGQ5MDRjNDU2ZABGAAAAAACfo61cAY_iTZYbfhL-JgzZBwDlDV58cGeaS7ZJcZ6ff_AvAAAAAAENAADlDV58cGeaS7ZJcZ6ff_AvAAD9hgs0AAA=",
"resourceData": {
"@odata.type": "#Microsoft.Graph.Event",
"@odata.id": "Users/97e22591-9c20-4030-a11e-102ba89741fc/Events/AAMkADFlY2YyODZiLTc1OGItNGE1Yy1iNDI1LWNjMGQ5MDRjNDU2ZABGAAAAAACfo61cAY_iTZYbfhL-JgzZBwDlDV58cGeaS7ZJcZ6ff_AvAAAAAAENAADlDV58cGeaS7ZJcZ6ff_AvAAD9hgs0AAA=",
"@odata.etag": "W/\"DwAAABYAAADlDV58cGeaS7ZJcZ6ff+AvAAD9kqbB\"",
"id": "AAMkADFlY2YyODZiLTc1OGItNGE1Yy1iNDI1LWNjMGQ5MDRjNDU2ZABGAAAAAACfo61cAY_iTZYbfhL-JgzZBwDlDV58cGeaS7ZJcZ6ff_AvAAAAAAENAADlDV58cGeaS7ZJcZ6ff_AvAAD9hgs0AAA="
},
"clientState": "…"
}
Upvotes: 3
Views: 1213
Reputation: 348
The notifications are a result of the behavior of Outlook's calendar. You may consider subscribing to only certain change types or using a $filter for the subscription.
POST https://graph.microsoft.com/V1.0/subscriptions
Header:
Content-type = application/json
Body:
{
"resource": "me/mailFolders('Inbox')/messages?$filter=IsRead%20eq%20false",
"notificationUrl": "https://mywebhook.azurewebsites.net/api/send/NotifyClient",
"changeType": "Created,Deleted ",
"expirationDateTime": "2017-06-30T18:23:45.935Z",
"clientState": "Message unread"
}
Upvotes: 3