1. Архитектура данных n8n: JSON, бинарные файлы и работа с выражениями
Архитектура данных n8n: JSON, бинарные файлы и работа с выражениями
Добро пожаловать на курс «Продвинутая работа с n8n: Интеграции Google, Yandex и GigaChat». Мы пропускаем этапы установки и знакомства с интерфейсом, так как предполагаем, что вы уже запустили свой первый инстанс. Теперь пришло время заглянуть «под капот» системы.
Чтобы создавать сложные сценарии, объединяющие таблицы Google, нейросети вроде GigaChat и облачные хранилища Яндекса, необходимо фундаментально понимать, как n8n «видит» и передает данные. Ошибка в понимании архитектуры данных — самая частая причина, по которой сценарий работает на тестовых данных, но ломается в реальном бою.
Анатомия данных: Структура Item
В отличие от классического программирования, где вы оперируете переменными разных типов, или Excel, где есть ячейки, n8n работает с потоком объектов. Каждый такой объект называется Item (элемент).
Когда данные переходят от одной ноды (узла) к другой, они всегда упакованы в массив элементов. Даже если вы обрабатываете всего одну строку из Google Sheets, n8n передает её как массив, содержащий один Item.
Каждый Item имеет строгую структуру, состоящую из двух ключевых разделов:
!Схема структуры объекта Item в n8n, разделенного на JSON и Binary данные.
JSON: Универсальный язык интеграций
Большинство сервисов, с которыми мы будем работать — будь то API GigaChat, Google Calendar или Yandex Geocoder — общаются на языке JSON. В n8n раздел json внутри Item содержит полезную нагрузку.
Пример того, как выглядит один Item после получения данных от GigaChat:
Важно понимать: если нода возвращает 10 результатов (например, 10 непрочитанных писем из Gmail), на выходе ноды будет массив из 10 Items. Следующая нода в цепочке запустится 10 раз — по одному разу для каждого элемента. Это автоматическая итерация, которая отличает n8n от многих других платформ.
Binary: Работа с файлами
Раздел binary устроен иначе. n8n не хранит сам файл в текстовом виде внутри интерфейса (это бы «убило» производительность браузера). Вместо этого там хранится объект с метаданными и ссылкой на файл в памяти сервера.
Типичная структура бинарных данных при скачивании файла с Google Drive:
Здесь data — это закодированное содержимое файла. Когда вы будете отправлять этот файл в Yandex Disk или на распознавание в OCR-сервис, вы будете оперировать именно этим объектом.
Поток данных и контекст выполнения
Главная ошибка новичков — попытка обратиться к данным, которых «уже нет» или «еще нет». В n8n данные текут слева направо. Нода имеет доступ к:
* Данным, которые пришли непосредственно в неё (Input Data). * Данным любой предыдущей ноды, если к ним обратиться явно через выражения.
Особенности работы с Google и Yandex
При интеграции с этими сервисами вы столкнетесь с двумя типами ответов:
Например, ответ от геокодера Яндекса может выглядеть так:
Чтобы работать с такими данными, вам часто придется использовать ноду Code или выражения для «вытаскивания» нужных значений на верхний уровень.
Выражения (Expressions): Клей вашей автоматизации
Выражения — это способ сделать ваши данные динамическими. Вместо того чтобы писать «Привет» в сообщении, вы пишете «Привет, {{имя_клиента}}». В n8n выражения пишутся на JavaScript и заключаются в двойные фигурные скобки {{ }}.
Доступ к JSON-данным
Самый простой способ обратиться к данным входящего элемента — использовать префикс json.message }} — вернет значение поля message из текущего элемента.
* {{ ("Название Ноды").item.json.field }}
Однако здесь есть нюанс, связанный с парностью данных (Paired Items). Если у вас было 5 элементов на входе и 5 на выходе, n8n легко сопоставит их. Но если вы использовали ноду агрегации (объединили 5 строк в один список), прямая связь может потеряться.
Математика в выражениях
Поскольку n8n поддерживает JavaScript, вы можете производить вычисления прямо внутри полей. Это критически важно при работе с токенами нейросетей (GigaChat) или расчетом квот API.
Рассмотрим пример расчета стоимости обработки запроса в GigaChat, если мы знаем количество токенов и цену за 1000 токенов. Формула расчета стоимости выглядит следующим образом:
где — итоговая стоимость запроса, — количество потраченных токенов (например, поле P_{unit}json.usage.total_tokens / 1000) * 0.2 }} (при цене 0.2 у.е.).
!Интерфейс Expression Editor в n8n, демонстрирующий выбор переменных и результат вычисления.
Работа с бинарными данными в выражениях
Работа с бинарными файлами через выражения отличается. Вы редко манипулируете самим содержимым файла в коде. Чаще всего вы манипулируете его именем или типом.
Пример: Вы получили файл от пользователя в Telegram и хотите сохранить его на Google Drive с новым именем, включающим дату.
В поле «File Name» ноды Google Drive вы напишете:
{{ binary.data.fileName }}
Здесь json... }} для доступа к данным и JavaScript для их обработки.
В следующей статье мы перейдем к практической настройке авторизации для Google и Yandex, где понимание структуры JSON-ответов (токенов доступа) нам очень пригодится.