Telegram отправляет множество дубликатов

Я знаю, что это дубликат Telegram отправляет дубликаты запросов POST JSON на webhook и Telegram отправляет дубликаты запросов POST JSON на веб-перехватчик . Однако на этот вопрос не было адекватного ответа, поэтому:

У меня есть приложение PHP, обрабатывающее запросы веб-перехватчиков из Telegram. Однако Telegram не может прочитать, что веб-перехватчик сработал успешно (хотя hurl.it ясно показывает, что отправляет 200 обратно по такому запросу).

Поэтому мой бот много раз отвечает на сообщение, потому что Telegram просто не понимает, что сообщение еще обработано.

Проблема также описана здесь (библиотека, которую я использую):

https://github.com/irazasyed/telegram-bot-sdk/issues/23

Впрочем, однозначного ответа и там нет ...

Как я могу это исправить?

1) Мой бот использует веб-перехватчик 2) Он определенно возвращает ответ 200 OK 3) Пользователь получает ответы от бота ОБНОВЛЕНИЕ 4) Это не тайм-аут.

Мой getWebhookInfo ответ:

[decodedBody:protected] => Array
    (
        [ok] => 1
        [result] => Array
            (
                [url] => https://bots.chatforge.me/t/test
                [has_custom_certificate] => 
                [pending_update_count] => 3
                [last_error_date] => 1514900657
                [last_error_message] => Unsupported Media Type: unsupported content-encoding
                [max_connections] => 40
            )

    )

person Арсен Гоян    schedule 02.01.2018    source источник


Ответы (1)


Если Telegram получил HTTP 200 своевременно, он не повторит запрос. Я предполагаю, что время ожидания вашего запроса / ответа истекло. Используйте getwebhookinfo, чтобы узнать, какая была ошибка вашего последнего запроса, и обновить вопрос, если это не время из.


Кажется, проблема связана с заголовком Content-encoding. Я предлагаю отправить вам, боту, поддельные данные и посмотреть, какой заголовок Content-encoding вы получите. Используйте завиток, который я нашел в https://core.telegram.org/bots/webhooks, или используйте программы типа Postman.

curl -v -k -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -d '{
"update_id":10000,
"message":{
  "date":1441645532,
  "chat":{
     "last_name":"Test Lastname",
     "id":1111111,
     "type": "private",
     "first_name":"Test Firstname",
     "username":"Testusername"
  },
  "message_id":1365,
  "from":{
     "last_name":"Test Lastname",
     "id":1111111,
     "first_name":"Test Firstname",
     "username":"Testusername"
  },
  "text":"/start"
}
}' "https://YOUR.BOT.URL:YOURPORT/"
person Arman Ordookhani    schedule 02.01.2018
comment
Я понятия не имел, что в API есть такая возможность отладки, потому что в библиотеке ее нет)) Спасибо. К сожалению, это не тайм-аут. Теперь это еще больше сбивает с толку: 'Unsupported Media Type: unsupported content-encoding'. Я приложил к вопросу полный вывод. - person Арсен Гоян; 02.01.2018
comment
Действительно, я только что узнал, что мой сервер отправляет заголовок Content-Encoding: none. Что явно неверно. Понятия не имею, откуда это взялось. Обычные (не связанные с веб-перехватчиком) запросы возвращают Content-encoding: gzip. Хммм давай посмотрим - person Арсен Гоян; 02.01.2018
comment
Да, удаление этого заголовка глубоко внутри приложения полностью исправило его. Понятия не имею, почему это было там целую вечность. Никаких проблем с этим до сих пор) Кто знал, что API может выйти из строя из-за этого) Спасибо за подсказки! - person Арсен Гоян; 02.01.2018