Updates
getUpdates and update_id
Telegram доставляет события боту пакетами Update. В режиме long polling вы сами забираете их методом getUpdates.
Минимальный запрос
$updates = telegramApi($token, 'getUpdates', [
'timeout' => 25,
'offset' => $nextOffset, // последний update_id + 1
]);
update_id
Каждый Update имеет монотонно растущий update_id. Параметр offset говорит серверу: «всё до этого id уже обработано, больше не присылай».
- после успешной обработки пачки сохраните
max(update_id) + 1как следующий offset; - если процесс упал до подтверждения offset — апдейт придёт снова.
Идемпотентность
Недостаточно «одного курсора в памяти», особенно при нескольких воркерах. Надёжный паттерн:
- получить Update;
- вставить
update_idв таблицу с UNIQUE; - если дубликат — пропустить;
- иначе выполнить бизнес-логику.
CREATE TABLE telegram_updates (
update_id BIGINT PRIMARY KEY,
received_at INT NOT NULL
);
Что внутри Update
Обычно одно из полей: message, edited_message, callback_query, inline_query, my_chat_member, pre_checkout_query, channel_post… Обрабатывайте только нужные типы, остальное игнорируйте явно.
Для продакшена чаще удобнее webhook: Telegram сам POST-ит апдейты на ваш HTTPS URL.