使用Python+Flask对接Twilio时遇StatusCallback URL无效问题求助
解决Twilio“无效StatusCallback URL”错误的方案
核心问题:相对URL导致Twilio无法访问回调地址
你代码里用url_for('sms_callback', source=request.endpoint)生成的是相对路径(比如/sms-callback?source=send-message),但Twilio需要能直接访问的绝对HTTPS URL,它无法解析相对路径,因此触发“无效StatusCallback URL”错误。
修复步骤
1. 生成绝对URL
修改status_callback参数,给url_for加上_external=True,强制生成包含完整域名的绝对URL:
response.sms(msg, status_callback=url_for('sms_callback', source=request.endpoint, _external=True), status_callback_method='POST', to=request.values.get('From'), from_=request.values.get('To') )
2. 确保使用HTTPS
Twilio要求所有Webhook和回调地址必须使用HTTPS(本地测试除外)。PythonAnywhere免费账户默认提供HTTPS域名(格式为你的用户名.pythonanywhere.com),确保你的Flask应用未强制跳转至HTTP。
3. 优化回调路由(可选但推荐)
短信状态回调不需要返回Twiml,Twilio仅需收到200 OK响应即可,可简化sms_callback路由:
@app.route('/sms-callback', methods=['POST']) def sms_callback(): # 可添加日志记录短信状态,示例: # status = request.values.get('MessageStatus') # print(f"SMS状态: {status}") return '', 200
4. 验证回调地址可访问
手动访问你的回调绝对URL(比如https://你的用户名.pythonanywhere.com/sms-callback),确认返回200 OK,无404或500错误。
额外检查点
- 确认PythonAnywhere的Web应用设置中,域名配置正确,无错误重定向规则。
- 检查Twilio控制台的Webhook配置,确保未硬编码错误URL(你这里是代码动态生成,重点关注
url_for的参数)。
内容的提问来源于stack exchange,提问作者MichaelR
相关产品推荐
相关产品推荐

