顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-群集方案

群集方案

群集介绍

在大规模的外呼或者呼入系统,比如整个系统需要1万并发,单机最高也就3000-5000并发,这时候就需要多机群集了。顶顶通呼叫中心中间件使用redis数据库,多个FreeSWITCH(mod_cti)连接同一个redis就可以很容易的配置成群集系统。

群集中的分机管理

在群集系统中,转接分机是最棘手的问题,因为分机一般只注册到一个FreeSWITCH上面。顶顶通呼叫中心中间件把分机注册信息和当前通话信息存储到redis里面,转接分机的时候,从redis中获取分机注册的FreeSWITCH ip,然后把呼叫转给这个FreeSWITCH,这样分机只需要注册到群集中的任意一个FreeSWITCH,就可以接听群集中的所有FreeSWITCH的来电了。
转接流程: 呼叫分机1000

  1. 判断分机1000注册在哪个FS
  2. 如果注册在本机直接呼叫1000 (拨号串 user/1000 )
  3. 如果注册到其他fs, 呼叫1000送到指定fs(拨号串 sofia/cluster/1000@fsip)
  4. 1000实际注册的fs接收到呼叫1000的请求,执行呼叫1000

群集配置

分机线路配置

单机版本使用 拨号串配置为 user/120 ,群集版本 拨号串配置为 cluster/120

拨号方案配置

以下配置存为json文件,ccadmin工具拨号方案导入一下。

{
"version": 2,
"cti_dialplan_extension": {
"群集分机": "{\"condition\":[{\"field\":\"${sip_h_X-cti_dialer_number}\",\"action\":[{\"application\":\"export\",\"data\":\"nolocal:sip_invite_req_uri=sip:${sip_h_X-cti_dialer_number}@$${local_ip_v4}\"}],\"expression\":\".+\",\"break\":\"never\"},{\"field\":\"\",\"action\":[{\"application\":\"export\",\"data\":\"process_cdr=false\"},{\"application\":\"bridge\",\"data\":\"user\\\/${destination_number}\"}]}]}"
}
}

image-20230129174250292

呼叫路由配置

添加一个名为cluster的呼叫路由启用 群集分机 。

SIP配置

添加一个名为 cluster的sip profile,以下几个配置按如下修改,其他用默认的。
. 呼叫路由:cluster
. sip-port:$${cluster_port}
. sip-ip:$${local_ip_v4}
. rtp-ip:$${local_ip_v4}
. apply-inbound-acl:cluster
. disable-register:true
. auth-calls:false
. auth-calls-acl-only:false

配置文件配置

acl配置

image-20230129174609849

变量配置

image-20230129174856602

private_vars.xml (群集中不同的fs单独配置本机外网IP)

<include>
<X-PRE-PROCESS cmd="set" data="external_ip=本机外网IP"></X-PRE-PROCESS>
<X-PRE-PROCESS cmd="set" data="cluster_ip=如果群集互通用的profile配置sip-ip是$${local_ip_v4},这个配置删除,如果是单独IP,这里设置互通IP"></X-PRE-PROCESS>
</include>

cti.conf.xml (群集中所有fs配置相同的domain)

分机注册和呼叫信息

存储在 cti_userinfo@demo,例子信息如下:

{
"FreeSWITCH-Switchname": "VM-16-17-centos",
"register": {
"Hostname": "VM-16-17-centos",
"IPv4": "10.0.16.17",
"IPv6": "fe80::5054:ff:fe8f:6041",
"cluster_ip": "101.43.12.232",
"cluster_port": "11452",
"network-ip": "112.49.72.202",
"user-agent": "www.ddrj.com",
"status": "Registered(UDP-NAT)",
"Timestamp": "1674986104401505"
},
"calls": [
{
"Unique-ID": "9ac84aa5-b9fb-4517-b2eb-78a0e3d15420",
"Created-Time": "1674986356521511",
"Answered-Time": "1674986356541507",
"Call-Direction": "inbound",
"Call-Number": "8001",
"Timestamp": "1674986356541507"
}
]
}

控制群集中不同fs的外呼并发

自动外呼配置加载优先级,第一步加载 cti_queue_dialer_task@template【队列外呼母版】 第二步加载 cti_queue_dialer_task@域名【队列外呼】 第三步加载cti_queue_dialer_task@主机【队列外呼主机】。要控制指定fs某个任务的并发,只需要在cti_queue_dialer_task@主机里面添加一个同名的任务,然后设置一下并发就可以了,其他参数不要设置,会使用 cti_queue_dialer_task@域名同名任务的配置。