You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 22:55:58