n8n и Telegram: собираем умного ИИ-агента

Первого своего телеграм-бота я писал руками: Python, вебхук, очередь, супервизор — все как у взрослых. Прожил он три недели. Сломался не код, а мотивация: понадобилось добавить «всего одну мелочь» — пересылать интересные вопросы читателей мне в личку. Но ради этой мелочи требовалось залезть в репозиторий, вспомнить, что там вообще происходит, и заново выкатить сервис. В итоге я сдался и с нуля пересобрал бота в n8n. За один вечер. И с тех пор к «Питону» не притрагиваюсь. Теперь я мамкин вайбкодер на n8n и ни о чем не жалею.

Изображение с роботом, держащим логотип Telegram, ноутбуком с диаграммой процесса AI агента на экране и надписями на русском языке о сборке умного ИИ-агента с помощью n8n и Telegram.

В этом гайде я подробно расскажу, как своими руками собрать ИИ-агента для Telegram, даже если вы не владеете программированием. Вы узнаете, где развернуть бота, чтобы он работал в России, как подключить языковую модель с оплатой в рублях, как научить бота помнить разговор — и на что обращать внимание, чтобы он не превратился в молчаливый памятник на вторые сутки.

Что такое n8n и почему на нем собирают ботов

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

Ключевое отличие от других конструкторов, таких как Make и Zapier — n8n можно поставить на свой сервер. Версия Community Edition бесплатна и не ограничивает число запусков.

Поэтому n8n боты так популярны у русскоязычной аудитории: подписку в валюте оплачивать не нужно вовсе.

В актив платформы стоит также занести более 600 готовых интеграций, универсальную нода HTTP Request для всего остального и возможность писать вставки на JavaScript или Python прямо в редакторе, когда визуальной логики не хватает.

Как устроен n8n телеграм-бот: вебхук вместо бэкенда

Обычный ТГ-бот — это программа, которая постоянно висит на сервере и опрашивает Тележеньку, нет ли новых сообщений.

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

Из этого следует важное требование: адрес должен быть публичным, с рабочим HTTPS и валидным сертификатом. Telegram принимает вебхуки только на портах 443, 80, 88 и 8443. Самоподписанный сертификат придется загружать отдельно — проще выпустить бесплатный Let’s Encrypt.

Схема простейшего бота выглядит так:

Telegram Trigger → AI Agent → Telegram: Send Message

Три ноды. Все остальное — надстройки, которые превращают эхо-бота в рабочего ассистента.

Интерфейс рабочего процесса Telegram AI Agent с визуальным редактором, включающим триггер Telegram, проверку типа сообщения, AI-агента с подключёнными моделями OpenAI, памятью и веб-поиском, а также отправку ответа.

Что понадобится и как с этим в России

Прежде чем приступать к сборке, нужно решить четыре вопроса. Каждый из них в российских условиях решается чуть иначе, чем пишут в западных туториалах.

  • Место, где будет жить n8n: свой сервер, облако или локальная машина с туннелем.
  • Домен с SSL-сертификатом, чтобы Telegram смог достучаться до вебхука.
  • Токен бота от @BotFather — делается бесплатно и за минуту.
  • API-ключ языковой модели с возможностью оплаты в рублях.

Отдельно про облако самой платформы. Новых клиентов из России и Беларуси в n8n Cloud не регистрируют с 7 марта 2022 года. Доступ к сайту, документации и исходному коду для самостоятельного развертывания при этом не ограничивали. Оплата с российских карт тоже не пройдет.

Вывод? Однозначный: ставим Community Edition на собственный сервер и не паримся.

Впрочем, имеется компромиссный вариант. У многих российских хостингов n8n лежит в маркетплейсе приложений и ставится в пару кликов вместе с доменом и сертификатом. Такое есть, например, у Timeweb Cloud, «Рег.облака», Hostkey и masterhost. Минимальной конфигурации для личного бота хватает с запасом, а данные при этом остаются на сервере в России.

Где взять API-ключ с оплатой в рублях

Мозги боту дает языковая модель, а ключ к ней нужно где-то купить. Напрямую у OpenAI или Anthropic не выйдет по той же причине, что и с n8n Cloud. Рабочее решение — агрегаторы с OpenAI-совместимым эндпоинтом. Вы меняете базовый адрес и ключ, а весь остальной код и все настройки нод остаются прежними.

Вот некоторые доступные варианты.

  • GPTunnel — ключ выпускается в личном кабинете во вкладке API, базовый адрес https://gptunnel.ru/v1. По промокоду AIMARKETCAP10 дадут 10% скидки на пополнение баланса.
  • BotHub — базовый адрес https://bothub.chat/api/v2/openai/v1, оплата в рублях, доступ к моделям OpenAI, Anthropic, Google и DeepSeek через один ключ.

Один нюанс, на котором легко потерять полчаса: часть агрегаторов ждет ключ в заголовке Authorization без приставки Bearer, а стандартная нода n8n ее подставляет. Если модель отвечает ошибкой 401 при заведомо верном ключе — соберите запрос вручную через ноду HTTP Request и укажите заголовок целиком. Работает всегда.

Есть и два варианта без зарубежных моделей вовсе.

  • GigaChat. Эта LLM от Сбера подключается через ноду HTTP Request и оплачивается в рублях напрямую.
  • Локальная модель через Ollama или LocalAI. За токены платить не нужно совсем, данные не покидают ваш контур, но за скорость и качество ответов придется платить мощностью железа.

Шаг 1. Разворачиваем n8n

Пошаговое руководство по запуску и настройке приложения n8n с использованием Docker, проверкой контейнера, настройкой обратного прокси через Nginx, открытием веб-интерфейса и созданием аккаунта.

Самый предсказуемый способ — работать через Docker. Одной командой поднимается контейнер, который переживет перезагрузку сервера и обновится без плясок с зависимостями Node.js:

docker run -d —name n8n —restart unless-stopped \
-p 5678:5678 \
-v ~/.n8n:/home/node/.n8n \
-e WEBHOOK_URL=https://ваш-домен.ru/ \
-e GENERIC_TIMEZONE=Europe/Moscow \
-e N8N_ENCRYPTION_KEY=длинная_случайная_строка \
n8nio/n8n
Copy

Две переменные из этого списка критичны.

  • WEBHOOK_URL — публичный адрес вашего сервера. Без него n8n недолго думая зарегистрирует в Telegram вебхук типа localhost:5678, и бот никогда ничего не получит.
  • N8N_ENCRYPTION_KEY — ключ, которым шифруются сохраненные доступы. Не потеряйте его, иначе все подключения придется заводить заново.

Дальше перед контейнером ставится обратный прокси — Nginx, Caddy или Traefik — с сертификатом Let’s Encrypt. Если вы брали образ из маркетплейса хостинга, то прокси и сертификат чаще всего уже настроены, а домен выдается вместе с сервером.

Интерфейс откроется по адресу вашего домена. При первом входе платформа попросит создать аккаунт владельца.

Шаг 2. Регистрируем бота у BotFather

Тут все по классике.

  • Напишите @BotFather команду /newbot, задайте имя и уникальный логин, который заканчивается на bot.
  • Сохраните выданный токен — это пароль от бота, его нельзя публиковать нигде.
  • Командой /setprivacy отключите приватный режим, если бот должен читать все сообщения в группе, а не только адресованные ему.
  • Через /setcommands добавьте меню команд — мелочь, но пользователи сразу понимают, что бот живой.

Шаг 3. Собираем базовый n8n чат бот из трех нод

Интерфейс веб-приложения n8n с настройками рабочего процесса Telegram AI Bot, включающего три шага: Telegram Trigger, AI Agent и отправку сообщения в Telegram.

А теперь начинается радостное творчество в n8n. Открываем пустой воркфлоу и добавляем ноды по очереди.

Telegram Trigger

Это точка входа. В настройках создаете новое подключение и вставляете токен от BotFather, в поле Trigger On выбираете Message.

После сохранения нода сама зарегистрирует вебхук на стороне Telegram — отдельная команда setWebhook не нужна.

Нажмите Test workflow, напишите боту что-нибудь в личку и посмотрите на структуру входящего события: текст лежит в message.text, идентификатор чата — в message.chat.id, имя собеседника — в message.from.first_name.

AI Agent

Раньше сюда ставили HTTP Request и руками собирали JSON для модели. Сейчас в этом нет необходимости. Нода AI Agent берет на себя и формат запроса, и вызов инструментов, и повторные попытки.

К ней подключаются три подчиненных блока — модель, память и инструменты.

В качестве модели выбирайте OpenAI Chat Model, а в учетных данных, помимо ключа, заполните поле Base URL адресом вашего агрегатора.

В поле User Message передаете текст пользователя выражением {{ $json.message.text }}, а в System Message — характер бота.

Вот рабочая заготовка системного промпта, которую останется подстроить под себя:

Ты — ассистент компании «Название». Отвечаешь в Telegram, поэтому пиши коротко: до 3 абзацев, без заголовков и таблиц, списки — только когда без них никак.
Правила:
— Обращайся к собеседнику на «вы».
— Если вопрос не про продукт, вежливо возвращай разговор к теме.
— Если данных не хватает, задай один уточняющий вопрос вместо догадок.
— Никогда не выдумывай цены, сроки и характеристики: при сомнении скажи, что уточнишь у коллег, и предложи оставить контакт.
— Не используй эмодзи чаще одного на сообщение.
Copy

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

Telegram: Send Message

Замыкающий блок.

В поле Chat ID подставляете идентификатор из первой ноды выражением {{ $('Telegram Trigger').item.json.message.chat.id }}.

В поле Text — ответ агента {{ $json.output }}.

Ссылка на первую ноду по имени, а не на предыдущий шаг, — важная деталь: когда в цепочке появятся ветвления, идентификатор чата не потеряется.

После этого включаете переключатель Active в правом верхнем углу. Именно он переводит воркфлоу с тестового адреса вебхука на боевой. Пока переключатель выключен, бот отвечает только в режиме ручного запуска.

Шаг 4. Память: чтобы бот помнил разговор

«Из коробки» агент отвечает на каждое сообщение как на первое в жизни. Это лечится подключением блока памяти к ноде AI Agent.

Ключ сессии обязательно задайте вручную — {{ $json.message.chat.id }}. Без этого все пользователи окажутся в одном общем диалоге и будут читать обрывки чужих переписок.

Вариантов хранилища три. Выбор зависит от того, насколько вам важна история.

  • Simple Memory — история висит в оперативной памяти процесса и обнуляется при перезапуске контейнера. Годится для тестов и простых сценариев.
  • Redis Chat Memory — быстрое внешнее хранилище. Переживает перезапуск, ставится соседним контейнером. Оптимальный вариант для рабочего бота.
  • Postgres Chat Memory — если история диалогов нужна не только боту, но и вам. Ее можно читать через запросы и складывать в аналитику.

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

Шаг 5. Инструменты: из чата в агента

Интерфейс платформы n8n с рабочим процессом умного Telegram-агента, показывающий этапы работы бота и используемые инструменты.

Теперь главное: тупого бота переквалифицируем в умного телеграм-агента.

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

Вот какой функционал обычно вешают на бота в первую очередь.

  • Поиск по базе знаний — загружаете инструкции и прайс в векторное хранилище, и бот отвечает по вашим документам, а не по общим представлениям о прекрасном.
  • Google Sheets или ваша CRM — записать заявку, проверить статус заказа, отдать остаток по складу.
  • Календарь — найти свободное окно и поставить встречу прямо из переписки.
  • Вложенный воркфлоу — любая ваша цепочка, оформленная как инструмент; удобно, когда логика сложнее одного запроса.
  • Внешние MCP-серверы — n8n умеет работать и клиентом, и сервером протокола, так что бот получает доступ к инструментам, для которых нет готовой ноды.

К каждому инструменту пишите внятное описание в поле Description. Это нужно не для вас, а для ИИ. Модель выбирает инструмент именно по дескрипшену.

Что доделать, чтобы бот выглядел живым

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

Вот моменты, которые отличают реальных пользователей Телеграма.

  • Индикатор набора текста. Ноду Telegram с действием Send Chat Action и типом typing нужно воткнуть сразу после триггера — пока модель думает, собеседник увидит привычное «печатает».
  • Разбивка длинных ответов. Телега обрезает сообщения длиннее 4096 символов, поэтому многословный ответ надо резать на части нодой Code.
  • Разметка. Маркдаун у Телеграма строгий: одна непарная звездочка от модели — и сообщение не уйдет вовсе. Имеет смысл переключить Parse Mode на HTML или вовсе отключить разметку. В этом случае не забудьте попросить модель в системном промпте обходиться без нее.
  • Голосовые сообщения. Ветка со скачиванием файла и транскрибацией превращает бота в такого, которому можно надиктовать задачу на ходу.
  • Согласование действий. Нода Send and Wait for Response ставит паузу и ждет вашего подтверждения — незаменимо, если бот отправляет письма клиентам или публикует посты.

Безопасность: скучный раздел, который спасает деньги

Напоминаю: вы вручили боту токен мессенджера и ключ от платного API. Если хоть что-то из этого утечет не в те руки — счет за токены вы увидите раньше, чем сам факт утечки.

Отсюда несколько правил безопасности.

  • Храните доступы только в разделе Credentials. Они шифруются в базе и не попадают в логи выполнения, в отличие от ключа, вписанного прямо в ноду HTTP Request.
  • Закройте сам интерфейс n8n. Обратный прокси с ограничением по IP или базовой авторизацией — минимум. Открытую панель в интернете рано или поздно найдут сканеры злоумышленников.
  • Добавьте белый список. Случайных гостей отсекает нода If, которая сверяет message.chat.id со списком разрешенных.
  • Поставьте лимит расходов на стороне агрегатора. Большинство из них позволяет ограничить дневной или месячный бюджет ключа — это дешевая страховка от зацикленного воркфлоу.
  • Сохраните N8N_ENCRYPTION_KEY и делайте резервные копии базы. Без ключа бэкап бесполезен.

Сколько это стоит

Расходы зависят от сервиса и объемов месседжинга, но общий порядок трат прикинуть можно.

  • Сервер — фиксированная сумма: минимальный VPS у российского хостера обойдется примерно в 300–700 ₽ в месяц, и этого хватит на несколько ботов сразу.
  • Токены — переменная часть: платите только за реальные обращения к модели.

Разброс по моделям огромный, поэтому единственный честный совет — посчитать на своих сценариях.

Экономичные версии вроде облегченных GPT и DeepSeek обходятся в копейки за обмен репликами. Флагманы стоят в десятки раз дороже. Отсюда и расчеты.

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

Ошибки, на которых спотыкаются все

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

Проблема Причина Решение
Бот молчит, хотя воркфлоу активен Не задан WEBHOOK_URL, Telegram пытается достучаться до локального адреса Проверить запросом getWebhookInfo к Bot API, задать корректный WEBHOOK_URL
Работает в тестовом режиме, но не в боевом Тестовый и продакшен-вебхуки — разные адреса; пока переключатель Active выключен, боевого адреса просто нет Включить Active, настроить боевой вебхук
Ошибка 409 Conflict К одному токену подключились дважды — например, старый скрипт на сервере или вторая копия воркфлоу Один токен — один потребитель: отключить лишние подключения
Бот забывает разговор после каждого сообщения Не подключена память или не задан ключ сессии Подключить память, задать ключ сессии
Сообщения не доходят частями Ответ длиннее 4096 символов либо сломанная Markdown-разметка Разбивать длинные ответы, проверять Markdown-разметку
Ответ приходит через полминуты Тяжелая модель на длинном контексте Обрезать историю диалога, взять модель полегче

 

Вывод

Еще недавно собственный ИИ-ассистент в мессенджере был проектом на неделю и требовал нанять разработчика. Сейчас это можно сделать самостоятельно, даже если вы владеете только самым базовым навыком кодинга. Один вечер, чашка кофе, листок с планом и десяток нод на экране — и вуаля, агент готов выйти в Телеграм.

Если опыта пока не слишком много, начните с малого: например, создайте бота, который отвечает на три самых частых вопроса. А дальше вы удивитесь, как быстро к нему захочется добавить «еще одну мелочь»… и как легко это делается в n8n.

Часто задаваемые вопросы

Чем n8n лучше готовых конструкторов ботов? Toggle
Гибкостью и отсутствием потолка: бот живет в одной среде с вашими остальными автоматизациями и может дергать любые сервисы по API.
Можно ли сделать n8n телеграмм бот без своего сервера? Toggle
Только для тестов — через локальный запуск и туннель вроде ngrok или Cloudflare Tunnel. Для постоянной работы нужен сервер с публичным адресом.
Нужно ли уметь программировать? Toggle
Для базового бота — нет, хватит визуального редактора. Пригодится лишь понимание, как устроен JSON входящего сообщения.
Сколько стоит запустить такого бота? Toggle
Сама платформа бесплатна при установке на свой сервер. Платить придется за VPS — от 300 ₽ в месяц — и за обращения к модели по факту использования.
Как подключить модель, чтобы оплачивать российской картой? Toggle
Через агрегатор с OpenAI-совместимым API и оплатой в рублях: в настройках подключения указываете его базовый адрес и ключ вместо адреса OpenAI.
Почему бот отвечает, но не помнит предыдущие сообщения? Toggle
К ноде AI Agent не подключен блок памяти или в нем не задан ключ сессии с идентификатором чата.