XCC API

呼叫场景

注意事项:

  • 在有电话呼入时,Ctrl 在收到START消息后应该在 10 秒内调用AcceptAnswer接口接管呼叫。
  • 除了一些特殊应用(如回彩铃等),应该尽快应答。某些 PSTN 网管在应答前不允许与对方语音交互,未应答的呼叫一般也会被对方超时拆线(如 60 秒)。
  • 应答后,在有延迟的中继网管情况下,可能出现放音的前几个字对方听不到的情况,这时可以在应答后延迟 1-2 秒再发送后续指令。
  • 在外呼时(尤其是在对接 PSTN 网关时),Dial 接口会在收到媒体时返回(如 SIP 中的 183 消息),如果需要在应答后返回,收需要加ignore_early_media=true参数。

简单 IVR

  • Ctrl 监听cn.xswitch.ctrl
  • Ctrl 收到Event.Channel(state = START)
  • Ctrl 执行AcceptAnswer
  • Ctrl 调用 Play 或 TTS 播放欢迎音
  • Ctrl 调用ReadDTMFDetectSpeech检测按键或语音
  • 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 呼出的,或座席主动呼入并等待的)。
录音