Практический курс по n8n: от установки до автоматизации

Этот курс ориентирован на быструю практику и позволяет сразу начать создавать рабочие процессы в n8n. Вы научитесь настраивать триггеры, управлять логикой данных и интегрировать популярные сервисы без лишней теории.

1. Быстрый старт: установка n8n, обзор интерфейса и создание первого узла

Быстрый старт: установка n8n, обзор интерфейса и создание первого узла

Добро пожаловать в Практический курс по n8n. Вы здесь, потому что хотите автоматизировать рутину, интегрировать сервисы или просто почувствовать себя магом, управляющим потоками данных. n8n (произносится как «n-eight-n») — это мощный инструмент для автоматизации рабочих процессов, который отличается от аналогов (например, Zapier или Make) своим подходом: он основан на узлах (nodes), бесплатен при самостоятельном хостинге и невероятно гибок.

В этой первой статье мы не будем тратить время на долгие теоретические вступления. Мы сразу перейдем к делу: запустим n8n на вашем компьютере, разберемся с его интерфейсом и создадим ваш первый работающий сценарий.

Часть 1: Установка и запуск

Существует несколько способов начать работу с n8n: от облачной версии (Cloud) до развертывания на собственном сервере через Docker. Поскольку наш курс нацелен на практику и понимание работы системы «изнутри», мы воспользуемся самым быстрым способом локального запуска для разработчиков и энтузиастов — через npm (менеджер пакетов Node.js).

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

Предварительные требования

Для работы нам понадобится Node.js. Это среда выполнения, на которой построен n8n.

  • Откройте терминал (командную строку) на вашем компьютере.
  • Введите команду node -v и нажмите Enter.
  • Если вы видите версию (например, v18.17.0 или выше), вы готовы. Если вы видите ошибку, скачайте и установите Node.js с официального сайта (рекомендуется версия LTS).
  • Запуск через npx

    Мы используем команду npx, которая позволяет запустить пакет без его глобальной установки в систему. Это самый чистый способ попробовать инструмент.

    В терминале введите следующую команду:

    При первом запуске система может попросить подтвердить установку пакета. Нажмите y (yes) и Enter.

    После загрузки вы увидите в терминале сообщение:

    > Editor is now accessible via: http://localhost:5678/

    Откройте этот адрес в вашем браузере. Поздравляем, вы внутри n8n!

    Часть 2: Обзор интерфейса

    Когда вы впервые открываете n8n, перед вами предстает рабочее пространство, которое может показаться пустым. Давайте разберем его анатомию, чтобы вы чувствовали себя уверенно.

    !Интерфейс редактора n8n разделен на рабочую область (холст) и навигационные панели.

    Основные зоны

  • Холст (Canvas): Это бесконечное сетчатое поле в центре экрана. Здесь происходит вся магия. Вы будете перетаскивать сюда узлы и соединять их линиями. Вы можете перемещаться по холсту, зажимая левую кнопку мыши (или пробел), и масштабировать колесиком мыши.
  • Боковая панель (Sidebar): Находится слева. Здесь вы управляете своими сценариями (Workflows), настраиваете доступы (Credentials) к внешним сервисам (например, Google Sheets, Telegram) и переменные.
  • Кнопка выполнения (Execute Workflow): Обычно находится внизу или вверху (в зависимости от версии интерфейса). Она запускает ваш сценарий вручную для тестирования.
  • Переключатель Active/Inactive: Находится в правом верхнем углу. Это «рубильник» вашего робота. Пока он выключен, сценарий работает только когда вы нажимаете кнопку запуска вручную. Когда включен — сценарий работает автоматически по триггерам (например, по расписанию или при получении вебхука).
  • Часть 3: Анатомия узла (Node)

    В n8n всё состоит из узлов (Nodes). Узел — это один шаг в вашем процессе. Это может быть действие (отправить email), триггер (получить сообщение) или логическая операция (фильтрация данных).

    Каждый узел имеет: * Вход (Input): Точка слева, куда приходят данные от предыдущего шага. * Выход (Output): Точка справа, откуда данные уходят к следующему шагу. * Параметры: Настройки внутри узла, определяющие, что именно он делает.

    !Узел в n8n — это функциональный блок с входом для данных слева и выходом справа.

    Данные между узлами передаются в формате JSON. Это важно запомнить: каждый узел получает массив JSON-объектов, обрабатывает их и передает дальше.

    Часть 4: Создание первого сценария

    Давайте создадим простой сценарий: мы сгенерируем данные вручную и выведем их. Это классический «Hello World» в мире автоматизации.

    Шаг 1: Добавление триггера

    Любой сценарий должен с чего-то начинаться. Этот «старт» называется Триггер.

  • Нажмите на кнопку Add first step (или большой плюс) в центре холста.
  • В строке поиска введите Manual Trigger.
  • Выберите узел On clicking 'execute' (ранее он назывался просто Manual Trigger).
  • Этот узел — самый простой способ начать работу. Он ничего не делает сам по себе, но дает сигнал «Старт», когда вы нажимаете кнопку выполнения.

    Шаг 2: Добавление действия

    Теперь добавим узел, который создаст какие-то данные.

  • Наведите курсор на правую часть узла Manual Trigger (на маленький серый кружок/плюс).
  • Зажмите левую кнопку мыши и потяните линию вправо. Отпустите кнопку.
  • Откроется меню выбора следующего узла. Введите в поиске Edit Fields (в старых версиях этот узел назывался Set).
  • Выберите Edit Fields (Set).
  • Теперь у вас на холсте два узла, соединенных линией. Линия означает: «После того как сработает триггер, запусти этот узел».

    Шаг 3: Настройка данных

    Настроим узел Edit Fields, чтобы он создал сообщение.

  • Дважды кликните по узлу Edit Fields.
  • Откроется панель настроек. В разделе Assignments (Присвоения) вы увидите возможность добавить поля.
  • Нажмите Add Field -> String (Строка).
  • В поле Name (Имя переменной) напишите: myMessage.
  • В поле Value (Значение) напишите: Привет, n8n!.
  • Вы только что сказали системе: «Создай объект данных, у которого есть свойство myMessage с текстом Привет, n8n!».

    Шаг 4: Тестирование (Execution)

    Теперь самое интересное.

  • Не закрывая окно настроек узла, нажмите кнопку Execute Node (или Test step) в верхней части этого окна.
  • Посмотрите на правую часть окна (Output). Вы увидите результат в формате JSON (или Table):
  • Это означает, что узел успешно отработал. Он взял пустоту от триггера и превратил её в структурированные данные.

    Закройте окно настроек узла (крестик или клик вне окна).

    Шаг 5: Сохранение

    Внизу экрана нажмите кнопку Save (иконка дискеты) или используйте сочетание клавиш Ctrl + S (Windows) / Cmd + S (Mac). Дайте вашему сценарию имя, например, "Мой первый тест".

    Как это работает под капотом?

    Важно понимать философию n8n:

  • Поток данных: Данные текут слева направо, как вода по трубам. Если связь (линия) разорвана, данные не пройдут.
  • Итерации: Если предыдущий узел выдаст 10 объектов (например, 10 новых писем из почты), следующий узел запустится 10 раз — по одному разу для каждого письма. Это происходит автоматически.
  • Визуализация: Зеленые галочки на узлах означают успешное выполнение. Красные — ошибку.
  • Заключение

    Вы только что установили n8n, изучили интерфейс и создали базовый пайплайн обработки данных. Да, пока он просто выводит текст, который вы сами написали. Но этот принцип лежит в основе сложнейших систем: вместо ручного ввода текста в следующем уроке мы будем получать реальные данные из интернета.

    В следующей статье мы подключим HTTP Request, научимся работать с API и получим данные о погоде или курсе валют, чтобы обработать их в нашем сценарии.

    2. Основы автоматизации: работа с Webhook, триггерами и базовыми манипуляциями данных

    Основы автоматизации: работа с Webhook, триггерами и базовыми манипуляциями данных

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

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

    Что такое Webhook и зачем он нужен?

    Представьте, что вы ждете важное письмо. У вас есть два способа его получить:

  • Polling (Опрос): Вы каждые 5 минут спускаетесь к почтовому ящику, открываете его и проверяете, пусто там или нет. Это утомительно и неэффективно.
  • Webhook (Вебхук): Почтальон звонит вам в дверь, как только письмо оказалось у него в руках. Вы реагируете мгновенно и только тогда, когда это действительно нужно.
  • В техническом смысле, Webhook — это специальный URL-адрес, который генерирует n8n. Когда кто-то (или что-то) отправляет данные на этот адрес, ваш сценарий автоматически запускается.

    !Схема передачи данных от внешнего сервиса в n8n через Webhook

    Создание узла Webhook

    Давайте создадим сценарий, который будет приветствовать пользователя по имени, переданному через адресную строку браузера.

    Шаг 1: Добавление узла

  • Создайте новый Workflow (нажмите Add workflow в правом верхнем углу).
  • Нажмите на Add first step.
  • В поиске введите Webhook.
  • Выберите узел Webhook.
  • Шаг 2: Настройка метода

    Откройте настройки узла (двойной клик). Вы увидите несколько важных полей:

    * HTTP Method: Определяет, как мы будем отправлять данные. Для начала выберем GET. Это самый простой метод, который позволяет передавать данные прямо в адресной строке браузера. * Path: Путь к вашему хуку. По умолчанию там стоит случайный набор символов (например, b49f...). Давайте заменим его на что-то понятное, например, hello. * Authentication: Оставьте None. Мы пока учимся и не будем закрывать наш вход паролем.

    Шаг 3: Test URL vs Production URL

    Это критически важный момент в n8n, на котором спотыкаются многие новички. В узле Webhook вы увидите две вкладки для URL:

  • Test URL: Используется только когда вы строите и отлаживаете сценарий. Сценарий сработает по этому адресу, только если вы нажали кнопку Listen for Test Event в редакторе.
  • Production URL: Используется, когда сценарий уже готов и активирован (переключатель Active включен). Этот адрес работает всегда, 24/7.
  • Сейчас мы находимся в режиме разработки, поэтому будем использовать Test URL.

    Практика: Передача данных в n8n

    Давайте «позвоним в дверь» нашему n8n.

  • В настройках узла Webhook убедитесь, что выбран Test URL.
  • Нажмите на сам URL-адрес, чтобы скопировать его в буфер обмена.
  • Нажмите кнопку Listen for Test Event. Теперь n8n находится в режиме ожидания. У вас есть 120 секунд, чтобы отправить данные.
  • Откройте новую вкладку в браузере.
  • Вставьте скопированный адрес, но не нажимайте Enter сразу. Добавьте в конец строки параметры запроса: ?name=Alex&age=25.
  • Ваш итоговый адрес должен выглядеть примерно так: http://localhost:5678/webhook-test/hello?name=Alex&age=25

  • Нажмите Enter в браузере. Вы увидите белый экран с надписью "Workflow got started".
  • Вернитесь в вкладку с n8n.
  • Если вы все сделали правильно, узел Webhook станет зеленым, а в окне Output вы увидите полученные данные:

    Обратите внимание на объект query. Именно там лежат наши переменные name и age. n8n автоматически разобрал адресную строку и превратил её в структурированный JSON.

    Манипуляция данными: Expressions (Выражения)

    Получить данные — это полдела. Теперь нужно научиться их использовать в следующих шагах. В n8n для этого используется мощнейший инструмент — Expressions.

    Добавим узел Edit Fields (бывший Set), чтобы сформировать красивое сообщение.

  • Соедините выход узла Webhook с входом нового узла Edit Fields.
  • Откройте настройки Edit Fields.
  • В разделе Assignments создайте новое строковое поле с именем message.
  • Теперь самое интересное: нам нужно взять имя Alex из предыдущего шага. Наведите курсор на поле Value. Справа от поля появится кнопка, открывающая Expression Editor (иконка шестеренки или E, либо переключите режим с Fixed на Expression).
  • Работа в редакторе выражений

    Редактор выражений позволяет комбинировать статический текст и динамические данные.

    !Использование Drag & Drop для вставки переменных в редакторе выражений

  • В левой панели редактора вы видите Input Data (Входящие данные). Раскройте список: JSON -> query.
  • Найдите там поле name (значение "Alex").
  • Просто перетащите name в правую часть редактора или кликните по нему.
  • В поле ввода появится конструкция вида: {{ json — это ссылка на входящие данные.

    Допишите вокруг этой переменной текст, чтобы получилось: Привет, {{ json.query.age }}.

    Внизу окна редактора вы сразу увидите Result (Предпросмотр): Привет, Alex! Твой возраст: 25.

    Закройте редактор выражений и нажмите Execute Node. Вы увидите, что узел создал новое поле message с готовым текстом.

    Логика и ветвление: Узел If

    Автоматизация бесполезна без возможности принимать решения. Допустим, мы хотим пускать в наш «клуб» только тех, кто старше 18 лет.

    Для этого используется узел If.

  • Добавьте узел If после узла Webhook (или после Edit Fields, логика не изменится, но лучше проверять данные сразу на входе).
  • Соедините Webhook с If.
  • Откройте настройки узла If.
  • Узел If имеет два выхода: * true (верхний выход): Сюда пойдут данные, если условие выполнено. * false (нижний выход): Сюда пойдут данные, если условие НЕ выполнено.

    Настройка условия

  • В параметрах узла нажмите Add Condition.
  • Выберите тип сравнения: Number (Число), так как возраст — это число.
  • Value 1 (Что проверяем): Нажмите на шестеренку/Expression, зайдите в Input Data -> query и выберите age.
  • Важно:* Данные из URL часто приходят как строки. Если n8n не распознает число автоматически, вам может потребоваться преобразовать его, но обычно query параметры обрабатываются корректно. В выражении это будет выглядеть как {{ $json.query.age }}.
  • Operation (Операция): Выберите Larger or Equal (Больше или равно).
  • Value 2 (С чем сравниваем): Введите 18.
  • Теперь протестируем.

  • Закройте настройки узла If.
  • Нажмите Execute Node на узле If.
  • Поскольку мы передавали age=25, данные выйдут через выход true.
  • Попробуйте изменить данные в Webhook (запустите Listen заново и отправьте в браузере age=10). После выполнения узла If, данные выйдут через выход false.

    Базовая архитектура сценария

    Теперь у нас вырисовывается полноценный процесс:

  • Webhook: Получает данные (Имя, Возраст).
  • If: Проверяет возраст.
  • Ветка True: Ведет к узлу, который выполняет полезное действие (например, отправляет письмо с приветствием).
  • Ветка False: Ведет к узлу, который ничего не делает или отправляет отказ.
  • Это и есть суть backend-разработки и автоматизации: Прием данных -> Валидация/Логика -> Ответ/Действие.

    Важные нюансы работы с данными

    JSON и структура

    n8n работает с массивами объектов JSON. Даже если вы отправляете один запрос, внутри системы он выглядит как массив из одного элемента:

    Если вы подключите Google Таблицы и скачаете 100 строк, это будет массив из 100 объектов. Узлы n8n по умолчанию обрабатывают каждый элемент массива. Если вы поставите узел «Отправить Email» после узла с 100 строками, n8n отправит 100 писем. Вам не нужно писать циклы for или while, система делает это за вас.

    Типы данных

    Будьте внимательны с типами данных. Строка "18" и число 18 — это разные вещи для компьютера, хотя n8n старается сглаживать эти углы. В узле If всегда выбирайте правильный тип условия (String для текста, Number для чисел, Boolean для истина/ложь).

    Заключение

    Сегодня вы научились:

  • Создавать точку входа в вашу автоматизацию с помощью Webhook.
  • Различать Test и Production окружения.
  • Передавать данные через URL-параметры.
  • Использовать Expressions для внедрения динамических данных в текст.
  • Строить ветвление логики с помощью узла If.
  • Теперь вы можете создавать сценарии, которые реагируют на внешние события. Но пока мы только принимаем данные. В следующей статье мы научимся отправлять их во внешний мир и взаимодействовать с API других сервисов, используя мощный узел HTTP Request.

    3. Управление потоком данных: логические узлы IF, Switch и объединение веток Merge

    Управление потоком данных: логические узлы IF, Switch и объединение веток Merge

    В предыдущих статьях мы научились запускать n8n, создавать вебхуки и даже немного манипулировать данными. Но пока наши сценарии были линейными: шаг А, затем шаг Б, затем шаг В. Это похоже на поезд, который может ехать только по одним рельсам.

    Однако реальная жизнь нелинейна. В зависимости от ситуации нам нужно принимать разные решения. Если клиент VIP — отправить ему письмо с благодарностью. Если клиент новый — создать запись в CRM. Если произошла ошибка — отправить уведомление в Telegram.

    Сегодня мы превратим наш «поезд» в умную систему логистики с развилками и станциями сортировки. Мы изучим три ключевых узла, которые управляют потоком данных: If, Switch и Merge.

    Узел If: Бинарный выбор

    С узлом If мы вкратце познакомились в прошлом уроке, когда проверяли возраст пользователя. Это самый базовый логический элемент. Он задает вопрос, на который можно ответить только «Да» (True) или «Нет» (False).

    Как это работает

    Узел If принимает данные на вход и проверяет их на соответствие заданному условию. В зависимости от результата, данные направляются в один из двух выходов:

  • true (Верхний выход): Сюда попадают элементы, которые прошли проверку.
  • false (Нижний выход): Сюда попадают элементы, которые проверку не прошли.
  • !Узел If разделяет поток данных на два направления: истина и ложь.

    Типичные сценарии использования

    * Фильтрация: Пропускать дальше только заказы со статусом «Оплачено». * Проверка наличия: Если поле email пустое, отправить в ветку False (обработка ошибок), иначе — в ветку True (отправка письма). * Логические переключатели: Если переменная is_test_mode равна true, не отправлять реальные запросы к API.

    Сложные условия

    В настройках узла If можно добавлять не одно, а несколько условий (Conditions). При этом важно выбрать логический оператор:

    AND (И): Данные пройдут в ветку true*, только если выполнены ВСЕ условия одновременно (например, возраст > 18 И город = "Москва"). OR (ИЛИ): Данные пройдут в ветку true*, если выполнено ХОТЯ БЫ ОДНО из условий (например, статус = "Новый" ИЛИ статус = "В обработке").

    Узел Switch: Многовариантный выбор

    Что делать, если у вас не два варианта развития событий, а пять? Например, вы обрабатываете заявки в службу поддержки и хотите распределить их по отделам:

    * Тема «Оплата» -> Отдел бухгалтерии * Тема «Баг» -> Технический отдел * Тема «Сотрудничество» -> Отдел продаж * Остальное -> Общая очередь

    Можно было бы поставить каскад из нескольких узлов If, но это сделает ваш сценарий громоздким и нечитаемым. Здесь на сцену выходит узел Switch.

    Анатомия Switch

    Узел Switch позволяет создать одну точку входа и множество выходов (Output 0, Output 1, Output 2 и т.д.).

    В настройках узла вы выбираете Data Type (тип данных, который проверяем, например, String) и задаете Routing Rules (правила маршрутизации).

    Каждое правило привязывается к конкретному выходу:

  • Если значение равно "Оплата" -> выход 0.
  • Если значение равно "Баг" -> выход 1.
  • И так далее.
  • Также у Switch есть важная опция Fallback Output (Запасной выход). Если пришедшие данные не подошли ни под одно из правил, они отправятся в этот выход. Это спасает от потери данных при получении нестандартных запросов.

    !Узел Switch работает как сортировочный центр, направляя данные по разным путям в зависимости от их содержания.

    Проблема разделенных веток

    Когда вы используете If или Switch, ваш единый поток данных разделяется на несколько параллельных потоков. В n8n это выглядит как разветвление дерева.

    Представьте ситуацию: вы разделили поток заказов на «Дорогие» и «Дешевые». Для дорогих вы отправили уведомление менеджеру в Slack, для дешевых — просто записали в таблицу. Но в конце сценария вы хотите отправить финальный отчет администратору: «Обработка заказа завершена».

    Если вы просто добавите узел отправки отчета к каждой ветке, вам придется настраивать его дважды. Если веток пять — пять раз. Это нарушает принцип DRY (Don't Repeat Yourself — не повторяйся).

    Решение: нужно снова объединить ветки в одну. Для этого существует узел Merge.

    Узел Merge: Объединение потоков

    Узел Merge принимает данные из двух и более входов и объединяет их в один выходной поток. Это «узкое горлышко», которое собирает все разбросанные процессы воедино.

    Основные режимы работы (Mode)

    Узел Merge — один из самых сложных для понимания новичками, потому что у него есть разные режимы работы. Давайте разберем самые важные.

    #### 1. Append (Добавить / Присоединить) Это самый простой и часто используемый режим. Он работает по принципу «все в кучу».

    * Как работает: Берет все элементы из Входа 1, затем берет все элементы из Входа 2 и выдает их единым списком. * Пример: У вас есть список клиентов из Google Contacts и список клиентов из Outlook. Вы хотите объединить их в одну рассылку. Вы подаете оба списка в Merge (Append), и на выходе получаете общий список.

    #### 2. Merge by Key (Объединить по ключу) Этот режим работает как операция JOIN в базах данных (SQL).

    * Как работает: Он ищет совпадения в данных двух входов по определенному полю (например, email или id). Если совпадение найдено, он «склеивает» два объекта в один. * Пример: * Вход 1 (из CRM): `{

    4. Практическая интеграция: связываем Google Sheets, Telegram и используем HTTP Request

    Практическая интеграция: связываем Google Sheets, Telegram и используем HTTP Request

    Поздравляю! Вы прошли путь от установки n8n до понимания сложной логики ветвления. Теперь у вас есть фундамент. Но давайте будем честны: пока наши сценарии жили в вакууме. Мы генерировали данные вручную и перекладывали их из одного кармана в другой.

    Настоящая сила автоматизации раскрывается, когда вы начинаете соединять разрозненные сервисы. В этой статье мы построим полноценный, полезный инструмент: Трекер курса Биткоина.

    Мы научимся:

  • Получать реальные данные из внешнего мира с помощью HTTP Request.
  • Сохранять историю изменений в Google Sheets.
  • Отправлять уведомления прямо в ваш смартфон через Telegram.
  • !Архитектура нашего сценария: получение, сохранение и уведомление

    Часть 1: HTTP Request — окно в мир данных

    Чтобы узнать курс валют, погоду или новости, нам нужно спросить об этом у сервиса, который владеет информацией. Язык, на котором общаются программы, называется API (Application Programming Interface).

    В n8n для общения с любым API используется универсальный солдат — узел HTTP Request.

    Настройка источника данных

    Для нашего примера мы будем использовать бесплатный API от CoinGecko, который не требует ключей доступа. Мы хотим узнать цену Биткоина в долларах.

    URL для запроса: https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd

    Давайте настроим узел:

  • Добавьте узел HTTP Request на холст.
  • Откройте его настройки.
  • Method (Метод): Оставьте GET. Это означает «Дай мне данные».
  • URL: Вставьте ссылку выше.
  • Authentication: None (так как API публичный).
  • Нажмите Execute Node. В окне Output вы увидите ответ:

    (Цифра будет отличаться в зависимости от текущего курса).

    Теперь у нас есть реальные данные. Но они вложены глубоко в структуру JSON (bitcoin.usd). Чтобы с ними было удобнее работать, давайте добавим узел Edit Fields (Set) сразу после HTTP Request.

  • Создайте поле price.
  • В значении используйте выражение: {{ now }}.
  • * Price: Перетащите сюда значение price из предыдущего узла (Edit Fields).

    !Настройка маппинга: поле Date получает текущее время, поле Price получает данные из HTTP Request

    Нажмите Execute Node. Проверьте вашу Google Таблицу — там должна появиться новая строка с датой и ценой.

    Часть 3: Telegram — мгновенные уведомления

    Запись в таблицу — это хорошо для аналитики, но мы хотим знать курс прямо сейчас. Подключим Telegram-бота.

    Создание бота

    Если у вас еще нет бота, его создание займет 1 минуту:

  • Откройте Telegram и найдите пользователя @BotFather.
  • Напишите ему команду /newbot.
  • Придумайте имя и юзернейм для бота (должен заканчиваться на bot).
  • BotFather выдаст вам Token (длинная строка символов). Скопируйте его.
  • Получение Chat ID

    Бот должен знать, кому писать. Он не может писать первым незнакомцам, поэтому:

  • Найдите своего нового бота в поиске Telegram и нажмите Start.
  • Найдите другого бота: @userinfobot (или любого аналогичного) и нажмите Start. Он покажет ваш цифровой ID (например, 123456789). Скопируйте его.
  • Настройка узла Telegram

  • Добавьте узел Telegram в n8n.
  • Credential: Создайте новый, вставьте туда Token, полученный от BotFather.
  • Resource: Message.
  • Operation: Send Text.
  • Chat ID: Вставьте ваш цифровой ID.
  • Text: Напишите сообщение, используя Expression. Например:
  • 💰 Актуальный курс Биткоина: {{ $json.price }} USD

    Соедините узел Google Sheets с узлом Telegram. Почему так? Чтобы уведомление уходило только после успешной записи в таблицу. Если запись не удастся, сценарий остановится, и вы не получите ложного уведомления.

    Часть 4: Автоматизация запуска

    Сейчас наш сценарий работает, только если мы нажимаем кнопку Execute. Чтобы превратить его в робота, нужен Триггер.

    Для трекера цен идеально подходит триггер Schedule (Расписание).

  • Добавьте узел Schedule Trigger в начало сценария (вместо Manual Trigger или Webhook).
  • Настройте интервал. Например, Interval: Hours, Value: 1.
  • Теперь каждый час n8n будет:

  • Просыпаться.
  • Запрашивать цену у CoinGecko.
  • Записывать её в Google Таблицу.
  • Присылать вам сообщение в Telegram.
  • Не забудьте включить переключатель Active в правом верхнем углу экрана!

    Важные нюансы работы с API

    Методы запросов

    В этом уроке мы использовали метод GET. Но вы часто будете встречать и другие: * GET: Получить данные (чтение). * POST: Отправить данные (создание). Например, если бы мы отправляли заказ в интернет-магазин. * PUT / PATCH: Обновить данные (редактирование). * DELETE: Удалить данные.

    Ошибки и лимиты

    Публичные API часто имеют лимиты (Rate Limits). Если вы поставите расписание «каждую секунду», CoinGecko заблокирует ваш IP. Всегда читайте документацию API перед интеграцией.

    Заключение

    Вы только что создали полноценное приложение без единой строчки кода (ну, почти). Вы объединили три совершенно разных сервиса в единую экосистему.

    Этот паттерн «Получить -> Сохранить -> Уведомить» является универсальным. Вместо курса биткоина это могут быть новые лиды из Facebook, вместо Telegram — Slack или Email, а вместо Google Sheets — Notion или Airtable. Принцип останется неизменным.

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

    5. Финальная настройка: расписание Cron, обработка ошибок и активация рабочих процессов

    Финальная настройка: расписание Cron, обработка ошибок и активация рабочих процессов

    Поздравляем! Вы прошли большой путь. Вы научились устанавливать n8n, соединять узлы, управлять логикой и интегрировать внешние сервисы. Ваш «Трекер Биткоина» из прошлого урока уже умеет получать данные и отправлять их в Telegram. Но готов ли он к реальной жизни?

    В этой финальной статье курса мы превратим ваш любительский скрипт в надежный промышленный инструмент. Мы поговорим о том, как запускать сценарии по сложному расписанию (когда простого «раз в час» недостаточно), что делать, если API перестанет отвечать, и как не засорить память компьютера логами.

    Часть 1: Продвинутое расписание с Cron

    В прошлом уроке мы использовали узел Schedule Trigger, настроив его на запуск «каждый час». Это отлично подходит для простых задач. Но что, если вам нужно отправлять отчет только по будням в 9:00 утра? Или запускать очистку базы данных каждое первое число месяца?

    Здесь на помощь приходит Cron.

    Что такое Cron?

    Cron — это классический планировщик задач в операционных системах Linux. Это стандарт индустрии для описания времени запуска. В n8n узел Schedule Trigger поддерживает этот формат.

    Чтобы использовать его:

  • Откройте настройки узла Schedule Trigger.
  • В поле Trigger Interval выберите Custom (Cron).
  • Появится поле Cron Expression.
  • Синтаксис Cron

    Выражение Cron состоит из пяти полей, разделенных пробелами. Каждое поле отвечает за свою единицу времени.

    !Структура Cron-выражения из 5 полей

    Порядок полей слева направо:

  • Минуты (0–59)
  • Часы (0–23)
  • День месяца (1–31)
  • Месяц (1–12)
  • День недели (0–7, где 0 и 7 — это воскресенье)
  • Примеры выражений

    0 9 * 1 — Каждый понедельник в 09:00. 30 18 * 1-5 — В 18:30 с понедельника по пятницу. 0 0 1 * — В полночь первого числа каждого месяца. /15 — Каждые 15 минут.

    Использование Cron дает вам хирургическую точность в управлении временем запуска ваших роботов.

    Часть 2: Обработка ошибок (Error Handling)

    Самая большая ложь в программировании: «Этот код будет работать вечно». В реальности API падают, интернет пропадает, а форматы данных меняются без предупреждения. Если ваш сценарий упадет с ошибкой, он просто остановится. В худшем случае вы узнаете об этом только через неделю, когда заметите отсутствие отчетов.

    В n8n есть несколько уровней защиты от сбоев.

    Уровень 1: Continue On Fail (Продолжить при ошибке)

    Иногда ошибка не критична. Например, вы отправляете уведомление в Slack и Telegram. Если Slack упал, это не повод не отправлять сообщение в Telegram.

  • Откройте настройки любого узла (например, HTTP Request).
  • Перейдите во вкладку Settings (значок шестеренки).
  • Включите переключатель Continue On Fail.
  • Теперь, если этот узел выдаст ошибку, сценарий не остановится. Узел выдаст на выходе JSON с информацией об ошибке, и следующий узел сможет продолжить работу.

    Уровень 2: Error Trigger (Глобальный перехватчик)

    Что делать, если сценарий все-таки упал критически? Нам нужно узнать об этом мгновенно.

    Для этого создается специальный Error Workflow (Сценарий обработки ошибок).

  • Создайте новый пустой Workflow.
  • Добавьте узел Error Trigger в качестве стартового.
  • Добавьте после него узел Telegram (или Email).
  • В тексте сообщения используйте данные, которые выдает Error Trigger: название упавшего сценария, текст ошибки и ссылку на выполнение.
  • Пример текста сообщения: > 🚨 Авария! > Сценарий: {{ json.execution.error.message }} > Посмотреть детали

    Сохраните этот сценарий под названием «Global Error Handler».

    Связывание сценариев

    Теперь нужно сказать вашему основному сценарию (Трекеру Биткоина), куда бежать в случае пожара.

  • Откройте ваш основной сценарий.
  • Нажмите на кнопку Workflow Settings (в меню слева или три точки в углу).
  • Найдите поле Error Workflow.
  • Выберите из списка ваш созданный «Global Error Handler».
  • !Принцип работы Error Workflow

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

    Часть 3: Управление данными выполнений (Executions)

    Каждый раз, когда ваш сценарий запускается, n8n сохраняет лог выполнения: какие данные пришли, как они изменились и какой был результат. Это называется Execution.

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

    Настройка сохранения

    В настройках каждого сценария (Workflow Settings) есть важные опции:

  • Save Execution Progress: Сохраняет данные каждого шага. Полезно для отладки, но ест много памяти. Для простых сценариев можно выключить.
  • Save Data Error: Всегда оставляйте включенным. Если произошла ошибка, вы обязаны видеть лог, чтобы понять причину.
  • Save Data Success: А вот это для продакшена часто стоит выключить. Зачем вам хранить тысячи записей о том, что «все прошло хорошо»? Это просто мусор.
  • Рекомендация для боевых сценариев: * Save Data Error: On * Save Data Success: Off

    Часть 4: Активация и Production режим

    Мы подошли к финишу. Ваш сценарий настроен, расписание задано, ошибки перехватываются.

    Переключатель Active

    В правом верхнем углу редактора есть переключатель Active. Пока он серый (Inactive), триггеры (Cron, Webhook) не срабатывают автоматически. Сценарий работает только если вы нажмете кнопку «Execute» вручную.

    Как только вы переводите его в Active (зеленый), n8n регистрирует триггеры в системе. Теперь сценарий живет своей жизнью.

    Разница между Manual и Production

    Важно понимать различие:

    * Manual Execution (Ручной запуск): Когда вы нажимаете кнопку в редакторе. Данные отображаются в UI сразу. Используется Test URL для вебхуков. * Production Execution (Автоматический запуск): Происходит по триггеру. Данные не показываются в редакторе в реальном времени (их нужно смотреть в вкладке Executions). Используется Production URL для вебхуков.

    Заключение курса

    Поздравляем! Вы завершили Практический курс по n8n.

    Давайте вспомним, чему вы научились:

  • Разворачивать n8n локально через npm.
  • Понимать логику узлов и JSON-структуру данных.
  • Использовать вебхуки для приема данных.
  • Строить ветвление с помощью IF и Switch.
  • Интегрировать внешние API, Google Таблицы и Telegram.
  • Настраивать расписания и обрабатывать ошибки.
  • Куда двигаться дальше?

    n8n — это конструктор с бесконечными возможностями. Вот несколько идей для самостоятельного изучения: * Работа с файлами: n8n умеет читать и создавать PDF, обрабатывать изображения и CSV файлы. * Базы данных: Попробуйте подключить PostgreSQL или MySQL вместо Google Таблиц для работы с большими объемами данных. * ИИ и нейросети: В n8n есть мощные узлы для работы с OpenAI (ChatGPT) и LangChain. Вы можете создавать умных ботов.

    Автоматизация — это привычка. Начните замечать рутинные действия в своей работе и спрашивайте себя: «Могу ли я отдать это n8n?». В 90% случаев ответ будет «Да».

    Удачи в автоматизации!