接口控制质检的开启和关闭
# 功能介绍
顶顶通呼叫中心中间件的实时质检功能由两个模块实现,分别是:cti_asr
和cti_qc
。
cti_asr
:负责调用asr,进行识别。cti_qc
:负责把识别出来的文字进行质检,如果有命中词库中的关键词,就执行对应的动作,如:挂断、播放警告音。
# 实现流程
# 1. 实现思路
质检功能是对语音识别出的文字进行质检,如果不启用语音识别,那么就不会进行质检。所以通过接口控制语音识别的开启关闭,就可以变相地控制质检功能的开启关闭。
# 2. 创建质检关键词组
例:在 CCAdmin->机器人->实时质检 中创建一个名称为keywords
的关键词组,然后配置该词组的关键词列表、触发命令、等级等。
# 3. 创建拨号方案
在 CCAdmin-Web->呼叫中心->拨号方案设置 页面创建一个拨号方案,名称:随时质检。这个拨号方案只有质检功能,没有语音识别功能。因为语音识别需要由接口来调用。
- 拨号方案中的
keywords
是需要质检的关键词组,如果需要质检其他关键词组,可将该拨号方案中的keywords
替换成需要质检的关键词组名称。 - 拨号方案中第一行的动作是对本端进行质检,第二行的动作是对对端进行质检。
<action application="set",data="execute_on_answer_qc=cti_qc_session:keywords"/>
<action application="export",data="nolocal:execute_on_answer_qc=cti_qc_session:keywords"/>
2
# 4. 使用场景
不同使用场景需要在不同的呼叫路由中启用上一步骤创建的拨号方案。例如:
自动外呼进入排队转坐席:
acd
呼叫路由启用随时质检
这一拨号方案,并且将该拨号方案移动到进入排队
的上方。自动外呼进入机器人:
robot
呼叫路由启用随时质检
这一拨号方案,并且将该拨号方案移动到json话术
或者http话术
的上方。电话呼入:
external
呼叫路由启用随时质检
这一拨号方案,并且将该拨号方案移动到最上方。手动外呼:
internal
呼叫路由启用随时质检
这一拨号方案,并且将该拨号方案移动到呼叫外线
的上方。
# 5. 执行FreeSWITCH 命令接口
用法:/api?token=${token}&action=FsTerminal
{
"cmd":"fs_api",
"commandline":"FreeSWITCH 命令"
}
2
3
4
# 6. 获取uuid
在调用ASR的接口前,需要获取到操作通道的UUID。通过操作通道UUID来启动asr识别主叫或者被叫。获取通道uuid的freeswitch命令:cti show channels
,在 CCAdmin-Web->运维调试->接口测试 页面中可以进行接口测试:
例:号码1001呼叫号码1002,在呼叫的过程中利用命令获取号码1001通道uuid。
# 7. 启动asr识别
asr启动就会识别用户所说的话,然后就会对识别的文字进行质检。
例:如果我想识别号码1001所说的话,那么就需要利用号码1001的通道uuid开启这个通道的asr。这样就可以识别号码1001所说的话,然后对识别的文字进行质检。
开启asr识别的API
uuid_cti_start_detect_speech UUID 127.0.0.1:9988 0 150 1000 3 0.2 0 60000 '' '' 0 '' 1
1
# 8.关闭asr识别
关闭asr就会停止识别用户所说的话,质检也会跟着停止了。
例:如果我不想质检识别号码1001了,那么就关闭号码1001通道的asr。这样就停止对号码1001的质检了。
关闭asr识别的API
uuid_cti_stop_detect_speech uuid
1
# 通知配置
# cti.json配置
将下面配置配置到cti.json文件中,可以把质检结果推送到redis和mysql中:
"qc": {
"log": true,
//通知到数据库的配置,如果不需要通知到数据库可删除该配置,后续配置的数据库表也不用添加。
"database":{
"table":"qc_record"
},
"redis": {
//asr通知,默认一句话说完了才发送通知,如果需要通知识别的中间件结果 需要设置通道变量 qc_push_intermediate_result=true 就可以发送实时的识别结果,注意:中间件结果只支持通道到redis的channel。
"qc_asr": {
"channel": "cti_qc",
"list": "cti_rt_call_qc_asr"
},
//命中关键词通知配置。
"qc_hit": {
"channel": "cti_qc",
"list": "cti_rt_call_qc_hit"
},
//质检启动通知配置。
"qc_start": {
"channel": "cti_qc",
"list": "cti_rt_call_qc_start",
"variables": [ "caller_id_number", "callee_id_number", "direction" ] //该参数可添加所需的字段,在质检开启时将这些字段推送到redis中。默认字段说明:"caller_id_number":主叫,"callee_id_number":被叫, "direction":方向。
},
//质检停止通知配置。
"qc_stop": {
"channel": "cti_qc",
"list": "cti_rt_call_qc_stop"
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 质检结果写入数据库
cti.json 配置文件里面 qc.database.table 配置上记录了表名,就会把质检结果推送到数据库中。那么需要在数据库中创建表:
CREATE TABLE `qc_record` (
`uuid` VARCHAR(50) NOT NULL,
`datetime` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
`hit` JSON NULL DEFAULT NULL,
`speak` JSON NULL DEFAULT NULL,
`level` TINYINT(3) NULL DEFAULT NULL,
PRIMARY KEY (`uuid`) USING BTREE
)
2
3
4
5
6
7
8