Чтобы бот пересылал сообщения в Telegram, он должен получить входящее обновление, проверить источник и вызвать forwardMessage или copyMessage для разрешённого чата. Первый метод сохраняет ссылку на исходное сообщение, второй создаёт копию без неё. Сначала соберите маршрут для одного тестового сообщения, затем добавляйте фильтры, журнал и защиту от повторов.
Выберите пересылку или копирование
Официальный Bot API определяет forwardMessage как пересылку сообщения с сохранением происхождения. Служебные сообщения и защищённый контент переслать нельзя. Метод copyMessage создаёт копию без ссылки на оригинал и также имеет ограничения по типам сообщений. Актуальные параметры перечислены в документации Telegram Bot API.
Правило маршрутизации: сначала белый список источников и получателей, потом действие. Бот не должен пересылать любой входящий текст в любой переданный chat_id.
Карта результата
- Исходное условие: бот создан, токен хранится только в секретах, известны исходный и целевой чаты.
- Результат: разрешённое сообщение один раз появляется в целевом чате.
- Проверка: тесты для текста, фото, защищённого сообщения и повтора update_id.
- Сбои: нет прав в чате, неверный chat_id, webhook не отвечает, повторная доставка.
- Ограничение: бот видит только доступные ему сообщения и не обходит защиту контента.
Бот приносит пользу, когда он работает, а не когда про него прочитали. На бесплатном эфире показывают, как собрать и запустить бота с помощью ИИ.
Посмотреть запуск ботаПолучите обновления одним способом
Telegram поддерживает getUpdates и webhook, но одновременно они не работают. В разделе Getting updates указано, что входящие обновления хранятся ограниченное время, а getUpdates нельзя использовать при активном webhook. Для рабочего бота удобен HTTPS webhook с секретным заголовком, для первого локального теста можно применить long polling.
- Добавьте бота в исходный чат и выдайте только необходимые права.
- Получите тестовое обновление и запишите chat_id без публикации токена.
- Задайте белый список исходных chat_id и один целевой chat_id в конфигурации.
- Выберите
forwardMessageилиcopyMessageпо требованию к происхождению. - Сохраните обработанный update_id до подтверждения успешной доставки.
- Проверьте код ответа Bot API и запишите очищенное описание ошибки.
- Повторите тест с запрещённым источником и убедитесь, что пересылки нет.
По теме: Как сделать приветствие в боте Telegram в 2026
Минимальный безопасный пример
if update.update_id in processed:
return
msg = update.message
if msg.chat.id not in ALLOWED_SOURCE_IDS:
return
result = bot.forward_message(
chat_id=TARGET_CHAT_ID,
from_chat_id=msg.chat.id,
message_id=msg.message_id,
)
if result:
processed.add(update.update_id)
Пример показывает порядок, а не готовую библиотеку: сначала дедупликация и проверка источника, затем отправка. processed должен храниться устойчиво, если процесс перезапускается. Не отмечайте update_id завершённым до успешного ответа, иначе временный сетевой сбой потеряет сообщение. Но и не повторяйте бесконечно ошибки доступа, отправляйте их в отдельный журнал.
Бот перестаёт быть игрушкой, когда берёт на себя рутину: отвечает, записывает, напоминает. На бесплатном вебинаре по вайбкодингу собирают такого помощника с помощью ИИ и показывают, как подключить его к своим задачам. Без опыта в коде.
Отдать боту рутинуПрава, privacy mode и тип чата
В личном чате бот получает сообщения, отправленные ему. В группе доступ зависит от роли и настроек privacy mode. Не отключайте privacy mode просто ради удобства, если бот должен реагировать только на команды. Для канала бот обычно должен быть администратором с нужными правами. Проверяйте точный сценарий отдельным тестовым чатом, не рабочей группой.
По теме: Как сделать бота-предложку в Telegram: схема и проверка 2026
Диагностика по коду ошибки
400 Bad Request: проверьте chat_id, message_id, тип сообщения и параметры метода.403 Forbidden: бот не состоит в чате, заблокирован или не имеет нужного права.- Сообщение приходит дважды: update_id отмечается слишком поздно или webhook повторяет запрос после неуспешного HTTP-ответа.
- Текст приходит, фото нет: обработчик читает только поле text или выбранный тип нельзя переслать.
- Защищённый материал не пересылается: это ожидаемое ограничение Bot API, не обходите его.
Если бот пока не получает входящие сообщения, сначала пройдите диагностику обновлений Telegram. Создание и токен разобраны в гайде по первому Telegram-боту. Для маршрута заявка плюс оператор полезна архитектура бота поддержки.
Защитите данные и журнал
Не пишите в лог полный текст сообщений, если для диагностики достаточно update_id, chat_id и кода результата. Ограничьте срок хранения и доступ к журналу. Токен бота держите в переменной окружения или хранилище секретов, не в клиентском JavaScript и не в репозитории. При утечке перевыпустите токен через BotFather и остановите старый маршрут.
По теме: Как сделать оплату в боте: безопасная схема и проверка в 2026
Когда способ не подходит
Прямая пересылка не подходит, если сообщение нужно согласовать, обезличить или классифицировать перед отправкой. Тогда сохраняйте заявку в очереди, показывайте оператору предпросмотр и отправляйте только после решения. Для больших потоков добавьте ограничение скорости и очередь, но не включайте массовую рассылку без согласия получателей.
Частые вопросы
Почему бот не пересылает из группы?
Проверьте, получает ли он update, разрешён ли источник и хватает ли прав. Сначала смотрите вход, затем вызов метода.
Чем copyMessage отличается от forwardMessage?
Копия не содержит ссылки на исходное сообщение. Ограничения поддерживаемых типов у методов различаются.
Как избежать дублей?
Храните обработанные update_id и возвращайте webhook успешный HTTP-ответ только после управляемой обработки.
На бесплатном вебинаре по вайбкодингу вы соберёте логику бота, настроите проверяемый маршрут сообщений и научитесь находить сбой по этапам.
Записаться на вебинар