Из-за временных ограничений на территории РФ наблюдаются проблемы с оплатой. Если платёж не проходит, оставьте запрос в службу поддержки.Служба поддержки работает 24/7 — мы всегда на связи по вопросам хостинга и серверов.Открыт прием заявок на аренду выделенных серверов и размещение оборудования в дата-центре.Напоминаем: рекомендуем включить резервное копирование для дополнительной защиты данных.Доступна новая линейка VPS/VDS с NVMe-дисками и увеличенной производительностью.Технические работы на части серверов завершены. Все сервисы работают в штатном режиме.
Статья5 мин чтенияПросмотры1

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

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

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

Рабочий стол с двумя системами учёта и карточками заказов без надписей
В этой статье

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

Надёжная связь магазина с CRM начинается с ответа на три вопроса: что считается заказом, какая система владеет каждым полем и по какому ключу повторное событие узнаёт уже существующую запись. Только после этого имеет смысл выбирать API, готовый модуль или промежуточный сервис.

Разделите события, сущности и этапы продажи

Форма «Перезвоните мне», корзина без оплаты и оплаченный заказ — разные события. Если каждое безусловно создаёт сделку, воронка быстро перестаёт отражать реальность. Сначала составьте карту: какое действие покупателя создаёт лид, контакт, сделку, заказ или задачу менеджеру.

Событие на сайте

Что обычно нужно CRM

Главный риск

Запрос обратного звонка

Лид или обращение

Повторная форма создаёт дубль

Начало оформления

Не всегда требует сделки

Воронка заполняется брошенными корзинами

Создание заказа

Сделка с составом заказа

Повтор webhook создаёт вторую сделку

Успешная оплата

Обновление существующей сделки

Оплата ошибочно создаёт новый заказ

Отмена или возврат

Статус и финансовое событие

История затирается одним финальным статусом

Карта не обязана совпадать с внутренними названиями CRM. Важно, чтобы одно бизнес-событие имело одно ожидаемое последствие и чтобы это последствие можно было проверить.

Назначьте владельца каждому полю

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

  • Сайт обычно отвечает за исходный состав корзины, выбранные покупателем доставку и способ оплаты.

  • Платёжный сервис подтверждает факт и сумму платежа; отметка менеджера не должна заменять это событие.

  • CRM может владеть этапом работы менеджера, задачами, причиной потери и внутренними комментариями.

  • Учётная система определяет фактические остатки, резервирование и отгрузочные документы, если она подключена к схеме.

  • Изменение заказа после оформления требует отдельного правила: кто может менять состав и как фиксируется история.

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

Используйте устойчивые ключи, а не совпадение текста

Телефон и почта помогают искать человека, но не всегда годятся как единственный идентификатор. Номер может быть общим корпоративным, адрес — введён с опечаткой, а один покупатель вправе использовать несколько контактов. Заказу нужен неизменяемый внешний ключ сайта, контакту — правила нормализации и объединения.

Перед сравнением телефон приводят к единому формату, почту — к согласованному регистру, а пустые значения не считают совпадением. Автоматическое объединение по одному слабому признаку опасно: две разные организации могут указать общий номер секретаря.

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

Не передавайте персональные данные «на всякий случай»

Интеграции часто копируют в CRM весь профиль покупателя, хотя менеджеру нужны только имя, контакты, заказ и согласованные признаки. Чем больше систем хранит данные, тем больше мест нужно защищать, обновлять и очищать по правилам компании.

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

Продумайте очередь и повторные попытки

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

Повтор должен отличать временную ошибку от постоянной. Тайм-аут и ответ о перегрузке допускают повтор. Ошибка формата телефона или неизвестный тип доставки требует исправления данных или сопоставления. Бесконечные повторы одной неправильной записи создают нагрузку и скрывают новые события.

Как принять интеграцию

  1. Оформите заказ гостем, затем повторите с тем же телефоном и другой почтой. Проверьте согласованное правило контактов.

  2. Отправьте одно событие дважды. В CRM должна остаться одна сделка с одним внешним ID.

  3. Оплатите заказ после его создания. Должна обновиться существующая сделка, а сумма оплаты — совпасть с событием платёжной системы.

  4. Измените разрешённое поле в CRM и запустите обмен. Убедитесь, что сайт не перезаписывает его старым значением.

  5. Сделайте CRM недоступной в тестовом контуре, затем восстановите. Заказ не должен потеряться, а очередь — создать дубли.

  6. Отмените заказ и оформите частичный возврат. Проверьте историю событий, а не только последний статус.

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

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

Обсуждение 0

Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.

Пока никто не написал. Начни обсуждение.