Нейрокурс

Данные между узлами: выражения и развилки

Магия n8n — в протаскивании данных: имя из формы попадает в письмо, сумма из письма — в условие. Осваиваем выражения {{ }}, подстановку полей перетаскиванием и узел IF для развилок «если — то».

Узлы — кости сценария. Данные, текущие между ними, — кровь. Учимся ими управлять.

Каждый узел отдаёт данные следующему

Кликни выполненный узел — увидишь его выход: поля и значения (имя, почта, сумма…). Следующий узел может использовать любое из них.

Выражения {{ }}

В любом текстовом поле узла можно писать не только текст, но и подстановки:

Новая заявка от {{ $json.name }}!
Телефон: {{ $json.phone }}, сумма: {{ $json.amount }} €

Запоминать синтаксис не нужно: открой панель данных слева и перетащи нужное поле в текст — n8n сам напишет выражение. Перетаскивание полей — навык №1 этого урока.

Развилки: узел IF

Узел IF делит поток на две ветки по условию:

[Форма заявки] → [IF: amount > 1000?]
  true  → [Telegram менеджеру: «Крупная заявка!»]
  false → [Просто записать в таблицу]

Условия настраиваются формой: поле, оператор (больше/равно/содержит), значение. Несколько условий комбинируются через И/ИЛИ.

Мини-практика урока

Возьми вчерашнюю утреннюю сводку и добавь: IF «температура ниже 5°» → в сообщение дописывается «Возьми куртку! 🧥». Данные из HTTP-узла → условие → два варианта текста. Это шаблон всех будущих сценариев.

Что означают $json, $node и точка

Выражение {{ $json.name }} читается так: $json — данные, пришедшие в текущий узел; точка — «зайди внутрь»; name — имя поля. Если данные вложены, точек больше: у ответа погоды температура лежит в {{ $json.current.temperature_2m }}. А чтобы взять поле не из предыдущего, а из более раннего узла, есть $node:

Из соседнего узла:   {{ $json.amount }}
Из вложенного поля:  {{ $json.current.temperature_2m }}
Из узла по имени:    {{ $node["Form"].json.email }}

Опять же — почти всегда ты это не печатаешь, а перетаскиваешь мышью, и n8n сам подставляет правильный путь с точками. Но понимать, что означает точка, полезно: когда выражение вдруг вернёт undefined, ты сразу увидишь, что промахнулся уровнем вложенности.

IF против Switch

Узел IF даёт ровно две ветки — true и false. Когда веток больше двух (заявка / жалоба / вопрос / спам), берут Switch — тот же принцип, но с несколькими выходами. Правило простое: два исхода — IF, много исходов — Switch. Switch подробно разберём в уроке про разбор входящих, пока запомни, что развилка масштабируется.

Частые мифы о данных

  • «Надо учить синтаксис выражений». Нет. 95% времени ты перетаскиваешь поля мышью. Синтаксис нужен, только чтобы читать и чуть-чуть править готовое.
  • «Если скопировать значение руками, будет то же самое». Нет: руками вставленное «Иван» останется «Иваном» навсегда, а {{ $json.name }} в каждом запуске подставит имя нового клиента. Выражение — живое, текст — мёртвый.
  • «Пустая панель данных — сценарий сломан». Чаще всего узел просто не прогоняли. Нажми Execute на предыдущем узле — данные появятся, поля станут перетаскиваемыми.

Почему n8n показывает поля для перетаскивания только после прогона узла, а не сразу? Подумай: до запуска n8n не знает, что именно вернёт форма или API — придёт там поле «phone» или нет. Панель данных показывает реальный результат, а не догадку. Поэтому «прогнал → увидел настоящие поля → перетащил» надёжнее, чем угадывать имена вслепую.

Если данные «не тянутся»

Проверь, что предыдущий узел выполнен (Execute) — панель данных показывает только реально прошедшие данные. Пустая панель = прогони узел заново.

Узел Set: наводим порядок в данных

Часто данные из API приходят с лишними полями и неудобными именами. Узел Edit Fields (Set) — это «переупаковщик»: он берёт нужное, переименовывает и выбрасывает мусор, чтобы дальше по сценарию текла чистая, понятная структура. Например, из громоздкого ответа погоды оставить только два поля:

Было (из HTTP):  { "current": { "temperature_2m": 3.4, "time": "...",
                   "wind_speed_10m": 12, ...десяток полей... } }
Стало (после Set): { "temp": 3.4, "city": "Москва" }

Привычка приводить данные в аккуратный вид перед развилками и ИИ-узлами экономит часы отладки: когда поле называется temp, а не current.temperature_2m, и промпт, и условие IF читаются с первого взгляда.

Сделай сейчас

Открой вчерашнюю утреннюю сводку. В узле Telegram перетащи из панели данных поле температуры в текст сообщения, чтобы получилось «Сейчас {{ $json.current.temperature_2m }}°». Добавь узел IF после HTTP Request с условием «температура < 5» и в ветке true допиши в сообщение «Возьми куртку! 🧥». Прогони Execute при разной погоде (можно менять координаты) и убедись, что обе ветки работают.

Практика · 4 задачи

Короткие вопросы по уроку — с разбором каждого ответа.