队列呼叫任务
cti_queue_dialer_task@template [哈希表]
- key任务名字
value 任务配置JSON格式
{
"params": {
"enable": true,
"line_group": ["外呼使用的线路组"],
"limit":100,
"start_time": "2020-1-20 12:00",
"stop_time": "2020-1-22 12:00",
"work_hour": [{
"wday":"-1",
"begin": "8:00",
"end": "12:00"
}, {
"wday":"0",
"begin": "14:00",
"end": "18:00"
}],
"work_week": [1,2,3,4,5],
"holiday": [{
"begin": "2020-1-20 12:00",
"end": "2020-1-21 12:00"
}, {
"begin": "2020-1-21 12:00",
"end": "2020-1-22 8:00"
}],
"number_queue": "号码队列",
"destination_extension":"8888",
"destination_dialplan":"XML",
"destination_context":"default"
},
"variables": {
"origination_caller_id_number": "主叫号码",
"absolute_codec_string": "pcma,pcmu,g729"
}
}params 任务参数
enable [布尔] 是否启用任务
line_group [数组] 外呼使用的线路组,如果配置多个线路组,第一个线路组呼叫失败,会使用第二个继续呼叫。
limit [数字] 任务并发,同时呼叫多少号码。
cps [数字] 呼叫速度,1秒最多呼叫多少号码,如果10秒呼叫1个,可以设置0.1。1秒呼叫小于1个的计算方法: 1个÷ 多少秒。比如 20秒呼叫一个,就是1÷20=0.05,CPS 就设置0.05
- cps和limit 的关系:比如并发设置为100,当前存在的通话是0个,呼叫速度设置为10时,第一秒发起10个呼叫,第二秒再发起10个呼叫,以这样的速度发起呼叫,直到通话总数达到并发就停止发起新的呼叫。如果有电话挂断了,那么以1秒10个的速度继续发起新的呼叫,使通话总数达到并发设置的值。
start_time [字符串] 任务启动时间
stop_time [字符串] 任务停止时间
work_time [数组] 任务工作时间,可以配置多个时间范围
- wday [字符串] 周几,用来支持根据周几来设置不同的工作时间,-1或者不设置是不管星期几都使用这个时间,0代表星期日,1是星期一,6是星期六,如果设置了只有星期几匹配了,才使用这个时间,work_week也是需要设置的。
- begin [字符串] 开始时间
- end [字符串] 结束时间
work_week [数组] 工作日,参数是星期,就是每个星期的那些天是工作日。比如 星期一到星期五是工作日,0代表星期日。
holiday [数组] 放假时间,参数是具体的放假时间范围。
number_queue 任务关联的号码队列。默认使用redis的list,如果使用前缀set:就是使用redis的set作为号码队列。如果需要防止重复号码以及动态删除指定号码以及乱序呼叫可以用set作为号码队列。
- set: 使用redis的set作为号码队列。如果需要防止重复号码以及动态删除指定号码以及乱序呼叫可以用set作为号码队列。
- http:// 详细看通过http接口获取号码章节
destination_extension 应答后转接目的分机
destination_dialplan 应答后转接目的拨号方案类型,比如XML
destination_context 应答后转接目的上下文,比如default,public
service_line_group 根据空闲座席数量来控制外呼并发
call_multiple 一个空闲座席呼叫多少个并发
queue_limit 排队中的呼叫大于座席总数乘以这个值就停止呼叫(排队中并发【已经接通进入排队的电话】大于 queue_limit【一般设置0.1到1之间】 乘以 座席总数【不是空闲座席是是座席组的总人数】,就停止呼叫。)防止排队中的电话超过座席数。
cps_multiple 一个空闲座席一秒最多呼叫多少个号码,建议设置1-3。
blacklist 配置一个redis的set,用于设置禁止呼叫的黑名单号码。
ttsconfig tts配置,可以配置为tts地址比如http://127.0.0.1:9989/tts,也可以配置为话术名,就会使用这个话术的tts配置。
导入的号码变量名如果是tts_前缀,会呼叫前就预先调用TTS,这里可以设置使用哪个话术的TTS配置,变量如果包含url保留字符需要先进行url编码。tts文本内容也不能包含”!”,导入时候需要去除!。
- variables 任务的通道变量 ,线路配置的通道变量优先级更高
- origination_caller_id_number [字符串类型] 主叫号码
- origination_caller_id_name [字符串类型] 主叫名字
- ignore_early_media=true [字符串类型] 忽略早期媒体
- absolute_codec_string [字符串类型] 声音编码
cti_queue_dialer_task@domain[哈希表]
- key 任务名字
- value 任务配置JSON格式,和 cti_queue_dialer_task@template 含义一样,未配置的会使用 cti_queue_dialer_task@template 模板配置。
号码队列 [列表]
支持文本和JSON 2中格式。如果不需要给单独号码设置通道变量,可以直接用文本格式,直接插入号码文本到list。 {
"params": {
"number":"被叫号码"
},
"variables": {
"origination_caller_id_number": "主叫号码",
"absolute_codec_string": "pcma,pcmu,g729",
"origination_uuid":"uuid"
}
}
`
- number 被叫号码
- variables 通道变量,优先级 号码配置(本配置) < cti_queue_dialer_task@domain < cti_queue_dialer_task@template < cti_line@domain
- origination_uuid 可以通过设置号码变量origination_uui来设置呼叫这个号码时候的call id。注意需要使用UUID,来保证唯一性。
通过http接口获取号码
取号
POST或者GET方式,URL参数地址:http://第三方服务器地址?action=take&task=外呼任务号&maxmum=本次可返回的最大号码量&sequence=上一次返回的顺序号
返回内容要求
{ |
- sequence: 顺序号,第一次请求sequence为0,后台返回一个序号,接口记录下这个序号,下一次请求的时候使用sequence设置为最后一次请求响应的序号。假设一个请求接收数据的时候网络故障了或者出错了,如果没有ACK确认机制,后台就没办法判断是否取号成功了,就会出现丢号。
有了顺序号,就可以实现类似ACK的机制,后台如果发现请求的顺序号是上上次次的,就可以认为最后一次取号失败,重新返回最后一次的号码。
如果顺序号是最后一次响应的,就可以认为上一次区号成功了。 - code:返回码, 小于0:错误,错误信息再msg里面。0:表示正常返回,1:停止任务。
- msg:错误信息
- numberlist:号码列表,请看上面 号码队列 节 的号码格式,支持JSON和文本格式。
- interval:下次取号最小间隔,可防止接口调用太频繁,单位毫秒。
- 回收号码
任务停止时,还未呼叫的号码会回退给号码接口。
POST方式,URL参数地址:http://第三方服务器地址?action=back&task=外呼任务号&sequence=上一次返回的顺序号
post的数据内容:{
"numberlist":[
"被叫号码1","被叫号码2",{josn格式的号码数据}
]
}
如果没有未呼叫完的号码,numberlist为空。
定时呼叫
cti_schedule_dialer_config@domain [哈希表]
- key 配置名字
- value 配置信息,JSON格式
{
"params": {
"line_group": ["外呼使用的线路组"],
"destination_extension":"8888",
"destination_dialplan":"XML",
"destination_context":"default"
},
"variables": {
"origination_caller_id_number": "主叫号码",
"absolute_codec_string": "pcma,pcmu,g729"
}
}
cti_schedule_dialer_number@domain [有序集合]
- score 计划呼叫的时间戳
- string 号码配置json,和号码队列的号码配置一样。
{ |
- expires 过期时间(unix时间戳,1970年1月1日(UTC/GMT的午夜)开始所经过的秒数),当前时间超过这个时间,就不会呼叫这个号码了,如果值为0,忽略这个参数。如果没可用线路时,重新写回redis,score设置为当前时间+60,如果expires为0,或者超过了expires,就不会写会redis了。
配置改变通知
config@all config@domain [通道]
cti_queue_dialer_task@template改变PUBLISH 通知到 config@all,cti_queue_dialer_task@domain改变PUBLISH 通知到 config@domain。
{ |
- type,config_change:配置改变
- table,那个表修改了,只需要@前面的。
- key table的主键,比如任务表名字。
查看fs内存中外呼任务信息
有时候为了诊断问题需要查看 内存中外呼任务的信息,可以执行fs控制台命令 cti show queue_dialer 任务名
或者shell执行 fs_cli -x "cti show queue_dialer 任务名"
可以输出外呼任务的配置信息和统计信息。
- enable:false (任务是否启用)
- call_limit:1 (任务最大并发)
- number_queue:number_robot (号码队列)
- line_group:[default(idle=0)] (外线线路空闲的并发,idle要大于0)
- start_time:2021-07-28 08:52:20 (开始时间)
- stop_time:2023-07-28 08:52:22 (停止时间)
- work_hour:[wday:-1 08:00-23:00] (上班时间)
- work_week:[0,1,2,3,4,5,6] (工作日)
- service_line_group: (坐席线路组)
- service_line_group_idle:0 (坐席线路组空闲坐席个数)
- call_count: 当前呼叫中的总数(包含未接通和已接通)
- answer_count: 外呼接通的总数
- bridge_count: 和坐席通话中的总数
- cps_last: 最近一个CPS周期发起了多少个呼叫(如果cps大于1,cps周期就是1秒,如果cps小于就是1÷cps)