顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-线路配置

线路和线路组

  1. 每个线路可设置最大并发数
  2. 每个线路可设置休息时间,比如FXO网关一个电话线呼叫一次后,都需要等待一会儿,才可以继续拨打第二通电话,有了休息时间这个参数,就可以解决这个问题了。
  3. 重拨,可以根据SIP从错误代码,挂断原因,通话时间和呼叫时间设置是否需要重拨。
  4. 并发数,可以设置一个线路并发数,并发数超过了,就可以自动跳过这个线路。
  5. 优先级,可以给线路设置优先级,这样就可以实现主用线路和后背线路了。

线路配置

可以配置每个线路的并发,呼叫间隔,支持故障自动停用和自动恢复(主叫号码,被叫号码,语音编码等基础功能肯定也是支持的)。

cti_line@domain [哈希表]

  1. key 线路名字
  2. value 线路配置JSON格式

    {
    "params": {
    "count": 1,
    "rest": 1000,
    "fault_threshold": 0,
    "fault_try_interval": 0
    },
    "variables": {
    "origination_caller_id_number": "主叫号码"
    }
    }

line_template.png

  • 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 [哈希表]

  1. key 线路组名字
  2. 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"
    }
    }

line_group_template.png

  • 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模块才会重新加载线路组成员。

拨号方案中使用线路组

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":"cti_line",
"key":"abc"
}

{
"type":"config_change",
"table":"cti_line_group",
"key":"g1"
}
  • type,config_change:配置改变
  • table,那个表修改了,只需要@前面的。
  • key table的主键,比如任务表名字。

查看fs内存中线路和线路组信息

有时候排查问题,需要看看内存中线路或者线路组的信息

  • 查看线路信息执行fs控制台命令cti show line 线路名,或者shell执行fs_cli -x "cti show line 线路名"

    image-20220903095817738

  • 查看线路组信息执行fs控制台命令cti show line_group 线路组名,或者shell执行fs_cli -x "cti show line_group 线路组名",会先输出线路组配置,然后输出线路组中每个线路的配置。

    image-20220903095855016