Опубликовано 28 июня 2026 г.
n8n + AI-агенты в 2026: воркфлоу, что выживает в проде
Большинство n8n + AI-агент гайдов дохнут на второй неделе. Два реальных воркфлоу с ретраями, обработкой ошибок и передачей дела. Готовый JSON.
Ты подключаешь n8n к LLM через ноду AI Agent (@n8n/n8n-nodes-langchain.agent). Триггер передаёт ей сообщение, ты цепляешь чат-модель, память и один или несколько инструментов, а нода сама крутит цикл вызова инструментов. Весь бот помещается на одном холсте и импортируется как JSON.
С обвязкой справишься быстро. Подними n8n в Docker за пять минут, направь ноду AI Agent на дешёвую модель, дай ей инструмент, который пишет в твой CRM, и получишь Telegram-бота, который отвечает на предпродажные вопросы и ловит лиды. Полный квалифицирующий диалог на gpt-4o-mini стоит доли цента.
Тяжело на второй неделе. Модель возвращает текст, который следующая нода не может распарсить. API твоего CRM отваливается по таймауту. Клиент присылает что-то, чего демо никогда не обрабатывало, и воркфлоу падает в 2 часа ночи, когда никто не смотрит. Большинство контента про n8n + AI заканчивается на демо. Этот гайд делает обвязку, а потом больше времени уделяет тому, что держит воркфлоу на плаву: ретраи, error-ветки, идемпотентность, шаг с одобрением человека и алертинг. Ниже два реальных воркфлоу с готовым к копипасте JSON, плюс честная секция о том, когда лучше взять Make, Zapier или обычный Python.
Почему большинство n8n + AI туториалов дохнут на второй неделе
Ты видел эти твиты. Собери 47 агентов на n8n и Claude, напиши «agent» в комментах, и я пришлю тебе шаблон. Тысячи закладок, а воркфлоу ни разу не касается реального клиента. Практик в X в мае сказал прямо: у каждого видео про n8n AI Agent один недостаток, их делают для контента, а не чтобы встроить в бизнес изо дня в день.
Тред в r/AiAutomations за июнь 2026 объясняет почему. Год назад соединить инструменты через n8n, Make или Zapier казалось крутым. Теперь это простая часть. Клиенты покупают не стек инструментов. Они покупают меньше ошибок и меньше ручной возни. Другой тред той же недели сказал ещё жёстче: AI-автоматизация не перенасыщена. Перенасыщена слабая автоматизация.
Поэтому этот гайд делает обвязку, а потом исходит из того, что ты хочешь, чтобы штука работала и не падала. Каждый воркфлоу ниже включает то, что демо опускает: ретраи, когда API моросит; error-ветку, которая алертит тебя при сбое, а не молчит; идемпотентный guard, чтобы ретрай не списал с клиента дважды; и шаг с одобрением для действий, которые ты не хочешь автоматизировать вслепую.
Подними n8n на своём сервере за пять минут
n8n распространяется с открытым исходным кодом по лицензии Sustainable Use License, а не как open source в строгом смысле OSI. Читай это правильно: можешь запускать её, менять и селфхостить бесплатно, в том числе для платного клиента. Лицензия лишь запрещает упаковывать сам n8n как хостимый продукт, конкурирующий с n8n Cloud. Для почти всех, кто это читает, она ведёт себя как бесплатная программа.
Самый быстрый способ попробовать это один контейнер:
# Быстрая проверка — один контейнер, данные в volume:
docker volume create n8n_data
docker run -d --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8nОткрой http://localhost:5678, и у тебя есть редактор. Этого хватит, чтобы собрать всё из этого гайда. Для чего-то серьёзного запускай с базой и ключом шифрования, чтобы запуски переживали рестарт:
# docker-compose.yml — n8n + Postgres, за твоим reverse proxy (nginx / Caddy / Traefik)
services:
postgres:
image: postgres:16
restart: always
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: change-me
POSTGRES_DB: n8n
volumes:
- pg_data:/var/lib/postgresql/data
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
depends_on: [postgres]
ports:
- "5678:5678"
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: change-me
N8N_HOST: n8n.example.com
N8N_PROTOCOL: https
WEBHOOK_URL: https://n8n.example.com/
N8N_ENCRYPTION_KEY: replace-with-a-long-random-string
GENERIC_TIMEZONE: Europe/Berlin
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
pg_data:Поставь WEBHOOK_URL на свой реальный https-домен, иначе вебхуки (Telegram, формы) будут стучаться не туда и триггеры будут казаться сломанными без видимой причины. Я гоняю этот стек на Hetzner CX22 с 4 ГБ RAM примерно за €5 в месяц (≈ ₽90/€1, июнь 2026), Postgres включён, и он тянет десятки запусков в час на одном ядре.
Нода AI Agent в одной картинке
Каждый AI-воркфлоу в n8n одинаковой формы. Срабатывает триггер. Нода AI Agent получает сообщение. Снизу к агенту крепятся три вещи: модель, память и хотя бы один инструмент. Агент решает, что делать, вызывает инструменты по необходимости и возвращает результат.
- Триггер запускает сценарий: Telegram, чат-виджет, вебхук, расписание.
- Агент выступает мозгом. Один из типов LangChain-нод, что поставляет n8n, например
@n8n/n8n-nodes-langchain.agent. Ты пишешь системный промпт и ставишь лимит итераций. - Модель это LLM. Вставляешь OpenAI, Anthropic, Google или локальную модель на Ollama. Тот же слот, меняешь ноду.
- Память это то, что агент помнит между ходами. Window Buffer Memory хранит последние N сообщений. Дай каждому юзеру свой session id, иначе у всех один общий мозг.
- Инструменты это действия. Инструмент это нода, которую агент может вызвать: HTTP-запрос, твой CRM, калькулятор, суб-воркфлоу.
Сам агент твой код не запускает. Он возвращает вызов инструмента, n8n выполняет инструмент, результат уходит обратно, и цикл повторяется, пока агент не ответит или не упрётся в твой лимит. Это тот же цикл, который я собираю руками на чистом Python вот тут. n8n просто рисует его квадратиками.
Билд раз: Telegram lead-бот, что квалифицирует и отвечает
Рабочий Telegram-бот в одном импортируемом воркфлоу. Он отвечает на предпродажные вопросы с памятью, а когда посетитель похож на реальный лид, вызывает инструмент, который кидает лид в твой CRM с названием компании и id чата.
Создай бота через @BotFather в Telegram, скопируй токен в credential Telegram в n8n, затем импортируй этот JSON (вставь на холст или используй Import from URL/file):
{
"name": "Telegram lead bot",
"nodes": [
{
"parameters": { "updates": ["message"] },
"id": "a1f00000-0000-4000-8000-000000000001",
"name": "Telegram Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"typeVersion": 1.1,
"position": [220, 300]
},
{
"parameters": {
"promptType": "define",
"text": "={{ $json.message.text }}",
"options": {
"systemMessage": "You are the pre-sales bot for Acme. Answer questions about pricing and features in under 3 sentences. If the visitor names a company and a real need, call the qualify tool with those details. Never invent prices."
}
},
"id": "a1f00000-0000-4000-8000-000000000002",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.7,
"position": [460, 300]
},
{
"parameters": {
"model": { "__rl": true, "mode": "list", "value": "gpt-4o-mini" },
"options": {}
},
"id": "a1f00000-0000-4000-8000-000000000003",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [340, 520]
},
{
"parameters": {
"sessionId": "={{ $('Telegram Trigger').item.json.message.chat.id }}"
},
"id": "a1f00000-0000-4000-8000-000000000004",
"name": "Window Buffer Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"typeVersion": 1.3,
"position": [520, 520]
},
{
"parameters": {
"name": "qualify",
"description": "Call when a visitor is a qualified lead. Posts company, need, and Telegram chat id to the CRM.",
"method": "POST",
"url": "https://crm.example.com/api/leads",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"company\": \"{{ $fromAI('company', 'the visitor company name') }}\",\n \"need\": \"{{ $fromAI('need', 'what they want to buy') }}\",\n \"chat_id\": \"{{ $('Telegram Trigger').item.json.message.chat.id }}\"\n}"
},
"id": "a1f00000-0000-4000-8000-000000000005",
"name": "qualify (HTTP tool)",
"type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
"typeVersion": 1.1,
"position": [700, 520]
},
{
"parameters": {
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"text": "={{ $json.output }}",
"additionalFields": {}
},
"id": "a1f00000-0000-4000-8000-000000000006",
"name": "Telegram (reply)",
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [720, 300]
}
],
"connections": {
"Telegram Trigger": {
"main": [[{ "node": "AI Agent", "type": "main", "index": 0 }]]
},
"AI Agent": {
"main": [[{ "node": "Telegram (reply)", "type": "main", "index": 0 }]]
},
"OpenAI Chat Model": {
"ai_languageModel": [[{ "node": "AI Agent", "type": "ai_languageModel", "index": 0 }]]
},
"Window Buffer Memory": {
"ai_memory": [[{ "node": "AI Agent", "type": "ai_memory", "index": 0 }]]
},
"qualify (HTTP tool)": {
"ai_tool": [[{ "node": "AI Agent", "type": "ai_tool", "index": 0 }]]
}
},
"settings": { "executionOrder": "v1" }
}Пару вещей из квадратиков не видно. У ноды памяти sessionId приравнен к id чата в Telegram, поэтому два клиента, пишущих одновременно, держат раздельные истории. Инструмент использует выражение n8n $fromAI(), чтобы вытащить аргументы, которые выбрала модель, из её ответа в тело HTTP-запроса. Нода ответа читает $json.output, туда агент кладёт финальный текст.
Один абзац в том системном промпте делает основную работу: «Если посетитель называет компанию и реальную потребность, вызови инструмент qualify». Без него агент будет болтать вечно и ничего не поймает.
Заставь это выжить в проде
Бот выше работает на счастливом пути. Прод это все остальные пути. Пять изменений превращают демо во что-то, что можно оставить работать.
- Повтори капризные вызовы. Включи Retry On Fail на любой ноде, которая лезет в сеть: инструмент CRM, ответ в Telegram, любой HTTP-запрос. Поставь три попытки с парой секунд между ними. Большинство временных сбоев (502, rate limit) отваливаются на второй попытке и до тебя не доходят.
- Добавь error-воркфлоу. В n8n есть нода Error Trigger. Нацель на неё воркфлоу, и при сбое любого запуска она срабатывает с полным контекстом ошибки. Кидай это в Telegram-канал или Slack. Теперь ты узнаёшь о падении со своего телефона, а не от злого клиента через неделю.
- Защитись от двойных запусков. Вебхуки иногда срабатывают дважды. Telegram повторяет сообщение, если думает, что ты его не подтвердил. Если твой инструмент списывает деньги или шлёт письмо, идемпотентность не опциональна. Сохрани id входящего сообщения до того, как действовать, и пропускай, если уже видел. Дешёвый паттерн: пиши id в таблицу Postgres с уникальным ограничением и пусть дубликат вылетает с ошибкой.
- Впиши человека в цикл для необратимых действий. Нода Wait в n8n умеет ставить запуск на паузу и продолжать по вебхуку. Используй её для шага одобрения: агент готовит черновик возврата, воркфлоу ждёт, человек жмёт approve в Slack, запуск продолжается. Автоматизируй черновик, а не нажатие курка.
- Следи за ним. Список запусков в n8n показывает каждый запуск и его статус. Для дашборда по множеству инстансов проекты вроде n8n-dashboard синхронят твои воркфлоу и считают их здоровье. Делай ежедневную проверку упавших запусков, и поймаешь дрейф до того, как он встанет тебе в копеечку.
Совет по дебагу от самой команды n8n: запусти ноду-инструмент отдельно, без агента, чтобы увидеть её сырой вывод. Это экономит токены и показывает, проблема в инструменте или в модели.
Билд два: lead-scoring дайджест по расписанию
Не каждому воркфлоу нужен чат. Этот крутится по расписанию: каждое утро он тянет новые строки из Google Sheet, скорит лидов через AI Agent и кидает ранжированный дайджест в Telegram-канал. Тред про CRM-автоматизацию в r/AiAutomations за июнь гоняет ровно этот паттерн для риелтора, который терял сделки из-за медленного фоллоу-апа.
{
"name": "Daily lead digest",
"nodes": [
{
"parameters": {
"rule": { "interval": [{ "field": "cronExpression", "expression": "0 9 * * *" }] }
},
"id": "b2f00000-0000-4000-8000-000000000001",
"name": "Every morning 9am",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [220, 300]
},
{
"parameters": {
"operation": "read",
"documentId": { "__rl": true, "value": "YOUR_SHEET_ID" }
},
"id": "b2f00000-0000-4000-8000-000000000002",
"name": "Read new leads",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [440, 300]
},
{
"parameters": {
"promptType": "define",
"text": "={{ JSON.stringify($json.all) }}",
"options": {
"systemMessage": "You are a lead-scoring analyst. Rank these leads by likelihood to close this quarter. Return a short digest: rank, company, one-line reason. Top 5 only."
}
},
"id": "b2f00000-0000-4000-8000-000000000003",
"name": "AI Agent (score)",
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.7,
"position": [660, 300]
},
{
"parameters": {
"chatId": "@your-leads-channel",
"text": "={{ 'Daily lead digest\n\n' + $json.output }}",
"additionalFields": {}
},
"id": "b2f00000-0000-4000-8000-000000000004",
"name": "Post to channel",
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [880, 300]
}
],
"connections": {
"Every morning 9am": { "main": [[{ "node": "Read new leads", "type": "main", "index": 0 }]] },
"Read new leads": { "main": [[{ "node": "AI Agent (score)", "type": "main", "index": 0 }]] },
"AI Agent (score)": { "main": [[{ "node": "Post to channel", "type": "main", "index": 0 }]] }
},
"settings": { "executionOrder": "v1" }
}Паттерн, который стоит украсть: детерминированный триггер, AI посередине, чтобы оценить и обогатить, детерминированное действие в конце. Модель решает только скор. Таблица и канал это обычные ноды. Чтобы скорить каждую строку по отдельности, а не весь лист разом, вставь ноду Split In Batches между чтением и агентом. Держи модель на коротком поводке, и воркфлоу будет куда меньше чудить.
Цифры, которые имеют значение
Это стоит меньше, чем ты думаешь, если селфхостишь.
| Self-host (Docker) | n8n Cloud Starter | Zapier | |
|---|---|---|---|
| Лицензия ПО | Sustainable Use, $0 | включена | включена |
| Стоимость в месяц | ~€5 VPS, безлимит | €24, ~2 500 запусков | $20–100+, за задачу |
| Где лежат данные | твой сервер | серверы n8n | серверы Zapier |
| Запуски | безлимит | по счётчику | по счётчику, за задачу |
| Локальная модель | да | нет | нет |
Главная цифра тут запуски. Zapier и n8n Cloud берут за запуск. Self-hosted нет. Если твой вебхук срабатывает 50 000 раз в месяц, этот разрыв окупает кучу VPS.
LLM другая статья расходов, и она маленькая. Квалифицирующий диалог это примерно 2 000 токенов туда-обратно. По цене gpt-4o-mini это сильно меньше цента за диалог (проверь актуальную цену на странице OpenAI, она меняется). Для бота, делающего сотни чатов в день, счёт за модель это копейки на фоне одного сотрудника.
Когда n8n не тот инструмент (возьми Make, Zapier или Python)
n8n не всегда ответ, и притворяться, что это так, делает тебя менее, а не более надёжным в глазах клиента. Бери его, когда хочешь визуальную оркестрацию, селфхостинг и AI в одном месте. Бери что-то другое, когда:
- Ты ненавидишь визуальные билдеры. Если квадратики и проводки тебя тормозят, пиши цикл агента на Python или TypeScript. Ты теряешь drag-and-drop интеграции, зато получаешь полный контроль и нормальный дебаггер. (Я писал этот цикл в 60 строк тут.)
- Клиент хочет ноль операций. n8n Cloud, Zapier и Make хостят всё. Клиент платит ежемесячный счёт и никогда не заходит по SSH. Для нетехнического малого бизнеса это правильный размен.
- Воркфлоу из двух шагов и никогда не меняется. Google Form в Google Sheet не нужен n8n. Используй нативную интеграцию.
- Нужна субсекундная задержка при большом объёме. n8n добавляет оверхед на каждый запуск. Рукописный воркер будет быстрее, и при десятках тысяч событий в секунду n8n не той формы.
Народ в r/AiAutomations прав. Бизнесу всё равно, n8n это, Make или Python. Им важно, что это экономит время, ловит ошибки, переживает edge case и всё ещё работает после того, как ты передал дело. Выбирай инструмент, который даёт им это.
Четыре причины, почему воркфлоу ломается (и фикс)
- Агент циклится, пока не сожжёт токен-бюджет. Причина: нет лимита итераций, либо инструмент всегда падает, и агент ретраит бесконечно. Фикс: поставь
maxIterationsна агенте (10 хватит), и пусть ошибки инструмента возвращают сообщение, из которого агент может выйти, а не кидают исключение. - Память течёт между юзерами. Причина: у ноды памяти нет
sessionId, поэтому каждый юзер пишет в один разговор. Фикс: поставьsessionIdв значение на юзера, например id чата в Telegram. - Вебхук работает в редакторе и нигде больше. Причина:
WEBHOOK_URLсмотрит на localhost или http, пока ты отдаёшь по https. Фикс: поставьWEBHOOK_URLна прод-https URL, и тестовый URL в ноде совпадёт. - Ретраи удваивают побочные эффекты. Причина: Retry On Fail перезапускает ноду, которая шлёт письмо или списывает карту. Фикс: идемпотентность на всём необратимом до того, как включишь ретраи.
Что дальше (когда этого делать не надо)
Теперь у тебя есть два воркфлоу, которые делают реальное дело, и харденинг, чтобы держать их на плаву. Следующий шаг: подключить lead-бота к твоему реальному CRM и дать ему поработать неделю. Смотри список запусков. Ошибки подскажут, что чинить дальше.
Если хочешь цикл агента без GUI, я собрал тот же паттерн на чистом Python. Для работы множества агентов в проде я расписал стек мониторинга и алертов, который держу, чтобы они не падали в 3 ночи.
Sources
-
n8n Sustainable Use License — что лицензия разрешает и какие виды использования ограничивает (селфхостить и менять можно свободно; переотдавать n8n как конкурирующий платный продукт нельзя). https://docs.n8n.io/privacy-and-security/sustainable-use-license
-
n8n Docs — Advanced AI / AI Agent node — нода агента и её слоты подключения модели, памяти и инструментов; структура JSON воркфлоу и типы соединений (
ai_languageModel,ai_memory,ai_tool), что используются по тексту. https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/agent/ -
n8n Docs — Self-host with Docker — шаблон docker-compose,
WEBHOOK_URL,N8N_ENCRYPTION_KEYи конфигурация бэкенда на Postgres. https://docs.n8n.io/hosting/installation/docker/ -
n8n pricing — тарифы Cloud (Starter от €24 с ~2 500 запусками, вплоть до €800 для нагруженных планов), на июнь 2026. Цены меняются, проверяй живую страницу. https://n8n.io/pricing/ Проверено 28 июня 2026.
-
n8n Docs — Error handling — нода Error Trigger, Retry On Fail и Continue On Fail из секции про продакшн-харденинг. https://docs.n8n.io/flow-logic/error-handling/
-
OpenAI pricing — цена за токен для gpt-4o-mini, основа оценки стоимости диалога. https://platform.openai.com/docs/pricing Проверено 28 июня 2026.
Я собираю и поддерживаю n8n + AI автоматизации для клиентов, на твоём сервере или на своём. Начни проект, и я удержу воркфлоу на плаву после того, как передам дело.