Вы вставили в Tilda Test URL с `/webhook-test/`, форма отдает 200, а в n8n - пустые Executions: workflow не Active, внешний сервис бьет в мертвый endpoint, а на self-hosted в узле светится `localhost:5678`. За один вечер поднимите production webhook для одной заявки: HTTPS Production URL, `WEBHOOK_URL` за reverse proxy, Header Auth, ответ клиенту и curl smoke-test до подключения CRM.
TL;DR / Быстрый инсайт: Webhook в n8n - входящий HTTP-адрес (как дверной звонок на сайте): внешняя форма шлет POST, workflow ловит данные и пишет в CRM или таблицу. Test URL (`/webhook-test/`) живет около 120 секунд после Listen for test event; боевой путь - Production URL (`/webhook/`) при включенном Active. Переключатель Test/Production в UI только для копирования ссылки. На self-hosted без `WEBHOOK_URL` и `N8N_PROXY_HOPS=1` публичный адрес не совпадет с тем, что видит Tilda.
Дмитрий развернул n8n за Nginx на VPS, скопировал URL из узла Webhook в форму и ушел пить кофе. Форма отдавала 200, в n8n - тишина: в ссылке был `/webhook-test/`, workflow не был Active, `WEBHOOK_URL` не задан. После `WEBHOOK_URL=https://auto.example.com/`, `N8N_PROXY_HOPS=1` и переключения на Production URL заявки пошли в Google Sheets, но Stripe прислал тот же `event_id` дважды - без дедупа в CRM появились двойные лиды.
Голос этой инструкции - не «все webhook-интеграции мира», а один входящий канал заявок: сначала проводка (`WEBHOOK_URL`), потом замок (auth), потом табличка «работает» (Activate + curl). По Вордстат (июнь 2026) «n8n webhooks» - 185 показов/мес в РФ, «n8n webhook url» - 33.
Зафиксируйте один источник событий - форма, поля и payload

Боль: в одном workflow висят Tilda, Stripe и Telegram - отладка превращается в угадайку. Решение - один канал на первый вечер: форма с полями `name`, `phone`, `email`, `utm_source`. Запишите ожидаемый JSON до открытия n8n. Важно: не смешивайте лиды и оплаты.
Типичная ошибка - тащить оплату и лиды в один сценарий. Платежные webhooks несут другие поля и ретраи; выносите их во второй workflow. На path + HTTP method - один production webhook. Избегайте дублирования path; лучше отдельный URL на канал.
- Выберите один источник: лендинг, Tilda, Typeform - не все сразу.
- Согласуйте имена полей с версткой и зафиксируйте пример тела запроса.
- Создайте workflow с узлом Webhook (триггер) и заглушкой записи в Google Sheets или CRM.
- Не подключайте боевую CRM, пока не пройдете curl smoke-test на Production URL.
Test URL против Production: почему форма «молчит» при 200 OK

Боль: скопировали ссылку из панели Webhook, форма вроде отвечает, Executions пустые. Test URL содержит `/webhook-test/` и регистрируется только после Listen for test event - активен около 120 секунд. Production URL с `/webhook/` регистрируется, когда workflow сохранен и переключатель Active включен.
Часто ломается голова у новичков: переключатель Test/Production - только вид для копирования URL, а не режим работы сервера. После Save UI может снова показать Test URL, но живой endpoint остается production, пока workflow Active - это в документации n8n и в community.
| Параметр | Test URL (`/webhook-test/`) | Production URL (`/webhook/`) |
|---|---|---|
| Когда работает | После Listen, ~120 с | Пока workflow Active |
| Куда в Tilda/CRM | Только отладка в редакторе | Боевой адрес формы |
| Типичная ошибка | URL ушел на прод, через 2 мин 404 | Нет Active - POST не регистрируется |
Схема на вечер: Listen в редакторе → отладка Test URL → Save → Active ON → копируете Production URL → вставляете в форму → смотрите Executions
На практике сначала ловите payload в Test, смотрите структуру `body`, затем копируете Production и только потом трогаете боевую форму.
Self-hosted за Nginx: WEBHOOK_URL, HTTPS и заголовки proxy

Боль: в узле Webhook светится `http://localhost:5678/webhook/…`, Tilda с интернета туда не достучится. Self-hosted - когда n8n крутится на вашем VPS, а не в облаке n8n.io; внешний мир видит только домен за reverse proxy (Nginx или Caddy).
Решение из документации endpoint-переменных: задайте публичный HTTPS в `WEBHOOK_URL` и число proxy hops в `N8N_PROXY_HOPS`. Trailing slash в `WEBHOOK_URL` обязателен - без него Production URL в UI может собраться криво.
Пример env для VPS:
WEBHOOK_URL=https://auto.example.com/
N8N_PROXY_HOPS=1
На reverse proxy пробросьте `X-Forwarded-Proto` и `Host`. После смены env перезапустите n8n. Убедитесь, что контейнер поднялся с новыми переменными; проверьте Production URL в UI. Лимит тела webhook по умолчанию 16 MB (`N8N_PAYLOAD_SIZE_MAX` на self-hosted).
Ответ форме: Immediately, Respond to Webhook и лимит 100 секунд
Боль: клиент ждет ответ формы, а workflow пишет в CRM 30+ секунд - браузер или Tilda упираются в таймаут. На n8n Cloud webhook без ответа дольше 100 секунд дает HTTP 524 от Cloudflare (common issues).
Для заявки с лендинга обычно хватает Respond → Immediately на узле Webhook: n8n сразу отвечает «принято», CRM и Sheets обновляются дальше. Если фронту нужен свой JSON (`{«ok»:true,»lead_id»:»…»}`), выберите Using Respond to Webhook node и добавьте узел Respond to Webhook. Типичная ошибка - When Last Node Finishes при тяжелой ветке: пользователь видит спиннер, хотя заявка уже в очереди.
Header Auth, CVE-2026-21858 и дедупликация повторных POST
Боль: публичный webhook без защиты ловит спам. В 2026 году advisory CVE-2026-21858 (CVSS 10.0) показал риск на версиях n8n до 1.121.0 - обновитесь и закройте endpoint, а не оставляйте «на потом».
Минимум для формы - Header Auth в узле Webhook: credential с секретом, заголовок `X-Webhook-Secret`, тот же заголовок в Tilda. Посторонний POST без заголовка получает 403.
Второй слой - дедуп. Stripe и платежки ретраят событие с тем же `event_id`. Перед CRM - IF + Data Store: если ключ уже есть, ветка skip. В реальном проекте повтор Stripe без дедупа дал две строки с одним email.
Итоговый вердикт: сначала замок (Header Auth + патч n8n >= 1.121.0), потом табличка «работает» (Active + curl). Дедуп - страховка от ретраев провайдера.
Чек-лист перед продакшеном: curl, Error Workflow и dead-letter
Боль: «вроде настроили» без smoke-test - первый живой лид теряется в пятницу вечером. Рекомендуем прогнать пять проверок до боевой CRM - не стоит подключать форму, пока curl не вернул ожидаемый ответ.
- curl POST на Production URL с тем же методом и auth-заголовком, что у формы.
- Executions - виден payload, статус success.
- Error Workflow - на падение узла CRM уходит уведомление.
- Dead-letter - сырой JSON в отдельный лист Sheets для ручного replay.
- Версия n8n - не ниже 1.121.0, если webhook доступен из интернета.
Пример curl smoke-test: curl -sS -X POST «https://auto.example.com/webhook/lead-from-site» -H «Content-Type: application/json» -H «X-Webhook-Secret: YOUR_SECRET» -d ‘{«name»:»Test»,»phone»:»+79990000000″,»email»:»test@example.com»}’
Ожидайте HTTP 200 и тело из Respond to Webhook. 404 - проверьте Active, path и что не остался `/webhook-test/`. 403 - auth не совпал. Пустые Executions при 200 формы - неверный URL или не тот инстанс.
Success criteria: workflow Active принимает POST на Production URL с Header Auth; в Executions виден payload; CRM получает одну запись без дубликата; curl - HTTP 200. В результате вы получите готовый канал: форма отвечает клиенту, заявка в CRM без ручного replay.
Что дальше: (1) Error Workflow в Slack или почту; (2) сверка dead-letter с CRM раз в неделю; (3) для агентной обработки - гайд по ИИ-агенту в n8n; (4) если инстанс на localhost - разверните n8n self-hosted с HTTPS; (5) не дублируйте path между workflow.
Разбор входящего канала под один процесс - neuroalex.site. Актуальность: 2026-06-30.
Материал проверен: Елена Ковалева, эксперт по SEO/GEO.
Достоверность данных: Test/Production URL, WEBHOOK_URL, лимит 100 с, CVE-2026-21858 - документация и advisory n8n, accessed 2026-06-30; Wordstat «n8n webhooks» - 185 показов/мес (РФ, июнь 2026).
Частые вопросы
Почему webhook-test не работает вне редактора n8n?
Test URL регистрируется на короткое окно после Listen for test event и нужен для отладки в редакторе. Внешняя форма и Tilda бьют в Production URL (`/webhook/`) при включенном Active. Если скопировали test-ссылку на прод - через пару минут начнете ловить 404.
Обязателен ли HTTPS на self-hosted?
Для боевой формы с публичного сайта - да: `WEBHOOK_URL` задается с `https://`, TLS на reverse proxy. HTTP допустим только в закрытой тестовой сети. Домен в env должен совпадать с наружным, со слэшем на конце.
Как отличить дубликат webhook от нового события?
Смотрите стабильный id в теле: `event_id`, `id` или hash нормализованного JSON. Сохраните ключ в Data Store и перед create проверяйте IF. Повтор с тем же id - skip и HTTP 200, чтобы отправитель не ретраил бесконечно.
Чем Respond to Webhook отличается от Immediately?
Immediately отвечает дефолтным сообщением без кастомного JSON. Respond to Webhook node дает ваше тело и статус, но узел должен выполниться до таймаута клиента. Для долгой CRM-ветки комбинируйте Immediately с фоновой обработкой.
Нужен ли JWT вместо Header Auth для Tilda?
Tilda и большинство no-code форм проще отдают статический секрет в заголовке - Header Auth достаточно. JWT имеет смысл, когда отправитель подписывает токен (свой backend). Первый вечер: один секрет, один заголовок, curl-тест.
Можно ли держать два workflow на одном path?
Нет: один production webhook на комбинацию path и HTTP method. Второй workflow с тем же POST-path даст конфликт или 404. Разводите сценарии разными path: `lead-site`, `stripe-hook`, `telegram-inbound`.
