1

我知道这是Telegram 向 webhook发送重复的 POST JSON 请求和Telegram 向 webhook 发送重复的 POST JSON 请求的副本。但是,这个问题没有任何充分的答案,所以:

我有一个 PHP 应用程序处理来自 Telegram 的 webhook 请求。但是,Telegram 无法读取 webhook 成功运行(尽管 hurl.it 清楚地表明它会根据此类请求发送 200)。

因此,我让我的机器人多次回复消息,因为 Telegram 还没有得到消息已被处理。

这里也描述了这个问题(我正在使用的库):

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

但是,那里也没有明确的答案......

我该如何解决?

1) 我的机器人正在使用 webhook 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
            )

    )
4

1 回答 1

3

如果 Telegram 及时收到 HTTP 200,它不会重复请求。我的猜测是您的请求/响应超时。使用getwebhookinfo查看您的最后一个请求错误是什么,如果不是超时,则更新问题。


似乎问题与内容编码标头有关。我建议向您的机器人发布一些虚假数据,然后查看您收到的内容编码标头。使用我在https://core.telegram.org/bots/webhooks中找到的 curl或使用类似 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/"
于 2018-01-02T13:34:01.800 回答