N8n: Автоматизация обработки входящих сообщений Telegram
N8n — это платформа с открытым исходным кодом для оркестрации рабочих процессов (workflow automation), которая позволяет соединять различные приложения и сервисы между собой. Одной из ключевых возможностей является интеграция с мессенджерами, в частности с Telegram. Чтение и автоматическая обработка входящих сообщений из Telegram-чатов или каналов открывает широкие возможности для автоматизации поддержки пользователей, модерации контента, сбора данных и запуска последующих процессов в других системах.
Принцип работы и основные компоненты
Для чтения сообщений Telegram в n8n используется узел (node) «Telegram Trigger». Это триггерный узел, который активирует весь рабочий процесс при наступлении определенного события в Telegram. В отличие от узлов, требующих опроса (polling), «Telegram Trigger» работает на основе webhook, что обеспечивает мгновенную реакцию на входящие сообщения.
Основные события, на которые может реагировать узел:
- Message: Любое входящее сообщение (текст, изображение, документ, голосовое сообщение и т.д.).
- Callback Query: Нажатие на inline-кнопку в сообщении.
- Channel Post: Новое сообщение в канале.
- Edited Message / Edited Channel Post: Редактирование существующего сообщения.
- Откройте Telegram и найдите официального бота @BotFather.
- Отправьте команду
/newbotи следуйте инструкциям: укажите имя бота (отображаемое имя) и username (уникальный идентификатор, оканчивающийся на ‘bot’). - После успешного создания BotFather предоставит вам токен доступа (например,
1234567890:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw). Этот токен является секретным ключом для управления ботом через API. - Добавьте созданного бота в нужную группу или канал. Для личных сообщений просто начните диалог с ботом.
- Отправьте в чат или канал любое сообщение.
- Откройте в браузере следующую ссылку, подставив ваш токен:
https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates. - В ответе JSON найдите объект
"chat". Параметр"id"внутри него — это искомый Chat ID. Для каналов он обычно отрицательный (например,-1001234567890). - В поле Credential for Telegram API создайте новые учетные данные, выбрав «Telegram Bot API». Введите полученный токен бота.
- В выпадающем списке Updates выберите тип события, например, «message».
- В поле Chat ID укажите полученный идентификатор. Оставьте поле пустым, если бот должен читать сообщения из всех чатов, где он присутствует.
- Для работы в режиме webhook необходимо, чтобы ваш инстанс n8n был доступен из интернета по HTTPS. В настройках n8n (файл
~/.n8n/config) укажите корректныеWEBHOOK_URLи, при необходимости, настройте TLS. Узел автоматически зарегистрирует webhook при активации workflow. - Узел 1: «Telegram Trigger» (событие: message).
- Узел 2: «IF» (Condition). Настраиваются правила:
- Если
message.textсодержит слово «цена», то выполняется ветка с отправкой прайс-листа (узел «Telegram» -> Send Message). - Если
message.textсодержит нецензурное слово (из списка), то сообщение пересылается в чат модераторов (узел «Telegram» -> Send Message), а в исходный чат отправляется предупреждение. - В остальных случаях — отправляется стандартный ответ «Спасибо за сообщение. Наш менеджер свяжется с вами.».
- Если
- Узел 1: «Telegram Trigger».
- Узел 2: «Google Sheets» (Create Row). В качестве данных для строки используются:
- Timestamp:
{{$json.message.date}}(после преобразования). - Client:
{{$json.message.from.first_name}} - Request:
{{$json.message.text}} - Chat ID:
{{$json.message.chat.id}}
- Timestamp:
- Узел 1: «Telegram Trigger».
- Узел 2: «Code» (для парсинга текста и извлечения названия, описания, приоритета).
- Узел 3: «Trello» (Create Card) или «Jira» (Create Issue). Данные из предыдущего узла передаются в поля новой карточки.
- Изображения и документы: Данные о файле хранятся в
message.photo(массив с разными размерами) илиmessage.document.file_id. Чтобы скачать файл, в другом узле workflow используйте узел «Telegram» с операцией «Download». Ему необходимо передатьfile_idи путь для сохранения. После этого файл можно загрузить в облачное хранилище (Google Drive, S3) или обработать локально. - Голосовые сообщения: Аналогично,
message.voice.file_idиспользуется для загрузки файла в формате OGG. Для преобразования речи в текст можно интегрировать n8n с сервисами распознавания речи, такими как Google Cloud Speech-to-Text или OpenAI Whisper (через API). - Верификация источника: В настройках узла можно дополнительно проверять
chat.idв начале workflow, чтобы обрабатывать сообщения только из авторизованных чатов. - Обработка ошибок: Используйте узел «Error Trigger» или настройте ветку «Fallback Output» в узлах, чтобы обрабатывать сбои сети или API, например, повторной отправкой уведомления администратору.
- Хранение токенов: Токен бота и другие секреты должны храниться только в менеджере учетных данных n8n, а не в явном виде в настройках узлов.
Пошаговая настройка узла Telegram Trigger
Для корректной работы необходимо выполнить несколько обязательных шагов по созданию и настройке бота в Telegram.
1. Создание бота через BotFather
2. Получение Chat ID
Бот должен знать, откуда читать сообщения. Для этого необходим идентификатор чата (Chat ID).
3. Настройка узла в n8n
В редакторе n8n создайте новый workflow и добавьте узел «Telegram Trigger».
Структура и обработка данных входящего сообщения
При срабатывании триггера узел передает следующему узлу в workflow подробный объект с данными сообщения. Ключевые поля для обработки:
| Поле JSON | Тип данных | Описание и пример использования |
|---|---|---|
| message.message_id | Число | Уникальный идентификатор сообщения. Используется для сохранения в БД или создания цепочек ответов. |
| message.chat.id | Число | Chat ID отправителя. Позволяет идентифицировать источник и отправить ответ в правильный чат. |
| message.from.id, message.from.first_name | Число, Строка | ID и имя пользователя. Основа для идентификации и персонализации ответов. |
| message.text | Строка | Текст сообщения. Основное поле для парсинга команд, ключевых слов, запросов. |
| message.date | Число (Unix Timestamp) | Время отправки сообщения. Может быть преобразовано в читаемый формат узлом «Date & Time». |
| message.photo, message.document | Массив объектов | Данные о прикрепленных медиафайлах. Содержат file_id для последующей загрузки через узел «Telegram» (Download). |
Практические примеры рабочих процессов (Workflows)
Пример 1: Автоответчик и модерация по ключевым словам
Workflow считывает сообщение, анализирует текст и выполняет действия по условию.
Пример 2: Сбор заявок в Google Sheets
Сообщения из Telegram-чата заказчиков автоматически записываются в таблицу.
Пример 3: Триггер на выполнение задачи в Trello или Jira
Сообщение в специальном Telegram-чате создает карточку или задачу.
Особенности работы с различными типами контента
Текстовые сообщения обрабатываются наиболее просто. Для работы с файлами требуется дополнительный шаг.
Обеспечение безопасности и надежности
Ответы на часто задаваемые вопросы (FAQ)
Вопрос: Бот не реагирует на сообщения в группе. Что делать?
Ответ: Убедитесь в следующем:
1. Бот добавлен в группу и имеет права на чтение сообщений.
2. Вы указали правильный Chat ID группы (отрицательное число). Получите его через метод getUpdates после отправки сообщения в группу.
3. В узле «Telegram Trigger» в поле «Chat ID» указан именно этот групповой Chat ID или поле оставлено пустым.
Вопрос: Как читать сообщения из Telegram канала?
Ответ: Для этого:
1. Сделайте бота администратором канала (требуются только права на чтение сообщений).
2. В узле «Telegram Trigger» выберите событие «Channel Post».
3. Укажите Chat ID канала (начинается на -100, например, -1001234567890). Получить его можно тем же методом getUpdates после публикации поста в канале.
Вопрос: Можно ли использовать n8n Cloud для работы с Telegram без публичного сервера?
Ответ: Да, n8n Cloud предоставляет стабильный публичный URL (webhook), что избавляет от необходимости настраивать собственный сервер с HTTPS. После развертывания workflow в n8n Cloud просто настройте узел «Telegram Trigger» с вашими учетными данными бота. Webhook будет зарегистрирован автоматически.
Вопрос: Как обрабатывать нажатия на inline-кнопки?
Ответ: Используйте узел «Telegram Trigger» и выберите событие «Callback Query». Данные о нажатии будут содержаться в объекте callback_query. Поле callback_query.data хранит строку данных, которую вы назначили кнопке при ее создании. На основе этих данных можно строить логику workflow.
Вопрос: Есть ли ограничение на количество сообщений, которые может обработать n8n?
Ответ: Прямых ограничений со стороны n8n нет. Ограничения накладывает API Telegram: примерно 30 сообщений в секунду на одного бота. Для высоконагруженных чатов важно проектировать workflow эффективно, избегать длительных синхронных операций в цепочке обработки одного сообщения и использовать очереди (например, через Redis) при необходимости.
Вопрос: Как отладить workflow, если сообщения не поступают?
Ответ: Следуйте чек-листу:
1. Проверьте активность workflow (он должен быть в статусе «Active»).
2. Убедитесь, что бот запущен (не заблокирован).
3. Проверьте webhook: выполните запрос https://api.telegram.org/bot<ВАШ_ТОКЕН>/getWebhookInfo. Убедитесь, что URL корректен и был последний успешный вызов.
4. Внутри n8n используйте узел «Debug» после «Telegram Trigger», чтобы увидеть, приходят ли какие-либо данные вообще. Это поможет локализовать проблему: отсутствие входящих данных указывает на проблему с Telegram/Webhook, а их наличие — на ошибку в логике последующей обработки.
Комментарии