Автоматизация обработки заявок WordPress → amoCRM + Telegram
Кейс · WordPress, amoCRM и автоматизация заявок · 2026
Перестроили обработку заявок на WordPress так, чтобы лид сохранялся ещё до перехода на страницу «Спасибо». amoCRM, Telegram и отправка коммерческого предложения вынесены в независимую очередь с повторными попытками. Сбой внешнего сервиса больше не приводит к потере заявки.
Проблема
На сайте уже работали формы, интеграция с amoCRM и автоматическая отправка клиенту коммерческого предложения. Но архитектура имела критическую точку отказа: часть дальнейшей обработки была связана со старым обработчиком формы и переходом пользователя на страницу «Спасибо».
Если браузер закрывался, соединение обрывалось или внешний сервис временно не отвечал, заявка могла не пройти весь предусмотренный маршрут. При этом менеджер не всегда мог определить, на каком этапе потерялись данные.
Задача состояла не просто в подключении ещё одного API, а в перестройке механизма так, чтобы сначала гарантированно сохранить лид, а уже затем выполнять все внешние действия.
Новый путь заявки
-
Перехват формы на сайте
Все целевые формы WordPress обрабатываются единым JavaScript-модулем. При отправке генерируется уникальный
JavaScript · FormData · request_idrequest_id, собираются поля формы, UTM-метки, страница входа, referrer и источник заявки. -
Сохранение через WordPress REST API
Браузер отправляет данные в отдельный REST endpoint. Сервер проверяет входные данные и первым действием сохраняет заявку в собственной таблице WordPress.
POST /wp-json/coolstory/v1/lead -
Переход на страницу «Спасибо»
Redirect выполняется только после подтверждения успешного сохранения. Страница благодарности больше не участвует в передаче данных в CRM и не является частью критического пути заявки.
DB saved → success → /thanks/ -
Коммерческое предложение
Если клиент указал email, система отдельно отправляет HTML-письмо с предложением и необходимыми PDF-материалами. Набор вложений определяется категорией заявки.
SMTP · HTML email · PDF -
Передача в amoCRM
После обработки коммерческого предложения заявка синхронизируется с amoCRM. Система ищет существующий контакт, анализирует связанные сделки и только после этого принимает решение о создании новой.
amoCRM API v4 · contacts · leads -
Уведомление в 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
