← AI process automation with n8n
01 / 07 · 40 min

Nodes, triggers, and your first workflow

How the n8n canvas works: node types, items as the data format, expressions with $json, and your first scheduled workflow.

Lesson content is currently available in Russian.

What you will learn

  • →Различать trigger-ноды и обычные ноды и объяснять, как items текут через workflow.
  • →Читать и писать expressions с $json, $now и данными других нод.
  • →Собрать и активировать первый workflow по расписанию с HTTP-запросом и фильтром.

Canvas, ноды и items: как n8n думает о данных

n8n — визуальный оркестратор: workflow собирается на canvas из нод, соединённых стрелками-connections. Нод два класса. Триггеры запускают выполнение и не имеют входа: Manual Trigger (кнопка Test workflow), Schedule Trigger (расписание), Webhook (входящий HTTP-запрос), Chat Trigger (сообщение в чате). Обычные ноды принимают данные, выполняют действие и передают результат дальше: HTTP Request, Edit Fields (Set), IF, Code.

Ключевая идея, без которой n8n кажется магией: между нодами течёт не «одно значение», а массив items. Каждый item — объект с ключом json (и опционально binary для файлов):

[
  { "json": { "email": "ann@acme.io", "score": 42 } },
  { "json": { "email": "bob@acme.io", "score": 17 } }
]

Большинство нод выполняют операцию для КАЖДОГО item: если на вход HTTP Request пришло пять items, нода сделает пять запросов. Отсюда типичное недоумение новичка «почему письмо ушло три раза» — потому что на входе было три item.

Каждый запуск сохраняется в списке Executions: откройте любой прогон, кликните по ноде — увидите её реальные input и output. Для отладки используйте pin data: закрепите выход ноды, и следующие прогоны будут брать закреплённые данные вместо реальных запросов к API.

Expressions: {{ $json }} и данные из других нод

Expressions — способ подставлять динамические значения в параметры нод. Синтаксис: двойные фигурные скобки, внутри — JavaScript. Базовые случаи:

  • {{ $json.email }} — поле текущего item;
  • {{ $json.user.address.city }} — вложенное поле через точку;
  • {{ $('Webhook').item.json.body.name }} — данные из любой ноды выше по потоку, по её имени;
  • {{ $now.toISO() }} — текущее время (Luxon DateTime), {{ $today }} — дата;
  • {{ $itemIndex }} — номер текущего item, {{ $execution.id }} — id прогона;
  • {{ $env.MY_VAR }} — переменная окружения (только self-hosted).

Так выглядит конфигурация ноды Edit Fields (Set) в экспортированном JSON — знак = в начале значения означает «вычислить как expression»:

{
  "assignments": [
    { "name": "fullName", "value": "={{ $json.first + ' ' + $json.last }}", "type": "string" },
    { "name": "receivedAt", "value": "={{ $now.toISO() }}", "type": "string" }
  ]
}

Редактор expressions показывает результат на живых данных предыдущей ноды — пользуйтесь этим вместо запусков «вслепую». Антипаттерн: собирать JSON конкатенацией строк в Code node там, где хватает Edit Fields с двумя expressions. Чем больше логики видно прямо на canvas, тем дешевле поддержка workflow.

Первый workflow: Schedule Trigger → HTTP Request → фильтр → уведомление

Соберём первый настоящий workflow — ежедневный дайджест погоды.

  1. Schedule Trigger: Trigger Interval = Custom (Cron), выражение 0 8 * * * — каждый день в 08:00 по таймзоне инстанса (настройка GENERIC_TIMEZONE).
  2. HTTP Request: метод GET, URL https://api.open-meteo.com/v1/forecast?latitude=48.85&longitude=2.35&daily=temperature_2m_max&timezone=auto. API без ключа — идеально для тренировки. Ответ станет item со всей структурой прогноза.
  3. IF: условие Number → {{ $json.daily.temperature_2m_max[0] }} → larger → 25. Ветка true — жара, ветка false — обычный день.
  4. Edit Fields (Set): соберите текст сообщения, например ={{ 'Завтра до ' + $json.daily.temperature_2m_max[0] + '°C' }}.
  5. Нода отправки: Telegram, Slack или Gmail — любая, для которой настроите credentials.

Кнопка Test workflow запускает прогон вручную прямо в редакторе — данные видны на каждой ноде. Тумблер Active включает production-режим: с этого момента Schedule Trigger срабатывает сам, а прогоны попадают в список Executions (в редакторе их не видно — это второе по популярности недоумение новичка).

Правило: сначала добейтесь зелёного ручного прогона с данными на каждой ноде, потом активируйте. Отлаживать активный workflow по логам мучительнее, чем прогнать его вручную ещё раз.

Гигиена workflow: паттерны и антипаттерны

Workflow живут долго, и через месяц их читаешь как чужой код. Дисциплина с первого дня окупается.

Паттерны. Переименовывайте ноды по смыслу: «Получить прогноз», а не «HTTP Request1» — на имена нод ссылаются expressions вида $('Получить прогноз'), и осмысленные имена делают формулы самодокументируемыми. Расставляйте Sticky Notes — заметки прямо на canvas, объясняющие блоки. Один workflow — одна задача: «принять лид», «отправить дайджест»; крупные процессы делите на под-workflow (нода Execute Sub-workflow). Прибейте тестовые данные через pin data, чтобы не дёргать платные API при каждой правке.

Антипаттерны. Один гигантский Code node, который делает всё, — так теряется главное преимущество n8n: наблюдаемость каждого шага в executions. Секреты в URL или заголовках прямо в ноде — они попадут в экспортированный JSON (правильное место — credentials, урок 6). Workflow без обработки ошибок в production — до урока 5 это простительно, после — нет.

Простой тест зрелости: если назначение ноды нельзя объяснить одной фразой, нода делает слишком много — делите.

Practice

Утренний дайджест погоды

Соберите workflow: Schedule Trigger (cron 0 8 * * *) → HTTP Request к open-meteo → IF по температуре → Edit Fields с текстом сообщения → отправка в Telegram, Slack или на почту. Прогоните вручную через Test workflow, затем активируйте.

Deliverable

Экспортированный JSON workflow и скриншот успешного execution с данными на каждой ноде.

Checkpoint

Объясните на своём workflow, как items проходят от триггера до последней ноды и где какие expressions вычисляются.

  • ✓ Названы типы нод (триггер и обычные) и их роль в workflow.
  • ✓ Показано, что данные — это массив items, и объяснено, как нода обрабатывает несколько items.
  • ✓ Приведён хотя бы один рабочий expression с $json и объяснено, откуда берётся значение.

Check yourself

Чем trigger-нода принципиально отличается от обычной ноды?

01Чем trigger-нода принципиально отличается от обычной ноды?

В каком виде данные передаются между нодами n8n?

02В каком виде данные передаются между нодами n8n?

На вход HTTP Request пришло четыре items. Сколько запросов сделает нода по умолчанию?

03На вход HTTP Request пришло четыре items. Сколько запросов сделает нода по умолчанию?

Что делает expression {{ $('Webhook').item.json.body.email }}?

04Что делает expression {{ $('Webhook').item.json.body.email }}?

Чем Test workflow отличается от активации (Active)?

05Чем Test workflow отличается от активации (Active)?

Sources

Nodes, triggers, and your first workflow · AI process automation with n8n · VORCL