【问题标题】:How do I "say" to the Telegram API that I got their webhook request successfully?我如何向 Telegram API “说”我成功收到了他们的 webhook 请求?
【发布时间】:2020-10-30 15:46:30
【问题描述】:

我正在调整我的 Telegram 机器人以接受 webhook 请求而不是进行持续轮询,因此我阅读了 Telegram API documentation about the setWebhook method

我正在使用 Python 的微框架 Flask 来创建接收请求的 Web 应用程序。

在文档中的某处它说“如果请求不成功,我们将在合理的尝试次数后放弃。”。这是什么意思?我是否必须在我的 @app.route 装饰器中返回特定的内容,以便 API 了解我得到了我想要的东西?我对 Web 应用程序了解不多,所以我不知道如何说“嘿,我收到了你发送的内容”。

【问题讨论】:

  • 这意味着:如果接收 hebhook 调用的服务器失败,它们将永远不会重试。
  • 哦,是的,也许我没有以正确的方式详细说明。我的实际意思是“我如何对 API 说我收到请求并成功处理它?”。抱歉,我会编辑以使其更清晰
  • 返回一个表示成功的有效状态码,如200

标签: python telegram-bot


【解决方案1】:

这意味着如果它无法发送更新(例如,如果您的 webhook 已关闭)。您无需返回任何内容,只需要您的 webhook 到那时就处于活动状态即可。

【讨论】:

  • 所以只要收到请求,就好像“成功”了对吧?
【解决方案2】:

Webhook 方法允许 Telegram 将消息推送到您的后端。
Webhook 通常应该始终在线,但如果它关闭,则消息(在 Telegram 端)会排队一段时间。

这在您的 Flask 应用程序需要一些时间(例如,启动)时非常有效。

请注意,消息被传递一次:如果 Webhook 失败(后端错误)并返回错误文本或 http 状态代码 (403),则消息被消费并且不会被重新发送。

【讨论】:

  • 并不是我对这个问题进行了深入研究,但是我的快速实验表明,返回错误代码会导致 Telegram 重试请求(我没有尝试 403,但对于 400 和 500 确实如此)。所以请注意,没有办法用“我什么都不懂,请不要再发送这个”之类的方式回复 Telegram。此外,除非您正确(使用 2xx 状态代码)处理当前更新,否则 Telegram 不会向您发送下一个更新(至少来自此聊天)。这与 tg 文档所说的“如果请求不成功,我们将在合理的尝试次数后放弃”是一致的
猜你喜欢
  • 2021-12-21
  • 2015-09-20
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
相关资源
最近更新 更多