如何在 Telegram bot API webHook 上使用偏移量

How to use offset on Telegram bot API webHook

两天以来,我一直在探索 Telegram 机器人 API,它非常简洁。但是有一件事我想不通。

当您不使用 webHook 而使用 /getUpdates 调用时,您可以通过 offset 参数告诉 API 服务器处理了哪个消息。

但是如何使用适当的 webHook 执行此操作?我不断收到与更新相同的消息。这导致服务器向用户发送相同的垃圾邮件。

我想出的解决方案如下:

  1. 从 webhook 接收更新
  2. 保存update_id
  3. 回复用户/sendMessage
  4. 禁用 webHook /setWebhook?url=
  5. 设置偏移量/getUpdates?offset={update_id+1}
  6. 恢复 webHook /setWebhook?url=https://mywebhook.domain.com

一定有更好的方法吧?有人吗?

您在处理您的 webhook 的页面上返回什么 HTTP 状态代码? Telegram 可能正在尝试重试您的 webhook 端点,因为它没有收到您的状态 200 (OK)。

好的,问题解决了。看来只有 200 (OK) 是不够的(我的回复正文是 null。我已经在回复中添加了一个正文 {},并且知道了工作正常。

在 webHook 上使用 This 从电报服务器获取数据:

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

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

你必须告诉 telegram 你成功获得更新:

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