Microsoft Graph: ErrorItemNotFound при получении обновленного сообщения для ответов на события календаря - PullRequest
0 голосов
/ 15 апреля 2020

У нашего клиента есть служебная учетная запись с почтовым ящиком 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=

  1. Как мы можем это исправить? Я думаю, что это новая проблема, я не думаю, что я сталкивался с этим в прошлом с похожей реализацией.
  2. Есть ли другой, менее ограниченный способ узнать дату, предложенную пользователем, который ориентировочно отвечает на событие?

Это было бы неплохо, потому что в настоящее время мы должны сделать несколько действительно странных / 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...