Latest / M365.FM – подкаст о Microsoft 365, Copilot и ИИ на русском / Уведомления об изменениях Microsoft Graph простыми словами: реальное время вместо опроса (ИИ-дубляж)
Transcript
- 0:00Готовы к 10 дням погружения в Microsoft 365, Капайлот, ИИ, Азур и знакомство с людьми,
- 0:06определяющими будущие работы. В этом январе М365Кон возвращается, и мы берем еще более
- 0:11высокую планку. Присоединяйтесь к нам, прямые эфиры, реальные демо и практические знания от
- 0:16MVP и экспертов со всего мира. Никаких общих слайдов и пустых модных словарей. Мы решаем
- 0:22реальные задачи, Капайлот Студия, ИИ агенты, фабрик, безопасность, управление и автоматизация.
- 0:29Независимо от того, кто вы IT-специалист, разработчик или бизнес-лидер, для вас найдутся
- 0:34подходящие сессии. За 10 полных дней вы сможете изучить множество технологий и пообщаться с
- 0:39мировым сообществом. Смотрите в прямом эфире и применяйте практические идеи в своей организации.
- 0:44Январь 2027 года, 10 дней, одно сообщество Microsoft. Регистрация уже открыта. Заходите на
- 0:52m365con.net и забронируйте свое место сегодня. Это m365con.net. Присоединяйтесь на m365con.net и
- 1:03увидимся в прямом эфире в январе. Сегодняшняя тема знакома почти каждому, кто работает с
- 1:07Microsoft 365. Но большинство людей не до конца понимают, как это работает изнутри. Я говорю об
- 1:13уведомлениях об изменениях в Microsoft Graph. Что это такое и почему это важно для вас? Начнем с проблемы,
- 1:19которую они решают. Представьте, что вы создаете приложение, которому нужно знать об изменениях в
- 1:23Microsoft 365. Например, пришло новое письмо, кто-то обновил файл в SharePoint или в каталог компании
- 1:28добавлен новый пользователь. Как об этом узнает ваше приложение? Дело в том, что старый метод — это
- 1:32опрос. Поллинг. Ваше приложение каждые несколько минут отправляет запрос в Microsoft Graph. Есть что-нибудь
- 1:36новое с момента моей последней проверки? Если ничего не изменилось, вы потратили запрос впустую. А если
- 1:41изменения произошли через 5 секунд после проверки, вы не узнаете об этом до следующего цикла. Вы либо проверяете
- 1:45слишком часто, расходуя ресурсы и рискуя получить блокировку, либо слишком
- 1:49редко пропуская события. Microsoft действительно ограничивает приложения, которые делают запросы
- 1:53слишком часто. Разработчики называют это «тюрьмой граф», ваше приложение блокируется на время из-за
- 1:57избытка запросов. Возникает вопрос, разве нет способа лучше? Что, если вместо того, чтобы постоянно
- 2:02спрашивать, есть что-нибудь новое? Система сама будет сообщать вам об изменениях. Именно это и делают
- 2:07уведомления об изменениях. Что такое уведомления об изменениях Microsoft Graph? Вот самое простое
- 2:12определение. Уведомления позволяют вашему приложению мгновенно реагировать на события в Microsoft 365 без
- 2:18постоянных проверок. Представьте это как датчик движения на вашем почтовом ящике. Вместо того,
- 2:22чтобы каждый час подходить и заглядывать внутрь, вы устанавливаете датчик, который оповещает вас,
- 2:26как только пришло письмо. Вы перестаете тратить время на пустые проверки и никогда не пропускаете
- 2:29доставку. Именно это уведомление об изменениях делают для вашего приложения. Когда что-то меняется,
- 2:33например, приходит новое письмо, обновляется файл или календарное событие, Microsoft Graph автоматически
- 2:38отправляет уведомления в ваше приложение. Опрос не требуется. Эта система состоит из двух частей – подписки и
- 2:43уведомления, которые работают вместе. Подписка – это-то, как вы сообщаете Microsoft Graph,
- 2:48зачем нужно следить. Вы говорите что-то вроде «Эй, сообщи мне», когда кто-то пришлет новое сообщение
- 2:52в этот почтовый ящик. Или «Скажи мне», когда обновится файл в этой библиотеке SharePoint. Вы
- 2:56регистрируете свой интерес, а граф берет его на заметку. Уведомления – это-то, что происходит дальше.
- 3:00Когда происходит изменение, граф отправляет HTTP POST запрос на указанный вами InPoint. Ваше приложение
- 3:05получает этот POST запрос, понимает, что что-то произошло и решает, что делать, получить новые данные,
- 3:10запустить рабочий процесс или обновить базу данных. В этом главное отличие от опроса.
- 3:15Уведомления доставляются автоматически. Вашему приложению не нужно спрашивать. Система сама
- 3:19отправляет информацию в момент события. В этом все волшебство. Microsoft Graph поддерживает
- 3:23уведомления об изменениях для широкого спектра ресурсов. Сообщения, события, контакты, пользователи,
- 3:28группы, файлы, сообщения Teams, оповещения безопасности – практически все. К чему вы получаете доступ
- 3:32через граф, можно отслеживать. Но как это настроить? Как сказать граф, зачем следить и куда отправлять
- 3:37оповещение? Создание подписки – это указание граф, зачем следить. Итак, что такое подписка?
- 3:42Это просто запрос на регистрацию. Ваше приложение говорит «дай мне знать, когда это произойдет»,
- 3:46и вы отправляете этот запрос в API Microsoft Graph. Граф сохраняет его и ждет. В этом запросе вам
- 3:50нужно предоставить граф несколько деталей. Во-первых, ресурс, за которым вы хотите следить,
- 3:54путь к данным. Например, в Узерс, если вы очлеживаете изменения учетных записей пользователей.
- 3:59Или М, Mail Folders, Inbox, Messages, если вы хотите знать о новых письмах. Далее, тип изменения.
- 4:04Хотите ли вы знать, когда что-то создано, обновлено или удалено? Можно выбрать один тип или
- 4:09запросить все три. В-третьих, URL уведомлений. Это адрес вашего инпоинта, место, куда граф
- 4:13должен отправить уведомления при возникновении события. Это должен быть общедоступный
- 4:17HTTPS InPoint. Никаких исключений. В-четвертых, дата истечения срока действия. Подписки не
- 4:22могут длиться вечно. Вы выбираете дату и время в будущем, когда подписка истечет. Однако для разных
- 4:26ресурсов установлены разные максимальные сроки действия. Для сообщений Outlook они могут составлять
- 4:30до 7 дней. Максимальный срок для сообщений в чатах Teams составляет 3 дня. Файлы SharePoint могут
- 4:33храниться около 30 дней. Информация о присутствии. Она истекает всего через 1 час. Вот конкретный
- 4:38пример. Допустим, вы хотите знать, когда кто-то в вашей компании меняет должность. Вы создаете
- 4:43подписку на ресурс пользователей с типом изменения «Обновлено». Вы указываете URL для уведомлений и
- 4:48задаете срок действия на несколько дней вперед. Когда кто-то обновляет свой профиль в Azure Ad,
- 4:51граф отправляет POST-запрос на вашу конечную точку с полезной нагрузкой уведомления. Эта нагрузка
- 4:55содержит идентификатор пользователя и сообщает вам, что именно изменилось. Ваше приложение может
- 4:59среагировать на это, обновить кадровую систему, отправить уведомления менеджеру или сделать что
- 5:03угодно еще. Граф отвечает на ваш запрос подписки, предоставляя идентификатор подписки. Он понадобится
- 5:07вам позже для управления подпиской, продления, обновления или удаления. Но есть один нюанс. Прежде
- 5:12чем граф начнет отправлять уведомления, он должен убедиться, что ваша конечная точка активна и слушает
- 5:17запросы. Для этого требуется рукопожатие. Разбор токена проверки рукопожатия. При создании подписки
- 5:22Microsoft граф не доверяет вашей конечной точке вслепую. Сначала он отправляет тестовый пинк, запрос на верификацию.
- 5:29Этот пинк содержит токен проверки, случайную строку символов. Ваша конечная точка должна получить
- 5:34этот токен и вернуть его в виде обычного текста в течение 10 секунд. Представьте, что курьер звонит
- 5:38в вашу дверь, чтобы убедиться, что вы дома, прежде чем оставить посылку. Если никто не отвечает,
- 5:42курьер ничего не оставляет. Здесь то же самое. Если ваша конечная точка не вернет токен проверки,
- 5:47граф не будет отправлять на нее уведомления. Ответ должен быть в формате обычного текста,
- 5:51а не JSON или XML, только строка токена. Если ошибиться с форматом, рукопожатие не удастся.
- 5:56Это проверка безопасности. Она подтверждает, что ваша конечная точка активна, готова к работе и
- 6:00находится под вашим контролем. Это мешает злоумышленникам направлять подписку на чужой URL в
- 6:04надежде перехватить чужие уведомления. Нет рукопожатия, нет подписки. Граф отклоняет запрос на
- 6:09создание, и вы получаете ошибку. Вы исправляете свою конечную точку и пробуете снова. Как только
- 6:13рукопожатие успешно завершено, подписка активируется и уведомления начинают поступать.
- 6:17Но вот в чем дело. Они не будут поступать вечно. Поддержание соединения.
- 6:21Продление подписки. У каждой подписки есть срок действия. Вы задаете его при создании. Граф
- 6:27строго следит за ним. Когда наступает этот день, подписка прекращается. Уведомления больше не
- 6:31приходят. Представьте это как парковочный счетчик. Вы оплачиваете время, а когда оно заканчивается,
- 6:36срок действия счетчика истекает. Для разных ресурсов установлены разные лимиты. Сообщения
- 6:40Outlook могут отчлеживаться до 7 дней. Чаты Teams – 3 дня. Файлы SharePoint – около 30 дней. А информация
- 6:45о присутствии – всего 1 час. Итак, ваше приложение не может просто создать подписку и забыть о ней. Вам нужен
- 6:50процесс, который поддерживает ее активность. Продление – это просто. Отправьте PATCH запрос с
- 6:54идентификатором подписки. Укажите новую дату истечения срока действия. Сделайте это до того,
- 6:58как текущая подписка истечет, и граф продлит ее. Вот лучшая практика, которую я рекомендую.
- 7:03Проверяйте метку времени истечения срока в каждом получаемом уведомлении. Если срок скоро истекает,
- 7:07например, в течение дня, продлите ее сразу. Так вам не понадобится отдельная фоновая задача только
- 7:11для управления подписками. Microsoft также добавила уведомления о жизненном цикле. Эти оповещения
- 7:16предупреждают вас до того, как подписка истечет. Они сообщают, когда срок действия подписки
- 7:20подходит к концу или когда требуется повторная авторизация токена доступа. Подпишитесь на них,
- 7:23и ваше приложение сможет продлеваться до того, как что-то сломается. Но что, если ваш
- 7:26инпоинт выйдет из строя или вы пропустите окно продления? Вот тут-то и появляется страховочная
- 7:30сетка. Когда что-то идет не так, надежность и страховочные механизмы. Ваша подписка активна,
- 7:35инпоинт слушает, уведомления поступают. Все выглядит хорошо, но что произойдет, если что-то сломается?
- 7:40Может быть, инпоинт отключился на обслуживание, сетевая проблема прервала уведомление или вы просто
- 7:44пропустили окно продления и подписка истекла? Такое случается. Вопрос в том, как восстановиться.
- 7:49Microsoft граф ожидает, что ваш випхук-инпоинт будет отвечать быстро, в течение 3 секунд. Если
- 7:53дольше, граф помечает его как медленный. Если более 10% ответов превышают 3 секунды в любой
- 7:5810-минутный период, граф задерживает уведомление на 10 минут. Он отправляет лишь небольшую выборку,
- 8:02чтобы проверить, восстановились ли вы. Дальше – хуже. Если более 15% ответов превышают 10-секундный
- 8:07тайм-аут повторной попытки, граф помечает инпоинт как отброшенный. Уведомления полностью
- 8:10прекращаются на 10 минут. Они исчезают, вы не сможете их вернуть, поэтому ваш инпоинт должен быть
- 8:15быстрым и надежным. Это не значит, что вы должны обрабатывать каждое уведомление менее чем за 3
- 8:19секунды. Просто быстро подтвердите получение ответом 202 аксептет, а затем обрабатывайте уведомление
- 8:24асинхронно. Поставьте его в очередь. Обработайте позже. Главное – это быстрый отклик. Даже при идеальном
- 8:29инпоинте что-то может пойти не так. Подписки истекают, сетевые сбои случаются. В редких случаях сам
- 8:34Microsoft Graph может пропустить уведомления. Вот почему вам нужна страховочная сетка
- 8:38Дельта-запросы. Подумайте об этом так. Уведомления об изменениях – это пожарная сигнализация.
- 8:42Они сообщают вам, что что-то происходит прямо сейчас. Дельта-запросы – это система пожаротушения.
- 8:45Они ловят все, что пропустила сигнализация. Они работают вместе. Уведомления дают вам информацию
- 8:49в реальном времени. Дельта-запросы дают вам полную картину, которую можно сверить в любой момент.
- 8:53Рекомендуемый шаблон прост. Используйте уведомления об изменениях для мгновенного реагирования.
- 8:57Периодически. Скажем, раз в несколько часов или раз в день. Запускайте Дельта-запрос,
- 9:04или подписка из стекла. Вы никогда не пропустите изменения навсегда. Реальные сценарии
- 9:08использования. Что можно создать? Итак, что это дает на практике? Позвольте привести вам
- 9:12несколько реальных примеров. Возьмем автоматизацию кадров. Представьте, что завтра в вашу
- 9:16компанию придет новый сотрудник. В момент создания пользователя в интро-айде отправляется
- 9:19уведомление об изменении. Ваше приложение получает его профиль и за секунды создает учетные записи
- 9:23в кадровой системе, системе учета времени и контроля доступа. Никакого опроса, никаких задержек.
- 9:28Для оповещения безопасности, скажем, учетная запись пользователя заблокирована. Уведомление об изменении
- 9:32запускает рабочий процесс, который проверяет подозрительные действия и оповещает службу
- 9:35безопасности. Раньше вам приходилось опрашивать систему каждые несколько минут. Теперь это
- 9:38происходит мгновенно. Обработка контента работает точно так же. Когда файл попадает в библиотеку
- 9:42документов SharePoint, вы хотите знать, является ли он счетом. Уведомление сообщает вам о появлении
- 9:47нового файла. Ваше приложение забирает его, классифицирует с помощью и отправляет в нужную систему
- 9:51расходов все автоматически. Панели мониторинга в реальном времени позволяют видеть аналитику по мере
- 9:54поступления данных, а не с задержкой в часы. Уведомление об изменениях мгновенно синхронизирует
- 9:58Dataverse Fabric. Ваши панели Power BI обновляются практически в реальном времени. Вот пример,
- 10:02который кажется мне интересным. Коннекторы Copilot. Microsoft добавляет синхронизацию в реальном
- 10:07времени через вип-хуки, поэтому и агенты реагируют в ту же секунду, когда меняются данные.
- 10:10Когда запись клиента обновляется в Dynamics 365, агент Copilot немедленно готовит ответ «ждать не нужно».
- 10:17Все эти примеры объединяет одно. До появления уведомлений об изменениях вы создавали
- 10:21запланированные задания, которые опрашивали систему каждый час или день. Это работало,
- 10:25но было медленно, неэффективно и ненадежно. Уведомления об изменениях меняют эту модель.
- 10:29В реальном времени на основе событий мгновенно. Выбор правильного канала доставки. Не каждому
- 10:34приложению нужен один и тот же метод доставки. Давайте рассмотрим ваши варианты.
- 10:37Вип-хуки — самый простой способ. Граф отправляет HTTP OST на вашу конечную точку,
- 10:41вы обрабатываете его и работаете дальше. Для низкого или среднего объема, скажем,
- 10:44несколько сотен уведомлений в час, это отлично подходит. Но что, если вы создаете что-то более
- 10:48масштабное? Тысячи уведомлений в секунду могут перегрузить одну конечную точку. Вам нужно более
- 10:52мощное решение. Event Hub is обрабатывает миллионы событий в секунду. Вместо того,
- 10:56чтобы граф отправлял уведомления по одному, он отправляет их в хаб. Ваше приложение считывает
- 11:00их в своем темпе. Риск перегрузки минимален. Это решение для крупных корпоративных задач,
- 11:04таких как тысячи сайтов SharePoint или миллионы почтовых ящиков. И есть еще Event Grid — бессерверный
- 11:08вариант. Он отправляет уведомления в Azure Functions или Logic Apps, а также автоматически
- 11:11обрабатывает повторные попытки и отправку в очередь недоставленных сообщений.