Обновления: getUpdates и вебхуки
Long polling и вебхуки
Есть два способа получать обновления: опрашивать сервер методом getUpdates или настроить вебхук через setWebhook. Одновременно работает только один - при активном вебхуке getUpdates вернёт 409 CONFLICT.
Какие обновления приходят
| Тип | Когда |
|---|---|
message | новое сообщение боту |
edited_message | сообщение отредактировано |
callback_query | нажата inline-кнопка |
pre_checkout_query | пользователь подтверждает оплату счёта |
Остальные типы обновлений (inline-запросы, участники чатов, реакции и другие) пока не отправляются.
Long polling
curl "https://bot.catup.lol/bot$TOKEN/getUpdates?timeout=30"Передавайте offset = update_id последнего обработанного обновления + 1 - так сервер поймёт, что их можно удалить. timeout ограничен 50 секундами, limit - 100.
Вебхук
curl "https://bot.catup.lol/bot$TOKEN/setWebhook" \
-d url=https://example.com/bot \
-d secret_token=my_secret_123Каждое обновление приходит отдельным POST с JSON-объектом Update и заголовком X-Telegram-Bot-Api-Secret-Token. Ответ 2xx - обновление доставлено. При ошибке сервер повторяет доставку с паузами от 1 секунды до 5 минут.
Если бот отстал
Метод dropPendingUpdates очищает очередь. Неподтверждённые обновления хранятся не дольше 24 часов.