Лучший подход для обновления существующего события в нескольких учетных записях Майкрософт с помощью API Microsoft Graph

#api #events #microsoft-graph-api #microsoft-graph-calendar

Вопрос:

Я работаю над синхронизацией календаря между моим приложением и личными календарями пользователей. Идея заключается в том, что каждый раз, когда создается или обновляется событие, это событие отправляется в личный календарь пользователей (они могут выбрать синхронизацию с календарем Google и/или календарем учетных записей Microsoft).

У меня есть этот полный поток, работающий с календарем Google, и теперь я работаю с Microsoft OAuth и API Graph, чтобы заставить его работать либо для календарей MS.

В настоящее время для MS у меня реализован и работает следующий сценарий:

  • Пользователь разрешает приложению доступ к своему календарю через страницу согласия
  • Сервер обменивает код авторизации на токен доступа
  • Я могу вставить событие в календарь пользователя, используя его маркер доступа в качестве заголовка авторизации через API Microsoft Graph (POST https://graph.microsoft.com/v1.0/me/events)

Теперь я пытаюсь понять, как я могу управлять обновлениями событий (например, при изменении даты начала, как я буду отправлять это обновление для учетной записи MS каждого пользователя), зная следующие ограничения API событий Microsoft:

  • Свойство «ICalUid» генерируется самим MS API и возвращается в ответе конечной точки вставки. Я не могу вставить событие с моим собственным идентификатором ICalUid. Это возможно с помощью календаря Google и очень полезно, потому что, если я отправляю событие с существующим идентификатором ICalUid в конечную точку импорта, Google обновляет это существующее событие с помощью отправленных данных, а если идентификатор ICalUid не существует, Google создает событие (оно выполняет действие, подобное обновлению).
  • Для каждого события, вставленного в календарь разных пользователей, создается новый «ICalUid», даже если я отправляю один и тот же объект события для вставки. Поэтому я получаю много ICalUid для одного и того же события, это усложняет отслеживание этого события в календарях пользователей, отличающихся от календаря Google, как я упоминал ранее.

Так вот с какой проблемой я сталкиваюсь прямо сейчас. Есть какие-нибудь идеи о том, как я могу этого достичь?

Заранее спасибо!

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

1. Пробовали добавлять пользовательские данные в событие с помощью пользовательских расширений? Таким образом, вы можете отслеживать событие, поскольку пользовательские данные могут быть изменены только вами. См.раздел Создание расширений о том, как это сделать.

2. @Danstan спасибо за ваше предложение! На самом деле это выглядит полезным для моего случая, я смог создать с помощью пользовательской информации. Но сейчас я пытаюсь понять, как фильтровать эти конкретные пользовательские данные. Я ищу примеры Microsoft Graph для расширений фильтрации, но некоторые из них довольно запутанны. Вы знаете, как фильтровать эти пользовательские данные?

3. @Danstan Я использую $expand для извлечения данных расширения (как в этом примере ). Но я не выясняю, как фильтровать по значению a в расширении.

4. Я рад помочь. Что касается фильтра, попробуйте https://graph.microsoft.com/v1.0/me/events?$filter=extensions/any(f:f/id eq 'Microsoft.OutlookServices.OpenTypeExtension.Com.Something.OwnerId') указать, где id в любом операторе может быть любое поддерживаемое подполе расширения

5. Если это решит ваше дело, дайте мне знать, чтобы я мог составить более четкий ответ.