线路和线路组
- 每个线路可设置最大并发数
- 每个线路可设置休息时间,比如FXO网关一个电话线呼叫一次后,都需要等待一会儿,才可以继续拨打第二通电话,有了休息时间这个参数,就可以解决这个问题了。
- 重拨,可以根据SIP从错误代码,挂断原因,通话时间和呼叫时间设置是否需要重拨。
- 并发数,可以设置一个线路并发数,并发数超过了,就可以自动跳过这个线路。
- 优先级,可以给线路设置优先级,这样就可以实现主用线路和后背线路了。
线路配置
可以配置每个线路的并发,呼叫间隔,支持故障自动停用和自动恢复(主叫号码,被叫号码,语音编码等基础功能肯定也是支持的)。
cti_line@domain [哈希表]
- key 线路名字
value 线路配置JSON格式
{
"params": {
"count": 1,
"rest": 1000,
"fault_threshold": 0,
"fault_try_interval": 0
},
"variables": {
"origination_caller_id_number": "主叫号码"
}
}
- params 参数
- count [数字类型] 并发
- rest [数字类型] 呼叫一次后的休息时间,单位毫秒。对于多个并发的线路就是呼叫间隔,对于坐席,也可用于设置话后处理时间。
- fault_condition [对象类型] 失败条件(排队模块发起的呼叫未接通都认为呼叫失败,会忽略这个参数。)
- connect_time [数字类型] 接续时间小于这个值,认为呼叫失败,大于这个值,哪怕没接通也不认为是呼叫失败。如果不设置未接通的都是呼叫失败。单位毫秒。
- fault_threshold [数字类型] 失败阈值
- fault_try_interval [数字类型] 故障超过阈值的重试间隔,单位毫秒
- dialstring [字符串类型] 拨号串。比如usr/1000,sofia/gateway/ims/${destination_number},${destination_number}会替换成实际的被叫号码
- areacode [字符串类型] 本地区号。如果配置了本地区号,被叫手机号码归属地和本地区号不同会自动加0
- variables 通道变量
- origination_caller_id_number [字符串类型] 主叫号码
- origination_caller_id_name [字符串类型] 主叫名字
- ignore_early_media=true [字符串类型] 忽略早期媒体
- absolute_codec_string [字符串类型] 编码持续
- origination_uuid [字符串类型] UUID
- originate_timeout [字符串类型] 呼叫超时 必须和(ignore_early_media=true )一起使用才生效。单位秒
- employee_id [字符串类型] 座席工号 ,排队呼叫,播报工号用
- bill_least1s [字符串类型] 最少计费1秒,只要接通了,最少计费1秒。
- bill_round [字符串类型] 每秒计费精度,大于多少毫秒按1秒计费。0或者不设置使用默认方式:应答时间和挂机时间精度到秒直接相减。
- bill_round_minute [字符串类型] 按分钟上浮,如果只差多少毫秒就是整分钟,就上浮到整分钟计费。0或者不设置不使用这个配置。比如通话时间是119.2秒,这个参数设置600,上浮后是119.8秒,计费为119秒。如果设置为800,上浮后是120秒。
线路组配置
可以把多个线路配置成一个线路组,循环使用,自动跳过故障线路,线路组支持根据呼叫错误代码和通话时间来配置重拨规则,线路组支持多线路轮询。
cti_line_group@domain [哈希表]
- key 线路组名字
value 线路组配置JSON格式
{
"redialer_count": 3,
"redialer_rule": {
"hangup_sipcode": "408,500-499",
"hangup_cause": "16,USER_BUSY",
"duration": 10,
"bill": 1
},
"no_redialer_rule": {
"hangup_sipcode": "200",
"hangup_cause": "NO_ROUTE_DESTINATION",
"duration": 10,
"bill": 1
},
"line": {
"0.first", "lien1,line2",
"1.second", "line3,line4"
}
}
- redialer [数字类型] 重拨次数,重播规则先判断是否符合no_redialer_rule中的任意一个规则,如果符合就不重拨,如果不符合在判断是否符合redialer_rule中的任意一个规则,如果符合就重播,如果都不符合,就不重拨。注意:重播规则只有自动外呼时有效。如果只有一个线路并且并发设置为1时,不会重播。因为是先重播,然后释放线路并发。
- redialer_rule 符合规则重拨
- hangup_code [字符串] 结束通话的协议代码
- hangup_cause [字符串] 结果通话的原因(switch_call_cause_t)
- duration [数字类型] 呼叫的持续时间小于这个值,单位毫秒
- bill [数字类型] 接通时间小于这个值,单位毫秒
- no_redialer_rule 符合规则不重拨
- hangup_code [数字数组类型] 结束通话的协议代码
- hangup_cause [数字数组类型] 结果通话的原因(switch_call_cause_t)
- duration [数字类型] 呼叫的持续时间大于这个值,单位毫秒
- bill [数字类型] 接通时间大于这个值,单位毫秒
- line 使用的线路,可实现多个优先级,例子说明:先frist中查找空闲线路,如果frist都不可用,就在second中查找空闲线路,可以自定义多个梯队,按字母顺序排队。动态线路支持:线路名字设置为前缀set:集合名,就会通过redis的set中获取线路集合,方便动态修改线路组成员,线路成员集合修改后,需要执行配置改变通知,cti模块才会重新加载线路组成员。
动态签入说明
比如坐席线路组,需要坐席登陆系统的时候签入,退出系统的时候签出。
{ |
其中 122 120是静态成员。比如123要动态签入,在redis中创建一个 key 名字:cti_line_dynamic_组名
, 类型:set
。 然后把 123 加入这个set, 执行 配置改变通知 ,就动态签入了。动态签出就是从cti_line_dynamic_组名
中删除123,然后执行配置改变通指。
拨号方案中使用线路组
linegroup/线路组名称/电话号码<action application="bridge" data="linegroup/线路组名称/电话号码"/>
originage 使用线路组
originate linegroup/线路组名称/电话号码 &echo |
线路名和线路组名字记录到CDR
1.2.20版本开始 提供了2个默认变量 线路名 cti_line_name 线路组cti_line_group_name。
cti.json里面cdr的配置”fields”: [ “cti_line_name”,”cti_line_group_name”]添加这2个变量,然后cdr表添加这2个字段就可以了。
1.2.23版本添加一个变量 cti_dial_number 记录线路实际外呼的号码。
配置改变通知
PUBLISH 通知到[通道] config@domain。
{ |
- type,config_change:配置改变
- table,那个表修改了,只需要@前面的。
- key table的主键,比如任务表名字。
查看fs内存中线路和线路组信息
有时候排查问题,需要看看内存中线路或者线路组的信息
查看线路信息执行fs控制台命令
cti show line 线路名
,或者shell执行fs_cli -x "cti show line 线路名"
查看线路组信息执行fs控制台命令
cti show line_group 线路组名
,或者shell执行fs_cli -x "cti show line_group 线路组名"
,会先输出线路组配置,然后输出线路组中每个线路的配置。