С 2 дней я изучал API-интерфейс Telegram, который довольно опрятен. Но есть одна вещь, которую я не могу понять.Как использовать смещение на Telegram bot API webHook
Если вы не используете webHook, а вызов /getUpdates
, вы можете сообщить API через параметр offset
, где сообщение обрабатывается сервером.
Но как вы это делаете с помощью webHook? Я получаю то же сообщение, что и обновление. Это приводит к тому, что сервер отправляет спам пользователю с тем же сообщением.
Решение, которое я придумал следующим образом:
- Получать обновления от webhook
- Спасем
update_id
- Ответить пользователю
/sendMessage
- отключить webHook
/setWebhook?url=
- Установить смещение
/getUpdates?offset={update_id+1}
- Восстановить нас bHook
/setWebhook?url=https://mywebhook.domain.com
Должен быть лучший путь вправо? Кто угодно?
Скорее всего, вы держите webhook как есть и ваш код обработка webhook отслеживает последние обновить и пропустить те, которые уже обработано – Sathya
Это была моя первая мысль. Но на вызове '/ getUpdate' я мог видеть, что в моей тестовой папке там, где более 10 сообщений, в то время как webHook дал мне только 1 сообщение за раз. Всегда одно и то же сообщение (первый из вызовов '/ getUpdate'). И на сервере Telegram продолжалась отправка обновлений на мой сервер, даже если все соответствующие сообщения были обработаны (ответили). – EMD
true, но вызов '/ getupdates' должен возвращать' update_id' в каждом сообщении. Следите за последним 'update_id' на вашей локальной стороне, и если' update_id' меньше, чем сохраненный id, вы можете предположить, что он обработан – Sathya