Автоматизация обработки заявок WordPress → amoCRM + Telegram

Кейс · WordPress, amoCRM и автоматизация заявок · 2026

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

10форм сайта
3канала доставки
1REST API
0зависимости от Thanks Page
24/7очередь Cron

Проблема

На сайте уже работали формы, интеграция с amoCRM и автоматическая отправка клиенту коммерческого предложения. Но архитектура имела критическую точку отказа: часть дальнейшей обработки была связана со старым обработчиком формы и переходом пользователя на страницу «Спасибо».

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

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

Новый путь заявки

  1. Перехват формы на сайте

    Все целевые формы WordPress обрабатываются единым JavaScript-модулем. При отправке генерируется уникальный request_id, собираются поля формы, UTM-метки, страница входа, referrer и источник заявки.

    JavaScript · FormData · request_id
  2. Сохранение через WordPress REST API

    Браузер отправляет данные в отдельный REST endpoint. Сервер проверяет входные данные и первым действием сохраняет заявку в собственной таблице WordPress.

    POST /wp-json/coolstory/v1/lead
  3. Переход на страницу «Спасибо»

    Redirect выполняется только после подтверждения успешного сохранения. Страница благодарности больше не участвует в передаче данных в CRM и не является частью критического пути заявки.

    DB saved → success → /thanks/
  4. Коммерческое предложение

    Если клиент указал email, система отдельно отправляет HTML-письмо с предложением и необходимыми PDF-материалами. Набор вложений определяется категорией заявки.

    SMTP · HTML email · PDF
  5. Передача в amoCRM

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

    amoCRM API v4 · contacts · leads
  6. Уведомление в Telegram

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

    Telegram Bot API · async delivery

Что происходит при повторной заявке

Поиск клиента

Телефон приводится к нормализованному виду. Контакт сначала ищется по телефону, затем при необходимости используется точный email.

Без лишних сделок

Если у найденного контакта уже существует активная сделка, новая сделка автоматически не создаётся. В существующую добавляется информация о повторном обращении.

Новый клиент

Если подходящей активной сделки нет, обращение создаётся в настроенной воронке amoCRM с источником, формой, городом и ответственным менеджером.

Защита от дублей

  • request_id — каждая отправка формы получает уникальный идентификатор
  • уникальная запись — повторный запрос с тем же идентификатором не создаёт второй лид
  • fingerprint заявки — дополнительная защита от быстрых повторных отправок
  • amoCRM — существующий контакт и активная сделка проверяются до создания новых сущностей
  • коммерческое предложение — после успешной отправки получает статус sent и повторно не отправляется обычным проходом очереди

Очередь вместо синхронной отправки

Главное архитектурное изменение — внешние сервисы больше не участвуют в сохранении самой заявки. WordPress принимает лид быстро, а дальнейшую доставку выполняет очередь.

Коммерческое предложение

Есть emailПисьмо отправляется клиенту и получает статус sent.

Нет emailЭтап получает статус skipped и не блокирует CRM.

Ошибка SMTPСохраняется текст ошибки и количество попыток для повторной обработки.

amoCRM и Telegram

amoCRMОбрабатывается после завершения этапа коммерческого предложения.

TelegramРаботает независимо от почты и CRM.

CronРегулярно запускает обработчик накопившихся и ошибочных заданий.

Коммерческое предложение

Старую отправку письма из обработчика формы перенесли в отдельный сервис. Сохранили существующие цены, тексты и PDF-материалы, но сама отправка теперь контролируется очередью.

Для разных направлений автоматически выбирается собственный комплект материалов: детский сад, 4 класс или 9–11 классы. Письмо оформлено в HTML в стилистике сайта и содержит коммерческое предложение вместе с приложенными PDF.

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

Интеграция с amoCRM

Поиск и сопоставление

ТелефонНомер нормализуется перед поиском.

EmailИспользуется как дополнительный идентификатор клиента.

СделкиПроверяются существующие связи контакта, чтобы повторное обращение не плодило дубли.

Создание обращения

ИсточникВ CRM передаётся источник Cool-story.

ФормаСохраняется название конкретной формы сайта.

РегионГород заявки переносится в соответствующее поле amoCRM.

ОтветственныйНовая сделка сразу назначается настроенному менеджеру.

UTM и источник заявки

Маркетинговые данные сохраняются отдельно от внешних интеграций. Система фиксирует UTM-параметры, URL страницы с формой, первоначальную landing page и referrer.

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

Контроль состояния

Для каждого внешнего канала хранится собственное состояние. Это позволяет отличить ситуацию «заявка потеряна» от конкретной технической проблемы вроде временной недоступности SMTP, Telegram или amoCRM.

Proposal

pending, sent, error или skipped, время отправки, число попыток и последняя ошибка.

amoCRM

Хранятся статус синхронизации, идентификаторы созданных сущностей и диагностическая информация.

Telegram

Отдельный статус доставки позволяет повторить уведомление независимо от CRM и электронной почты.

Архитектура

WordPress

FrontendЕдиный JavaScript-перехватчик существующих форм.

REST APIПринимает и валидирует заявки.

MySQLЗаявка сохраняется до любых внешних запросов.

CronЗапускает асинхронную обработку очереди.

Внешние сервисы

amoCRM API v4Контакты, сделки, пользовательские поля и примечания.

SMTPHTML-коммерческое предложение и PDF-вложения.

Telegram Bot APIОперативные уведомления о новых обращениях.

Безопасность и отказоустойчивость

  • заявка сохраняется до обращения к внешним API
  • секреты интеграций не передаются в JavaScript
  • служебный endpoint очереди защищён отдельным ключом
  • ошибка одного внешнего сервиса не приводит к потере лида
  • повторные попытки выполняются только для незавершённых операций
  • успешно отправленное коммерческое предложение не отправляется повторно обычным запуском очереди
  • Telegram, почта и amoCRM имеют независимые статусы доставки

Результат

Критическая зависимость от страницы «Спасибо» устранена. Теперь основным фактом является запись заявки в базе WordPress. Только после этого интерфейс сообщает об успехе и переводит посетителя дальше.

Коммерческое предложение, amoCRM и Telegram стали отдельными этапами обработки. Временная ошибка SMTP или API больше не означает потерю клиента: система знает состояние каждого этапа и может повторить незавершённую операцию.

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

WordPress · PHP · JavaScript · REST API · MySQL · amoCRM API v4 · Telegram Bot API · SMTP · Cron · Queue · Idempotency