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

基于Twilio的自定义呼叫转接流程实现方案咨询

Twilio Voice API 实现指定呼叫流程的方案

核心实现思路

不用直接调用Call.Create发起转接,而是通过TwiML的<Dial>标签结合<Number>的url和action属性,实现给被转接方播放身份提示、处理转接结果的完整流程。

具体步骤

1. 处理呼入请求的Webhook

当主叫拨打你的Twilio号码时,Twilio会向你设置的接收Web URL发送请求,你需要返回包含<Dial>的TwiML,替代直接发起外呼的逻辑:

<Response>
  <Dial action="/handle-dial-result">
    <Number url="/play-caller-identity">+1234567890</Number>
  </Dial>
</Response>
  • action:指定转接结束后的回调端点,Twilio会把转接状态发送到这里。
  • url:指定被转接方接听前的提示音端点,Twilio呼叫被叫时会先请求这个地址。

2. 给被转接方播放来电者身份提示

创建/play-caller-identity端点,返回包含<Say>或<Play>的TwiML,告知被叫来电者身份,最后用<Connect>完成通话桥接:

<Response>
  <Say>您好,有来自{{ From }}的来电,请接听</Say>
  <Pause length="1"/>
  <Connect/>
</Response>
  • {{ From }}是Twilio请求时携带的主叫号码参数,你可以直接读取并插入到TwiML中。
  • 如果用录音文件替换语音播报,把<Say>换成<Play>即可:<Play>https://your-server.com/caller-id-prompt.mp3</Play>

3. 处理转接失败的场景

创建/handle-dial-result端点,根据Twilio发送的DialCallStatus参数处理不同情况:

  • 若DialCallStatus为completed:说明被叫已接听,无需额外操作,通话已自动连通。
  • 若DialCallStatus为busy、no-answer或failed:返回播放提示的TwiML给主叫:
<Response>
  <Play>https://your-server.com/busy-message.mp3</Play>
</Response>
  • 针对语音信箱的特殊处理:如果被叫转入语音信箱,Twilio默认会把DialCallStatus标记为completed。你可以在<Number>标签中添加machineDetection="Enable",此时Twilio会额外返回AnsweredBy参数:
    <Number url="/play-caller-identity" machineDetection="Enable">+1234567890</Number>
    
    在/play-caller-identity端点,若检测到AnsweredBy为machine,则返回<Hangup>挂断给被叫的呼叫,然后Twilio会触发/handle-dial-result的回调,你再给主叫播放提示即可。

为什么不用Call.Create?

直接调用Call.Create是发起两个独立的呼叫,需要手动处理通话桥接和状态同步,而用<Dial>的原生能力,Twilio会自动完成呼叫发起、提示播放、状态回调和通话桥接,逻辑更简洁可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:02:33