Ошибка, не обнаруженная для уведомления о сообщении об отправленных элементах

#microsoft-graph-api

#microsoft-graph-api

Вопрос:

Мы создали подписку для всех папок почтового ящика как

 users/email@email.email/messages?$filter=isDraft eq false
 

При создании подписки указывается заголовок Prefer: IdType = «ImmutableId».
Проблема в том, что для всех папок через webhook мы успешно получаем уведомление с неизменяемым идентификатором и получаем по этому идентификатору электронное письмо с использованием Graph messages API, но в случае электронных писем, отправленных из Outlook, webhook сначала получает идентификатор, который вызывает ошибку при получении сообщения:
Status Code: NotFound Microsoft.Graph.ServiceException: Code: ErrorItemNotFound Message: The specified object was not found in the store., Item not found.
После этого появляется второй веб-узел, связанный с папкой отправленных элементов. Я не знаю, с чем связан первый webhook, возможно, с папкой исходящих. Как это можно преодолеть?

Комментарии:

1. Я вижу, что вы подписались на все папки почтового ящика. Скажем, когда вы создаете новое сообщение, отправляете его, тогда подписка получит вам идентификатор, после чего это сообщение будет перемещено в Черновики, а затем в Исходящие, прежде чем оно переместится в Отправленные элементы. Следовательно, я подозреваю, что вы видите эту ошибку — поскольку она сообщает, что элемент не найден в хранилище (поскольку он был перемещен из одной папки в другую).

2. Для дальнейшей отладки вы можете использовать такой инструмент, как ngrok, чтобы посмотреть, что происходит 🙂

3. В отладке я вижу, что получаю этот идентификатор и исключение при получении сообщения. В объекте уведомления webhook нет других полезных данных, таких как идентификатор папки. Скорее всего, это исходящие. Единственное решение, которое я вижу сейчас, — указать фильтр по этой папке при регистрации подписки. Но это действительно пахнет костылем.

4. Как я обновил выше, из-за потока вы видите это поведение. Возможно, вы захотите обработать ошибку с вашей стороны и пропустить ее, если у нее тот же идентификатор.

5. Мы не контролируем отправку электронных писем. Они отправляются вручную, извне. Все идентификаторы для нас являются новыми. И первый идентификатор, связанный с исходящими, отличается от идентификатора, связанного с отправленными элементами. Мы можем только перехватывать все такие исключения и пропускать все случаи.