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

Twilio:外呼转接未接听回队列时的CallerId设置问题

解决Twilio转接未接听后入队的CallerId显示问题

核心问题分析

你遇到的情况是:外呼转接后未接听的呼叫,入队时CallerId被重置为企业号码,本质是从Client发起的转接呼叫底层主叫标识仍绑定企业号,直接入队时会沿用该标识。要解决这个问题,需要在入队前主动指定正确的客户号码作为CallerId,或者通过自定义属性传递客户信息。

解决方案1:直接在入队TwiML中指定from参数

在/catchNoAnswer的回调接口中,提取Twilio传递的DialCallerId参数(值就是你之前设置的客户号码+12222222222),然后生成包含from属性的<Enqueue>标签:

<Response>
  <!-- 将from设置为客户号码 -->
  <Enqueue from="+12222222222">你的队列名称</Enqueue>
</Response>

注意事项

  • 客户号码必须满足Twilio的CallerId规则:如果是外部号码,需要先在你的Twilio账户中完成号码验证;若要用于美国/加拿大地区的呼叫,还需确保号码符合STIR/SHAKEN认证要求,否则Twilio会拒绝设置该号码为CallerId。

解决方案2:用自定义属性传递客户信息(不受CallerId规则限制)

如果直接设置from受限于Twilio的规则,可以通过自定义属性存储客户号码,在座席端读取显示:

  1. 更新呼叫的自定义属性
    在/catchNoAnswer回调中,调用Twilio REST API将客户号码存入当前呼叫的Attributes:
# 示例Python代码
from twilio.rest import Client

account_sid = "你的Twilio账户SID"
auth_token = "你的Twilio认证令牌"
client = Client(account_sid, auth_token)

# 获取当前呼叫SID(从Twilio回调的CallSid参数中获取)
current_call_sid = "传入的CallSid"
client.calls(current_call_sid).update(
    attributes='{"customer_number": "+12222222222"}'
)
  1. 正常入队
    返回标准的入队TwiML:
<Response>
  <Enqueue>你的队列名称</Enqueue>
</Response>
  1. 座席端获取客户号码
    当座席通过Twilio Client收到队列呼叫时,在incoming事件中读取呼叫的attributes字段,提取客户号码并显示在座席界面,替代默认的CallerId显示。

避坑提示

  • 不要用会议中转来修改CallerId:会议的主叫标识逻辑独立于普通呼叫,会增加不必要的复杂度,且无法保证CallerId设置生效。
  • 确保回调参数正确提取:除了DialCallerId,你也可以在转接座席B时,通过statusCallback将客户号码存入数据库,再在catchNoAnswer时从数据库读取,避免参数丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:55:20