1. Введение
В этом гайде мы выведем агента в Telegram — создадим бота, который принимает и текстовые, и голосовые сообщения, транскрибирует голос через Whisper, помнит контекст разговора и отвечает строго в рамках заданной роли.
Что найдёте в этой инструкции:
- Как создать Telegram-бота через BotFather (новый способ через мини-апп)
- Как подключить Telegram Trigger в Нейро42
- Как настроить Switch с тремя выходами: Text / Audio / Unsupported
- Как получить аудиофайл и транскрибировать его через OpenAI Whisper
- Как настроить системный промпт — роль, стиль и границы агента
- Как привязать Simple Memory к chat_id каждого пользователя
- Как отправить ответ обратно в Telegram и проверить всё в деле
💡 Совет: Этот гайд рассчитан на тех, кто прошёл Гайды 1–4. У вас уже должен быть рабочий AI Agent — здесь мы добавляем к нему Telegram-оболочку.
2. Ключевые понятия
| Термин | Что это |
| BotFather | Официальный сервис Telegram для создания ботов. Теперь работает как мини-апп: нажмите «Open» (скрепка) → Create bot. |
| Токен бота | Уникальный ключ вашего бота. Длинная строка вида 1234567890:ABC… Кто знает токен — тот управляет ботом. |
| Telegram Trigger | Нода в Нейро42, запускающая воркфлоу при каждом входящем сообщении в Telegram. |
| Switch / Verify Message Type | Нода-разветвитель (режим Rules). Проверяет ключи сообщения и направляет поток по трём путям: Текст, Аудио или Unsupported. |
| message.keys() | Выражение, возвращающее список полей входящего сообщения. Если в нём есть «text» — это текст, если «voice» — это голосовое. |
| Telegram Get File | Нода Telegram с ресурсом File / операцией Get. Получает бинарные данные аудиофайла по file_id. |
| OpenAI Transcribe | Нода OpenAI: ресурс Audio, операция Transcribe Recording. Переводит аудио в текст через Whisper. Модель выбирается автоматически. |
| Simple Memory | Память агента на N последних сообщений. Session ID = chat_id привязывает историю к каждому пользователю отдельно. |
| System Message | Системный промпт — роль, стиль общения и границы (что отвечать, что нет). Агент читает его перед каждым ответом. |
| chat_id | Уникальный ID чата в Telegram. Нужен для отправки ответа нужному пользователю и для привязки памяти. |
3. Что понадобится
| Что нужно | Зачем / Где получить |
| Аккаунт Telegram | Для создания бота через BotFather |
| Аккаунт Нейро42 (n8n) | Платформа для сборки воркфлоу |
| API-ключ OpenAI | Для транскрибации голоса и работы AI Agent. platform.openai.com |
| Готовый AI Agent из Гайдов 1–4 | Добавляем Telegram-обёртку поверх уже рабочего агента |
4. Как устроен воркфлоу — схема целиком
Прежде чем начать, посмотрим на итоговую схему:
| Нода | Что делает | Ветка |
| Telegram Trigger | Получает любое входящее сообщение | Старт |
| Verify Message Type (Switch) | Смотрит на ключи сообщения и разветвляет поток | Разветвление |
| Edit Fields (Set) | Сохраняет текст: text = message.text | Текст → |
| Telegram Get File | Скачивает аудиофайл по file_id | Аудио → |
| OpenAI Transcribe | Переводит аудио в текст (Whisper) | Аудио → |
| Unsupported Message Type | Отправляет сообщение «не могу обработать» | Fallback → |
| AI Agent | Думает и формирует ответ | Обе ветки |
| Simple Memory | Хранит историю по chat_id | → AI Agent |
| Telegram Send Message | Отправляет ответ пользователю | Финал |
💡 Совет: Три ветки Switch: «Text» идёт напрямую в AI Agent, «Audio» сначала проходит через Get File и Transcribe, «Extra» (fallback) — отправляет сообщение «не могу обработать».
5. Основные шаги
Часть 1: Создаём бота в Telegram через BotFather
Шаг 1. Найдите BotFather в поиске Telegram
BotFather — официальный сервис Telegram для создания и управления ботами. Открываем его через поиск.
- Откройте Telegram на любом устройстве
- В строке поиска введите: BotFather
- Выберите бота с синей галочкой верификации
- Откройте чат с ним
Шаг 2. Откройте мини-апп BotFather
Новый способ создания ботов — через встроенный мини-апп. Это быстрее и удобнее, чем команда /newbot.
- В чате с BotFather найдите кнопку Open рядом с полем ввода (иконка скрепки / приложений)
- Нажмите Open — откроется мини-апп BotFather прямо внутри Telegram
Шаг 3. Создайте нового бота
В мини-аппе заполняем данные бота.
- Нажмите кнопку Create bot
- Введите имя бота (отображаемое имя, любое) — например: Мой Ассистент
- Описание — опционально, можно пропустить
- Введите username — уникальный, обязательно заканчивается на bot, например: my_assistant_42bot
- Нажмите Create bot — бот создан
Шаг 4. Скопируйте токен из меню бота
После создания бота вы вернётесь в список ботов мини-аппа. Отсюда копируем токен.
- В меню мини-аппа выберите только что созданного бота — нажмите на него
- Откроется окно настроек бота
- Найдите токен (длинная строка вида 1234567890:ABCdef…) и нажмите Copy
💡 Совет: Здесь же в настройках можно добавить фотографию, изменить описание или отредактировать бота — позже, через этот же экран.
⚠️ Важно: Токен — это ключ от вашего бота. Никому не отправляйте его и не публикуйте. Если утёк — сразу перевыпустите через BotFather.
✅ Часть 1 завершена. Бот создан, токен скопирован.
Перед началом: снимаем воркфлоу с публикации
Если ваш воркфлоу из Гайдов 1–4 уже опубликован и работает — прежде чем начинать редактирование, нужно его снять с публикации. Это необходимо, чтобы правки вступали в силу корректно.
- Откройте воркфлоу с AI Agent в Нейро42
- В правом верхнем углу нажмите на три точки «⋯»
- Выберите пункт «Снять с публикации»
- В появившемся диалоге подтвердите действие
⚠️ Важно: После снятия с публикации воркфлоу перестанет реагировать на сообщения. Не забудьте опубликовать его снова по завершении всех настроек.
Часть 2: Настраиваем Telegram Trigger в Нейро42
Шаг 5. Откройте существующий воркфлоу и удалите Chat Trigger
Мы не создаём новый воркфлоу — открываем тот, что уже работал в Гайдах 1–4. Нам нужно заменить стартовую ноду: вместо «When Chat Message Received» поставим Telegram Trigger.
- Откройте ваш рабочий воркфлоу с AI Agent из предыдущих гайдов
- Найдите первую ноду — «When Chat Message Received» (Chat Trigger)
- Кликните по ней правой кнопкой мыши → выберите Delete
- Соединение с AI Agent автоматически пропадёт — это нормально, сейчас подключим новый триггер
Шаг 6. Добавьте Telegram Trigger
Теперь добавляем новый триггер — он заменит удалённый Chat Trigger и будет запускать воркфлоу при каждом сообщении в Telegram.
- Нажмите «+» на холсте
- В поиске введите: Telegram
- В разделе Triggers выберите: Telegram Trigger
Шаг 7. Подключите токен бота
После добавления нода сразу откроет панель настроек. Нужно создать новое подключение с токеном.
- В поле Credential нажмите на стрелку-выпадашку и выберите «Создать новые учётные данные»
- Вставьте ваш токен от BotFather в поле Access Token
- Нажмите Save
Шаг 8. Выберите тип обновлений
В поле Updates выберите, какие сообщения будут запускать воркфлоу.
- Выберите message — запускать при каждом сообщении
- Альтернатива: поставьте * (звёздочку) — тогда триггер сработает на любое событие в Telegram (сообщения, редактирования, реакции и т.д.)
- Для большинства случаев оптимально — message
✅ Часть 2 завершена. Telegram Trigger настроен и ждёт сообщений.
Часть 3: Switch «Verify Message Type» — три ветки
Telegram присылает разные структуры для текстовых, голосовых и других сообщений. Нужно направить каждый тип по своему пути. Switch с режимом Rules — идеальный инструмент для этого.
Шаг 9. Добавьте ноду Switch
- Нажмите «+» после Telegram Trigger
- В поиске введите: Switch
- Выберите ноду Switch
- Дважды кликните по заголовку ноды и переименуйте в: Verify Message Type
Шаг 10. Настройте режим и первое правило (Text)
Откройте настройки Switch. Убедитесь, что Mode = Rules. Добавляем первое правило.
- В поле Mode выберите: Rules
- Нажмите «Add Routing Rule»
- Value 1 — переключитесь в режим Выражение и введите:
{{ $json.message.keys() }}
- Operation: Array → Contains
- Value 2: text
- Разверните «Output Settings» и включите «Rename Output» — введите имя: Text
💡 Совет: $json.message.keys() возвращает список всех ключей объекта message. Если в нём есть «text» — значит пользователь написал текстовое сообщение. Если «voice» — голосовое.
Шаг 11. Добавьте второе правило (Audio)
- Нажмите «Add Routing Rule» ещё раз
- Value 1: Выражение → {{ $json.message.keys() }}
- Operation: Array → Contains
- Value 2: voice
- Rename Output: Audio
Шаг 12. Добавьте Fallback Output
Fallback — это выход для всего, что не попало ни в одно правило (фото, стикер, документ и т.д.).
- Найдите кнопку «Options» или «Add Option» в нижней части настроек Switch
- Выберите «Fallback Output»
- Установите значение: Extra Output
⚠️ Важно: Порядок правил важен: Text идёт первым (index 0), Audio — вторым (index 1). Fallback срабатывает, только если ни одно правило не сработало.
✅ Часть 3 завершена. Switch настроен — три выхода: Text, Audio, Extra.
Часть 4: Ветка Text — нода Edit Fields
Шаг 13. Добавьте ноду Set (Edit Fields) в ветку Text
Из выхода Text Switch нам нужно передать текст сообщения дальше в AI Agent. Используем ноду Set (в интерфейсе она называется Edit Fields) — она фиксирует нужное поле.
- Подключитесь к выходу Text ноды Switch
- Нажмите «+» и в поиске введите: Edit Fields (или Set)
- Выберите ноду Edit Fields
- В настройках нажмите «Add Field»
- Name: text
- Type: String
- Value — переключитесь в Выражение:
={{ $json.message.text }}
- Включите опцию «Include Other Fields» — чтобы данные из Telegram Trigger (включая chat.id) остались доступны дальше
💡 Совет: Include Other Fields позволяет сохранить весь исходный объект message — в том числе chat.id, который понадобится для отправки ответа и для Memory.
✅ Часть 4 завершена. Текстовая ветка готова.
Часть 5: Ветка Audio — получаем и транскрибируем голос
Когда пользователь отправляет голосовое, Telegram не отдаёт аудио напрямую — он присылает file_id. Нода Telegram Get File по этому ID скачивает сам аудиофайл. Затем OpenAI Transcribe переводит его в текст.
Шаг 14. Добавьте ноду Telegram — Get File
Подключитесь к выходу Audio ноды Switch.
- Нажмите «+» от выхода Audio
- В поиске введите: Telegram
- Выберите ноду Telegram (не Telegram Trigger, а именно Telegram)
- В поле Credential выберите тот же аккаунт, что и для Trigger
- Resource: File
- Operation: Get
- В поле File ID переключитесь на Выражение:
={{ $json.message.voice.file_id }}
💡 Совет: Эта нода обращается к Telegram API, скачивает бинарные данные аудиофайла и передаёт их в поле data. Именно это поле нужно будет указать в OpenAI Transcribe.
Шаг 15. Добавьте ноду OpenAI — Transcribe
Получив бинарный файл, передаём его в Whisper для транскрибации.
- Нажмите «+» после ноды Telegram Get File
- В поиске введите: OpenAI
- Выберите ноду OpenAI
- В поле Credential выберите ваш OpenAI API ключ
- Resource: Audio
- Operation: Transcribe a Recording
- В поле Input Data Field Name оставьте: data
- (Модель выбирается автоматически — Whisper-1. Ничего менять не нужно.)
💡 Совет: После выполнения этой ноды в данных появится поле text — расшифрованный текст голосового сообщения. Именно его мы передадим в AI Agent точно так же, как текст из текстовой ветки.
✅ Часть 5 завершена. Голосовое сообщение конвертируется в текст.
Часть 6: Ветка Fallback — ответ на неподдерживаемый тип
Шаг 16. Добавьте ноду Telegram Send для Unsupported
Если пользователь пришлёт фото, стикер, документ или что-то ещё — бот вежливо ответит, что не может это обработать.
- Подключитесь к третьему выходу Switch (Extra / Fallback)
- Нажмите «+» и выберите ноду Telegram
- Credential: тот же аккаунт
- Resource: Message
- Operation: Send Message
- В поле Chat ID — Выражение:
={{ $json.message.chat.id }}
- В поле Text введите (фиксированный текст):
Я не могу обработать этот тип сообщения.
- Переименуйте ноду в: Unsupported Message Type
💡 Совет: Эта ветка изолирована — она никуда дальше не ведёт. Voркфлоу просто отправляет сообщение и завершается.
✅ Часть 6 завершена. Все три ветки Switch обработаны.
Часть 7: AI Agent — подключаем обе рабочие ветки
Нода AI Agent уже существует в воркфлоу из Гайдов 1–4. Нам нужно только подключить к ней обе новые ветки и убедиться, что chatInput настроен правильно.
Шаг 17. Подключите AI Agent к обеим веткам
- Найдите существующую ноду AI Agent на холсте
- Подключите к нему выход ноды Edit Fields (ветка Text) через main-соединение
- Подключите к нему выход ноды OpenAI Transcribe (ветка Audio) через main-соединение
- Откройте настройки AI Agent — раньше нода была подключена к Chat Trigger, теперь режим изменился
- В верхней части панели найдите переключатель источника промпта — он может быть в режиме «Connected Chat Trigger node»
- Переключите его в режим «Define below» (ввести вручную / через выражение)
- В открывшемся поле Prompt → User Message нажмите кнопку Выражение (⚡)
- Введите выражение:
={{ $json.text }}
💡 Совет: $json.text работает для обеих веток: в текстовой ветке это поле выставила нода Edit Fields, в голосовой — OpenAI Transcribe. AI Agent не знает, откуда пришёл текст — он просто отвечает на него.
Часть 8: Системный промпт — роль, стиль и границы
Шаг 18. Добавьте System Message в AI Agent
- Откройте настройки AI Agent
- Нажмите «Add Option» внизу панели
- Выберите «System Message»
- Вставьте ваш промпт в появившееся поле
Пример системного промпта (из этого гайда — можно менять как угодно):
Ты — вежливый и полезный ассистент. Отвечаешь на вопросы пользователей: можешь рассказать о погоде через ноду Weather API, ответить на вопросы по материалам вебинара из векторной базы знаний Supabase, помочь с задачами. Общаешься на русском языке, кратко и по делу. Если вопрос выходит за рамки твоей компетенции — вежливо скажи об этом.
💡 Совет: Этот промпт — просто пример. Вы можете полностью заменить его под вашу задачу: сделать бота-консультанта по продукту, поддержку клиентов, помощника по вебинару, советника по питанию — что угодно. Чем точнее роль и ограничения, тем предсказуемее поведение агента.
Часть 9: Simple Memory — привязка к пользователю
Шаг 19. Добавьте Simple Memory к AI Agent
- В нижней части ноды AI Agent найдите слот Memory
- Нажмите «+» рядом с Memory
- Выберите: Simple Memory
- Нода появится на холсте и автоматически подключится к AI Agent
Шаг 20. Настройте Session ID через данные Telegram Trigger
Session ID определяет, кому принадлежит история диалога. Мы привяжем его к chat_id — уникальному ID чата пользователя в Telegram. Чтобы не писать выражение вручную, получим данные прямо из ноды.
- Откройте настройки Simple Memory
- В поле Session ID нажмите на переключатель — он может быть в режиме «Connected Chat Trigger node»
- Переключите его в режим «Define below»
- Теперь нам нужно получить реальные данные из Telegram Trigger — чтобы можно было перетащить chat_id
- Откройте чат с вашим ботом в Telegram и отправьте команду /start
- Вернитесь в Нейро42 — нажмите на ноду Telegram Trigger и в правой панели нажмите «Выполнить ноду»
- Нода выполнится и покажет входящие данные — вы увидите структуру сообщения
- В отображённых данных найдите поле chat → id (это и есть chat_id пользователя)
- Перетащите это поле прямо в поле Session ID ноды Simple Memory
- Session ID автоматически заполнится правильным выражением
💡 Совет: Перетаскивание — самый надёжный способ: n8n сам сформирует правильное выражение и вы не допустите опечатку.
⚠️ Важно: Если данные в Telegram Trigger исчезли или обнулились — не волнуйтесь. Отправьте /start боту ещё раз и снова нажмите «Выполнить ноду». Данные вернутся.
✅ Часть 9 завершена. Каждый пользователь имеет свою отдельную историю разговора.
Часть 10: Языковая модель — подключаем OpenAI Chat Model
Шаг 21. Убедитесь, что OpenAI Chat Model подключён
- OpenAI Chat Model уже подключён к вашему AI Agent из предыдущих гайдов
- Проверьте, что Credential указан (ваш OpenAI API ключ)
Часть 11: Отправляем ответ в Telegram
Шаг 22. Добавьте ноду Telegram Send Message
- Нажмите «+» после AI Agent
- Выберите ноду Telegram
- Credential: тот же аккаунт бота
- Resource: Message
- Operation: Send Message
Шаг 23. Настройте Chat ID и текст через перетаскивание
Поля Chat ID и Text заполняем не вручную, а перетаскиванием из данных нод — так надёжнее и быстрее.
Заполняем Chat ID:
- Если данные в нодах уже есть — раскройте ноду Telegram Trigger и найдите в её данных поле chat → id
- Если данные сбросились — отправьте /start боту, вернитесь в Нейро42 и нажмите «Выполнить ноду» на Telegram Trigger
- Перетащите поле chat.id из данных Telegram Trigger в поле Chat ID ноды Send Message
Заполняем Text (ответ агента):
- Раскройте ноду AI Agent — в её выходных данных найдите поле output (первая строка с ответом агента)
- Перетащите поле output в поле Text ноды Send Message
💡 Совет: Перетаскивание — самый надёжный способ: n8n сам сформирует выражение {{ $json.output }}. Если хотите вписать вручную — именно такое значение и нужно.
⚠️ Важно: Если данные нод сбросились и перетаскивать нечего — отправьте /start боту, выполните Telegram Trigger заново, а потом прогоните весь воркфлоу через тестирование. Данные восстановятся по всей цепочке.
Часть 12: Публикуем воркфлоу
Шаг 24. Проверьте схему и опубликуйте
Финальная схема должна выглядеть так:
- Telegram Trigger → Verify Message Type (Switch)
- Switch [Text] → Edit Fields → AI Agent
- Switch [Audio] → Telegram Get File → OpenAI Transcribe → AI Agent
- Switch [Extra] → Unsupported Message Type (Send)
- AI Agent ← Simple Memory (Memory)
- AI Agent ← OpenAI Chat Model
- AI Agent → Telegram Send Message
- Нажмите кнопку «Опубликовать» в правом верхнем углу
⚠️ Важно: Только после нажатия «Опубликовать» бот начнёт реагировать на сообщения.
Часть 13: Тестируем бота
Шаг 25. Текстовое сообщение — проверяем Weather API
Найдите бота в Telegram по username и напишите ему. Первым тестом проверим, что работает нода Weather API.
- Найдите бота по username в поиске Telegram
- Отправьте: «Привет, какая погода в Москве?»
- Бот должен обратиться к ноде Weather API и ответить с реальными данными о погоде
💡 Совет: Если бот ответил данными о погоде — Weather API и текстовая ветка работают. Если нет — проверьте ноду Weather API в воркфлоу и её настройки.
Шаг 26. Голосовое сообщение — проверяем базу знаний
Теперь проверяем голосовую ветку и векторную базу знаний Supabase.
- Запишите голосовое сообщение в чате с ботом: «Привет, расскажи инфу о вебинаре»
- Бот должен транскрибировать голос через Whisper и ответить информацией из базы знаний
💡 Совет: Хотите проверить транскрибацию? Зайдите в Нейро42 → последний запуск воркфлоу → нода OpenAI Transcribe → вкладка Выходные данные. Там поле text с расшифровкой.
Шаг 27. Неподдерживаемый тип (фото, стикер)
- Отправьте боту стикер или фотографию
- Бот должен ответить: «Я не могу обработать этот тип сообщения.»
Шаг 28. Проверка памяти
- Напишите: «Меня зовут Глеб»
- В следующем сообщении спросите: «Как меня зовут?»
- Бот должен ответить «Глеб» — это значит, Simple Memory работает
✅ Тестирование завершено. Бот работает с текстом, голосом, отбивает неподдерживаемые типы и помнит контекст!
Бонус: убираем подпись «Sent automatically with n8n»
По умолчанию Нейро42 добавляет к каждому сообщению бота подпись «This message was sent automatically with n8n». Чтобы убрать её, нужно отключить одну опцию в ноде Send Message.
- Откройте ноду «Send a text message» (Telegram Send Message)
- Прокрутите панель вниз до раздела «Additional Fields»
- Нажмите «Add Field» и выберите «Append n8n Attribution»
- Появится переключатель «Append n8n Attribution» — выключите его (тумблер серый)
✅ Готово! Теперь бот отвечает без подписи n8n.
🎉 Поздравляем! Telegram-бот с голосом, памятью и системным промптом готов!
Ваш бот умеет:
- Принимать текстовые сообщения в Telegram
- Принимать голосовые — транскрибировать через OpenAI Whisper
- Вежливо отказывать при неподдерживаемом типе (фото, стикер и т.д.)
- Отвечать строго в рамках заданной роли (системный промпт)
- Помнить контекст разговора для каждого пользователя отдельно
6. Что делать, если не работает
| Проблема | Решение |
| Бот не реагирует на сообщения | Убедитесь, что воркфлоу ОПУБЛИКОВАН (не просто сохранён). Проверьте токен в Telegram Trigger. |
| Switch не срабатывает на голос | Убедитесь, что Value 1 = {{ $json.message.keys() }}, операция = Array contains, Value 2 = voice (без кавычек). |
| Ошибка в ноде OpenAI Transcribe | Проверьте, что Binary Property = data. Убедитесь, что нода Telegram Get File выполнилась и вернула бинарные данные. |
| Бот не помнит контекст | Session ID в Simple Memory должен ссылаться на chat_id из Telegram Trigger. Перетащите поле chat.id из данных Trigger в поле Session ID. Если данные сбросились — отправьте /start боту и выполните Trigger заново. |
| Бот отвечает не тому пользователю | В Send Message поле Chat ID должно ссылаться на chat.id из Telegram Trigger. Используйте перетаскивание из данных Trigger. Не вводите числовой ID вручную. |
| На голосовое приходит «не могу обработать» | Порядок правил в Switch: сначала Text (index 0), потом Audio (index 1). Проверьте, не перепутаны ли местами. |
7. Что делать дальше
Бот работает — теперь его можно развивать:
- Подключите Supabase-базу знаний (Гайд 3) — бот будет отвечать из загруженных документов
- Добавьте обработку фотографий — новая ветка в Switch для message.photo
- Настройте логирование всех диалогов в Google Sheets
- Создайте несколько ботов с разными ролями (разные токены → разные воркфлоу)
- Добавьте команды (/help, /reset) через фильтрацию по message.text.startsWith













































