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

React前端+Python后端,如何在Twilio语音回调中获取To号码?

解决Twilio回调中获取目标号码的方法

你遇到的问题本质是:客户端发起的呼叫分两条链路——客户端到Twilio的入站链路,以及Twilio到目标号码的出站链路。你在Application里设置的status_callback默认监听的是入站链路的状态,这条链路的To参数是空的或者指向Twilio应用,自然拿不到目标号码。要获取目标号码,得针对出站链路设置回调,或者把目标号码从入站链路的请求传递到回调里,具体有两种可行方案:

方案1:在标签中指定出站链路的回调

当你的voice-url接口收到Twilio的请求时,前端通过Device.connect()传递的To参数会包含在请求里。你可以在返回的TwiML中,给<Dial>标签添加statusCallback属性,让Twilio监听出站链路的状态并携带目标号码:

# 假设这是你的voice-url处理逻辑(以Flask为例)
from flask import request
from twilio.twiml.voice_response import VoiceResponse, Dial

@app.route('/voice', methods=['POST'])
def handle_voice_request():
    # 获取前端传入的目标号码
    target_number = request.form.get('To')
    # 构造带目标号码的回调URL(也可以不加,<Dial>的回调本身会带To参数)
    callback_url = f"https://your-domain.com/status-callback?target={target_number}"
    
    # 生成TwiML,指定出站链路的回调
    resp = VoiceResponse()
    dial = Dial(
        status_callback=callback_url,
        status_callback_event=["completed", "ringing", "answered"]  # 监听的状态事件
    )
    dial.number(target_number)
    return str(resp)

这样Twilio在发送出站链路的状态回调时,不仅会自动带上To参数(即目标号码),你拼接的自定义target参数也会出现在回调请求里,直接解析就能拿到。

方案2:更新Call资源的回调地址

如果需要复用Application的全局回调,你可以在voice-url接口中,拿到当前呼叫的CallSid,然后调用Twilio API更新该Call的回调地址,把目标号码作为参数拼接进去:

from flask import request
from twilio.rest import Client

@app.route('/voice', methods=['POST'])
def handle_voice_request():
    target_number = request.form.get('To')
    call_sid = request.form.get('CallSid')
    account_sid = "你的Twilio账号SID"
    auth_token = "你的Twilio授权令牌"
    
    # 更新Call的回调地址,附加目标号码
    client = Client(account_sid, auth_token)
    client.calls(call_sid).update(
        status_callback=f"https://your-domain.com/status-callback?to={target_number}",
        status_callback_event=["completed", "ringing", "answered"]
    )
    
    # 返回正常的Dial指令
    resp = VoiceResponse()
    resp.dial(target_number)
    return str(resp)

这样后续Twilio发送的回调请求里,就能通过URL参数拿到目标号码了。

注意事项

  • 不管用哪种方案,都要确保voice-url能正确接收到前端传递的To参数——检查你的Device.connect()代码里,params.To是否确实传入了正确的目标号码(你代码里写的是To:response.data.data,要确认这个值是有效的号码)。
  • 如果不需要额外参数,方案1里的callback_url可以直接用你的原回调地址,Twilio的出站链路回调会自动携带To参数(即目标号码),无需手动拼接。

内容的提问来源于stack exchange,提问作者HeetGorakhiya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:25:28