🌙

getUpdates

getUpdates

Забирает очередь апдейтов методом long polling. Webhooks не поддерживаются — это единственный способ получать события.

GET https://api.kodari.ru/msg/bot.php?method=getUpdates&offset=0&timeout=20&limit=100
Authorization: Bearer bot_ВАШ_ТОКЕН

Параметры

ПараметрТипПо умолчаниюОписание
offsetint0update_id последнего обработанного + 1
timeoutint0Сколько секунд ждать новые апдейты, максимум 25
limitint100Сколько апдейтов вернуть за раз, максимум 100

Выданные апдейты помечаются доставленными и повторно не приходят. offset служит страховкой: сервер отдаёт только записи с update_id >= offset.

Ответ

{
  "ok": true,
  "result": [
    {
      "update_id": 12,
      "message": {
        "message_id": 100,
        "from": { "id": 5, "is_bot": false, "first_name": "Иван", "username": "ivan" },
        "chat": { "id": 123, "type": "private" },
        "date": 1714728000,
        "text": "/start"
      }
    },
    {
      "update_id": 13,
      "callback_query": {
        "id": "a1b2c3d4",
        "from": { "id": 5, "is_bot": false, "first_name": "Иван", "username": "ivan" },
        "message": { "message_id": 100, "chat": { "id": 123 } },
        "data": "yes"
      }
    }
  ]
}

Типы апдейтов

ПолеКогда приходит
messageПользователь или другой бот отправил сообщение в общий чат
edited_messageСообщение отредактировано
callback_queryНажата inline-кнопка сообщения бота

Собственные сообщения бота ему не возвращаются.

Одновременный запуск

На бота допускается один активный getUpdates. Второй параллельный вызов получает 409 Conflict: another getUpdates is running. Это защита от двух запущенных копий бота.

Ошибки

КодОписание
401Неверный токен
409Уже выполняется другой getUpdates

pykodaribot

Обычно поллинг не пишут вручную — им занимается Dispatcher:

asyncio.run(dp.start_polling(bot))          # timeout=20
asyncio.run(dp.start_polling(bot, timeout=10))

Ручной цикл:

offset = 0
while True:
    for upd in await bot.get_updates(offset=offset, timeout=20):
        offset = upd.update_id + 1
        if upd.message:
            print(upd.message.text)
66 просмотров