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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:30:02