N8n: Создание телеграмм ботов
N8n — это инструмент с открытым исходным кодом для оркестрации рабочих процессов (workflow automation), который использует визуальный редактор на основе узлов (nodes). Он позволяет соединять различные сервисы и приложения без необходимости написания сложного кода. Создание Telegram ботов в n8n является одной из наиболее востребованных задач благодаря наличию специализированного узла и гибкости платформы. Данная статья представляет собой исчерпывающее руководство по созданию, настройке и развертыванию Telegram ботов с использованием n8n.
Архитектура и принцип работы Telegram бота в n8n
Взаимодействие n8n с Telegram строится по принципу вебхуков (webhook) или длинного опроса (long polling). N8n выступает в роли сервера, который обрабатывает входящие сообщения от пользователей бота и отправляет ответы. Ключевым элементом является узел «Telegram Trigger», который постоянно ожидает новые события из чата (сообщения, команды, нажатия кнопок). При получении события workflow активируется и данные передаются на последующие узлы для обработки, взаимодействия с базами данных, внешними API (например, погода, курсы валют, ChatGPT) и формирования ответа через узел «Telegram».
Предварительные требования и настройка
Перед созданием рабочего процесса необходимо выполнить несколько обязательных шагов.
- Создание бота в Telegram: Откройте Telegram, найдите @BotFather, отправьте команду
/newbot, следуйте инструкциям и получите API-токен. Токен имеет вид:1234567890:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw. - Установка и запуск n8n: N8n можно развернуть локально через npm (
npm install n8n -gиn8n start), использовать Docker-образ, или облачную версию на n8n.cloud. - Получение Chat ID: Для отправки сообщений в конкретный чат необходим его идентификатор. Его можно получить, отправив сообщение боту и обратившись к API Telegram (
https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates). В n8n это часто делается внутри workflow. - Добавьте узел «Telegram Trigger». В его настройках укажите полученный у BotFather токен. В качестве «Updates» выберите «message». Этот узел будет активировать workflow при каждом новом сообщении в чате с ботом.
- Добавьте узел «Function» или «Set». В этом узле можно подготовить данные для ответа. Для эхо-бота это необязательно, так как можно сразу отправить входящий текст.
- Добавьте узел «Telegram». В его настройках:
- Resource: Message
- Operation: Send Message
- Chat ID: Выберите из выражения
{{$node["Telegram Trigger"].json.chat.id}} - Text: Выберите из выражения
{{$node["Telegram Trigger"].json.text}}
- Соедините узлы между собой и активируйте workflow (переведите тумблер в активное состояние).
- Обработка команды /start: В узле «Telegram Trigger» в поле «Updates» выберите «message». Далее добавьте узел «IF» (или «Switch») для проверки текста сообщения. В условии укажите:
{{$node["Telegram Trigger"].json.text}} = "/start". В одной из ветвей добавьте узел «Telegram» с приветственным сообщением. - Создание клавиатуры с кнопками: В узле «Telegram» при отправке сообщения разверните раздел «Additional Fields» -> «Reply Markup». Выберите «Keyboard». Для создания кнопок используйте JSON-формат. Пример для двух кнопок в одном ряду:
{ "keyboard": [ [ { "text": "Кнопка 1" }, { "text": "Кнопка 2" } ] ], "resize_keyboard": true, "one_time_keyboard": false } - Обработка нажатия кнопок: Когда пользователь нажимает такую кнопку, бот получает её текст как обычное сообщение. Таким образом, в узле «IF» или «Switch» можно создать ветвь для условия
{{$node["Telegram Trigger"].json.text}} = "Кнопка 1"и обработать это действие. - Узел «Telegram Trigger» настраивается на команду, например,
/rate. - Добавьте узел «HTTP Request». Настройте его:
- Method: GET
- URL:
https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd
- Добавьте узел «Function» для форматирования ответа. В коде узла напишите:
const rate = $input.first().json.bitcoin.usd; return { payload: `Курс BTC: $${rate}` }; - Добавьте узел «Telegram» для отправки отформатированного текста.
- Узел «Error Trigger»: Позволяет создать отдельный workflow, который будет запускаться при сбое в основном. В него можно добавить узел «Telegram» для отправки сообщения администратору об ошибке.
- Ручная обработка в узлах: Узлы, такие как «HTTP Request», имеют настройку «Continue on Fail». Если её активировать, workflow не остановится, а ошибка будет передана на следующий узел, где её можно обработать.
- Логирование в базу данных: Добавьте узел для записи всех входящих запросов или ошибок в SQLite или другую БД для последующего анализа.
- Использование вебхука vs Long Polling: Для production-среды вебхук предпочтительнее, так как он обеспечивает мгновенную доставку сообщений. Для настройки вебхука в n8n необходимо иметь публичный HTTPS-адрес. В настройках узла «Telegram Trigger» выберите «Webhook» и укажите ваш публичный URL.
- Безопасность токена и данных: Никогда не храните токен Telegram Bot API прямо в настройках узла. Используйте Credentials n8n. Они шифруются и безопасно хранятся. Доступ к переменным в workflow осуществляется через выражения вида
{{$credentials.telegramApiToken}}. - Валидация входящих данных: Не доверяйте входящим данным. Перед обработкой проверяйте Chat ID, если бот должен общаться только с определенным кругом пользователей.
- Корректность введенного API-токена в учетных данных.
- Активирован ли сам workflow (зеленый тумблер в интерфейсе).
- Не запущено ли несколько экземпляров бота с одним токеном (конфликт вебхуков). Отправьте запрос
https://api.telegram.org/bot<ВАШ_ТОКЕН>/deleteWebhookдля очистки старого вебхука. - Правильно ли указаны пути к данным в выражениях (JSON-пути). Используйте инструмент «Выбрать данные из предыдущего узла».
Создание базового рабочего процесса (Workflow)
Рассмотрим пошагово создание простого бота-эхо, который отвечает тем же текстом, что и пользователь.
Теперь при отправке любого сообщения боту, он его тут же вернет обратно.
Обработка команд и создание интерактивных кнопок
Реальные боты реагируют на команды, начинающиеся с символа «/».
Интеграция с внешними сервисами и API
Мощь n8n раскрывается при интеграции Telegram с сотнями доступных приложений. Рассмотрим пример бота, который присылает текущий курс биткоина.
Аналогичным образом можно подключаться к базам данных (PostgreSQL, MySQL), сервисам уведомлений, Google Sheets, ChatGPT (через узел OpenAI) и многим другим.
Сравнение методов развертывания бота
| Метод | Преимущества | Недостатки | Рекомендация |
|---|---|---|---|
| Локальный запуск (n8n start) | Полный контроль, данные остаются локально, бесплатно. | Требует постоянного включенного компьютера, сложности с белым IP и SSL для вебхука. | Для тестирования и разработки. |
| Docker на VPS | Стабильность, контроль, относительная простота настройки SSL (через Nginx). | Плата за VPS, необходимость администрирования сервера. | Для production-ботов с средними нагрузками. |
| Облачный n8n (n8n.cloud) | Простота, встроенный SSL, автоматические обновления, не требует администрирования. | Платная подписка, ограничения по тарифам. | Для коммерческих проектов и команд, не желающих заниматься инфраструктурой. |
Обработка ошибок и логирование
Надежный бот должен корректно обрабатывать сбои. В n8n для этого используются следующие методы:
Оптимизация производительности и безопасность
Часто задаваемые вопросы (FAQ)
Как получить Chat ID группы или канала?
Добавьте бота в группу или канал. Затем отправьте в чат любое сообщение. После этого выполните GET-запрос к https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates. В ответе JSON найдите объект «chat» с полем «id». Для супергрупп и каналов этот ID будет отрицательным числом.
Бот не отвечает на сообщения, хотя workflow активен. В чем проблема?
Проверьте следующее:
Можно ли отправлять изображения, документы или другие медиафайлы?
Да, узел «Telegram» поддерживает различные операции помимо отправки текста: Send Photo, Send Document, Send Audio и т.д. В поле «File» необходимо указать прямую ссылку (URL) на файл или передать бинарные данные (Binary Data) из предыдущего узла, например, после загрузки файла из Google Drive или локальной файловой системы.
Как ограничить доступ к боту для определенных пользователей?
Создайте список разрешенных Chat ID (например, в переменной workflow или базе данных). После узла «Telegram Trigger» добавьте узел «IF». В условии проверьте, содержится ли входящий {{$node["Telegram Trigger"].json.chat.id}} в вашем списке. Если нет, завершите ветку или отправьте сообщение об отказе в доступе.
N8n — это бесплатный инструмент?
Да, n8n имеет лицензию с исходным кодом (Sustainable License), которая позволяет бесплатно использовать его даже в коммерческих целях при условии самостоятельного хостинга. Облачный сервис n8n.cloud является платным. Также существуют платные корпоративные функции (например, SSO, мониторинг).
Как обрабатывать inline-запросы и создавать inline-ботов?
В узле «Telegram Trigger» в поле «Updates» выберите «inline query». При активации workflow получит объект запроса. Далее вы можете обработать его, сформировать массив результатов (статей) и отправить ответ через узел «Telegram» с операцией «Answer Inline Query».
Каковы ограничения Telegram Bot API, которые важно учитывать?
Основные ограничения: отправка не более 30 сообщений в секунду в один чат; сообщения в группы/каналы могут отправляться только от имени бота, если он является администратором; размер отправляемых файлов до 50 МБ для обычных ботов. N8n не снимает этих ограничений, поэтому необходимо проектировать workflow с учетом этих лимитов, возможно, добавляя задержки с помощью узла «Wait».
Добавить комментарий