В чём фокус
Бот с нейросетью в n8n — это не один «умный» узел, а восемь обычных. Так собраны три живых бота, которые я собирал: консультант для сотрудников на девять узлов и два больших, на 137 и 145. Скелет у всех один, разное только то, что на него навешано. Ниже учебный бот по этому скелету: что за узел, зачем он и что в нём настроить. Промптов и готового файла сценария здесь нет, есть порядок.
Сначала без модели
Не каждому боту нужна нейросеть. Один мой бот собран из десяти узлов, и модели среди
них нет. Telegram Trigger принимает сообщение, узел Code приводит его к одному виду,
Switch смотрит, что пришло, и отправляет одно из шести готовых сообщений: на /start,
на четыре кодовых слова и запасное на всё остальное. Параллельно каждое обращение
ложится строкой в Google Таблицу.
Пока ответы известны заранее, хватает Switch: денег на модель он не тратит и на один вопрос всегда отвечает одинаково. Модель нужна, когда человек пишет своими словами, а ответ надо найти или собрать из данных. Отсюда начинается всё, что ниже. Если пока непонятно, какой из двух случаев ваш, начните с трёх вопросов до заказа бота.
Что понадобится
- n8n в облаке или на своём сервере. Как поставить на Beget — отдельный гайд
- Бот от @BotFather: команда
/newbot, имя, затем username от 5 до 32 знаков (латиница, цифры, подчёркивание) сbotна конце. Токен вставляется в n8n в доступ Telegram, поле Access Token - Второй бот для тестов, тем же путём. Telegram держит один вебхук на бота, и тестовый адрес n8n перебивает боевой
- Ключ модели в доступах (credentials) n8n, а не в поле узла. Переменные окружения из узлов на моём сервере закрыты по умолчанию
- Таблица или документ, откуда бот берёт ответы. Из них получится первый инструмент
Права боту давайте только на то, что ему нужно, — шесть проверок есть в статье про доступы.
Восемь узлов учебного бота
Триггер — Telegram Trigger
Запускает сценарий на каждое событие в боте. В Trigger On выберите Message, а если в боте будут кнопки — ещё Callback Query. Вариант
*берёт всё, кроме Chat Member и реакций, и лишнее потом придётся отсеивать. На время теста включите Restrict to User IDs со своим id: бот будет реагировать только на вас. Нужны фото от людей — опция Download Images/Files.Разбор сообщения — Code
Из того, что прислал Telegram, соберите одну запись: текст, id пользователя, id чата и тип — текст, голос или нажатая кнопка. Дальше все узлы читают её, а не сырое сообщение. Голос — необязательный подшаг: IF «это голосовое?» → Telegram, Get File → расшифровка через OpenAI (у меня Whisper) → текст в ту же запись. Так сделано в обоих моих больших ботах, у консультанта голоса нет.
Команды — Switch
Режим Rules: на каждое правило свой выход.
/start,/helpи всё, на что ответ известен заранее, уходит прямо в отправку и до модели не доходит. У моего ассистента так разведены справка, дела на сегодня, подписка и пауза: текст сначала проходит простые правила и только потом попадает к модели. Правило одно: всё фиксированное — мимо модели.«Печатает…» — Telegram, Send Chat Action
Действие Typing, ставится до долгой работы. Модель думает секунды, и без статуса человек видит тишину. По Bot API статус держится до пяти секунд или до первого сообщения бота, так что на долгом ответе он погаснет раньше. У бота питания такой узел стоит в начале цепочки.
Агент — AI Agent с моделью
Агент получает текст и сам решает, ответить сразу или вызвать инструмент. По документации к нему подключаются модель и хотя бы один инструмент. Модель — подузел OpenAI Chat Model или другого поставщика. В его опциях есть Timeout: у меня по умолчанию стояла минута, модель с рассуждением под утренней нагрузкой не успевала, и я поднял до 120 секунд. Повторы не добавляйте — подробно в гайде про молчаливые падения. В системном промпте — что бот знает, откуда берёт факты, когда зовёт инструмент и когда отвечает «не знаю». У консультанта таблица товаров оказалась неполной, и агент отвечал по ней про наличие. После живого теста правило поменял: наличие — только из инструмента остатков, таблица — для описаний.
Память — Simple Memory
Подузел агента; в выгрузке моего n8n его тип
memoryBufferWindow. Session Key — id пользователя Telegram изfrom.id, иначе разговоры разных людей лягут в одну память. Context Window Length — сколько прошлых обменов помнить, у консультанта 10. Проверка простая: задайте вопрос, а потом уточнение, не называя предмет. На живом тесте консультанта короткое уточнение без названия предмета поняли правильно.Инструменты — Call n8n Workflow Tool
Каждый инструмент — отдельный сценарий: «остатки», «заказы», «база знаний». В поле Description напишите, когда агенту его звать: по этому тексту он и выбирает. Сценарий-инструмент должен быть опубликован. Иначе вызов вернёт агенту ошибку как обычный результат, агент перескажет её словами вроде «не удалось получить данные», и это легко пропустить. У консультанта два таких инструмента. Проверку инструмента «база знаний» я разбирал в гайде про бота, который врёт.
Отправка — Telegram, Send Message
Append n8n Attribution — Off. По умолчанию n8n дописывает в конец каждого сообщения «This message was sent automatically with n8n», и у меня пользователь пожаловался на это на первом же тесте. Parse Mode по умолчанию HTML. Текст — до 4096 символов после разбора разметки, длиннее Telegram не примет. Списки из данных человека выводите с потолком на каждую секцию и хвостом «…и ещё N», а общую обрезку делайте по границе строки: разорванный тег даёт ту же ошибку. На этом узле On Error — continue: сбой последней отправки не должен ронять прогон.
Где живёт память
Схем у меня две. У консультанта память — подузел Simple Memory, ключ — id пользователя, окно в десять обменов. Ничего, кроме этого подузла, заводить не нужно.
У ассистента подузла памяти нет вовсе. Сообщение человека сохраняется в базу отдельным узлом до агента, ответ модели — после, а на входе история подгружается из базы. Узлов больше, зато историю видно обычными строками: её можно открыть, прочитать и удалить.
С Simple Memory проще начать. Одно ограничение из документации: если n8n работает в режиме очереди (queue mode), в боевом сценарии этот подузел не работает.
Обработчик ошибок — отдельным сценарием
Это второй сценарий рядом с ботом: Error Trigger → сообщение себе в Telegram. В настройках сценария бота, Settings → Error workflow, выберите его. Один обработчик подходит для всех сценариев: назначьте его в каждом.
Включите его. Документация n8n на 14.10.2026 пишет, что сценарий с Error Trigger публиковать не обязательно. У меня 01.06.2026 на своём сервере выключенный обработчик пропустил три падения тестового сценария и заработал только после включения.
Ручной запуск его не вызывает — так и в документации. Проверяйте на сценарии, который запускается сам: например, временный по расписанию с узлом Stop And Error, который роняет прогон нарочно.
У ассистента между триггером и сообщением стоят ещё два шага: «не чаще заданного интервала» с журналом уведомлений в базе и отсев шумных ошибок. Это на потом, первому боту хватит двух узлов.
Схема целиком
Так агент с подузлами выглядит на холсте n8n: сверху основной узел, снизу то, что к нему подключено.

А это весь учебный бот текстом.
СЦЕНАРИЙ БОТА
1. Telegram Trigger
Message, Callback Query
2. Разбор сообщения (Code)
голос: IF → файл → расшифровка
3. Команды (Switch)
ответ известен → сразу в п. 8
остальное → в п. 4
4. «Печатает…» (Send Chat Action)
5. AI Agent + Chat Model
Timeout больше минуты
к агенту снизу: п. 6 и п. 7
6. Simple Memory
ключ = id пользователя
7. Call n8n Workflow Tool
подсценарии, опубликованы
8. Отправка (Send Message)
без подписи n8n, до 4096,
On Error: continue
ОТДЕЛЬНЫЙ СЦЕНАРИЙ, ВКЛЮЧЁН
Error Trigger → сообщение операторуУзел → зачем → что настроить
| Узел | Тип в n8n | Что настроить | Чем ловится ошибка |
|---|---|---|---|
| Триггер | Telegram Trigger | Message, Callback Query; на тест Restrict to User IDs | Второй бот для тестов: вебхук у бота один |
| Разбор сообщения | Code | Одна запись: текст, id, тип | Вывод узла: пустой текст — сломан разбор |
| Команды | Switch, режим Rules | Правило на каждую команду | Запасной ответ на всё неузнанное |
| «Печатает…» | Telegram, Send Chat Action | Typing до долгой работы | Статус живёт до пяти секунд — это нормально |
| Агент | AI Agent + Chat Model | Промпт с «не знаю», Timeout больше минуты | «Request timed out» — поднять таймаут, а не повторы |
| Память | Simple Memory | Session Key = id пользователя, окно около 10 | Уточнение без предмета |
| Инструменты | Call n8n Workflow Tool | Description: когда звать | Подсценарий не опубликован — ошибка уходит агенту в ответ |
| Отправка | Telegram, Send Message | Attribution Off, потолок 4096, On Error: continue | «message is too long» на длинном списке |
| Обработчик | Error Trigger, отдельный сценарий | Назначить в Settings, включить | Падение прогона, запущенного не руками |
Как у меня
Числа узлов — из выгрузки моего n8n на 14.10.2026.
Консультант для сотрудников розничного бренда — 9 узлов. Триггер, чтение таблицы товаров, узел Code склеивает её в текст и отдаёт агенту. К агенту подключены модель, Simple Memory на десять обменов и два инструмента — отдельные сценарии остатков и заказов. Дальше одна отправка.
Мой ассистент — 145 узлов. Голос расшифровывается, команды разводит Switch, история лежит в базе. Свободный текст сначала получает агент-классификатор, затем Switch отправляет его к одному из семи агентов по темам, и у каждого своя модель и свой инструмент-исполнитель — отдельный сценарий. Ошибки уходят в отдельный сценарий на семь рабочих узлов с ограничением частоты. Подробный разбор — в кейсе ассистента.
Мой бот питания — 137 узлов. Голос проходит расшифровку раньше всего остального, перед долгим ответом стоит «печатает…». Три агента: еда, готовка и знакомство с новым пользователем. Фото уходит в модель отдельным HTTP-запросом, мимо агента. Отказ и запасной ответ — отдельные узлы отправки. Напоминания — отдельный сценарий на семь узлов, по расписанию каждые 15 минут.
Модели по моим записям: у консультанта и ассистента — gpt-5-mini (июнь 2026), у бота питания — DeepSeek (сентябрь 2026). Голос в обоих больших ботах расшифровывает Whisper от OpenAI.
Чтобы не споткнуться
Узел сохранения в базу отдаёт дальше свою запись, и $json после него — уже строка базы, а не сообщение. У меня классификатор читал пустой текст и всё отправлял в одну тему. Берите текст из триггера по имени: $('Telegram Trigger').first().json.message.text.
Так n8n показывает ответ Telegram 403 Forbidden: bot was blocked by the user: человек заблокировал бота. Отключайте рассылку такому пользователю по тексту ошибки (blocked by the user, user is deactivated, bot was kicked, chat not found), а не по любому 403. Иначе при настоящей проблеме с токеном рассылка выключится у всех разом.
Ответ на кнопку опоздал: по моим наблюдениям Telegram ждёт его около 15 секунд. Причины встречал три — старая кнопка, медленная цепочка до ответа и задержка доставки апдейта самим Telegram. Это не поломка: на узле ответа кнопке ставьте On Error — continue. Исключение — ответ на pre-checkout платежа, там сбой должен прийти вам.
Это ограничение Bot API. Для старых сообщений запасной путь — снять с них кнопки.
Append n8n Attribution включена по умолчанию на каждом узле отправки. Выключать нужно на всех, а не на одном.
У бота один вебхук. Нажали тест в n8n — Telegram шлёт сообщения на тестовый адрес, и боевой сценарий их больше не получает. Документация n8n советует отдельного бота для тестов.
n8n подписывает вебхук секретом, и чужой запрос получает 403. Подделать сообщение снаружи не выйдет — пишите боту сами, с телефона.
«Выполнено?» вместо «Сделал?», а на повторяющиеся уведомления — несколько вариантов вперемешку. И тестируйте теми фразами, какими пишут живые люди, а не «тест 1».
Перед включением
[ ] второй бот для тестов заведён
[ ] ключ модели лежит в credentials n8n, не в поле узла
[ ] Timeout у модели больше минуты
[ ] Append n8n Attribution выключен на всех узлах отправки
[ ] у списков потолок, общий текст не длиннее 4096 символов
[ ] On Error: continue на отправке и на ответе кнопкам
[ ] сценарии-инструменты опубликованы
[ ] память: Session Key = id пользователя Telegram
[ ] системный промпт говорит, когда отвечать «не знаю»
[ ] обработчик ошибок назначен, включён и прислал тестовую ошибку
[ ] тест реальными фразами людей, не «тест 1»Частые вопросы
- Какую модель брать?
- У меня в разных ботах разные, перечислил выше. Принцип — недорогая модель на рутину: классифицировать и ответить по данным. Подробнее — какой ИИ под какую задачу.
- Обязательно ли голос?
- Нет. Это отдельный подшаг в разборе сообщения. В двух ботах из трёх он есть, у консультанта нет.
- Можно без памяти?
- Можно, но тогда каждое сообщение для бота первое. Уточняющие вопросы из двух слов, которые опираются на прошлую реплику, перестанут работать.
- Что такое агент, память и инструмент, если коротко?
- По строке на каждое слово — в словаре из 24 слов про ИИ.
- Сколько это стоит?
- Из чего складываются расходы на ИИ-продукт — в отдельной статье. А что бот не возьмёт на себя при любом бюджете — здесь.
Источники
- docs.n8n.io — Telegram TriggerСобытия, опции Restrict to User IDs и Download Images/Files. Сверено 14.10.2026
- docs.n8n.io — Telegram Trigger, common issuesОдин вебхук на бота, отдельный бот для тестов. Сверено 14.10.2026
- docs.n8n.io — Telegram credentialsBotFather, /newbot, правила username, поле Access Token. Сверено 14.10.2026
- docs.n8n.io — Telegram node, message operationsSend Message: 4096, Append n8n Attribution, Parse Mode; Send Chat Action. Сверено 14.10.2026
- docs.n8n.io — AI AgentМодель и хотя бы один инструмент. Сверено 14.10.2026
- docs.n8n.io — Sub-nodesОсновной узел и подузлы, иллюстрация в тексте. Сверено 14.10.2026
- docs.n8n.io — Simple MemorySession Key, Context Window Length, ограничение queue mode. Сверено 14.10.2026
- docs.n8n.io — How memory worksSimple Memory и память во внешних сервисах. Сверено 14.10.2026
- docs.n8n.io — OpenAI Chat ModelОпции Timeout и Max Retries. Сверено 14.10.2026
- docs.n8n.io — Call n8n Workflow ToolDescription инструмента, подсценарий должен быть опубликован. Сверено 14.10.2026
- docs.n8n.io — SwitchРежимы Rules и Expression. Сверено 14.10.2026
- docs.n8n.io — Error TriggerНазначение обработчика, ручной прогон его не вызывает. Сверено 14.10.2026
- docs.n8n.io — Handle errors gracefullyОдин обработчик на несколько сценариев, Stop And Error. Сверено 14.10.2026
- Telegram Bot APIsendMessage, sendChatAction, deleteMessage, setWebhook и secret_token. Сверено 14.10.2026