Данные между узлами: выражения и развилки
Магия 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 при разной погоде (можно менять координаты) и убедись, что обе ветки работают.
Короткие вопросы по уроку — с разбором каждого ответа.