Как установить вебхук Telegram-бота

С вебхуком Telegram сам отправляет каждое обновление на ваш HTTPS-адрес — не нужно опрашивать getUpdates. Разберём, как настроить его правильно и безопасно.

Сделайте это в пару кликов — без кода и сервера, прямо в браузере.

Открыть менеджер вебхука

Требования

Установка вебхука онлайн

  1. Откройте Telegram Bot Manager и вставьте токен бота от @BotFather.
  2. На вкладке «Вебхук» укажите URL вашего обработчика.
  3. Нажмите «Сгенерировать», чтобы создать секретный токен, и сохраните его в конфиге сервера.
  4. Выберите allowed_updates, если нужны только некоторые типы обновлений (или chat_member / реакции, которые по умолчанию выключены).
  5. Нажмите «Установить вебхук». Блок состояния сразу покажет результат.

Параметры

ПараметрЧто делает
urlHTTPS-адрес, на который приходят обновления в виде JSON POST-запросов.
secret_token1–256 символов A-Z a-z 0-9 _ -, передаётся в заголовке X-Telegram-Bot-Api-Secret-Token каждого запроса.
allowed_updatesТипы получаемых обновлений. Пустой список = всё, кроме chat_member, message_reaction, message_reaction_count.
max_connectionsОдновременные HTTPS-соединения, 1–100 (по умолчанию 40).
ip_addressФиксированный IP вместо определения адреса через DNS.
certificateПубличный ключ самоподписанного сертификата.
drop_pending_updatesУдалить обновления, ожидающие в очереди.

То же самое через curl

curl -X POST "https://api.telegram.org/bot$BOT_TOKEN/setWebhook" \
  --form-string "url=https://example.com/telegram/webhook" \
  --form-string "secret_token=$WEBHOOK_SECRET" \
  --form-string 'allowed_updates=["message","callback_query"]' \
  --form-string "max_connections=40"

С самоподписанным сертификатом:

curl -X POST "https://api.telegram.org/bot$BOT_TOKEN/setWebhook" \
  --form-string "url=https://203.0.113.10:8443/webhook" \
  -F "certificate=@public.pem"

Проверяйте секретный токен на сервере

Всегда сравнивайте заголовок со своим секретом и отклоняйте остальные запросы — сам URL вебхука секретом не является.

// Node.js (Express): reject requests without the right secret
app.post('/telegram/webhook', (req, res) => {
  if (req.get('X-Telegram-Bot-Api-Secret-Token') !== process.env.WEBHOOK_SECRET) {
    return res.sendStatus(401);
  }
  // handle req.body (Update) ...
  res.sendStatus(200);
});

Частые ошибки

Сделайте это в пару кликов — без кода и сервера, прямо в браузере.

Открыть менеджер вебхука