Перейти к содержанию

IF, Switch и Filter в n8n: условия, маршрутизация и чистка данных

Обновлено: 2026-05-29

Открыть мой план

Условия в n8n чаще всего строятся на трёх нодах: IF, Switch и Filter. Они похожи, но решают разные задачи. IF делит поток на две ветки, Switch отправляет items по нескольким маршрутам, а Filter оставляет только те items, которые прошли проверку. Если перепутать эти роли, workflow быстро превращается в набор случайных веток, где часть данных теряется, а часть уходит не туда.

Быстрый выбор

IF — когда есть «да/нет». Switch — когда вариантов больше двух: новый лид, повторный лид, VIP, спам. Filter — когда нужно выбросить лишние items и оставить только подходящие записи для следующих нод.

Чем отличаются IF, Switch и Filter

НодаЧто делаетКогда братьТипичная ошибка
IFделит поток на true/falseпроверка одного условия или группы условийиспользовать для 5–7 вариантов, когда нужен Switch
Switchотправляет item в один из нескольких outputsмаршрутизация по статусу, источнику, типу событияне задать fallback для неизвестного значения
Filterпропускает только подходящие itemsочистка списка перед обработкойждать отдельную false-ветку, которой у Filter нет

IF: простое ветвление «да/нет»

IF удобен для сценариев, где нужно принять одно бинарное решение: есть телефон или нет, сумма больше 10 000 или меньше, источник равен tilda или нет, заявка уже есть в CRM или её нужно создать. Важно заранее нормализовать данные: телефон привести к одному формату, email — к нижнему регистру, пустые значения — к null или пустой строке.

{{ $json.phone && $json.phone.replace(/\D/g, '').length >= 10 }}

После IF не забывайте, что downstream-нода получает items только из выбранного output. Если нужно снова объединить ветки, используйте Merge, но сначала проверьте, что обе ветки возвращают совместимые поля.

Switch: несколько маршрутов вместо цепочки IF

Switch лучше, когда вариантов больше двух. Например, webhook получает события lead.created, lead.updated, payment.succeeded, payment.canceled. Делать цепочку из пяти IF можно, но поддержку такого workflow быстро станет сложно вести. В Switch каждый case читабелен, а отдельный fallback помогает поймать неизвестные события.

{
  "event_type": "lead.created",
  "source": "tilda",
  "lead_id": "lead_1001"
}

Для российских интеграций Switch особенно полезен в связках «Tilda → CRM», «ЮKassa → заказ», «VK Lead Forms → менеджер». Один webhook может принимать разные события, а Switch разводит их по понятным веткам.

Filter: убрать мусор до дорогих действий

Filter не маршрутизирует данные по нескольким веткам. Он просто оставляет только те items, которые подходят под условие. Это удобно перед HTTP Request, AI Agent, отправкой письма или созданием сделки в CRM. Если из 500 строк Google Sheets только 17 требуют обработки, сначала отфильтруйте их, а потом запускайте дорогие или лимитированные действия.

Хорошее правило: Filter должен стоять до внешних API и AI-запросов, если часть items заведомо не нужна. Так workflow становится дешевле, быстрее и меньше упирается в лимиты.

Как строить условия без хрупких expressions

  • Не пишите длинные выражения прямо в IF, если их трудно читать. Вынесите подготовку в Set/Edit Fields или Code node.
  • Создайте поле normalized_status, contact_key, event_type до ветвления.
  • Проверяйте пустые значения явно: телефон, email, ID сделки, ID заказа.
  • Не сравнивайте телефоны и даты в сыром виде, сначала нормализуйте формат.
  • Оставляйте fallback-ветку для неизвестного статуса или события.

Merge после условий

Merge нужен, когда после разных веток workflow должен снова перейти к общей логике: записать результат в таблицу, отправить один формат уведомления или вернуть HTTP-ответ. Но Merge не должен маскировать разный контракт данных. Если одна ветка возвращает deal_id, а другая error_message, лучше привести их к единой структуре до объединения.

{
  "result": "created",
  "entity": "deal",
  "entity_id": "12345",
  "source_event": "lead.created"
}

Типовые ошибки

СимптомПричинаЧто сделать
после IF дальше ничего не происходитitem ушёл в другую ветку или output пустойоткрыть execution и посмотреть, какой output сработал
Switch не ловит значениеразный регистр, пробелы, другое имя полянормализовать поле перед Switch
Filter удалил все itemsусловие слишком строгое или поле отсутствуетдобавить Set/Edit Fields и проверить входные данные
после Merge поля пропаливетки возвращают разные структурыпривести выходы веток к одному контракту
workflow трудно читатьслишком много IF подрядзаменить на Switch или вынести правила в Code node

Практический пример: лид из формы

  1. Webhook принимает заявку.
  2. Set/Edit Fields создаёт contact_key, source, lead_type.
  3. IF проверяет, есть ли телефон или email.
  4. Switch выбирает маршрут: Битрикс24, amoCRM, Google Sheets или Telegram.
  5. Filter отбрасывает тестовые заявки и внутренние домены.
  6. Merge возвращает общий результат для ответа webhook.

Связанные материалы