Создаём первый workflow в n8n: вебхуки, вызовы API и уведомления
Собираем два рабочих workflow в n8n с нуля на своём сервере. Вебхук, который получает данные о погоде и отправляет их в Discord, и RSS-монитор, публикующий новые статьи в канал.
У тебя запущен n8n на VPS. Что дальше?
В этом руководстве ты соберёшь два настоящих workflow с нуля. Не игрушечные примеры, которые шлют данные в пустоту. Это автоматизации, которые будут реально работать:
- Погодный вебхук: принять HTTP-запрос, вызвать API погоды wttr.in, отформатировать ответ и отправить его в канал Discord.
- 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, нужно место для отправки уведомлений.
- Открой свой Discord-сервер. Кликни правой кнопкой по каналу, куда хочешь получать обновления погоды.
- Выбери Настройки канала > Интеграции > Вебхуки.
- Нажми Новый вебхук. Назови его, например,
n8n Weather Bot. - Нажми Скопировать 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.
- Установи Connection Type в Webhook.
- В Credential for Discord нажми Create New Credential.
- Вставь URL вебхука Discord из шага 1 в поле Webhook URL. Нажми Save.
- Установи Operation в Send a Message.
- В поле 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 больше нет.
Последовательность такая:
- Ты строишь и тестируешь workflow через тестовый URL. n8n автосохраняет по ходу работы.
- Твои изменения существуют только в черновике. Рабочая версия (если есть) продолжает работать без изменений.
- Ты нажимаешь Publish. Теперь продакшн URL активен и workflow запускается автоматически по триггеру.
- Если ты потом редактируешь 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 уведомлений об ошибках
- Вернись на страницу Workflows. Нажми Add workflow. Назови его
Error Handler. - Добавь нод Error Trigger как триггер. Этот нод автоматически получает данные об ошибке, когда привязанный workflow падает.
- Добавь нод Discord после Error Trigger.
- Настрой его с тем же Discord webhook credential, что создал ранее.
- Установи сообщение:
⚠️ Workflow failed: {{ $json.workflow.name }}
Error: {{ $json.execution.error.message }}
Execution ID: {{ $json.execution.id }}
- Workflow ошибок активируется автоматически, потому что содержит нод Error Trigger. Отдельно публиковать не нужно.
Привязать workflow ошибок к погодному workflow
- Открой свой Weather Webhook workflow.
- Нажми меню с тремя точками (⋮) в правом верхнем углу, затем Settings.
- В Error Workflow выбери workflow
Error Handler, который только что создал. - Нажми 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
- Открой workflow, который хочешь экспортировать.
- Нажми меню с тремя точками (⋮) > Download.
- n8n сохранит файл
.jsonна твой компьютер.
Можно экспортировать из командной строки, если есть shell-доступ к контейнеру n8n:
docker exec n8n n8n export:workflow --id=<workflow-id> --output=/tmp/workflow.json
Импорт workflow
- На странице Workflows нажми меню с тремя точками > Import from file.
- Выбери свой
.json-файл. - 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