N8n telegram file

N8n и работа с файлами в Telegram: полное руководство

N8n — это инструмент для автоматизации рабочих процессов с открытым исходным кодом, который позволяет соединять различные приложения и сервисы. Интеграция N8n с Telegram открывает широкие возможности для автоматизации обмена сообщениями, уведомлений и, что особенно важно, управления файлами. Узел (нода) Telegram в n8n является двунаправленным: он может как отправлять сообщения и файлы в Telegram, так и принимать их, выступая в роли бота. Эта статья детально рассматривает все аспекты работы с файлами через связку n8n и Telegram.

Настройка Telegram-бота для интеграции с n8n

Перед созданием рабочих процессов (workflows) в n8n, необходимо создать и настроить бота в Telegram. Этот процесс стандартен и выполняется через BotFather.

    • Откройте Telegram и найдите официального бота @BotFather.
    • Отправьте команду /newbot и следуйте инструкциям: задайте имя бота и его username (должен заканчиваться на ‘bot’).
    • После создания бот получит уникальный токен доступа (например, 1234567890:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw). Этот токен является ключом для аутентификации n8n в API Telegram.
    • Для приема входящих сообщений и файлов необходимо получить chatId. Проще всего это сделать, отправив любое сообщение созданному боту, а затем выполнив GET-запрос к API Telegram: https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates. В ответе JSON будет содержаться поле chat.id.

    Отправка файлов из n8n в Telegram

    Узел «Telegram» в n8n в режиме отправки сообщения («Send Message») поддерживает несколько способов отправки файлов. Ключевой параметр — «Attachment».

    Способы загрузки файла в поле «Attachment»:

    • Прямая ссылка (URL): Самый распространенный метод. n8n загрузит файл по публичному URL и отправит его в Telegram. Подходит для файлов, уже размещенных в интернете (облачные хранилища, CDN).
    • Двоичные данные (Binary Data): Если предыдущий узел в workflow (например, «Read Binary File», «HTTP Request», или узел другого сервиса типа Google Drive) выводит двоичные данные, их можно напрямую передать в узел Telegram. В этом случае поле «Attachment» заполняется через выражение, ссылающееся на двоичные данные предыдущего узла.
    • Локальный путь к файлу: В некоторых конфигурациях n8n, особенно при самостоятельном развертывании, можно использовать путь к файлу в локальной файловой системе сервера, где работает n8n.

    Типы отправляемых файлов и соответствующие методы API Telegram:

    В зависимости от типа файла и выбранного метода отправки, Telegram API использует разные параметры. N8n абстрагирует эту сложность, но понимание различий полезно для отладки.

    Тип контента Метод Telegram API Поддерживаемые форматы (пример) Комментарий в n8n
    Фото / Изображение sendPhoto JPEG, PNG, WEBP Используйте опцию «Send as Photo» для сжатия. Или «Send as File» для отправки без изменений.
    Документ (Любой файл) sendDocument PDF, ZIP, DOCX, XLSX, TXT и др. Универсальный метод. Имя файла берется из URL или может быть задано в двоичных данных.
    Видео sendVideo MP4, MOV Можно указать длительность, ширину, высоту.
    Аудио sendAudio MP3, M4A, OGG Можно указать длительность, исполнителя, название трека.
    Голосовое сообщение sendVoice OGG (кодек OPUS) Специфичный для голосовых сообщений формат.

    Прием и обработка файлов из Telegram в n8n

    Для создания workflow, реагирующего на файлы, отправленные боту, используется триггерный узел «Telegram Trigger». Он настраивается на события «message» или «channel post». При получении файла от пользователя, n8n получает от Telegram объект сообщения, содержащий метаданные и, в большинстве случаев, ссылку для скачивания файла.

    Структура входящих данных о файле:

    Данные приходят в формате JSON. Для файлов-документов ключевая информация находится по пути: message.document. Пример:

    • message.document.file_id: Уникальный идентификатор файла в системе Telegram, необходим для скачивания.
    • message.document.file_name: Исходное имя файла.
    • message.document.mime_type: MIME-тип файла (например, application/pdf).
    • message.document.file_size: Размер файла в байтах.

    Для получения самого файла (его двоичных данных) в n8n необходимо в следующем узле выполнить запрос к API Telegram. Это делается с помощью узла «HTTP Request».

    Алгоритм скачивания полученного файла:

    1. Узел «Telegram Trigger» получает сообщение с файлом.
    2. Данные, включая file_id, передаются в узел «HTTP Request».
    3. В узле «HTTP Request» настраивается GET-запрос на URL: https://api.telegram.org/bot<ВАШ_ТОКЕН>/getFile?file_id={{ $json.message.document.file_id }}.
    4. Ответ от /getFile содержит путь к файлу (file_path) на серверах Telegram.
    5. Следующий узел «HTTP Request» (или тот же, с пост-обработкой) выполняет запрос для скачивания по URL: https://api.telegram.org/file/bot<ВАШ_ТОКЕН>/{{ $json.result.file_path }}. Этот узел должен быть настроен на возврат двоичных данных («Binary Data»).
    6. Полученные двоичные данные можно сохранить в облачное хранилище (Google Drive, S3), обработать (конвертировать, распарсить) или отправить в другую систему.

    Практические примеры workflow

    Пример 1: Ежедневная отправка отчета в формате PDF в Telegram-чат

    • Триггер: «Schedule Trigger» (срабатывает каждый день в 9:00).
    • Действие: Узел, генерирующий PDF-отчет (например, «Google Sheets» + конвертация в PDF через внешний сервис или код). На выходе — двоичные данные PDF или ссылка на него.
    • Действие: Узел «Telegram» (Send Message). В поле «Chat ID» указывается ID группового чата или канала. В поле «Attachment» передаются двоичные данные из предыдущего узла. «Message Text» содержит пояснительный текст к отчету.

    Пример 2: Сохранение всех фотографий, отправленных боту, в Google Drive

    • Триггер: «Telegram Trigger» (событие «message»).
    • Условие: Узел «IF» проверяет, существует ли message.photo (массив с разными размерами). Если да — workflow продолжается.
    • Действие: «HTTP Request» для получения file_path самого большого фото (file_id из последнего элемента массива message.photo).
    • Действие: Второй «HTTP Request» для скачивания фото по file_path (возврат Binary Data).
    • Действие: Узел «Google Drive» (Upload). В поле «Binary Data» передаются скачанные двоичные данные. Указывается папка назначения и имя файла (можно использовать message.date для уникальности).

    Пример 3: Конвертация голосового сообщения в текст

    • Триггер: «Telegram Trigger» (событие «message»).
    • Условие: Узел «IF» проверяет наличие message.voice.
    • Действие: Цепочка узлов «HTTP Request» для скачивания OGG-файла голосового сообщения (аналогично примеру 2).
    • Действие: Узел сервиса распознавания речи (например, «Google Cloud Speech-to-Text» или «OpenAI Whisper» через код). На вход подаются двоичные данные аудио.
    • Действие: Узел «Telegram» (Send Message) для отправки расшифрованного текста обратно пользователю (в chat.id из исходного сообщения).

Ограничения и лучшие практики

Аспект Ограничение / Рекомендация
Размер файлов Telegram API имеет лимиты на размер файла (обычно до 2 ГБ для документов, но для фото/видео часто меньше — 10-50 МБ). N8n как промежуточное звено должен иметь достаточные ресурсы для обработки и временного хранения больших файлов.
Токен безопасности Токен бота и chatId являются конфиденциальными данными. Всегда используйте для их хранения Credentials (секреты) в n8n, а не вставляйте напрямую в поля узлов.
Таймауты Загрузка больших файлов может занимать время. Убедитесь, что в настройках узлов «HTTP Request» и «Telegram» установлены адекватные значения таймаута (Timeout).
Имена файлов При отправке двоичных данных имя файла можно задать в свойствах Binary Data. При отправке по URL имя часто берется из конца ссылки. Для контроля используйте параметр «File Name» в узле Telegram или настройте его в узле, предоставляющем двоичные данные.
Webhook для триггера Для работы «Telegram Trigger» в n8n Cloud или при наличии публичного IP-адреса используется режим Webhook. В противном случае используется режим Long Polling, который может иметь небольшую задержку.

Ответы на часто задаваемые вопросы (FAQ)

Как отправить один и тот же файл нескольким пользователям?

Используйте узел «Split In Batches» или «Loop» для итерации по списку chatId. Внутри цикла поместите узел «Telegram» (Send Message), который будет отправлять файл. Для оптимизации скачайте файл в двоичном формате один раз перед циклом и используйте эти данные в каждой итерации, чтобы не загружать файл повторно.

Почему файл отправляется как «Document», а не как «Photo», даже если это изображение?

В узле Telegram при выборе опции «Send as File» или при использовании метода sendDocument API файл всегда отправляется как документ. Чтобы изображение отображалось в чате как фото (с предпросмотром), необходимо либо использовать опцию «Send as Photo», либо убедиться, что в поле «Media Type» выбрано «Photo», а файл имеет правильный формат (JPEG, PNG).

Как обработать файл, если я не знаю его тип заранее?

Во входящем сообщении проверяйте наличие полей: message.document, message.photo, message.video и т.д. Используйте узел «IF» или «Switch» для ветвления workflow в зависимости от типа полученного медиафайла. MIME-тип можно узнать из message.document.mime_type.

Можно ли отправлять файлы в Telegram-канал?

Да. Для этого в качестве «Chat ID» укажите публичный username канала в формате @channelusername или его внутренний ID (обычно начинается с -100). Чтобы бот мог отправлять сообщения в канал, его необходимо добавить в канал в качестве администратора.

Каков лимит на отправку сообщений с файлами?

Telegram устанавливает лимиты на частоту отправки сообщений от бота (примерно 30 сообщений в секунду в групповые чаты и чаты с пользователями). При массовой рассылке больших файлов необходимо встраивать задержки между сообщениями с помощью узла «Wait».

Как отправить файл, который был скачан через «HTTP Request» и хранится в Binary Data?

В узле Telegram в поле «Attachment» выберите «Binary Data». Затем через выражение укажите путь к двоичным данным предыдущего узла, например: {{ $node['HTTP Request'].binary.data }}. Убедитесь, что в предыдущем узле свойство «Binary Property» установлено (обычно «data»).

Почему триггер не срабатывает на файлы?

1. Убедитесь, что в узле «Telegram Trigger» выбраны правильные события («message», «channel_post»). 2. Проверьте, что бот действительно добавлен в чат и может видеть сообщения. 3. Если используется Webhook, убедитесь, что ваш endpoint n8n доступен из публичного интернета и правильно настроен в API Telegram (чаще это делает сам n8n при активации workflow). 4. Проверьте, не исчерпаны ли лимиты использования бесплатной версии n8n Cloud.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *