Twilio Conference外呼场景坐席收听客户侧振铃实现咨询
可行性结论
该需求完全可实现。现有方案无法听到振铃音的核心原因是:坐席提前进入独立会议房间后,与客户侧的外呼链路完全隔离,客户侧的振铃状态、回铃音无法传输到坐席所在的会议通道,因此坐席只能听到会议的默认等待音或静音。
具体实现方案
不要在外呼发起时直接将坐席拉入空会议等待,调整全链路逻辑如下:
- 网页端发起外呼请求后,服务端首先建立与坐席的通话连接,坐席暂时处于等待状态,不进入会议,将坐席对应的通话SID记录到服务端缓存中。
- 调用Call创建接口发起客户侧外呼时,不再直接将动作URL设为会议加入地址,额外配置呼叫状态回调地址,订阅全量呼叫状态事件,核心代码示例:
Call customerCall = Call.creator(new PhoneNumber(toNumber), new PhoneNumber(fromNumber), URI.create("customer-answer-endpoint") ) .setStatusCallback(URI.create("call-status-endpoint")) .setStatusCallbackEvent(Arrays.asList("initiated", "ringing", "answered", "busy", "no-answer", "completed")) .setTimeout(60) .create();
- 服务端收到状态回调推送的
ringing事件(代表客户侧电话已开始振铃)时,调用坐席通话的更新接口,给坐席循环播放提前存储在服务端的标准回铃音,此时坐席听到的效果和普通外呼的振铃提示完全一致,核心代码示例:
Call.updater(agentCallSid) .setTwiml("<Response><Play loop=\"0\">/audio/ringback.mp3</Play></Response>") .update();
- 若收到
busy、no-answer、failed等异常状态事件,立刻更新坐席侧通话TwiML,停止播放回铃音,播放对应提示音(如“您拨打的用户正忙”“用户未接听”)后挂断坐席通话即可。 - 客户接听电话后,Twilio会请求之前配置的客户侧回调地址
customer-answer-endpoint,此时给客户返回入会TwiML,同时同步更新坐席侧的通话TwiML,停止播放回铃音,将坐席也拉入同一个会议房间,双方即可正常通话。
客户侧返回的TwiML示例:
<Response> <Dial> <Conference startConferenceOnEnter="true" waitUrl="/audio/wait-music.mp3">OutboundCall_${customerCallSid}</Conference> </Dial> </Response>
坐席侧更新的代码示例:
Call.updater(agentCallSid) .setTwiml("<Response><Dial><Conference endConferenceOnExit=\"true\">OutboundCall_${customerCallSid}</Conference></Dial></Response>") .update();
配置说明:会议的
startConferenceOnEnter属性设为true,可保证第二个参会人进入时会议立刻启动,无需等待;坐席侧入会配置endConferenceOnExit="true",可实现坐席挂断后会议自动解散,避免客户侧残留通话;waitUrl配置为自行存储的等待音乐地址,可避免极端情况下参会人提前进入会议听到静音。
内容的提问来源于stack exchange,提问作者Abraham Arnold
相关产品推荐
相关产品推荐

