Как передавать данные между блоками в n8n: выражения и JSON простыми словами

· 3 мин чтения · Редакция Skill Unit

Первая сложность после «Hello world» в n8n — понять, как данные из одного блока попадают в другой. Заявка пришла, а в сообщении менеджеру вместо имени клиента пусто или написано undefined. Почти всегда причина в том, как вы обращаетесь к полю. Разберём основу.

Как устроены данные: элементы и поля

Каждый блок получает и отдаёт список элементов. Один элемент — это одна запись, например одна заявка. Внутри элемента лежат поля в формате JSON: пары «название — значение». Если блок вернул три заявки, дальше пойдут три элемента, и многие блоки обработают каждый по очереди.

Учебный пример одного элемента:

JSONОдин элемент (учебный)
{
  "name": "Анна",
  "phone": "(условный номер)",
  "source": "сайт"
}

Здесь три поля: name, phone и source. Эти названия вы будете использовать в выражениях.

Как вставить значение через выражение

В настройках блока поле можно переключить из режима «фиксированное значение» в режим «выражение». В выражении данные вставляются в двойных фигурных скобках. Ссылка на поле текущего элемента из предыдущего блока выглядит так:

Выражение n8nВыражение в тексте сообщения
Новая заявка от {{ $json.name }}, источник: {{ $json.source }}

Здесь $json означает «данные текущего элемента», а после точки идёт название поля. Проще всего не писать выражение вручную: откройте панель с входными данными блока и перетащите нужное поле в настройку, n8n подставит путь сам.

Как взять данные не из предыдущего, а из другого блока

Иногда нужное поле было получено два-три блока назад. Тогда обращаются по названию блока:

Выражение n8nПоле из блока с названием Webhook
{{ $('Webhook').item.json.name }}

Название в кавычках должно совпадать с названием блока на схеме. Если вы переименуете блок, выражение придётся поправить. Поэтому давайте блокам понятные короткие имена сразу.

Вложенные поля

Данные бывают вложенными: поле внутри поля. Путь пишут через точки. Например, у блока Webhook присланные данные формы обычно лежат внутри поля body, поэтому выражение может выглядеть как $json.body.name. Чтобы не гадать, откройте результат блока в режиме JSON и посмотрите реальный путь.

Если подставилось пусто или undefined

  • Проверьте название поля: регистр и язык букв имеют значение, name и Name — разные поля.
  • Откройте выход предыдущего блока и убедитесь, что поле там есть. Поля, которых нет у элемента, подставятся пустыми.
  • Проверьте вложенность: возможно, поле лежит в body или в другом внутреннем разделе.
  • Убедитесь, что выражение включено: в режиме фиксированного значения скобки превратятся в обычный текст.
  • Проверьте, что блок получил данные из теста: запустите предыдущие блоки, чтобы появились примеры.

Один элемент или много

Если предыдущий блок вернул несколько элементов, следующий обычно запускается для каждого. Поэтому три заявки дадут три сообщения. Если нужно одно сообщение на все заявки, их предварительно собирают в один элемент специальным блоком (например, для объединения или агрегации), а не пытаются обойтись выражением. Подробнее про логику ветвления — в статье про блоки If, Switch и Merge.

Частые ошибки

  • Писать выражение с опечаткой в названии поля.
  • Переименовать блок и забыть поправить ссылки на него.
  • Не смотреть реальный JSON и догадываться о названиях.
  • Тестировать на одном элементе, а в боевом режиме получить несколько и удивиться дублям.
  • Хранить в выражениях ключи и пароли: для них есть хранилище учётных данных.

Что делать дальше

Соберите схему из двух блоков: пример заявки и блок, который отправляет сообщение с именем и источником из заявки. Протестируйте на трёх разных тестовых записях, в том числе с пустым полем. В курсе по n8n без кода на Skill Unit вы строите рабочие сценарии на своих задачах и учитесь находить ошибки. Первый урок бесплатно.

Хотите пройти путь на практике?

Курс «Автоматизация без кода на n8n»: короткие уроки, практические задания и проверка ответов. Первый урок бесплатно.

Смотреть курс