Twilio WhatsApp HTTP 检索失败,但无法在本地重现错误
Twilio WhatsApp HTTP retrieval failure, but can't reproduce error locally
使用 WhatsApp API 我有一个非常简单的 Flask 应用程序 运行 在 2 个服务器上运行,该应用程序只接受根地址的 post 请求并打印它的内容已收到。在一台主机上它在 Traefik 后面,而在另一台主机上我直接 运行 它所以 Flask 的 built-in 开发服务器直接暴露。第一个主机引用为 http://sub.domain.com/incoming/
,第二个主机我使用 IP http://12.34.56.78
.
在后者上,一切都按预期工作:我收到了 Twilio 的回调,我也可以自己调用 API 并获得干净的响应(HTTP 200,<Response></Response>
as body).对于前者,如果我自己调用 API 它工作正常并且我得到相同的输出。但是,当 Twilio 发送其回调时,我在 Twilio 的调试器上始终收到 11200 HTTP 检索失败。
我发现这种行为差异有点奇怪,但还有一个细节我真的觉得有点奇怪——Twilio 调试器有一个选项 "Replay Request",在这种情况下,它的回调得到 re-sent。在我收到检索失败的主机上,如果我重放失败的请求,它们总是成功!
在一切正常的服务器上,我存储了一个原始的 Twilio 请求(带有 headers 的 HTTP 等),并且我尝试使用 netcat 手动将此请求发送到失败的服务器(更新后主机 header 字段)。当我这样做时,服务器响应没有任何问题,因此请求的结构似乎不是问题。
我真的很茫然,我 运行 不知道在哪里可以找到这个问题的原因。有什么建议吗?
在与 Twilio 的开发人员支持来回交流之后,这似乎是他们这边的一个问题。问题是我的 URL 的子域部分包含下划线。出于某种原因,Twilio 的 webhook 系统不接受这一点,即使它们的 "Replay Request" 功能没有问题(似乎那些通过不同的子系统)。我已经通过用破折号替换下划线来解决问题,现在一切正常。
嘿哟哟。 Twilio 开发者传播者在这里。
为了完整起见:Twilio 不接受 webhook 域或子域中的下划线 URL“当消息进来时”发送到您的 Twilio 号码的短信。如果您尝试在 URL 的域或子域中保存带有下划线的 phone 号码配置页面,您将在控制台中看到错误消息“URL 无效”。
但是,Twilio Whatsapp 的 webhook 配置有一个错误,不会拒绝 URL,即使它对 Twilio 无效!因此,尽管 URL 被接受,请求将失败。
我们为它创建了工单,工程团队现在知道了这个问题。
感谢您提出这个问题。 :)
使用 WhatsApp API 我有一个非常简单的 Flask 应用程序 运行 在 2 个服务器上运行,该应用程序只接受根地址的 post 请求并打印它的内容已收到。在一台主机上它在 Traefik 后面,而在另一台主机上我直接 运行 它所以 Flask 的 built-in 开发服务器直接暴露。第一个主机引用为 http://sub.domain.com/incoming/
,第二个主机我使用 IP http://12.34.56.78
.
在后者上,一切都按预期工作:我收到了 Twilio 的回调,我也可以自己调用 API 并获得干净的响应(HTTP 200,<Response></Response>
as body).对于前者,如果我自己调用 API 它工作正常并且我得到相同的输出。但是,当 Twilio 发送其回调时,我在 Twilio 的调试器上始终收到 11200 HTTP 检索失败。
我发现这种行为差异有点奇怪,但还有一个细节我真的觉得有点奇怪——Twilio 调试器有一个选项 "Replay Request",在这种情况下,它的回调得到 re-sent。在我收到检索失败的主机上,如果我重放失败的请求,它们总是成功!
在一切正常的服务器上,我存储了一个原始的 Twilio 请求(带有 headers 的 HTTP 等),并且我尝试使用 netcat 手动将此请求发送到失败的服务器(更新后主机 header 字段)。当我这样做时,服务器响应没有任何问题,因此请求的结构似乎不是问题。
我真的很茫然,我 运行 不知道在哪里可以找到这个问题的原因。有什么建议吗?
在与 Twilio 的开发人员支持来回交流之后,这似乎是他们这边的一个问题。问题是我的 URL 的子域部分包含下划线。出于某种原因,Twilio 的 webhook 系统不接受这一点,即使它们的 "Replay Request" 功能没有问题(似乎那些通过不同的子系统)。我已经通过用破折号替换下划线来解决问题,现在一切正常。
嘿哟哟。 Twilio 开发者传播者在这里。
为了完整起见:Twilio 不接受 webhook 域或子域中的下划线 URL“当消息进来时”发送到您的 Twilio 号码的短信。如果您尝试在 URL 的域或子域中保存带有下划线的 phone 号码配置页面,您将在控制台中看到错误消息“URL 无效”。
但是,Twilio Whatsapp 的 webhook 配置有一个错误,不会拒绝 URL,即使它对 Twilio 无效!因此,尽管 URL 被接受,请求将失败。
我们为它创建了工单,工程团队现在知道了这个问题。
感谢您提出这个问题。 :)