N8n переменные

N8n переменные: полное руководство по контекстам, синтаксису и практическому применению

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

Контексты переменных в n8n

Данные в n8n организованы в четкие контексты, которые определяют область видимости и источник переменных. Доступ к ним осуществляется через выражения (expressions) в полях, активируемые двойными фигурными скобками {{ }}.

Основные контексты переменных:

    • $json: Самый часто используемый контекст. Содержит данные, выходящие из предыдущего узла. Каждый узел возвращает JSON-объект, и его свойства доступны через $json. Например, если узел HTTP Request возвращает объект { "id": 123, "name": "John" }, то в следующем узле можно использовать {{ $json.id }} и {{ $json.name }}.
    • $node: Позволяет обращаться к выходным данным любого узла в workflow по его имени. Это мощный инструмент для доступа к информации не только из непосредственно предыдущего узла. Синтаксис: {{ $node["Node Name"].$json["property"] }} или упрощенный вариант {{ $node["Node Name"].json["property"] }}.
    • $items: Ключевой контекст для работы с циклами (например, внутри узла Loop Over Items). Он представляет текущий элемент в итерации. Индекс элемента доступен через {{ $index }} (начинается с 0).
    • $env и $secrets: Контексты для доступа к переменным окружения и секретам. $env используется для значений, заданных в настройках n8n (Settings > Variables), а $secrets — для безопасного хранения конфиденциальных данных типа токенов API или паролей. Синтаксис: {{ $env.VARIABLE_NAME }} и {{ $secrets.SECRET_NAME }}.
    • $now и $today: Специальные переменные для работы с датой и временем. $now возвращает текущую дату и время, $today — текущую дату с обнуленным временем (00:00:00). С ними можно выполнять операции, например, {{ $now.plus(2, 'days') }}.
    • $execution: Предоставляет метаданные о текущем выполнении workflow, такие как $execution.id (уникальный ID запуска) и $execution.resumeUrl (URL для ручного возобновления workflow, полезно в Wait узле).
    • $binary: Используется для работы с бинарными данными (изображения, файлы). Позволяет получить имя файла, mime-type или данные в base64.
    • $runIndex: Показывает порядковый номер текущей итерации выполнения узла (начинается с 0). Полезно для отладки циклов.
    • $input: Позволяет получить все данные, пришедшие на вход узла, включая данные от нескольких веток. Используется в продвинутых сценариях.
    • $workflow: Содержит информацию о workflow: $workflow.id и $workflow.name.
    • $vars (или $variables): Контекст для пользовательских переменных, заданных в узле Set. Это основной способ создания собственных переменных внутри потока.

    Синтаксис выражений и функций

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

    Базовый синтаксис:

    • Доступ к свойствам объекта: {{ $json.property }} или {{ $json["property with spaces"] }}.
    • Доступ к элементам массива: {{ $json.array[0] }}.
    • Цепочка свойств: {{ $json.data.user.email }}.

    Ключевые категории функций:

    1. Строковые функции:

    • {{ $json.text.toUpperCase() }} — преобразование в верхний регистр.
    • {{ "Hello " + $json.name }} — конкатенация.
    • {{ $json.text.slice(0, 5) }} — получение подстроки.
    • {{ $json.sku.replace("-", "_") }} — замена части строки.

    2. Математические функции и операции:

    • {{ 10 + $json.value }} — сложение.
    • {{ Math.max($json.num1, $json.num2) }} — использование объекта Math.
    • {{ $json.price
    • 1.2 }} — вычисление с НДС.

    3. Функции для работы с датами:

    • {{ $now.format("YYYY-MM-DD HH:mm:ss") }} — форматирование даты.
    • {{ $now.minus(1, 'hour').format() }} — вычитание времени.
    • {{ $json.date.isBetween($today, $today.plus(1, 'week')) }} — проверка вхождения в интервал.

    4. Функции для работы с массивами:

    • {{ $json.tags.join(", ") }} — объединение массива в строку.
    • {{ $json.numbers.map(n => n
    • 2) }} — преобразование массива (возвращает массив).
    • {{ $json.items.filter(item => item.active) }} — фильтрация массива.
    • {{ $json.items.length }} — получение длины массива.

    5. Логические функции и условные выражения:

    • {{ $json.age > 18 ? "adult" : "minor" }} — тернарный оператор.
    • {{ $json.value1 && $json.value2 }} — логическое И.
    • {{ !$json.isCompleted }} — логическое НЕ.

    Практическое применение переменных в узлах

    Узел Set (Задание переменных)

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

    • Name: Имя переменной (например, "formattedDate").
    • Value: Выражение, вычисляющее значение (например, {{ $now.format("YYYY-MM-DD") }}).
    • Type: Можно явно указать тип (String, Number, Boolean и т.д.).

    После выполнения узла Set переменная становится доступна через контекст $vars (например, {{ $vars.formattedDate }}).

    Узел Code (JavaScript / Python)

    Позволяет писать произвольный код для сложных операций с данными. Внутри узла доступны специальные объекты:

    • $input: Для получения всех входных данных.
    • items: Массив входных элементов.
    • $json: Данные текущего элемента (при работе в режиме по одному элементу).
    • Для возврата данных нужно использовать return items.map(item => { ... }) или return [ { json: { newField: "value" } } ].

    Узел IF (Ветвление)

    В условиях ветвления активно используются переменные и выражения.

    • Condition: {{ $json.temperature }} > 30 — если температура больше 30.
    • Combine Conditions: {{ ($json.status === "active") && ($json.priority === "high") }}.

    Узел Loop Over Items (Цикл)

    Внутри цикла контекст $items содержит текущий элемент. $index — его порядковый номер. Это позволяет обрабатывать массивы данных, например, отправлять индивидуальные письма или создавать записи в БД для каждого элемента.

    Таблица: Сводка по основным контекстам переменных

    Контекст Описание Пример использования
    $json Данные, полученные от непосредственно предыдущего узла. {{ $json.email }}
    $node Данные от любого узла в workflow по его имени. {{ $node["HTTP Request"].json["id"] }}
    $items Текущий элемент внутри цикла (Loop Over Items). {{ $items.body }}
    $env Переменные окружения, заданные в настройках n8n. {{ $env.API_URL }}
    $secrets Секретные переменные (токены, пароли). {{ $secrets.SENDGRID_API_KEY }}
    $now / $today Текущая дата-время и текущая дата. {{ $now.plus(7, 'days').format() }}
    $vars Пользовательские переменные, созданные в узле Set. {{ $vars.fullName }}
    $execution Метаданные текущего выполнения workflow. {{ $execution.id }}
    $input Все входные данные узла (включая данные из нескольких веток). Используется внутри узла Code.

    Ответы на часто задаваемые вопросы (FAQ)

    Как получить данные не из предыдущего узла, а из узла, расположенного раньше в workflow?

    Используйте контекст $node. Укажите точное имя нужного узла в квадратных скобках: {{ $node["Имя узла"].json["Нужное поле"] }}. Убедитесь, что имя узла указано без ошибок, учитывая регистр и пробелы.

    В чем разница между $env и $secrets?

    Оба хранятся в настройках n8n, но имеют разное назначение. $env предназначен для обычных переменных окружения (например, URL API, ID проекта). $secrets используется исключительно для конфиденциальной информации. В интерфейсе n8n значения $secrets скрыты (отображаются как точки), и они могут иметь дополнительные ограничения на логирование для повышения безопасности.

    Почему мое выражение {{ $json.field }} возвращает [object Object]?

    Это означает, что значение field является объектом или массивом, а не примитивным типом (строка, число). Чтобы получить конкретное свойство из этого объекта, уточните путь: {{ $json.field.subfield }}. Для отладки используйте узел Code, чтобы вывести полную структуру $json.

    Как создать свою переменную и использовать ее в другом узле?

    Используйте узел Set. В поле "Name" задайте имя переменной (например, totalAmount). В поле "Value" укажите выражение для вычисления значения (например, {{ $json.price

  • $json.quantity }}). В последующих узлах обращайтесь к этой переменной через контекст $vars: {{ $vars.totalAmount }}.

Как работать с массивами данных в цикле?

Используйте узел Loop Over Items. На его вход подайте массив данных (например, [ { "id": 1 }, { "id": 2 } ]). Внутри цикла (в узлах, расположенных после Loop Over Items) каждый элемент массива будет доступен через контекст $items (например, {{ $items.id }}), а его индекс — через {{ $index }}.

Можно ли использовать JavaScript функции в выражениях?

Да, n8n поддерживает множество стандартных JavaScript-функций и объектов, таких как Math, String, Array (например, Math.round(), .split(), .join(), .map()). Однако это не полная среда выполнения JS, а специальный движок выражений, поэтому некоторые возможности могут быть ограничены. Для сложной логики предпочтительнее использовать узел Code.

Как форматировать дату и время?

Используйте метод .format() для переменных $now и $today. Внутри скобок можно указать строку формата: {{ $now.format("DD.MM.YYYY") }} (день.месяц.год) или {{ $now.format("HH:mm") }} (часы:минуты). Полный список спецификаторов формата доступен в документации библиотеки Luxon, которую использует n8n.

Что делать, если узел возвращает несколько элементов (пакет данных)?

N8n работает с пакетами данных (arrays of json objects). Многие узлы обрабатывают их автоматически. Для доступа к конкретному элементу в выражении можно использовать индекс: {{ $json[0].field }} для первого элемента. В узле Code весь пакет доступен через массив items.

Как обработать ситуацию, когда переменная может быть не определена (undefined)?

Используйте условный (тернарный) оператор или логический оператор ИЛИ (||) для задания значения по умолчанию: {{ $json.optionalField || "default_value" }}. Это предотвратит ошибки выполнения workflow.

Заключение

Система переменных и выражений n8n представляет собой мощный и гибкий инструмент для построения логики автоматизаций. Ее основа — четкое разделение данных по контекстам ($json, $node, $vars, $env и др.), что обеспечивает предсказуемость и контролируемость потоков данных. Комбинирование встроенных функций, узлов Set и Code позволяет реализовывать преобразования любой сложности — от простой конкатенации строк до динамического формирования запросов к API и обработки массивов. Глубокое понимание принципов работы с переменными является необходимым условием для перехода от создания простых линейных сценариев к проектированию комплексных, надежных и эффективных бизнес-процессов в n8n.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *