MySlot

Интеграции

Пропущенные webhook: как восстановить записи в CRM без дублей

Как восстановить пропущенные webhook онлайн-записи: журнал обработки, сверка с источником, устаревшие события, защита от дублей и контроль результата в CRM.

7 минут чтения·Обновлено: 28 сентября 2026 г.·Автор: команда MySlot
Календарь и карточки CRM соединены цепочкой событий с восстановлением пропущенного сообщения
Восстановление проверяет итоговое состояние, а не только доставку события. Концептуальная иллюстрация.

Коротко

Для восстановления пропущенных событий онлайн-записи нужны журнал обработки и сверка с источником актуальных данных. Повторная доставка webhook помогает вернуть сообщение, но не доказывает, что CRM уже получила правильный результат. Цель восстановления — согласованное состояние брони без повторных оплат, сообщений и других побочных действий.

Материал полезен командам, которые связывают календарь, CRM и внешние сервисы. Он не повторяет общий обзор API: здесь разобран период после сбоя, когда часть событий потеряна, часть обработана и некоторые пришли с задержкой. Это требования к интеграции, а не описание гарантированных возможностей API MySlot.

Главное в статье

Успешная доставка сообщения и успешное обновление записи являются разными результатами.

Сроки повторов и доступность истории нужно выяснять у каждого поставщика отдельно.

Запоздалое событие не должно перезаписывать более новое состояние брони.

Восстановление состояния CRM не означает повтор всех клиентских коммуникаций.

Завершение сверки подтверждается отсутствием необъяснённых расхождений, а не пустой очередью.

Раздел 01

Как понять, где именно потерялось изменение

Рассмотрим учебный сценарий: клиент перенёс визит, календарь сохранил новую дату, но CRM продолжает показывать старую. Причиной может быть недоставка события, ошибка обработчика после приёма или отказ самой CRM. Повторять всё с самого начала без диагностики опасно: часть действий уже могла завершиться.

Разделите путь на этапы: событие создано источником, принято интеграцией, сохранено для обработки, применено к целевой записи и проверено. Для каждого этапа нужен наблюдаемый результат. Код успешного ответа внешнему сервису не следует использовать как доказательство, что все последующие действия закончились.

Зафиксируйте границы инцидента: какие объекты, типы событий и интервалы времени затронуты. Если неисправна только синхронизация контактов, не запускайте массовое восстановление платежей и расписания. Чем точнее область проверки, тем меньше риск повторно выполнить незатронутые действия.

Раздел 02

Почему нельзя полагаться на единые правила webhook

Stripe описывает повторную доставку, возможные дубли и отсутствие гарантии порядка событий. GitHub, напротив, прямо указывает, что не повторяет неуспешные доставки автоматически, и предлагает ручное либо программное восстановление. Эти примеры показывают, почему свойства одного сервиса нельзя переносить на другой.

Для своей интеграции выясните срок хранения истории, идентификаторы событий, возможность запросить актуальный объект, ограничения API и механизм повторного запроса. Не стройте регламент на предположении «сервис когда-нибудь пришлёт ещё раз». Если история недоступна, потребуется другой способ сверить известные записи и обнаружить пропуски.

В документации Stripe отдельно отмечено, что время создания не следует использовать как универсальный порядок событий или способ отличить дубль. Для проектируемого календаря вывод такой: стратегию определения свежести состояния нужно выбирать по контракту источника. Это может быть версия объекта либо получение актуального состояния, но не произвольная сортировка всех сообщений по времени поступления.

Раздел 03

Что сохранять в журнале обработки

Журнал нужен для ответа на конкретный вопрос: какое изменение применено к какой записи и с каким результатом. Это не повод бессрочно копировать все клиентские данные.

Идентификаторы источника

Поставщик, событие и связанный объект. Идентификатор попытки доставки не обязательно совпадает с идентификатором самого события.

Версия и контекст

Тип сообщения, поддерживаемая версия схемы и доступная информация о свежести объекта. Эти данные нужны, чтобы не применять старый формат как новый.

Состояние обработки

Принято, ожидает, обрабатывается, применено либо требует разбора. Разделяйте технический приём и завершение бизнес-действия.

Целевой результат

Идентификатор записи в CRM и подтверждённое состояние после изменения. Один текст «успех» без связи с объектом затрудняет проверку.

Ошибка и следующий шаг

Причина, число попыток и ответственный за нерешённый случай. Бесконечные повторы без видимого результата не являются восстановлением.

Раздел 04

Как выбирать способ восстановления

СитуацияЧто проверитьДопустимое действие
Сообщение не дошлоЕсть ли оно в истории источникаЗапросить повтор или включить объект в сверку.
Приём был, обработка упалаКакой этап уже завершёнПродолжить незавершённый этап с защитой от повторов.
Событие устарелоАктуальное состояние или версиюНе возвращать целевой объект к старым условиям.
Данные расходятсяКто управляет спорным полемПрименить правило владельца данных или передать на разбор.

Раздел 05

Как сверять состояние без повторных действий

Определите владельца каждого поля. Например, календарь может управлять датой визита, а CRM — заметкой менеджера. Восстановление не должно копировать объект целиком поверх всех полей: так можно удалить более свежую работу сотрудника, которая не относится к произошедшему сбою.

Разделите обновление текущего состояния и выполнение действий. Возврат правильной даты в CRM не требует снова отправлять старое приглашение, создавать ещё одну задачу или инициировать платёж. Для каждого эффекта нужен собственный способ установить, выполнялся ли он и следует ли его выполнять сейчас.

Если источник позволяет получать изменённые объекты, проходите выбранный диапазон с сохранением контрольной точки и обработкой всех страниц ответа. Учитывайте изменения, которые происходят во время сверки: используйте поддерживаемые источником границы или перекрывающийся повторный проход с защитой от дублей. Конкретная схема зависит от доступного API.

Удалённые и отменённые записи требуют отдельного внимания. Они могут отсутствовать в обычной выборке активных визитов, поэтому сверка только существующих активных объектов не найдёт все расхождения. Уточните наличие истории отмен, отметок удаления или способа проверить ранее известные идентификаторы.

Раздел 06

Как провести восстановление после сбоя

01

Зафиксируйте область проверки

Определите начало и конец проблемного периода, затронутые объекты и каналы. Не удаляйте журнал ошибок после восстановления соединения.

02

Сначала получите список расхождений

Сравните данные без изменений и разделите случаи: отсутствует запись, неверная дата, лишняя активность, конфликт полей. Для каждого должен быть объяснимый способ исправления.

03

Проверьте небольшую выборку

Начните с нескольких тестовых или безопасно согласованных объектов. Убедитесь, что исправление не запускает повторные сообщения и не затирает данные другого владельца.

04

Обработайте оставшиеся объекты

Соблюдайте ограничения источника и сохраняйте прогресс. Неразрешимые случаи выделяйте в отдельную очередь, а не считайте успешно завершёнными.

05

Повторите контрольную сверку

Проверьте новые изменения и остаточные расхождения. Закрывайте инцидент после объяснимого результата по объектам, а не сразу после получения успешного ответа сервера.

Раздел 07

Какие проверки включить в приёмку интеграции

Смоделируйте потерянное сообщение, повтор одного события и запоздалое изменение даты после уже выполненной отмены. Затем остановите обработчик после сохранения части результата и запустите снова. Приёмочный тест должен показать конечную бронь и целевую запись, а не только зелёную отметку доставки.

Измеряйте возраст необработанных событий, число расхождений, время восстановления и количество случаев, переданных сотруднику. Пустая очередь не доказывает согласованность: часть событий могла вообще не попасть в неё. Отдельная сверка обнаруживает ошибки, которые невозможно увидеть только по журналу доставленных сообщений.

При обсуждении MySlot запросите контракт событий и способы получить актуальное состояние брони, список изменений и историю отмен. Уточните, какие данные доступны для восстановления и как ведут себя повторные запросы. Если нужных методов нет, объём автоматической сверки ограничен; это следует зафиксировать до запуска, а не компенсировать обещаниями полного восстановления.

Важно

Практический совет

Проверьте сценарий «перенос, затем отмена, затем позднее сообщение о переносе». После восстановления CRM не должна снова показывать действующий визит, а клиент не должен получить новое подтверждение отменённой записи.

Вывод

Итог

Надёжное восстановление интеграции возвращает согласованное состояние, а не просто повторяет старые сообщения. Для этого нужны журнал этапов, владельцы полей и отдельный контроль побочных действий.

Обсудите доступность истории и сверки до подключения API. Затем проверьте пропуски, повторы и устаревшие события на конкретных бронированиях: именно такие тесты показывают, сможет ли команда восстановить процесс после реального сбоя.

Демо

Хотите понять, какой сценарий онлайн-записи нужен вашему бизнесу?

Покажем демо MySlot и разберём ваш процесс: услуги, расписание, ресурсы, CRM, оплаты и уведомления.

Получить демо

MySlot

Когда стоит рассмотреть MySlot

MySlot подойдёт, если вам нужно:

принимать онлайн-записи
управлять расписанием
учитывать сотрудников или ресурсы
работать с группами
принимать оплату или предоплату
отправлять уведомления
передавать заявки в CRM
адаптировать запись под бренд
убрать ручной перенос данных

Возможности

Возможности MySlot по теме статьи

Запуск

Хотите запустить онлайн-запись без хаоса и ручных переносов?

MySlot поможет принимать записи, управлять расписанием, ресурсами, оплатами и передавать данные в CRM.