使用Twilio时,如何通过POST状态回调在Python中获取呼叫参数?
解决Twilio POST状态回调参数获取问题
Twilio发送POST状态回调时,参数是以**表单格式(application/x-www-form-urlencoded)**传递的,而非JSON,所以不能直接用GET方式的query_params获取,需要调整FastAPI接口的参数解析方式。
步骤1:修改Twilio呼叫创建代码
将status_callback_method改为POST:
call = client.calls.create( method='POST', status_callback=twilioUrl+'/api/callstatus', status_callback_event=['initiated', 'ringing', 'answered', 'completed'], status_callback_method='POST', # 切换为POST方法 url=twilioUrl+'/api/createcallback', to=self.to_number, from_=self.from_number )
步骤2:修改FastAPI回调接口
提供两种可行的实现方式:
方式一:使用Form直接绑定参数(推荐)
先导入Form,然后直接在接口参数中绑定表单字段:
from fastapi import FastAPI, Form @app.post("/api/callstatus") async def post_call_status( to_number: str = Form(None), from_number: str = Form(None), status: str = Form(None, alias="CallStatus") ): print(f"Call from: {from_number} to: {to_number} has status: {status}") return {"result": "success"}
注:Twilio的状态参数名为
CallStatus,通过alias参数可以映射到更简洁的变量名status。
方式二:通过Request对象获取表单数据
如果需要更灵活地处理所有表单参数,可以通过Request对象异步获取表单数据:
from fastapi import FastAPI, Request @app.post("/api/callstatus") async def post_call_status(request: Request): form_data = await request.form() to_number = form_data.get('To', None) from_number = form_data.get('From', None) status = form_data.get('CallStatus', None) print(f"Call from: {from_number} to: {to_number} has status: {status}") return {"result": "success"}
关键说明
Twilio的POST回调采用表单编码格式,而非JSON,因此不能使用Pydantic模型直接解析请求体,必须通过Form或request.form()来提取参数。
内容的提问来源于stack exchange,提问作者brentlyjr
相关产品推荐
相关产品推荐

