使用Python-Flask设置Twilio的StatusCallback回调URL无返回问题求助
可能遗漏的配置及问题修正
- Twilio控制台号码配置错误:确认你在Twilio的号码设置页面填写的StatusCallback地址,是ngrok生成的公网HTTPS域名+
/webhook路径,ngrok每次重启都会生成新的随机域名,不要使用历史旧域名填写,也不要直接填本地127.0.0.1地址。 - ngrok端口映射不匹配:启动ngrok时的命令需要和Flask运行的端口对应,Flask默认运行在5000端口,ngrok启动命令应为
ngrok http 5000,不要填错端口。 - Flask服务监听地址限制:默认Flask只监听本地127.0.0.1的请求,ngrok的转发请求无法被接收,需要修改启动代码为
app.run(debug=True, host='0.0.0.0'),允许内网所有地址访问。 - 代码取值逻辑错误:
request.values.get()只能接收单个Key作为参数,你传入列表的写法会直接返回None甚至引发服务报错返回500,导致Twilio请求失败无日志,需要修正为逐个取值:
from flask import Flask, request, abort import logging logging.basicConfig(level=logging.INFO) app = Flask(__name__) @app.route('/webhook', methods =['POST', 'GET']) def webhook(): call_sid = request.values.get('CallSid') from_num = request.values.get('From') to_num = request.values.get('To') direction = request.values.get('Direction') logging.info(f'Status: CallSid={call_sid}, From={from_num}, To={to_num}, Direction={direction}') return ('', 204) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0')
- Twilio回调事件未勾选:确认你在Twilio控制台的StatusCallback配置中,勾选了需要触发回调的对应通话事件(如呼叫发起、接通、挂断等),未勾选的事件Twilio不会发送回调请求。
- 先排查请求链路:可以先查看ngrok自带的控制台页面,确认是否有Twilio的请求进入:如果ngrok无请求,直接排查Twilio端的URL配置;如果ngrok有请求但状态码为4XX/5XX,对应排查路径、代码逻辑错误。
内容的提问来源于stack exchange,提问作者Ferre_Diego
相关产品推荐
相关产品推荐

