Сквозной проект: обработка заявки

Форма как настоящий trigger

Содержание курса

Типичные ошибки: потерянная отправка и пустые поля

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

Отправка формы до нажатия «Listen for test event»

Если открыть Preview-ссылку, заполнить поля и нажать Submit раньше, чем редактор перешёл в режим ожидания, — данные просто уйдут в никуда. n8n не буферизует пропущенные отправки: он принимает только те, что пришли пока окно ожидания было открыто.

Признак прост: после отправки формы узел Form Trigger не окрасился в зелёный, панель Output пуста или показывает предыдущий результат. Решение — нажать «Listen for test event» ещё раз и повторно отправить форму. Повторная отправка безопасна: тестовый режим каждый раз ждёт ровно одну новую запись и перезаписывает Output.

Необязательное поле: отсутствующий ключ вместо пустой строки

Если поле не помечено как Required и пользователь оставил его пустым, поведение n8n неочевидно. Представим, что к форме добавили необязательное поле «Телефон» (тип text, без Required), а пользователь его не заполнил.

Многие ожидают увидеть в Output пустую строку для незаполненного поля:

{
  "Имя": "Алексей",
  "Email": "alex@example.com",
  "Описание проблемы": "Не работает вход",
  "Телефон": ""       ← ожидаемое поведение
}

Но реальный Output выглядит иначе — ключа Телефон нет совсем:

{
  "Имя": "Алексей",
  "Email": "alex@example.com",
  "Описание проблемы": "Не работает вход"
  ← ключа «Телефон» не существует
}

Это не пустая строка, а полное отсутствие ключа. Если в следующем узле написать {{ $json['Телефон'] }}, результатом будет undefined. Для большинства узлов это не вызовет видимой ошибки сразу, но если дальше по цепочке будет операция над этим значением (например, .trim() или числовое сравнение), workflow упадёт с ошибкой.

Защититься можно двумя способами: либо помечать поля как Required, если данные действительно нужны, либо в expression явно обрабатывать отсутствие ключа:

{{ $json['Телефон'] ?? 'не указан' }}

Оператор ?? вернёт правую часть, если левая — undefined или null. Это минимальная страховка для необязательных полей, которые всё же участвуют в дальнейшей обработке. В следующем уроке разберём нормализацию и валидацию данных из формы подробнее — там этот паттерн встретится снова.