У нашего клиента есть служебная учетная запись с почтовым ящиком Outlook и календарем.
Эта учетная запись службы создает события в своем календаре и отправляет приглашения участникам через Microsoft Graph .
учетная запись службы подписывается на / уведомления об обновлениях для своего собственного почтового ящика:
{
"changeType": "updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
"resource": "me/messages",
"expirationDateTime":"2016-11-20T18:23:45.9356913Z",
"clientState": "secretClientValue",
"latestSupportedTlsVersion": "v1_2"
}
Если один из участников предварительно ответит предложением о новой дате встречи, мы получим уведомление на полученное электронное письмо по учетной записи службы, содержащей ответ и предлагаемую дату:
{
...,
"resourceData": {
"@odata.type": "#Microsoft.Graph.Message",
"@odata.id": "Users/{service_account_id}/Messages/AAMkAGFlY2E0ZWM4LTA3OGEtNDY2OS04ZDA0LTA4YTA5OWIxMTcxMQBGAAAAAADNyiJ8h61FRpmwpx9BAnv-BwDH8bMHMKLFSakCYHIeBUnvAAAAAAEMAADH8bMHMKLFSakCYHIeBUnvAADz_ctmAAA="
}
}
Наша цель - получить это сообщение и информацию об ответе / дате. Для этого мы делаем запрос GET /me/messages/{message_id}
. message_id
предоставляется нам в уведомлении о подписке.
Однако попытка получить сообщение, полученное в уведомлении о подписке, приводит к ErrorItemNotFound
. Просматривая историю сообщений учетной записи службы, мы заметили, что идентификатор последнего сообщения совпадает с идентификатором подписки, за исключением одной буквы: буква в подписке на 1 меньше, чем буква последнего сообщения, найденного в истории. Например, подписка дает message_id, равный ...hAAA=
, а последнее сообщение истории дает нам ...iAAA=
- Как мы можем это исправить? Я думаю, что это новая проблема, я не думаю, что я сталкивался с этим в прошлом с похожей реализацией.
- Есть ли другой, менее ограниченный способ узнать дату, предложенную пользователем, который ориентировочно отвечает на событие?
Это было бы неплохо, потому что в настоящее время мы должны сделать несколько действительно странных / me / messages GET запросов, чтобы получить необходимую информацию:
me/messages/{message_id}?$select=SingleValueExtendedProperties&$expand=microsoft.graph.eventMessage/event($select=id),singleValueExtendedProperties($filter%3Did+eq+'SystemTime+%7B00062002-0000-0000-C000-000000000046%7D+Id+0x8250'+or+id+eq+'SystemTime+%7B00062002-0000-0000-C000-000000000046%7D+Id+0x8251'+or+id+eq+'SystemTime+%7B6ED8DA90-450B-101B-98DA-00AA003F1305%7D+Id+0x00000009')
Редактировать Я изменил changeType на «создан». Реализация, кажется, работает на данный момент. Я буду держать это в курсе, так как поведение все еще кажется ошибочным c.