【问题标题】:Twilio WhatsApp HTTP retrieval failure, but can't reproduce error locallyTwilio WhatsApp HTTP 检索失败,但无法在本地重现错误
【发布时间】:2019-11-13 00:53:16
【问题描述】:

使用 WhatsApp API 我有一个非常简单的 Flask 应用程序在 2 个服务器上运行,该应用程序只接受根地址的发布请求并打印它收到的内容。在一台主机上,它位于 Traefik 后面,而在另一台主机上,我直接运行它,因此 Flask 的内置开发服务器直接暴露出来。第一个主机被引用为http://sub.domain.com/incoming/,第二个我使用IP http://12.34.56.78

在后者上,一切都按预期工作:我收到 Twilio 的回调,我也可以自己调用 API 并获得干净的响应(HTTP 200,<Response></Response> 作为正文)。在前者上,如果我自己调用 API,它可以正常工作并且得到相同的输出。但是当 Twilio 发送它的回调时,我总是在 Twilio 的调试器上收到 11200 HTTP 检索失败。

我觉得这种行为差异有点奇怪,但还有一个细节让我觉得有点奇怪——Twilio 调试器有一个“重播请求”选项,在这种情况下,它的回调会被重新发送。在我收到检索失败的主机上,如果我重播失败的请求,它们始终会成功!

在一切正常的服务器上,我存储了一个原始 Twilio 请求(带有标头的 HTTP 等),我尝试使用 netcat 手动将此请求发送到失败的服务器(在更新 Host 标头字段之后)。当我这样做时,服务器响应没有任何问题,因此请求的结构似乎不是问题。

我真的很茫然,关于在哪里可以找到这个问题的原因,我已经没有想法了。有什么建议吗?

【问题讨论】:

    标签: twilio traefik


    【解决方案1】:

    在与 Twilio 的开发人员支持反复讨论之后,这似乎是他们的问题。问题是我的 URL 的子域部分包含下划线。出于某种原因,Twilio 的 webhook 系统不接受这一点,即使他们的“重播请求”功能没有问题(似乎那些通过不同的子系统)。我通过用破折号替换下划线解决了这个问题,现在一切正常。

    【讨论】:

      【解决方案2】:

      嘿嘿。 Twilio 开发人员布道者在这里。 ?

      为了完整起见:Twilio 不接受域或子域中的下划线,用于发送到您的 Twilio 号码的 SMS 的“收到消息时”的 webhook URL。如果您尝试在 URL 的域或子域中使用下划线保存电话号码配置页面,您将在控制台中看到错误“URL 无效”。

      但是,Twilio Whatsapp 的 webhook 配置有一个错误并且不会拒绝 URL,即使它对 Twilio 无效!所以虽然 URL 被接受了,但是请求会失败。

      我们为它创建了一张票,工程团队现在已经意识到了这个问题。

      感谢您提出这个问题。 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-24
        • 2020-11-08
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        • 2016-09-21
        • 1970-01-01
        相关资源
        最近更新 更多