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