Боты и автоматизация2026-08-128 минРедакция Submarine School

Как сделать, чтобы боту приходили сообщения: Telegram 2026

Как сделать, чтобы боту приходили сообщения: Telegram 2026

Чтобы бот получал сообщения, его программа должна забирать входящие Update одним из двух способов: через getUpdates или через webhook. Для локальной разработки проще polling, для постоянно работающего публичного сервера удобен webhook. Одновременно использовать оба способа для одного токена нельзя.

Что именно приходит боту

Telegram передаёт не только текст, а JSON-объект Update. В нём может быть message, edited_message, channel_post, callback_query и другие поля. Поэтому обработчик, который ждёт только message.text, закономерно пропустит фотографию, нажатие inline-кнопки или публикацию канала.

Бот не может первым начать личный разговор. Пользователь должен открыть чат и отправить сообщение или добавить бота в группу. Это ограничение описано во введении Telegram для разработчиков (Telegram). Статья посвящена входящим событиям. Если нужен запуск исходящих сообщений по времени, это отдельная задача из инструкции по расписанию и событиям.

Защитите токен до первой проверки

Токен BotFather даёт контроль над ботом. Telegram рекомендует хранить его как пароль и не передавать посторонним (официальный tutorial). Не вставляйте токен в скриншоты, репозиторий, адрес публичного сервиса проверки или текст ошибки.

  • Храните токен в переменной окружения или хранилище секретов платформы.
  • Не печатайте полный URL Bot API в логи: токен входит в путь запроса.
  • Закройте доступ к файлу конфигурации и исключите его из Git.
  • Если токен попал в публикацию или чат, отзовите его через BotFather и обновите секрет на сервере.

Не начинайте диагностику с удаления webhook или очистки очереди. Сначала снимите безопасное состояние через getMe и getWebhookInfo, иначе можно потерять полезные признаки сбоя.

Бот приносит пользу, когда он работает, а не когда про него прочитали. На бесплатном эфире показывают, как собрать и запустить бота с помощью ИИ.

Посмотреть запуск бота

Выберите один способ получения Update

Polling означает, что программа сама регулярно вызывает getUpdates. Он подходит для разработки на компьютере: не нужен публичный домен и входящий HTTPS. Webhook означает, что Telegram отправляет POST на ваш публичный адрес сразу после события. Официальное руководство сравнивает getUpdates как pull и webhook как push (Telegram Webhook Guide).

  • Выберите getUpdates, если программа запускается локально, вы отлаживаете обработчик или пока нет публичного HTTPS-адреса.
  • Выберите webhook, если приложение постоянно работает на сервере, умеет принимать HTTPS POST и должно быстро реагировать без цикла опроса.
  • Не запускайте две копии polling с одним токеном: они будут конкурировать за одну очередь.
  • Не включайте webhook поверх работающего polling без запланированного переключения и проверки очереди.

Bot API прямо указывает: пока установлен исходящий webhook, получать обновления через getUpdates нельзя (Telegram Bot API). Это главный диагностический признак, если локальный код внезапно перестал видеть сообщения после настройки сервера.

По теме: Как создать бота поддержки в Telegram в 2026: заявки и оператор

Минимальная проверка через getUpdates

Сначала вызовите getMe из своей программы и убедитесь, что поле ok истинно, а имя совпадает с нужным ботом. Затем проверьте getWebhookInfo. Если поле url непустое, polling не заработает, пока webhook установлен.

Для теста запустите один polling-процесс, отправьте боту новое личное сообщение и выведите не весь объект с данными пользователя, а безопасный минимум: update_id, тип события, наличие текста и тип чата. Пример логики без привязки к библиотеке:

updates = bot.get_updates(timeout=30, allowed_updates=["message"])
for update in updates:
    print(update.update_id, update.message.chat.type, bool(update.message.text))
    handle(update)
    next_offset = update.update_id + 1

Параметр offset подтверждает обработанные события: обновление считается подтверждённым, когда следующий вызов использует offset больше его update_id (Telegram Bot API). Сохраняйте следующий offset после успешной обработки. Если увеличить его заранее, упавший обработчик может потерять событие; если не увеличивать, бот будет повторять старые события.

Бот перестаёт быть игрушкой, когда берёт на себя рутину: отвечает, записывает, напоминает. На бесплатном вебинаре по вайбкодингу собирают такого помощника с помощью ИИ и показывают, как подключить его к своим задачам. Без опыта в коде.

Отдать боту рутину

Настройте webhook с проверкой источника

Webhook требует публичного HTTPS-адреса, на который Telegram может отправить POST. Официальный guide перечисляет поддержку TLS 1.2 и выше, а также портов 443, 80, 88 и 8443 (Telegram Webhook Guide). Если платформа даёт свой HTTPS-домен, отдельный домен покупать не обязательно, но адрес должен быть стабильно доступен извне.

При вызове setWebhook задайте secret_token. Тогда Telegram добавит заголовок X-Telegram-Bot-Api-Secret-Token, а ваш обработчик должен сравнить его с секретом до разбора тела. Эта возможность описана в Bot API (Telegram Bot API). Сам секрет webhook храните отдельно от токена бота.

POST /telegram/webhook
if request.header["X-Telegram-Bot-Api-Secret-Token"] != WEBHOOK_SECRET:
    return 403
update = parse_json(request.body)
enqueue(update)
return 200

Сначала быстро проверьте секрет и поставьте событие во внутреннюю очередь, затем верните успешный HTTP-ответ. Telegram повторяет доставку после ответа вне диапазона 2XY, поэтому тяжёлая обработка до ответа создаёт повторы и растущую очередь (Telegram Bot API). Дедупликацию удобно строить по update_id.

По теме: Как сделать ботов через консоль в 2026: кабинет платформы и терминал

Диагностика, если сообщения не приходят

Идите сверху вниз. Каждый шаг отвечает на один вопрос и не разрушает очередь.

  1. Проверьте getMe: токен действителен и относится к нужному боту.
  2. Проверьте getWebhookInfo: какой URL установлен, есть ли pending_update_count, last_error_date и last_error_message.
  3. Отправьте новое личное текстовое сообщение именно этому боту, а не старое сообщение до запуска теста.
  4. Для polling убедитесь, что webhook пуст и работает ровно один процесс с сохранённым offset.
  5. Для webhook проверьте публичный HTTPS, маршрут POST, секретный заголовок и быстрый ответ 2xx.
  6. Сравните тип Update с фильтром allowed_updates и ветками обработчика.
  7. После получения события проверьте внутреннюю очередь и журнал обработчика, не выводя токены и содержимое личных сообщений.

Если личные сообщения приходят, а групповые нет, проверьте, добавлен ли бот в нужную группу, хватает ли прав и включён ли Privacy Mode. По умолчанию бот в группе получает только релевантные ему сообщения, команды и ответы, а не весь разговор (Telegram). Для управления группой полезен отдельный разбор прав и настроек бота.

Безопасное переключение между polling и webhook

Перед переключением остановите старый потребитель и запишите последний обработанный update_id. Проверьте состояние очереди через getWebhookInfo или текущий polling. Только затем снимайте старый режим и включайте новый. Не используйте drop_pending_updates, если владелец процесса не подтвердил, что накопленные сообщения можно потерять.

После переключения отправьте одно контрольное сообщение и проверьте цепочку: Telegram принял событие, транспорт доставил его, приложение распознало тип, обработчик записал результат. Если бот получает сообщение, но не отвечает, переходите к диагностике автоответов. Это уже следующий слой, исходящий sendMessage, а не получение Update.

По теме: Как создать бота для видео в Telegram в 2026: кружки и нарезка

Критерии готового приёма сообщений

  • Токен отсутствует в коде, логах и публичных инструментах.
  • Выбран только один транспорт: polling или webhook.
  • Контрольное сообщение создаёт новый update_id.
  • Обработчик различает текст, медиа, callback и групповые события.
  • Повторная доставка не создаёт дубль результата.
  • Для webhook проверяется секретный заголовок и возвращается быстрый 2xx.
  • Есть безопасный журнал ошибок и понятный способ перезапуска.

Частые вопросы

Почему getUpdates возвращает пустой результат?

Проверьте, не установлен ли webhook, отправлено ли новое сообщение нужному боту и не забрал ли событие другой polling-процесс. Также проверьте offset и allowed_updates.

Почему webhook настроен, но pending_update_count растёт?

Telegram не получает успешный ответ от вашего адреса. Смотрите last_error_message, сертификат, маршрут POST, таймаут приложения и код ответа.

Можно ли принимать сообщения без сервера?

Да, во время разработки используйте getUpdates на своём компьютере. Для круглосуточной работы программа должна постоянно выполняться на доступной машине.

Почему бот не видит обычные сообщения группы?

Частая причина, Privacy Mode или недостаточные права. Сначала проверьте команду или ответ на сообщение бота, затем согласованно настройте режим через BotFather.

Нужно ли удалять накопленные Update при ошибке?

Обычно нет. Сначала исправьте транспорт и обработайте очередь с дедупликацией. Удаление оправдано только при подтверждённом решении потерять старые события.

На бесплатном вебинаре вы увидите, как собрать Telegram-бота через вайбкодинг, связать входящие события с логикой и проверить результат по шагам.

Записаться на вебинар
Разборы, кейсы и фишки вайбкодинга каждую неделю в телеграм-канале «Яков вайбкодит».
Первый проект с ИИ: живой разбор, бесплатно Занять место