XCC API
Dialplan 接管
XSwitch 的mod_xcc
模块中实现一个XCC
Dialplan 接口,使用该 Dialplan 后,XSwitch 在每次查询 Dialplan 时都会向 Ctrl 发送request
请求。
- subject:
cn.xswitch.ctrl
- method:
XCtrl.Dialplan
Ctrl 侧返回一个数组:
[ {"app": "answer", "data":""} {"app": "echo"} ]
XSwitch 会顺序执行数组中的app
,这些app
都是 XSwitch 原生的 Application。
在实际应用中,有时候我们在发给Ctrl的Event.Channel事件中需要携带一些指定的通道变量,或者在使用或者中想新增一些新的通道变量,通常需要可以修改中间件ctrl,调用xcc api setvar来实现,但这样不够灵活,再比如想要对不同业务类型的呼叫携带不同的通道变量,对Ctrl来说比较复杂,因此因此我们发明了xset
Application,xset
可以很好的解决这些问题。使用xset
后Ctrl 侧返回数据举例如下:
[ {"app": "xset", "data":"key1"} {"app": "xset", "data":"key2=val2"} {"app": "answer", "data":""} {"app": "echo"} ]
可以看到上面例子中xset有两种不同的用法,两种不同的用法对应xset
的两种模式:
通道变量订阅模式:比如上面例子中的key1就是纯订阅模式,如果通道变量key1存在,那么后续的Event.Channel事件中将携带该通道变量对应的随路数据。
设置通道变量并且订阅此变量模式:比如上面例子中的key2=val2,就是设置通道变量名为key2,值为va2,所以此模式等同于XSwith中的原生
set
Application + 上面的模式一。XSwitch会设通道变量key2,值为val2,并且后续返回的Event.Channel事件中将携带该通道变量对应的随路数据val2。
所以在实际生产中,可以根据需要,灵活的选择适合的模式。