Long polling и webhook: где находится вход
При long polling приложение само запрашивает обновления методом getUpdates. Для такого получения сообщений входящий HTTP-домен не обязателен. При webhook Telegram отправляет HTTPS POST на указанный вами адрес. Bot API не использует оба способа получения одновременно.
Даже у бота с long polling могут отдельно существовать панель управления, публичный API, Mini App и платёжный webhook. Добавьте их в карту входов: отсутствие webhook Telegram не означает отсутствие других публичных обработчиков.
| Компонент | Что защищать | Роль RoboGuard |
|---|---|---|
| Получение через long polling | Токен, команды, права и расходы приложения | Нет входящего домена этого канала, который можно направить через HTTP-прокси. |
| Webhook Telegram | Подлинность уведомления, повтор и обработчик | Фильтрация HTTP на подключённом домене при совместимых правилах. |
| Mini App и её API | Данные входа, права пользователя и операции | Защита публичного домена; серверные проверки приложения сохраняются. |
| Панель администратора | Вход, полномочия и административные действия | Дополнительный контроль запросов к подключённому домену. |
Подробнее в первоисточнике: Telegram Bot API: получение обновлений и setWebhook.
Webhook: проверяйте отправителя и повтор
В setWebhook предусмотрен secret_token: Telegram передаёт его в заголовке X-Telegram-Bot-Api-Secret-Token. Задайте отдельное случайное значение и проверяйте его на сервере до выполнения действий. Это не токен управления ботом; секрет webhook также нельзя публиковать в логах и клиентском коде.
Telegram может повторить неуспешно доставленное обновление. Наш практический критерий для учебного бота заказов: одна и та же доставка не создаёт второй заказ и не списывает баланс дважды. Сохраняйте идентификатор обработанного обновления вместе с результатом бизнес-операции; продумайте сбой между записью и ответом.
- В своей тестовой среде проверьте, что запрос без верного секрета не запускает команду.
- Доставьте одно разрешённое тестовое обновление повторно и сверьте число созданных действий.
- Проверьте getWebhookInfo: адрес, ожидающие обновления и время последней ошибки.
- После подключения защиты убедитесь, что Telegram получает ожидаемый ответ без браузерной проверки и ненужного редиректа.
Подробнее в первоисточнике: Telegram Bot API: secret_token и повторная доставка.
Доставка из Telegram не даёт права на любую команду
Учебный пример: бот показывает статус заказа и позволяет сотруднику его отменить. Подтверждённое обновление ещё не доказывает, что отправитель — сотрудник нужной организации. Обработчик должен связать Telegram-пользователя с вашей учётной записью и проверить конкретное действие над заказом.
Не доверяйте роли или цене из текста команды, callback-данных или формы. Кнопка администратора может быть скрыта в интерфейсе, но право её действия всё равно проверяет сервер. Если бот работает в группе, отдельно определите, что разрешено участнику, администратору чата и администратору вашего приложения: это разные полномочия.
- Проверьте команду с обычного собственного тестового аккаунта и аккаунта администратора.
- Убедитесь, что один пользователь не получает заказ другого только по известному номеру.
- Проверьте отозванный доступ: ранее разрешённая команда должна перестать выполняться.
- Не выводите токены, полные внутренние ошибки и чужие данные в ответ чата.
Mini App: доверяйте только проверенным данным входа
Telegram передаёт Mini App данные initData, которые нужно отправить на ваш backend и проверить по официальному алгоритму. Не считайте initDataUnsafe или переданный браузером user.id готовым доказательством личности. Проверка подписи подтверждает происхождение данных; проверка auth_date позволяет ограничить их возраст по вашей политике.
После этого сервер выдаёт предусмотренную сессию и проверяет права на свои объекты. Например, корректные данные Telegram-пользователя не дают ему доступ к любому заказу. Самостоятельно придумывать упрощённый алгоритм подписи опасно: используйте точный протокол Telegram и проверяйте обработку неверных и просроченных данных.
Подробнее в первоисточнике: Telegram: серверная проверка initData Mini App.
Токен и бюджет бота
Токен Bot API нужен только доверенной серверной части, которая работает с ботом. Не вставляйте его в страницу Mini App, скриншот инструкции или публичный пример. Для разработки удобно завести отдельного тестового бота, чтобы проверка команд и смена ключа не затрагивали рабочую аудиторию.
Если команда вызывает модель, обрабатывает видео или отправляет платное сообщение, ограничивайте доступные действия пользователя и общую очередь. Для учебного бота генерации определите, когда задача считается принятой, сколько одновременно выполняется и что происходит после ошибки поставщика. Смена IP не должна создавать новую пользовательскую квоту.
Как подключить публичную часть к RoboGuard
Подходит собственный HTTP(S)-домен Mini App, API, панели или webhook, для которого доступно изменение маршрута и настройка origin. Пропустите через него нормальные сценарии до ужесточения правил. Webhook и серверный API не выполнят JavaScript-проверку браузера: используйте совместимые правила конкретных маршрутов.
Защита трафика не перехватывает переписку Telegram, не исправляет команды и не управляет токеном бота. Если приложение только опрашивает Bot API и не имеет публичных HTTP-входов, для этого канала RoboGuard подключать некуда. Начните с прав, секретов и лимитов в самом боте; при появлении веб-части подключайте её отдельно.
Вопросы и ответы
Нужна ли капча для webhook Telegram?
Webhook — серверный запрос. Он не пройдёт обычную браузерную капчу. Проверяйте предусмотренный Telegram секрет и настройте совместимые ограничения для конкретного маршрута.
Можно ли проверить весь бот по адресу его сайта?
Нет. Публичная страница не раскрывает правила команд, проверку initData, хранение токена и обработку платежей. Эти части проверяются в приложении отдельно.