6

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

当您不使用 webHook 而是/getUpdates调用时,您可以通过offset服务器处理了哪条消息。

但是你如何在 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

一定有更好的方法吧?任何人?

4

4 回答 4

13

好的,问题解决了。似乎只有 200 (OK) 是不够的(我的响应主体是null。我已经在响应中添加了一个主体{},并且知道它工作正常。

于 2015-06-28T12:46:55.067 回答
5

您必须告诉电报您已成功获得更新:

 - 200 response code
 &
 - empty json like this {}
于 2015-09-07T13:07:41.010 回答
2

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

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

// this returns null if not valid json
$jsonData = json_decode($rawData);
于 2015-06-28T17:47:05.770 回答
1

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

于 2015-06-28T10:30:00.837 回答