За полтора года настройки автоматизаций я собрал рабочий n8n сценарий для выгрузки лидов в amoCRM, который использую и на своих проектах, и у клиентов - от лендингов на Tilda до интернет-магазинов на WooCommerce. В этой статье разберу его по шагам: приём заявки с сайта, авторизация в amoCRM, создание контакта и сделки, и отдельно - как не плодить дубли, когда один и тот же человек оставляет заявку дважды.
Зачем автоматизировать передачу лидов в amoCRM через n8n
Без автоматизации заявки с сайта обычно падают на почту или в Telegram-чат менеджера, и дальше их вручную переносят в CRM. На практике это значит, что часть лидов теряется в течение первых 15-20 минут - самого горячего окна для звонка. У одного клиента с интернет-магазином на WooCommerce я считал конверсию до и после внедрения n8n: до автоматизации менеджеры обрабатывали заявку в среднем через 2-3 часа, после - через 5-7 минут, потому что сделка уже лежала в CRM с тегом источника и всеми полями формы.
n8n в этой связке берёт на себя рутину: слушает вебхук с сайта, разбирает данные, обращается к API amoCRM и создаёт сделку с привязанным контактом. Zapier и Make делают похожее, но n8n можно развернуть на своём сервере, не платить за каждое действие в сценарии и не упираться в лимиты бесплатного тарифа при большом потоке заявок.
Из каких узлов состоит сценарий выгрузки лидов в n8n
Минимальный рабочий сценарий у меня обычно состоит из пяти узлов:
- Webhook - принимает POST-запрос с сайта или из формы
- Set / Edit Fields - приводит данные к единому формату (телефон, имя, комментарий)
- HTTP Request к amoCRM - создаёт или обновляет контакт
- HTTP Request к amoCRM - создаёт сделку и привязывает к ней контакт
- IF или Error Trigger - обрабатывает ситуации, когда amoCRM вернул ошибку
Это база. В реальных проектах сценарий обрастает дополнительными узлами: проверка на дубль по телефону, отправка уведомления менеджеру в Telegram через aiogram-бота, запись лога в Google Таблицу для сверки. Но начинать стоит именно с этих пяти блоков - остальное добавляется по мере необходимости, а не заранее.
Приём заявок с сайта: вебхук для Tilda, WooCommerce и форм
Для Tilda я обычно не использую встроенную интеграцию с amoCRM в конструкторе - она ограничена по полям и не даёт гибко обработать данные перед отправкой. Вместо этого ставлю кастомный скрипт на форму, который отправляет POST-запрос напрямую на Webhook-узел n8n.
Пример тела запроса, который прилетает в n8n с формы:
{
"name": "Иван Петров",
"phone": "+79261234567",
"email": "ivan@example.com",
"source": "tilda-landing",
"comment": "Интересует расчёт стоимости"
}
Для WooCommerce использую хук woocommerce_checkout_order_processed на стороне сайта: он отправляет данные о новом заказе на тот же Webhook n8n, только с дополнительными полями - составом корзины и суммой заказа. Это удобно, когда заявка приходит не с формы, а с оформленного заказа, и в amoCRM нужно сразу видеть, что клиент купил.
В узле Webhook в n8n важно сразу поставить Response Mode на “Immediately” с кодом 200 - если сайт не получит быстрый ответ, форма может показать пользователю ошибку отправки, хотя сам сценарий в n8n при этом отработает нормально.
Подключение amoCRM к n8n: авторизация и создание сделки
Готового официального узла amoCRM в n8n нет, поэтому работаю через HTTP Request и REST API amoCRM напрямую. Авторизация идёт по OAuth 2.0: сначала получаю долгосрочный токен через интеграцию в личном кабинете amoCRM, затем настраиваю в n8n credential типа “OAuth2 API” с полями client_id, client_secret и redirect_uri.
Создание контакта и сделки одним сценарием
После авторизации первый HTTP-запрос уходит на создание контакта:
POST https://ваш_домен.amocrm.ru/api/v4/contacts
[
{
"name": "{{ $json.name }}",
"custom_fields_values": [
{
"field_code": "PHONE",
"values": [{ "value": "{{ $json.phone }}" }]
}
]
}
]
Полученный id контакта передаю дальше, во второй запрос - создание сделки с привязкой:
POST https://ваш_домен.amocrm.ru/api/v4/leads
[
{
"name": "Заявка с сайта: {{ $json.source }}",
"_embedded": {
"contacts": [{ "id": "{{ $json.contact_id }}" }]
}
}
]
Один нюанс, на который я тратил лишние часы на первых проектах: amoCRM не даёт создать сделку и контакт одним запросом с гарантированной связкой, если контакт уже существует - нужно сначала искать его по телефону через GET-запрос с фильтром, и только если не нашёлся, создавать новый. Иначе на каждой повторной заявке от одного клиента появляется свежий дублирующий контакт.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Как защититься от дублей лидов и потери заявок
Дубли - самая частая жалоба от отделов продаж после внедрения интеграции. Решается это так: перед созданием контакта добавляю узел HTTP Request с GET-запросом на поиск по номеру телефона (query=). Если API возвращает совпадение, беру существующий id и создаю только новую сделку, привязанную к нему - без нового контакта.
Вторая проблема - потерянные заявки при сбое amoCRM или временной недоступности API. Для этого в конце сценария ставлю Error Trigger, который при любой ошибке HTTP-запроса пишет данные заявки в отдельную Google Таблицу и параллельно шлёт уведомление в Telegram. У одного клиента с СДЭК-интеграцией на сайте так спасли порядка 40 заявок за первый месяц - amoCRM отдавал 429 при превышении лимита запросов в пиковые часы, и без страховки эти лиды просто исчезали бы.
Если делаете такой сценарий с нуля, готовые шаблоны и куски логики для похожих интеграций я собираю в библиотеке готовых скриптов - можно взять за основу и адаптировать под свои поля в CRM, не собирая всё с чистого листа.
Сравнение способов интеграции сайта с amoCRM
Прежде чем звать разработчика, стоит понять, какой вариант подойдёт именно вам:
| Способ | Гибкость | Стоимость на рынке | Когда подходит |
|---|---|---|---|
| Встроенная интеграция Tilda | Низкая, ограниченный набор полей | Бесплатно | Простая форма без доп. логики |
| Zapier / Make | Средняя | от 1 500 до 5 000 ₽/мес на рынке за подписку | Небольшой поток заявок, нет своего сервера |
| n8n сценарий | Высокая, любая логика на JS/Python-нодах | Разовая настройка + хостинг | Средний и большой поток, нужны проверки на дубли, несколько источников |
| Кастомный бэкенд | Максимальная | от 100 000 ₽ на рынке у студий | Сложные воронки, множество интеграций помимо CRM |
Настройку n8n сценария для выгрузки лидов в amoCRM под ключ - с приёмом заявок, поиском дублей и уведомлениями - я делаю от 25 000 ₽, срок обычно 3-5 рабочих дней в зависимости от количества источников заявок и полей в CRM. Если параллельно нужна доработка формы на Tilda под передачу нестандартных полей, это отдельная задача - комплексная интеграция такого рода у меня от 40 000 ₽.
Связка сервисов без программистов
Автоматизация / n8n
от 25 000 ₽
Подробнее →Частые вопросы
Нужен ли платный тариф n8n для интеграции с amoCRM
Нет, для одного-двух сценариев хватает self-hosted версии n8n на своём сервере или VPS - она бесплатна, платить нужно только за хостинг. Облачный тариф n8n имеет смысл, если не хотите заниматься администрированием сервера и обновлениями.
Можно ли обойтись без HTTP Request и использовать готовый модуль amoCRM
В n8n нет официального нода amoCRM, есть только сторонние community-нодыс ограниченным набором методов. На практике я всегда работаю через HTTP Request и REST API - это даёт доступ ко всем эндпоинтам amoCRM, включая кастомные поля и воронки, которых в готовых модулях обычно нет.
Как быть, если у меня несколько источников заявок - сайт, Telegram-бот, звонки
Каждый источник заводится через свой Webhook или триггер в n8n, а дальше все ветки сходятся в общий блок обработки: поиск дубля, создание контакта, создание сделки с тегом источника. Это позволяет видеть в amoCRM, откуда реально пришёл лид, даже если каналов пять и больше.
Что делать, если amoCRM меняет лимиты API или структуру полей
amoCRM периодически меняет лимиты запросов (сейчас это 7 запросов в секунду на аккаунт) и иногда обновляет структуру ответов API. Сценарий в n8n стоит проверять раз в несколько месяцев, особенно после крупных обновлений CRM - обычно правки минимальные, но без них можно словить тихий сбой, когда заявки перестают доходить, а уведомления об ошибке никто не настроил.