部署Twilio服务至Heroku时遇11200错误求助
这个错误的核心是Twilio无法成功请求你的webhook URL,结合你本地正常、Heroku部署后出问题的情况,咱们从最常见的原因开始一步步排查:
确认Heroku应用是否正常运行
首先检查你的Heroku dyno有没有启动,以及应用是否监听了正确的端口。Node.js应用在Heroku上必须监听process.env.PORT环境变量指定的端口,不能硬编码成3000这类固定值。比如你的Express代码应该是:const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`Server running on port ${port}`); });然后用Heroku CLI查看应用日志,确认启动状态:
heroku logs --tail如果看到启动失败的报错(比如端口占用、依赖缺失),先解决这些问题。也可以用
heroku ps查看dyno状态,要是显示web.1: idle,就用heroku ps:scale web=1启动dyno。验证webhook URL的正确性与可访问性
Twilio要求webhook必须是HTTPS协议(本地开发用ngrok的HTTP除外),确认你在Twilio控制台填写的是https://xxx.herokuapp.com/xxx(加上你的具体路由,比如/twilio/webhook),而不是HTTP开头。
另外,直接用curl测试你的webhook路由是否能正常响应:curl -X POST https://xxx.herokuapp.com/你的webhook路由如果返回404,说明路由配置有问题;如果返回5xx,说明服务器内部错误,需要看日志排查。
检查Heroku dyno的冷启动问题
Heroku的免费dyno会在30分钟无请求后进入休眠状态,第一次请求会触发冷启动,启动时间可能超过Twilio的超时限制(Twilio默认超时是15秒),导致11200错误。
解决办法:可以用第三方服务定时ping你的Heroku应用(比如每25分钟ping一次),或者升级到付费dyno避免休眠。确认路由能处理Twilio的POST请求
Twilio向webhook发送的是POST请求,确保你的Node.js路由正确处理POST方法,比如Express中要用app.post('/webhook', ...)而不是app.get。另外,不要给这个路由加过于严格的CORS限制(Twilio的请求是服务器端发起的,CORS一般不影响,但如果你的中间件限制了来源,可能会拦截请求)。排除SSL证书问题
Heroku的默认域名(xxx.herokuapp.com)自带合法的SSL证书,Twilio会信任这个证书。如果用了自定义域名,要确保SSL证书配置正确(比如用Heroku的SSL证书或第三方合法证书),Twilio不接受自签名证书。
如果以上步骤都排查完还是有问题,可以把Heroku日志里的相关报错信息贴出来,方便进一步定位。
内容的提问来源于stack exchange,提问作者Lan Le

