Интеграция сайта с CRM: этапы и проверка заявок
Подключить форму к CRM — значит договориться не только о передаче телефона. Нужно определить, какую запись создаёт обращение, кто её получает, как сохраняется источник и что происходит при сбое. Этот разбор поможет владельцу бизнеса подготовить требования и принять интеграцию по проверяемым сценариям. В статье есть заполненный учебный маршрут заявки, карта полей, правила повторов и ошибок, а также таблица приёмочных проверок с ожидаемыми результатами.
1. Опишите путь обращения до действия менеджера
Начните со схемы: посетитель отправляет форму, сайт проверяет и сохраняет обращение, интеграция передаёт данные, CRM создаёт или связывает нужные записи, ответственный получает задачу. Каждый переход должен иметь понятный результат. Сообщение об отправке на сайте и фактическое появление записи в CRM — разные события.
Согласуйте, что создаётся: лид, контакт со сделкой, обращение в отдельном процессе. Решение зависит от модели продаж и настройки CRM. Для консультации, запроса оптовой цены и заказа магазина могут потребоваться разные маршруты. Укажите воронку, начальную стадию, ответственного и запасной вариант, если сотрудник недоступен.
Ниже — учебный маршрут поставщика оборудования. Принятое правило: запрос на обслуживание создаёт сделку в воронке «Сервис», стадии «Новый запрос»; совпавший контакт связывается со сделкой, неоднозначное совпадение передаётся на разбор. Все обозначения и данные вымышлены. Это образец требований, а не описание уже установленной на вашем сайте интеграции.
| Переход | Результат | Ответственный и подтверждение |
|---|---|---|
| Посетитель → форма на странице /services/maintenance/ | Выбрана услуга «Обслуживание оборудования», указан test@example.com; серверная проверка пройдена | Обработчик сайта; невалидные поля возвращают понятную ошибку до подтверждения приёма |
| Форма → хранилище обращений | Сохранены ID DEMO-CRM-001, услуга, контакт, контекст и время; состояние «ожидает» | Разработчик сайта; запись находится по ID. Только после её сохранения посетитель видит подтверждение |
| Хранилище → интеграция | Задача передачи с этим ID взята в обработку; повторная параллельная обработка того же ID исключена механизмом интеграции | Разработчик интеграции; видны попытка и её результат, а не только факт запуска отправки |
| Интеграция → CRM | Найден единственный контакт DEMO-CONTACT-01; создана сделка DEMO-DEAL-01 в «Сервис / Новый запрос» с внешним ID DEMO-CRM-001 | Администратор CRM принимает поля и маршрут; сохранена связь ID обращения с ID сделки |
| CRM → действие менеджера | Назначена роль «Менеджер сервиса» и задача связаться с заявителем; при недоступности сотрудника назначается дежурная роль, определённая в настройках | Руководитель продаж проверяет доступ к карточке и задаче под обеими ролями. В рабочей схеме роли заменяют конкретными назначениями |
Если таблица не помещается на экране, прокрутите её по горизонтали.
Готовый маршрут отвечает на вопрос «где сейчас заявка и кто должен действовать». Если создание сделки удалось, а задача менеджеру не создалась, это отдельный незавершённый шаг: повторяют назначение задачи с проверкой существующей, не создают сделку заново.
Отправка данных с сайта в CRM не означает обратную синхронизацию заказов, оплат и остатков. Эти сценарии описывают отдельно. Если собственная логика не нужна, сначала проверьте возможности штатной формы или готового коннектора по тем же переходам.
2. Подготовьте карту полей и правила проверки
Карта полей связывает каждое значение формы с конкретным полем CRM. Для него определяют тип, обязательность и обработку пустого значения. Так разработчик и менеджер одинаково понимают, какие данные должны появиться в карточке. Ниже — заполненный учебный пример для маршрута обслуживания. Названия полей условные: разработчик сопоставляет их с реальными кодами полей выбранной CRM.
В этом примере для связи достаточно e-mail, телефон не собирается, а вложения отключены. Если вашему процессу нужен телефон или файлы, добавьте для них отдельные строки с форматом, ограничениями и результатом ошибки. Проверка в браузере удобна посетителю, но окончательная проверка выполняется на сервере.
| Поле и тип | Учебное значение | Назначение в CRM | Правило проверки |
|---|---|---|---|
| request_id — строка | DEMO-CRM-001 | Внешний ID обращения в сделке | Назначается системой до приёма логической отправки; двойной клик, повтор после тайм-аута и повтор доставки используют тот же ID, новое обращение получает новый |
| email — строка | test@example.com | E-mail контакта | Обязательное поле; пробелы по краям удаляются, формат проверяется на сервере; ошибка возвращается до приёма |
| service — значение списка | maintenance | Услуга: «Обслуживание оборудования» | Принимается только согласованное значение из списка; неизвестное отклоняется |
| comment — текст | Нужна консультация по обслуживанию | Содержание запроса в сделке | Необязательно; в учебной форме предел 2 000 символов, превышение даёт ошибку; текст выводится безопасно |
| page_path и form_id — строки | /services/maintenance/; service-request | Страница и форма обращения | Известная форма и путь без секретных параметров; не сохранять полный адрес с произвольными данными |
| utm_source / medium / campaign — строки | example-ads / cpc / service-demo | Источник текущего обращения | Необязательные метки сохраняются раздельно; отсутствие не заменять вымышленным рекламным каналом |
| submitted_at — дата и время | 10.09.2026 11:00, время Минска | Время исходного обращения | Устанавливает сервер; время доставки хранится отдельно, исходное время при повторе не меняется |
Если таблица не помещается на экране, прокрутите её по горизонтали.
Перед запуском менеджер открывает карточку DEMO-DEAL-01 и сверяет её с каждой строкой, включая пустой комментарий и отсутствие меток в отдельных тестах. Если поле обязательное в CRM, но его неоткуда взять в форме, исправляют требования до публикации. Изменения обязательных полей CRM после запуска включают в сопровождение и повторную проверку.
3. Различайте повтор клиента и повтор доставки
Существующий клиент может оставить новый запрос на другую услугу. Это новое обращение, даже если телефон уже есть в базе. Двойное нажатие кнопки или повторная отправка того же события — другой случай. Если объединять всё по номеру телефона, можно потерять новый интерес; если всегда создавать контакт, база быстро наполнится дублями.
В Битрикс24 метод crm.duplicate.findbycomm позволяет найти лиды, контакты и компании с совпадающими телефонами или e-mail. Он помогает найти кандидатов, но не определяет бизнес-правило дальнейшего действия. Совпавший контакт можно связать с новой сделкой; неоднозначные совпадения направить на проверку менеджеру.
Ниже — конкретные правила для учебного маршрута. Здесь обращение определяется по постоянному внешнему ID, а контакт — по согласованным правилам сопоставления. Ключ одной логической отправки назначается до её приёма и сохраняется при двойном клике и повторе после тайм-аута. На сервере этот ключ должен соответствовать одной сохранённой заявке; новый ключ получают только для нового обращения. Иначе два клика создадут разные ID, и защита на этапе CRM уже не распознает повтор. Существующие сведения контакта не перезаписываются автоматически данными новой формы.
| Ситуация | Действие | Что должно остаться в CRM |
|---|---|---|
| Повтор доставки DEMO-CRM-001 после подтверждённого успеха | Вернуть сохранённый результат обработки и ID сделки; не создавать её снова | Одна сделка DEMO-DEAL-01 для DEMO-CRM-001 |
| Два одновременных запроса с одним ID | Одну обработку выполняет механизм интеграции; второй запрос получает её состояние или результат | Одна сделка и одна задача для этого обращения; параллельный тест обязателен |
| Тот же e-mail, но новый запрос DEMO-CRM-002 | Найти единственный подходящий контакт и связать с новой сделкой по принятому правилу | Один контакт и две сделки с разными внешними ID; старый запрос не затёрт |
| По контакту найдены несколько кандидатов | Сохранить обращение в состоянии «нужна проверка» и назначить разбор; не выбирать случайную запись | До решения менеджера нет новой автоматически связанной сделки; обращение доступно по ID |
| После отправки ответ оборвался, исход неизвестен | Сверить внешний ID; найденную сделку связать с обращением. При неоднозначном результате остановить автоматическое создание | Либо подтверждённая связь с одной сделкой, либо открытая задача ручного разбора; повтор вслепую не выполняется |
Если таблица не помещается на экране, прокрутите её по горизонтали.
Блокировка кнопки в браузере сама по себе не обеспечивает эти правила. Защита должна охватывать сохранение обращения и обработку на сервере, в том числе одновременные попытки. Схема «проверить, затем создать» без защиты от гонки может создать две записи. Если коннектор не позволяет реализовать выбранное правило, это ограничение фиксируют при выборе решения и проверяют на приёмке.
Документация: Битрикс24: поиск совпадающих контактов и лидов по телефону или e-mail;
4. Сохраняйте источник так, чтобы отчёт можно было объяснить
В требованиях разделите страницу первого входа, страницу отправки формы и рекламные метки. Также решите, сохраняете ли вы первый известный источник, источник текущего визита или оба. Например, человек впервые пришёл из поиска, а позднее отправил форму после рекламного перехода: разные правила атрибуции дадут разные ответы.
В учебном примере ниже хранят оба источника раздельно: первый известный — в доступном контексте посетителя и затем в карточке контакта, текущий — у конкретного обращения. Первый известный источник не перезаписывается. Пример предполагает, что нужный контекст сохранился и доступен; он не обещает распознать одного человека во всех браузерах и устройствах.
| Событие | Первый известный источник | Источник обращения | Результат в данных |
|---|---|---|---|
| Первый визит из поиска на /services/; формы нет | Поиск, если он определён по доступным данным | Обращение ещё не создано | В контексте посетителя сохранены первый источник и страница входа |
| Позднее рекламный визит и отправка DEMO-CRM-001 | Поиск | example-ads / cpc / service-demo | В карточке контакта — первый источник; у DEMO-CRM-001 — рекламные метки и /services/maintenance/ |
| DEMO-CRM-002 в новом визите: нет меток, данных о переходе и доступного контекста источника текущего визита | Поиск, если сохранённые сведения о первом источнике всё ещё доступны | Не определён | Поля DEMO-CRM-001 не изменены; DEMO-CRM-002 не приписан прежней рекламе |
Если таблица не помещается на экране, прокрутите её по горизонтали.
Для проверки отправьте эти два обращения в описанных условиях и сравните карточки: рекламные метки должны остаться только у первого из них. Второй тест — именно новый визит с неопределённым текущим источником. В том же рекламном визите переход на внутреннюю страницу без UTM не должен стирать уже известный источник. Отсутствие UTM само по себе не доказывает прямой заход. Не помещайте телефон или e-mail в адрес страницы ради передачи в аналитику. Ограничения браузеров и настройки приватности не позволяют определить все источники без исключений.
Для сравнения качества каналов менеджеры должны последовательно отмечать исход обращения: целевой запрос, дубль, спам, продажа или отказ. Сама интеграция передаёт данные, но достоверность отчёта зависит и от дисциплины работы в CRM.
5. Предусмотрите временные сбои и повторную доставку
Если CRM недоступна, принятое обращение должно оставаться в устойчивом хранилище до следующей попытки. Очередь отделяет приём формы от доставки и позволяет видеть состояния: ожидает, передано, нужна проверка. Подтверждать сохранение посетителю можно только после успешной записи, а не просто после нажатия кнопки.
Временные ошибки обрабатывают повтором с увеличивающимися интервалами и ограничением числа попыток. Ошибки доступа или неверных полей требуют исправления причины. У Битрикс24 есть ограничения интенсивности REST-запросов и потребления ресурсов; обработчик должен учитывать актуальные правила конкретного сервиса.
Идемпотентность означает, что повтор одной операции не создаёт второй результат. Документация Stripe показывает такой подход для событий: сохранять обработанные идентификаторы и использовать асинхронную очередь. Для вашей CRM механизм проектируют отдельно; нельзя предполагать, что её методы автоматически поддерживают те же гарантии.
Ниже — учебные правила обработки. Автоматические повторы разрешены только там, где известно, что запись не создана, либо предусмотрена проверенная защита от повторного создания. Обрыв ответа после отправки относится к неопределённому результату, а не к автоматически безопасной ошибке.
| Событие | Состояние и действие | Как проверить завершение |
|---|---|---|
| CRM отклонила запрос из-за временного ограничения; создания записи не произошло | «Ожидает»: повторить по расписанию с учётом указаний API и лимитов | Есть следующая запланированная попытка, затем сохранён успешный результат и ID карточки; лишних карточек нет |
| Сервис недоступен до отправки запроса | «Ожидает»: повторить с увеличением интервала, не удаляя исходное обращение | После восстановления связи тот же ID переходит в «передано»; исходное время и поля не меняются |
| CRM явно отклонила доступ или значение обязательного поля | «Нужна проверка»: уведомить владельца интеграции, остановить бесполезные повторы до исправления | Причина записана без секрета; после исправления выполнена контролируемая передача того же обращения |
| Ответ оборвался после отправки, результат неизвестен | «Нужна проверка»: искать созданную запись по внешнему ID; при неоднозначности — ручной разбор | Найдена и привязана ровно одна сделка либо подтверждено отсутствие записи и разрешено новое создание |
| Лимит автоматических попыток исчерпан | «Нужна проверка»: обращение остаётся в хранилище, ответственный получает задачу | Запись видна в списке проблем с причиной и ответственным; её нельзя молча считать доставленной |
| CRM подтвердила создание сделки | «Передано»: сохранить ID сделки и время подтверждения; отдельно проконтролировать задачу менеджеру | Сделка находится по внешнему ID, назначение и задача доступны согласованному пользователю |
Если таблица не помещается на экране, прокрутите её по горизонтали.
Пример настройки для испытания: после первой безопасно повторяемой ошибки сделать ещё три попытки через 1, 5 и 15 минут; после последней неудачи передать человеку. Это четыре попытки всего, а не обещание скорости доставки. В рабочем проекте интервалы, число попыток, уведомления и предельный возраст очереди согласуют с процессом продаж и правилами API.
Документация: Битрикс24: ограничения REST API; Stripe: повторы событий, асинхронная обработка и проверка вебхуков;
6. Защитите доступ и сделайте ошибки наблюдаемыми
Секрет вебхука или токен хранится на сервере, а не в коде страницы. Входящий вебхук Битрикс24 действует в пределах выбранных разрешений и прав создавшего его сотрудника. Выдавайте только нужные полномочия; заранее определите владельца интеграции и процедуру замены секрета. Входящие события от внешней системы проверяйте способом, предусмотренным её документацией.
В журнале достаточно идентификатора обращения, времени попытки, результата и безопасного описания ошибки. OWASP рекомендует исключать пароли, токены и ненужные чувствительные данные. Не копируйте полные анкеты клиентов в отладочные записи. Ограничьте доступ к очереди и срок хранения технических данных.
Учебная строка журнала: «10.09.2026 11:05, время Минска; request_id=DEMO-CRM-001; попытка=2; результат=передано; crm_id=DEMO-DEAL-01». Если возникла ошибка доступа, вместо ID сделки фиксируют безопасный код причины и состояние «нужна проверка». Контактные данные и секрет в эту запись не входят.
Учебная сверка за выбранный период: принято 10 обращений, семь подтверждённо переданы, два ожидают доставки, одно требует разбора. Сумма состояний равна десяти, но работа не завершена: три обращения ещё не переданы. Ответственный открывает их ID и возраст, проверяет причины, а после доставки повторяет сверку. Равенство счётчиков полезно, однако не заменяет сопоставление каждого ID с конкретной записью CRM.
Передавайте только сведения, необходимые для согласованного процесса. Заранее определите, кто может их просматривать, исправлять и удалять. Техническая настройка формы не заменяет отдельное решение бизнеса о целях и допустимости обработки данных. Настройте оповещение о растущей очереди и ошибках, требующих человека.
Документация: Битрикс24: входящие и исходящие вебхуки, права и защита секрета; OWASP: безопасное журналирование ошибок и событий;
7. Условный пример: повторное обращение после сбоя CRM
Продолжим учебный пример поставщика оборудования. Клиент с контактом DEMO-CONTACT-01 оставляет запрос на обслуживание DEMO-CRM-001, хотя раньше покупал технику. Сайт сохраняет обращение с отдельным ID, услугой и рекламными метками. Соединение с CRM не устанавливается до отправки запроса, поэтому обращение остаётся в очереди, а новая сделка ещё не создана.
При следующей попытке связь восстановлена. Интеграция находит единственный подходящий контакт, создаёт DEMO-DEAL-01 в воронке «Сервис» и сохраняет её ID. После подтверждения передачи создаётся задача менеджеру. Повтор обработки DEMO-CRM-001 возвращает уже известный результат: второй сделки и второй задачи нет. Если бы ответ оборвался после создания, сначала потребовалась бы сверка внешнего ID по правилам раздела об ошибках.
Позднее тот же клиент отправляет новый запрос DEMO-CRM-002 в новом визите, источник которого не удалось определить: нет меток, сведений о переходе и сохранённого источника текущего визита. По принятому бизнес-правилу это отдельная сделка DEMO-DEAL-02, связанная с прежним контактом. Итог проверки: один контакт, два новых обращения, две соответствующие сделки; рекламные метки первого запроса сохранены, второй запрос не приписан прежней рекламе. Сценарий иллюстрирует проектирование и приёмку, а не подтверждённый кейс ActiveLab.
8. Примите интеграцию вместе с будущими пользователями
На приёмке разработчик и менеджер проходят одинаковые сценарии и записывают фактический результат. Проверяют не только карточку CRM, но и сообщение посетителю, очередь, уведомление и журнал. Ниже — готовая карта для учебного маршрута. Каждую проверку выполняют с отдельным тестовым ID, кроме явно указанных повторов одного обращения.
Ошибки и обрывы воспроизводят на изолированном контуре или через управляемую имитацию API, без отключения рабочей CRM. Тестовые контакты используют адреса example.com; реальные клиентские сообщения отключены, записи исключены из отчётов продаж. Колонку «Факт / доказательство» заполняют после выполнения: пример не выдаёт непроведённые тесты за успешные.
| Проверка и действие | Ожидаемый результат | Факт / доказательство |
|---|---|---|
| T01. Отправить корректную заявку на обслуживание | Одна запись на сайте, одна сделка в «Сервис / Новый запрос», назначенная роль и одна задача; поля совпадают | Записать ID обращения, сделки и задачи; менеджер подтверждает доступ |
| T02. Отправить форму без e-mail и затем с некорректным форматом | Понятная ошибка до подтверждения приёма; принятой заявки и сделки нет | Приложить снимок ошибки и результат поиска записей для каждой попытки |
| T03. Воспроизвести двойную отправку самой формы, повтор после тайм-аута и после успеха для того же обращения | Все попытки сохраняют один request_id; на сайте одна заявка, в CRM одна сделка и одна задача; возвращается состояние либо сохранённый результат | Зафиксировать ID в параллельных попытках и повторах; сверить число записей на сайте, сделок и задач |
| T04. От существующего тестового контакта отправить новый запрос с новым ID | Новая сделка связана с прежним контактом; старое обращение и его поля сохранены | Записать один ID контакта и два разных ID обращений/сделок |
| T05. Подготовить два подходящих контакта для одного нового обращения | Автоматическое связывание не выполнено; есть состояние «нужна проверка» и назначенный разбор | Проверить очередь, задачу разбора и отсутствие случайно связанной сделки |
| T06. Отправить заявку после рекламного входа и перехода на внутреннюю страницу без UTM; затем новый запрос в новом визите без меток, данных о переходе и доступного контекста текущего источника | Первый запрос сохраняет рекламный источник визита, несмотря на отсутствие меток на странице формы; текущий источник второго не определён и не унаследован из прежней кампании | Сравнить источники обоих обращений и первый известный источник контакта; зафиксировать условия двух визитов |
| T07. Имитировать недоступность до отправки, затем восстановить связь | Заявка сохраняется; безопасный повтор передаёт тот же ID; исходное время не меняется | Записать переходы «ожидает → передано» и одну соответствующую сделку |
| T08. Дать CRM создать запись и имитировать потерю ответа | Система не создаёт новую сделку вслепую; сверяет внешний ID или назначает ручной разбор | Приложить найденный ID сделки и решение сверки; проверить отсутствие второй сделки |
| T09. Имитировать явную ошибку лимита, затем успешный ответ | Повтор соблюдает выбранные правила API; исходная заявка не потеряна | Записать время попыток, безопасную причину ошибки и итоговый ID карточки |
| T10. Имитировать неверный доступ или обязательное поле CRM | Есть «нужна проверка», причина и уведомление; бесполезные автоматические повторы остановлены | После исправления записать контролируемую передачу, ID карточки и отсутствие секрета в журнале |
| T11. Сделать основного тестового менеджера недоступным для назначения | Срабатывает согласованное запасное назначение; заявка не остаётся без владельца | Проверить карточку и задачу под резервной ролью, записать подтверждение доступа |
| T12. Имитировать неудачи до исчерпания настроенных попыток | Обращение сохранено, находится в «нужна проверка», ответственный уведомлён | Записать число попыток, ID задачи разбора и наличие обращения в итоговой сверке |
Если таблица не помещается на экране, прокрутите её по горизонтали.
По каждой строке ставят «пройдено», «не пройдено» или «не применимо» с объяснением. Учебный пример записи: «T08 — не пройдено: после потери ответа создана вторая сделка; приложены два ID; исправление назначено разработчику, повторная проверка обязательна». Нельзя закрывать приёмку только потому, что обычная заявка прошла T01. Критерии допуска к запуску заранее согласуют; потеря обращения, дубли одного события и отсутствие доступа менеджера требуют исправления затронутого сценария.
Сложность и стоимость зависят от числа форм, систем, направлений обмена, правил распределения, качества данных и требований к восстановлению. Эта карта помогает определить объём работ до оценки. Поддержку после запуска, владельца очереди и порядок повторной проверки после изменения CRM также согласуют отдельно.
Частые вопросы
Всегда ли нужна заказная интеграция?
Нет. Для стандартной формы может подойти штатная CRM-форма или готовый коннектор. Сначала проверьте поля, маршрутизацию, дубли и обработку сбоев. Собственная разработка оправдана, когда согласованные требования не покрываются готовым решением.
Можно ли отправлять заявки напрямую из браузера в вебхук?
Секретный входящий вебхук нельзя публиковать в клиентском коде. Для собственной формы используйте серверный обработчик. Встраиваемые формы CRM работают по предусмотренной поставщиком схеме и отличаются от размещения секретного URL на странице.
Нужно ли сохранять каждую заявку ещё и в письме?
Письмо может быть дополнительным уведомлением, но не заменяет устойчивое хранение и контроль доставки. Согласуйте, где находится основной список принятых обращений. Не рассылайте полные клиентские данные по лишним каналам ради формального дублирования.
Как проверить, что обращения не зависли в передаче?
Сопоставьте принятые обращения с успешными передачами по их идентификаторам и посмотрите возраст записей в очереди. Например, при десяти принятых и семи подтверждённых передачах найдите три оставшихся ID и их состояния. Порог задержки задают по процессу продаж. Расхождения разбирают отдельно от ручных изменений и удалений в CRM.
Источники и документация
Материал подготовлен для владельцев бизнеса на основе официальной документации. Примеры и планы работ в тексте — учебные: состав решений зависит от конкретного сайта.
