Выражения

Выражение в n8n — это способ подставить в поле узла не статичную строку, а значение, которое вычисляется в момент выполнения. Все «динамические» вещи в сценарии — обращение к данным предыдущих узлов, вычисления, форматирование — делаются через выражения.

Двойные фигурные скобки

Внешний синтаксис выражения — это {{ ... }}. То, что внутри скобок, выполняется как JavaScript-выражение.

Здравствуйте, {{ $json.firstName }}!

Если в текущем item значение поля firstName равно Анна, то на выходе получится Здравствуйте, Анна!.

Внутри выражения можно использовать обычные JS-операции: конкатенацию строк, арифметику, методы строк и массивов, тернарный оператор и так далее.

{{ $json.firstName.toUpperCase() }}
{{ $json.price * 1.2 }}
{{ $json.age >= 18 ? "adult" : "minor" }}

Главные «магические» переменные

В выражениях n8n есть несколько встроенных переменных, которые ссылаются на данные сценария.

  • $json — JSON-часть текущего входящего item. Это то, с чем вы работаете в 80% случаев.
  • $node["Имя узла"].json — JSON-часть первого item на выходе указанного узла. Полезно, если вам нужны данные не из непосредственно предыдущего узла, а из более раннего.
  • $input.first(), $input.last(), $input.all() — обращение к входным items текущего узла как к коллекции. $input.all() возвращает массив всех items, что удобно, когда нужно их перебрать.
  • $now, $today — текущие дата и время.
  • $workflow, $execution — метаданные о сценарии и текущем выполнении.

Точное имя и доступность некоторых переменных зависят от версии n8n. Если в вашей версии чего-то нет — посмотрите, что предлагает редактор выражений: он подсказывает доступные значения.

Редактор выражений

В каждом поле, которое поддерживает выражения, можно переключить режим: фиксированная строка или выражение. В режиме выражения n8n показывает редактор, в котором:

  • слева — дерево с данными предыдущих узлов;
  • справа — поле для ввода выражения;
  • внизу — превью результата (как будет выглядеть подставленное значение).

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

Типичные ошибки

  1. Обращение к несуществующему полю. Если вы пишете {{ $json.address.city }}, а у item нет поля address, выражение упадёт с ошибкой Cannot read property 'city' of undefined. Защититься можно через {{ $json.address?.city }} (опциональный chaining) или {{ ($json.address || {}).city }}.
  2. Перепутаны узлы. Когда вы используете $node["..."], это первый item на выходе указанного узла, а не текущий. Если в том узле было 50 items, остальные 49 вы так не получите.
  3. Лишние пробелы и кавычки. В JSON-теле запроса значения-выражения нужно либо обернуть в кавычки (если это строка), либо оставить без них (если число/булев). При сомнениях смотрите превью.
  4. Логика в строке. В выражении внутри {{ }} вы можете использовать любой JS, но не выходите за его пределы. Внешние пробелы и текст — это просто текст, он остаётся как есть.