Создаём первый workflow в n8n: вебхуки, вызовы API и уведомления

12 мин чтения·Matthieu|

Собираем два рабочих workflow в n8n с нуля на своём сервере. Вебхук, который получает данные о погоде и отправляет их в Discord, и RSS-монитор, публикующий новые статьи в канал.

У тебя запущен n8n на VPS. Что дальше?

В этом руководстве ты соберёшь два настоящих workflow с нуля. Не игрушечные примеры, которые шлют данные в пустоту. Это автоматизации, которые будут реально работать:

  1. Погодный вебхук: принять HTTP-запрос, вызвать API погоды wttr.in, отформатировать ответ и отправить его в канал Discord.
  2. RSS-монитор: проверять RSS-ленту блога по расписанию и публиковать новые статьи в Discord.

Оба workflow покрывают базовые концепции n8n по ходу сборки: ноды (nodes), соединения (connections), выражения (expressions), систему draft/publish из n8n 2.0 и обработку ошибок.

Что нужно заранее:

  • Работающий инстанс n8n на VPS. Если его ещё нет, сначала пройди Установка n8n с Docker Compose на VPS.
  • Discord-сервер, где можно создать вебхук (или Slack-воркспейс. Инструкции взаимозаменяемы; здесь используем Discord).
  • Базовое владение терминалом и curl.

Что такое ноды и соединения в n8n?

Ноды — это отдельные шаги в workflow. Каждый нод делает одну вещь: принимает триггер, делает HTTP-запрос, трансформирует данные или отправляет сообщение. Соединения — это линии между нодами. Они передают данные с выхода одного нода на вход следующего. Каждый workflow — это цепочка нодов, соединённых слева направо.

Типы нодов, используемые в этом руководстве:

Нод Назначение
Webhook Слушает входящие HTTP-запросы и запускает workflow
HTTP Request Вызывает внешний API и возвращает ответ
Set Создаёт или перестраивает поля данных
If Разветвляет workflow по условию
Discord Отправляет сообщение в канал Discord через вебхук
RSS Feed Trigger Опрашивает RSS-ленту и срабатывает при появлении новых записей
Error Trigger Ловит ошибки workflow и запускает workflow уведомлений

Как собрать первый workflow в n8n с нуля?

Открой n8n в браузере. Нажми Add workflow на странице Workflows. n8n покажет пустой canvas с плейсхолдером триггер-нода.

Первый workflow делает следующее: принимает название города через HTTP-вебхук, получает текущую погоду из wttr.in, форматирует результат и публикует в канал Discord.

Шаг 1: Создать вебхук Discord

Перед тем как строить в n8n, нужно место для отправки уведомлений.

  1. Открой свой Discord-сервер. Кликни правой кнопкой по каналу, куда хочешь получать обновления погоды.
  2. Выбери Настройки канала > Интеграции > Вебхуки.
  3. Нажми Новый вебхук. Назови его, например, n8n Weather Bot.
  4. Нажми Скопировать URL вебхука. Сохрани этот URL. Он выглядит так: https://discord.com/api/webhooks/123456789/abcDEF...

Относись к этому URL как к паролю. Любой, кто его знает, может писать в твой канал.

Шаг 2: Добавить триггер-нод Webhook

Нажми кнопку + на плейсхолдере canvas. Найди Webhook и выбери его.

Настрой вебхук:

  • HTTP Method: POST
  • Path: weather

Остальное оставь по умолчанию. Path делает URL вебхука уникальным. С path weather твои URL будут:

  • Тестовый URL: https://your-n8n-domain.com/webhook-test/weather
  • Продакшн URL: https://your-n8n-domain.com/webhook/weather

Обрати внимание на разницу: /webhook-test/ vs /webhook/. Это различие важно. Подробнее чуть позже.

Шаг 3: Протестировать вебхук через curl

Нажми Listen for test event в ноде Webhook. n8n теперь ждёт входящий запрос на тестовый URL.

Открой терминал на своей машине и отправь тестовый запрос:

curl -X POST https://your-n8n-domain.com/webhook-test/weather \
  -H "Content-Type: application/json" \
  -d '{"city": "Paris"}'

Переключись обратно в n8n. Нод вебхука должен показать зелёную галочку с полученными данными. В панели вывода увидишь JSON body с city: "Paris".

Если ничего не произошло, проверь:

  • Твой инстанс n8n доступен из интернета (reverse proxy настроен).
  • Ты нажал Listen for test event до отправки curl-запроса.
  • URL совпадает точно, включая префикс /webhook-test/.

Шаг 4: Добавить нод HTTP Request (вызов API погоды)

Нажми кнопку + справа от нода Webhook. Найди HTTP Request и добавь.

Настрой:

  • Method: GET
  • URL: https://wttr.in/{{ $json.city }}?format=j1

Часть {{ $json.city }} — это выражение n8n (expression). Оно вытаскивает поле city из входящих данных вебхука. Когда кто-то отправляет {"city": "Paris"}, n8n подставляет Paris, и итоговый URL становится https://wttr.in/Paris?format=j1.

Параметр ?format=j1 говорит wttr.in вернуть структурированный JSON вместо ASCII-арт прогноза.

Нажми Test step, чтобы запустить только этот нод. Ты увидишь JSON-ответ с данными о погоде: поля current_condition, temp_C, weatherDesc и другие.

Смотри внимательно: посмотри на панель вывода. Ответ вложенный. Текущая температура находится по пути $json.current_condition[0].temp_C, описание — $json.current_condition[0].weatherDesc[0].value. Эти пути понадобятся на следующем шаге.

Шаг 5: Добавить нод Set для форматирования сообщения

Сырой ответ API погоды большой. Для сообщения в Discord нужны только несколько полей.

Добавь нод Set после нода HTTP Request. Нажми Add field и создай такое присвоение:

Имя поля Тип Значение (выражение)
message String Weather in {{ $('Webhook').item.json.city }}: {{ $json.current_condition[0].temp_C }}°C, {{ $json.current_condition[0].weatherDesc[0].value }}. Humidity: {{ $json.current_condition[0].humidity }}%. Wind: {{ $json.current_condition[0].windspeedKmph }} km/h.

Выражение {{ $('Webhook').item.json.city }} обращается к выходу нода Webhook за названием города. Ссылки $json без имени нода берут данные из непосредственно предыдущего нода (HTTP Request).

Нажми Test step. На выходе должно быть одно поле message с чем-то вроде:

Weather in Paris: 14°C, Partly cloudy. Humidity: 72%. Wind: 15 km/h.

Шаг 6: Добавить нод Discord

Добавь нод Discord после нода Set.

  1. Установи Connection Type в Webhook.
  2. В Credential for Discord нажми Create New Credential.
  3. Вставь URL вебхука Discord из шага 1 в поле Webhook URL. Нажми Save.
  4. Установи Operation в Send a Message.
  5. В поле Message используй выражение: {{ $json.message }}

Нажми Test step. Проверь свой Discord-канал. Сообщение о погоде должно появиться от твоего бота.

Проверка: открой Discord. Сообщение должно быть в том канале, для которого ты настроил вебхук. Если его нет, перепроверь URL вебхука в настройках credential.

Шаг 7: Протестировать полный workflow

Вернись к ноду Webhook. Снова нажми Listen for test event. Отправь ещё один curl-запрос:

curl -X POST https://your-n8n-domain.com/webhook-test/weather \
  -H "Content-Type: application/json" \
  -d '{"city": "Tokyo"}'

Наблюдай, как выполнение проходит через все четыре нода. Каждый нод зеленеет при завершении. Прогноз погоды для Токио должен появиться в твоём Discord-канале.

Проверь вкладку Executions в левой панели. Ты увидишь запись в логе для этого тестового запуска с таймингом, статусом и данными на каждом ноде. Этот лог выполнений — место для отладки проблем.

Как нод webhook в n8n принимает внешние данные?

Нод Webhook создаёт HTTP-эндпоинт на твоём инстансе n8n. Когда внешний сервис (или команда curl) отправляет запрос на этот эндпоинт, n8n принимает данные и запускает workflow. Нод поддерживает методы GET, POST, PUT, PATCH, DELETE и HEAD. POST с JSON body — самый распространённый паттерн.

Как протестировать вебхук n8n через curl?

Ты уже это сделал выше. Вот что важно:

Тестовый URL Продакшн URL
Формат пути /webhook-test/<path> /webhook/<path>
Когда активен Только пока нажат «Listen for test event» или «Execute workflow» в редакторе Только после публикации workflow
Показывает данные в редакторе Да, в реальном времени в панели вывода нода Нет (смотри вкладку Executions)
Сценарий использования Сборка и отладка Реальные внешние интеграции

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

В чём разница между черновиком и опубликованным workflow в n8n 2.0?

n8n 2.0 разделил сохранение и активацию. Твои правки остаются в черновике и не влияют на рабочую версию, пока ты явно не опубликуешь. С n8n 2.4 (январь 2026) редактор автосохраняет твою работу каждые несколько секунд. Кнопки Save больше нет.

Последовательность такая:

  1. Ты строишь и тестируешь workflow через тестовый URL. n8n автосохраняет по ходу работы.
  2. Твои изменения существуют только в черновике. Рабочая версия (если есть) продолжает работать без изменений.
  3. Ты нажимаешь Publish. Теперь продакшн URL активен и workflow запускается автоматически по триггеру.
  4. Если ты потом редактируешь workflow, изменения остаются в черновике до повторной публикации.

В n8n 1.x сохранение и активация были одним действием. Больше нет.

Опубликуй свой погодный workflow. Нажми кнопку Publish в правом верхнем углу (или Shift+P). Статус workflow сменится на «Active».

Проверь через curl, используя продакшн URL:

curl -X POST https://your-n8n-domain.com/webhook/weather \
  -H "Content-Type: application/json" \
  -d '{"city": "Berlin"}'

Проверь Discord. Прогноз погоды для Берлина должен появиться. Затем проверь вкладку Executions в n8n — там будет запись о продакшн-выполнении.

Как обрабатывать ошибки в workflow n8n?

Нод Error Trigger ловит ошибки workflow и запускает отдельный workflow уведомлений. Когда активный workflow падает (например, API погоды недоступен или Discord отклоняет сообщение), n8n срабатывает Error Trigger в привязанном workflow ошибок. Это работает только для опубликованных, автоматически запущенных выполнений. Ручные тестовые запуски его не активируют.

Собрать workflow уведомлений об ошибках

  1. Вернись на страницу Workflows. Нажми Add workflow. Назови его Error Handler.
  2. Добавь нод Error Trigger как триггер. Этот нод автоматически получает данные об ошибке, когда привязанный workflow падает.
  3. Добавь нод Discord после Error Trigger.
  4. Настрой его с тем же Discord webhook credential, что создал ранее.
  5. Установи сообщение:
⚠️ Workflow failed: {{ $json.workflow.name }}
Error: {{ $json.execution.error.message }}
Execution ID: {{ $json.execution.id }}
  1. Workflow ошибок активируется автоматически, потому что содержит нод Error Trigger. Отдельно публиковать не нужно.

Привязать workflow ошибок к погодному workflow

  1. Открой свой Weather Webhook workflow.
  2. Нажми меню с тремя точками (⋮) в правом верхнем углу, затем Settings.
  3. В Error Workflow выбери workflow Error Handler, который только что создал.
  4. Нажми Publish, чтобы применить изменение.

Теперь если API погоды ляжет или любой нод в workflow выбросит ошибку во время продакшн-выполнения, ты получишь уведомление в Discord с названием workflow, сообщением об ошибке и ID выполнения. По этому ID можно найти упавший запуск во вкладке Executions и разобраться, что именно пошло не так.

Этот паттерн стоит использовать в каждом workflow. Создай один Error Handler workflow и привяжи к нему все остальные.

Краткий справочник по выражениям n8n

Выражения позволяют ссылаться на данные из предыдущих нодов. Они записываются в двойных фигурных скобках {{ }} и доступны в большинстве полей нодов.

Выражение Что делает
{{ $json.fieldName }} Доступ к полю из выхода предыдущего нода
{{ $json.nested.field }} Доступ к вложенным JSON-свойствам
{{ $('NodeName').item.json.field }} Доступ к выходу конкретного нода по имени
{{ $json.current_condition[0].temp_C }} Доступ к элементу массива
{{ $now.toFormat('yyyy-MM-dd') }} Текущая дата, отформатированная через Luxon
{{ $now.toFormat('HH:mm') }} Текущее время (24-часовой формат)
{{ $if($json.score > 80, "high", "low") }} Условное выражение
{{ $json['field with spaces'] }} Обращение через квадратные скобки для спецсимволов

n8n использует Luxon для работы с датами. Если нужно форматировать даты из ответов API, методы Luxon доступны на любом объекте DateTime.

Как собрать workflow мониторинга RSS-ленты в n8n?

Теперь собери второй workflow, который работает по расписанию, а не по вебхуку. Он мониторит RSS-ленту и публикует новые статьи в Discord.

Шаг 1: Создать workflow

Нажми Add workflow на странице Workflows. Назови его RSS to Discord.

Шаг 2: Добавить RSS Feed Trigger

Нажми на плейсхолдер триггера и найди RSS Feed Trigger. Добавь его.

Настрой:

  • Feed URL: Используй любую RSS-ленту блога. Например: https://blog.n8n.io/rss/ (блог n8n).
  • Poll Times: Установи Every X > Value: 30 > Unit: Minutes.

Это проверяет ленту каждые 30 минут на новые записи. RSS Feed Trigger запоминает, какие записи уже видел. При первом запуске выводит все текущие записи. После этого — только новые.

Нажми Fetch Test Event, чтобы получить текущие записи ленты. Ты увидишь записи с полями title, link, contentSnippet, isoDate и creator.

Шаг 3: Добавить нод Set для форматирования сообщения

Добавь нод Set. Создай одно поле:

Имя поля Тип Значение (выражение)
message String 📰 New post: **{{ $json.title }}**\n{{ $json.link }}\nPublished: {{ $json.isoDate }}

\n вставляет переносы строк в сообщении Discord. ** вокруг заголовка делают его жирным в Markdown Discord.

Шаг 4: Добавить нод Discord

Добавь нод Discord. Используй тот же webhook credential. Установи сообщение: {{ $json.message }}.

Нажми Test step. Форматированное уведомление о статье должно появиться в Discord-канале.

Шаг 5: Опубликовать workflow

Нажми Publish. RSS Feed Trigger теперь будет проверять ленту каждые 30 минут и публиковать новые записи в Discord.

Привяжи Error Handler: открой настройки workflow и установи Error Workflow на Error Handler. Опубликуй снова, чтобы применить изменение.

Проверка: загляни во вкладку Executions через 30 минут (или временно поставь интервал опроса в 1 минуту). Ты увидишь запись о выполнении, даже если новых записей не было (workflow запускается, но не даёт выхода, если ничего нового нет).

Как экспортировать и импортировать workflow n8n?

Экспортируй workflow как JSON для резервного копирования, обмена или переноса между инстансами n8n.

Экспорт workflow

  1. Открой workflow, который хочешь экспортировать.
  2. Нажми меню с тремя точками (⋮) > Download.
  3. n8n сохранит файл .json на твой компьютер.

Можно экспортировать из командной строки, если есть shell-доступ к контейнеру n8n:

docker exec n8n n8n export:workflow --id=<workflow-id> --output=/tmp/workflow.json

Импорт workflow

  1. На странице Workflows нажми меню с тремя точками > Import from file.
  2. Выбери свой .json-файл.
  3. n8n импортирует workflow как черновик. Проверь его, обнови credentials и опубликуй.

Замечание: экспортированные workflow не содержат credentials. После импорта на новый инстанс их нужно добавить заново.

Устранение неполадок

Вебхук возвращает 404: Тестовый URL активен только пока «Listen for test event» открыт в редакторе. Продакшн URL активен только после публикации workflow. Убедись, что используешь правильный URL для нужного режима.

Сообщение в Discord не появляется: Проверь URL вебхука в credential Discord. Протестируй напрямую через curl:

curl -X POST "https://discord.com/api/webhooks/YOUR/WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d '{"content": "Test message from curl"}'

Если это работает, а n8n нет, проблема в настройке нода Discord в n8n.

Выражение возвращает undefined: Открой редактор выражений (нажми на поле, затем на переключатель выражения). n8n покажет доступные данные из предыдущих нодов. Проверь точный путь к полю. Частая ошибка: использовать $json.field, когда данные вложены в $json.data.field.

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

Workflow ошибок не срабатывает: Workflow ошибок срабатывают только для опубликованных, автоматически запущенных workflow. Ручные тестовые запуски их не активируют. Проверь, что workflow ошибок привязан в настройках основного workflow.

Проверь логи: Если что-то не так на уровне приложения n8n, проверь логи контейнера:

docker logs n8n --tail 50

Для постоянного мониторинга:

docker logs n8n -f

Следующие шаги

Два рабочих workflow и обработчик ошибок. Дальше:

  • Защити вебхук-эндпоинты заголовками аутентификации.
  • Добавь AI-обработку в workflow через Ollama или Claude.
  • Изучи полное руководство по подготовке к продакшну.
  • Освой основы Docker Compose для управления многосервисными стеками. Смотри Docker Compose для многосервисных VPS-развёртываний.

Copyright 2026 Virtua.Cloud. Все права защищены.

Готовы попробовать?

Разверните свой сервер за секунды. Linux, Windows или FreeBSD.

Смотреть тарифы VPS