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 |
Практический пример: лид из формы ¶
- Webhook принимает заявку.
- Set/Edit Fields создаёт
contact_key,source,lead_type. - IF проверяет, есть ли телефон или email.
- Switch выбирает маршрут: Битрикс24, amoCRM, Google Sheets или Telegram.
- Filter отбрасывает тестовые заявки и внутренние домены.
- Merge возвращает общий результат для ответа webhook.
Связанные материалы ¶
- Set/Edit Fields — нормализация полей перед условиями.
- Merge — объединение веток.
- Webhook — входящие события.
- Диагностика Webhook — если данные не доходят до условий.