2015-06-27 5 views
5

С 2 дней я изучал API-интерфейс Telegram, который довольно опрятен. Но есть одна вещь, которую я не могу понять.Как использовать смещение на Telegram bot API webHook

Если вы не используете webHook, а вызов /getUpdates, вы можете сообщить API через параметр offset, где сообщение обрабатывается сервером.

Но как вы это делаете с помощью webHook? Я получаю то же сообщение, что и обновление. Это приводит к тому, что сервер отправляет спам пользователю с тем же сообщением.

Решение, которое я придумал следующим образом:

  1. Получать обновления от webhook
  2. Спасем update_id
  3. Ответить пользователю /sendMessage
  4. отключить webHook /setWebhook?url=
  5. Установить смещение /getUpdates?offset={update_id+1}
  6. Восстановить нас bHook /setWebhook?url=https://mywebhook.domain.com

Должен быть лучший путь вправо? Кто угодно?

+0

Скорее всего, вы держите webhook как есть и ваш код обработка webhook отслеживает последние обновить и пропустить те, которые уже обработано – Sathya

+0

Это была моя первая мысль. Но на вызове '/ getUpdate' я мог видеть, что в моей тестовой папке там, где более 10 сообщений, в то время как webHook дал мне только 1 сообщение за раз. Всегда одно и то же сообщение (первый из вызовов '/ getUpdate'). И на сервере Telegram продолжалась отправка обновлений на мой сервер, даже если все соответствующие сообщения были обработаны (ответили). – EMD

+0

true, но вызов '/ getupdates' должен возвращать' update_id' в каждом сообщении. Следите за последним 'update_id' на вашей локальной стороне, и если' update_id' меньше, чем сохраненный id, вы можете предположить, что он обработан – Sathya

ответ

13

Хорошо, проблема решена. Оказалось, что только 200 (OK) не было достаточно (тело моего ответа был нулевой. Я добавил тело в ответ {}, и знаю, что это работает отлично.

+0

делитесь своим правильным кодом здесь, пожалуйста. –

+0

' ' – EMD

1

Какой код статуса HTTP вы возвращаете на странице, обрабатывающей ваш веб-сайт? Возможно, Telegram пытается повторить попытку вашего веб-узла, потому что он не получает от вас статус 200 (OK).

+0

Webhook возвращает 200 без тела. Так что этого не может быть, или у вас есть что-то вернуть, но я не могу найти что. – EMD

2

использование Это на webHook для получить данные из телеграмм серверов:

// get the raw POST data 
$rawData = file_get_contents("php://input"); 

// this returns null if not valid json 
$jsonData = json_decode($rawData); 
5

вы должны сказать телеграмму, что вы получаете обновления успешно с этим:

- 200 response code 
& 
- empty json like this {}