如何在 Telegram bot API webHook 上使用偏移量
How to use offset on Telegram bot API webHook
两天以来,我一直在探索 Telegram 机器人 API,它非常简洁。但是有一件事我想不通。
当您不使用 webHook 而使用 /getUpdates
调用时,您可以通过 offset
参数告诉 API 服务器处理了哪个消息。
但是如何使用适当的 webHook 执行此操作?我不断收到与更新相同的消息。这导致服务器向用户发送相同的垃圾邮件。
我想出的解决方案如下:
- 从 webhook 接收更新
- 保存
update_id
- 回复用户
/sendMessage
- 禁用 webHook
/setWebhook?url=
- 设置偏移量
/getUpdates?offset={update_id+1}
- 恢复 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 {}
两天以来,我一直在探索 Telegram 机器人 API,它非常简洁。但是有一件事我想不通。
当您不使用 webHook 而使用 /getUpdates
调用时,您可以通过 offset
参数告诉 API 服务器处理了哪个消息。
但是如何使用适当的 webHook 执行此操作?我不断收到与更新相同的消息。这导致服务器向用户发送相同的垃圾邮件。
我想出的解决方案如下:
- 从 webhook 接收更新
- 保存
update_id
- 回复用户
/sendMessage
- 禁用 webHook
/setWebhook?url=
- 设置偏移量
/getUpdates?offset={update_id+1}
- 恢复 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 {}