С 17 марта 2026 поле update_id в объекте Update (ответ метода getUpdates) изменило свою природу:
| Предыдущая версия | Новая версия |
|---|---|
update_id — timestamp в наносекундах (Unix nano), например: 1701432000000000000. Параметр offset передавался как временная метка. |
update_id — монотонно возрастающий целочисленный ID, например: 1, 2, 3, ... 4527. Параметр offset передаётся как ID. |
Логика работы с параметром offset не изменилась — это по-прежнему значение update_id + 1 последнего полученного обновления.
Для корректной работы выполните следующие действия:
Сбросьте сохранённое значение offset.
Если приложение сохраняет значение offset между перезапусками (в БД, файле, переменной окружения), его необходимо сбросить в 0 при обновлении. Старые значения offset, основанные на timestamp, несовместимы с новой нумерацией и приведут к получению пустого массива обновлений.
Не интерпретируйте update_id как время.
Если в текущем коде update_id используется для определения времени события (например, конвертация из наносекунд в дату), эту логику необходимо удалить. Поле update_id теперь является непрозрачным идентификатором и не несёт временной информации.
Для получения времени события используйте:
date в объекте message (Unix timestamp в секундах);date в объекте my_chat_member / chat_member.Убедитесь в том, что логика offset корректна.
Правильный паттерн работы (не изменился):
offset = 0 # начальное значение после обновления
while True:
response = bot_api.get_updates(offset=offset, timeout=25)
for update in response["result"]:
process(update)
offset = update["update_id"] + 1
В SDK для удобства был добавлен параметр
StartFrom: он позволяет пропускать все новые сообщения до определенной даты.