Чистые данные: нормализация и валидация
Содержание курса
Сборка полного workflow: нормализация → валидация → остановка
Теперь собираем всё в одну цепочку. Никаких новых узлов — только то, что уже разобрано, в правильном порядке.
Шаг 1. Form Trigger
Откройте workflow из предыдущего урока. Form Trigger уже настроен: поля «Имя», «Email», «Описание». Если Email помечен как Required, снимите пометку на время теста — нужно проверить, что валидация в IF работает даже когда форма пропускает пустое поле.
Шаг 2. Edit Fields — нормализация
Добавьте узел Edit Fields сразу после Form Trigger и подключите его. Создайте три поля, используя тернарный оператор из предыдущего раздела — он защищает от отсутствующего ключа:
name→ Expression:{{ $json['Имя'] ? $json['Имя'].trim() : '' }}email→ Expression:{{ $json['Email'] ? $json['Email'].trim().toLowerCase() : '' }}description→ Expression:{{ $json['Описание'] ? $json['Описание'].trim() : '' }}
После сохранения узла запустите тест формы с корректными данными и проверьте Output Edit Fields — там должны быть уже приведённые значения: без лишних пробелов, email строчными буквами.
Шаг 3. IF — проверка валидности
Добавьте узел IF и подключите его к Edit Fields. В разделе Conditions добавьте условие с типом Expression:
{{ !$json.email || $json.email.trim() === '' }}
Ветка true — невалидный item, ветка false — данные в порядке. Если нужно проверять несколько полей сразу, добавьте второе условие и объедините через OR:
{{ !$json.name || $json.name.trim() === '' }}
Шаг 4. Stop and Error — ветка true
Добавьте узел Stop and Error и подключите его к выходу true узла IF. В поле Error Message напишите конкретное сообщение:
Email обязателен — заявка не принята
Ветку false оставьте пока незаполненной — туда в следующем уроке подключится маршрутизация.
Шаг 5. Тестовый запуск с невалидными данными
Откройте форму по тестовой ссылке Form Trigger и отправьте заявку с пустым Email:
{ "Имя": " алексей ", "Email": "", "Описание": "Не работает вход" }
Что должно произойти:
Edit Fields обработает item, поле
emailстанет пустой строкой''.IF получит item: условие
!$json.email || $json.email.trim() === ''вернётtrue.Item уйдёт в ветку true → достигнет Stop and Error.
Узел Stop and Error окрасится в красный, в панели Output появится текст «Email обязателен — заявка не принята».
Это ожидаемый результат. Красный узел — не поломка, а подтверждение: валидация работает, некорректный item остановлен, дальше по цепочке ничего не пошло.
Для полноты картины отправьте форму ещё раз с заполненным Email. IF должен отправить item в ветку false — она пока ни к чему не подключена, и n8n просто не будет делать ничего дальше. Главное — Stop and Error при этом не срабатывает.
Цепочка готова. В уроке 6 к ветке false IF подключится логика маршрутизации — нормализованные и проверенные данные будут использоваться для разделения заявок на обычные и приоритетные.

Поток нормализации, валидации и остановки невалидной заявки.
