XCC API
呼叫场景
注意事项:
- 在有电话呼入时,Ctrl 在收到
START
消息后应该在 10 秒内调用Accept
或Answer
接口接管呼叫。 - 除了一些特殊应用(如回彩铃等),应该尽快应答。某些 PSTN 网管在应答前不允许与对方语音交互,未应答的呼叫一般也会被对方超时拆线(如 60 秒)。
- 应答后,在有延迟的中继网管情况下,可能出现放音的前几个字对方听不到的情况,这时可以在应答后延迟 1-2 秒再发送后续指令。
- 在外呼时(尤其是在对接 PSTN 网关时),Dial 接口会在收到媒体时返回(如 SIP 中的 183 消息),如果需要在应答后返回,收需要加
ignore_early_media=true
参数。
简单 IVR
- Ctrl 监听
cn.xswitch.ctrl
- Ctrl 收到
Event.Channel(state = START)
- Ctrl 执行
Accept
或Answer
- Ctrl 调用 Play 或 TTS 播放欢迎音
- Ctrl 调用
ReadDTMF
或DetectSpeech
检测按键或语音 - Ctrl 检查到语音后调用后续操作
桥接
桥接即将两条独立的腿接到一起,使双方可以通话。
简单桥接
这种模式最初只有一条腿,执行Bridge
接口创建另一条腿。
a-leg
呼入,或者使用Dial
外呼建立,在a-leg
上调用Bridge
接口发起另一路呼叫,呼叫成功后。使用如下控制逻辑:
NONE
:互不控制。在这种模式下,不管任意一方挂机,都不影响另外一方。另一方仍处于PARK
状态,可以执行后续的逻辑,如转“评价”等。CALLER
:主叫挂机另一方自动挂机,但被叫挂机不影响主叫侧。CALLEE
:被叫挂机另一方自动挂机,但主叫挂机不影响被叫侧。ANY
:主被叫控制。在这种模式下,只要Bridge
成功,双方开始通话后,任一方挂机另一方自动挂机。控制比较简单。
如果任一方不能自动挂机(在另一方挂机后己方回到PARK
状态),则应该在Bridge
成功后,等待UNBRIDGE
事件到来后,再执行下一步操作。
呼叫不成功处理
在上述的简单桥接的情况下,如果呼叫不成功,则flow_control
不起作用。需要使用contine_on_fail
参数控制。
true
:默认,这种情况下a-leg
会继续处于 PARK 状态,这时候可以重试呼叫(Bridge),或者使用一个备用号码或备用网关进行呼叫(Bridge) false
:自动挂机。 原因列表:以逗号分隔的 FreeSWITCH 原因列表,如USER_BUSY,NO_ANSWER
。
使用该参数可以实现遇忙转移、无应答转移、通过第二路由或第二网关重新呼叫等。
如果呼叫不成功,可以根据Bridge
返回结果中的原因值(cause
)决定下一步该怎么做。
ChannelBridge
适用于两条腿已经存在的情况。也可以通过flow_control
参数控制是否自动挂机。
机器人外呼
- Ctrl 调用 Dial 进行呼叫。
- Dial 返回后,Ctrl 播放欢迎音,或调用检测 DTMF 或进行语音识别。
- Ctrl 根据收到的结果做下一步动作。
- 如果需要转坐席,调用 Bridge 呼叫座席,或使用 ChannelBridge 桥接一个已经存在的座席(可能是通过 Dial 呼出的,或座席主动呼入并等待的)。