Как создать телеграм бота в n8n: Полное руководство
n8n — это инструмент с открытым исходным кодом для оркестрации рабочих процессов (workflow automation), который позволяет соединять различные приложения и сервисы без написания кода. Создание Telegram бота в n8n является типичной задачей, которая демонстрирует мощь платформы для обработки входящих сообщений, автоматизации ответов и интеграции с другими системами. Данное руководство детально описывает весь процесс от начала до конца.
Предварительные требования и настройка
Перед началом работы в n8n необходимо выполнить несколько обязательных шагов по настройке самого бота в мессенджере Telegram.
1. Создание бота через BotFather
Откройте Telegram и найдите официального бота @BotFather. Взаимодействуйте с ним, используя следующие команды:
- /newbot — запускает процесс создания нового бота.
- Укажите имя бота (отображаемое имя для пользователей).
- Укажите username бота, который должен заканчиваться на ‘bot’ (например, my_test_n8n_bot).
- Найдите в Telegram созданного бота и начните с ним диалог, отправив любое сообщение (например, «/start»).
- Перейдите по URL в браузере:
https://api.telegram.org/bot[ВАШ_ТОКЕН]/getUpdates, заменив[ВАШ_ТОКЕН]на полученный ранее ключ. - В ответе JSON найдите объект
"chat", внутри которого будет поле"id". Это и есть ваш Chat ID (часто отрицательное число для групповых чатов). - Откройте ваш инстанс n8n.
- Перейдите в раздел Credentials в левом боковом меню.
- Нажмите Add Credential, выберите из списка «Telegram API».
- Заполните поля:
- Access Token: Вставьте токен, полученный от BotFather.
- Bot Name: Укажите username вашего бота (опционально, для удобства).
- Нажмите «Save».
- Выберите созданные ранее учетные данные.
- В поле Chat ID укажите полученный ранее идентификатор.
- В поле Text введите сообщение. Можно использовать выражения n8n для динамического контента (например,
{{$now}}для текущей даты). - Дополнительно можно настроить Parse Mode (HTML или Markdown) для форматирования, отключить уведомление (Disable Notification) и др.
- Добавьте ноду «Webhook».
- Настройте метод GET для установки вебхука и метод POST для приема обновлений.
- Сгенерируйте или задайте уникальный Path (например,
telegram-webhook). - После активации workflow скопируйте полный Webhook URL (отображается в ноде).
- Это ключевая нода для приема событий. Добавьте ноду «Telegram Trigger».
- В настройках выберите Credential и Event: Message.
- В поле Update Type выберите «webhook».
- В поле Webhook URL вставьте URL, скопированный из ноды Webhook на шаге 1.
- Нажмите на кнопку Set Webhook в настройках ноды. Это отправит запрос к API Telegram, сообщая ему, куда перенаправлять входящие обновления.
- Текст команды (например,
/start,/help). Данные доступны по пути$json.message.text. - Тип чата (private, group).
- Тип контента (текст, фото, документ).
- Правило 1: Операция «String Contains» → Значение:
/start. Ветка: Отправка приветственного сообщения. - Правило 2: Операция «String Contains» → Значение:
/help. Ветка: Отправка списка команд. - Правило по умолчанию: Обработка любого другого текста (например, эхо-бот или диалог).
- Уведомления из мониторинговой системы: Нода «HTTP Request» получает webhook от системы мониторинга (например, Zabbix), данные преобразуются в удобочитаемый формат в ноде «Function», и результат отправляется в Telegram чат оператора.
- Синхронизация задач: Пользователь отправляет боту текст «Добавить задачу: купить молоко». n8n парсит сообщение, извлекает текст задачи и с помощью ноды «Todoist» создает новую задачу в проекте. Затем бот отправляет подтверждение.
- Запрос данных из БД: По команде
/reportнода «PostgreSQL» выполняет SQL-запрос, результат форматируется в таблицу (Markdown) и отправляется пользователю. - Форматирование: В ноде «Send Message» выберите в Parse Mode значение «HTML» или «MarkdownV2». Затем используйте соответствующие теги или синтаксис в тексте сообщения (например,
<b>жирный текст</b>для HTML). - Изображение: Используйте операцию «Send Photo». В поле «File» можно указать:
- Прямую публичную URL-ссылку на изображение.
- Binary Data, если файл был загружен или сгенерирован в предыдущих нодах workflow (например, после ноды «Read Binary Files» или «HTTP Request»).
file_idиз ранее полученного в Telegram файла.
После успешного создания BotFather предоставит вам токен доступа в формате 1234567890:ABCdefGHIjklMnOpQRstUvWxyz. Этот токен является секретным ключом для управления вашим ботом через API. Сохраните его в надежном месте.
2. Получение Chat ID
Для отправки сообщений в конкретный чат или канал n8n необходимо знать его идентификатор (Chat ID). Самый простой способ его получить:
Настройка ноды Telegram в n8n
В n8n взаимодействие с Telegram осуществляется через специализированные ноды (узлы). Для их корректной работы необходимо сначала настроить учетные данные (Credentials).
Создание рабочих процессов (Workflows)
Рабочий процесс в n8n — это цепочка нод, которые выполняются последовательно или параллельно. Для Telegram бота обычно создаются два типа workflow: для отправки сообщений и для получения и обработки сообщений от пользователей.
Workflow 1: Отправка сообщения (триггер по расписанию или событию)
Этот workflow инициируется самим n8n (например, по расписанию) и отправляет сообщение в Telegram.
| Шаг | Нода | Действия и настройки |
|---|---|---|
| 1 | Schedule Trigger (или любой другой триггер) | Настройте триггер, который запустит процесс. Например, нода «Schedule Trigger» позволяет отправлять сообщения ежедневно в заданное время. |
| 2 | Telegram → «Send Message» |
|
Workflow 2: Прием и ответ на сообщения пользователей (Webhook)
Это более сложный и наиболее полезный сценарий. Бот будет реагировать на команды и сообщения от пользователей в реальном времени. Для этого используется механизм Webhook.
| Шаг | Нода | Действия и настройки |
|---|---|---|
| 1 | Webhook (Trigger) |
|
| 2 | Function или IF (Опционально) | Нода «Function» позволяет написать код (JavaScript) для установки вебхука в Telegram API. Альтернативно, можно использовать ноду «HTTP Request» для той же цели. |
| 3 | Telegram Trigger |
|
| 4 | Switch или IF (Маршрутизация) | Эта нода анализирует входящее сообщение и направляет поток выполнения по разным веткам. Чаще всего проверяют:
|
| 5 | Telegram → «Send Message» (Ответ) | В каждой ветке маршрутизатора добавьте ноду «Send Message». Важно правильно указать Chat ID, который должен быть динамическим. Используйте выражение n8n: {{$json.message.chat.id}}. Текст ответа также можно формировать динамически на основе полученных данных. |
Обработка различных типов контента и команд
Telegram бот может работать не только с текстом. Ниже приведены примеры обработки разных событий.
Обработка команд
Команды — это сообщения, начинающиеся со слеша (например, /start). В ноде Switch настройте правила (Rules) для проверки поля $json.message.text.
Обработка файлов и медиа
Если пользователь отправляет фото или документ, эта информация содержится в других полях входящего JSON. Например, путь к идентификатору фото: $json.message.photo (массив объектов). Для его обработки может потребоваться нода «Function» для извлечения file_id и последующей загрузки файла через API Telegram.
Интеграция с внешними сервисами
Мощь n8n раскрывается при интеграции Telegram с другими приложениями. Примеры сценариев:
Развертывание и эксплуатация
Для постоянной работы бота workflow должен быть активен. В n8n это означает, что workflow должен быть в состоянии Active (переключатель в правом верхнем углу редактора). Если вы используете webhook-триггер, его необходимо установить только один раз. При перезапуске n8n или деактивации workflow webhook в Telegram может остаться активным. В этом случае можно установить его заново или удалить через вызов API deleteWebhook.
Для промышленной эксплуатации рекомендуется развернуть n8n на собственном сервере или облачном хостинге (например, на DigitalOcean, AWS). Важно обеспечить безопасность: использовать HTTPS для webhook (Telegram API требует этого), защищать доступ к инстансу n8n и хранить учетные данные в его встроенном зашифрованном хранилище.
Ответы на часто задаваемые вопросы (FAQ)
Вопрос 1: Почему мой бот не отвечает на сообщения в групповом чате?
Ответ: По умолчанию бот не видит сообщения в группе. Необходимо добавить бота в группу, а затем выдать ему права администратора (хотя бы с минимальными разрешениями). Кроме того, в групповом чате входящие сообщения будут иметь поле "chat": {"id": -123456789} (отрицательный ID). Убедитесь, что ваш workflow использует этот динамический ID для ответа.
Вопрос 2: Как обрабатывать нажатия на инлайн-кнопки (Inline Keyboard)?
Ответ: Для обработки нажатий на инлайн-кнопки в ноде «Telegram Trigger» необходимо выбрать событие Callback Query вместо Message. Данные о нажатии будут содержаться в объекте $json.callback_query. Текст исходного сообщения можно найти по пути $json.callback_query.message, а данные кнопки — в $json.callback_query.data. После обработки часто требуется ответить на callback запрос с помощью метода answerCallbackQuery, чтобы убрать индикатор загрузки у пользователя.
Вопрос 3: Telegram требует HTTPS для webhook. Что делать при локальной разработке?
Ответ: Для локальной разработки можно использовать туннели, которые создают публичный HTTPS-адрес для вашего локального сервера. Популярные инструменты: ngrok (команда ngrok http 5678, если n8n работает на порту 5678) или cloudflared. Полученный от них HTTPS URL нужно указать в качестве Webhook URL в ноде «Telegram Trigger».
Вопрос 4: Как отправить сообщение с форматированием или изображением?
Ответ:
Вопрос 5: Как обеспечить безопасность webhook от поддельных запросов?
Ответ: Telegram позволяет установить секретный токен в параметре secret_token при установке webhook. Затем этот токен будет передаваться в заголовке X-Telegram-Bot-Api-Secret-Token с каждым запросом. В n8n вы можете добавить ноду «Webhook» (не триггер, а обычную) перед «Telegram Trigger», проверить этот заголовок с помощью ноды «IF» и продолжить выполнение только в случае совпадения.
Вопрос 6: Можно ли создать многофункционального бота в одном workflow?
Ответ: Да, но для лучшей поддерживаемости и читаемости рекомендуется разделять логику. Один workflow может обрабатывать входящие сообщения и команды через ноду Switch с множеством веток. Однако если функциональность сильно различается (например, админ-панель и публичные команды), лучше создать отдельные workflow, каждый со своим webhook-триггером, но использовать одного и того же бота. В этом случае вам потребуется менять webhook URL при переключении, что неудобно. Более правильный подход — оставить один входящий webhook и маршрутизировать задачи внутри n8n, активируя другие workflow через ноду «Execute Workflow».
Комментарии