ipcc-1-ipcc整体架构

1.ipcc总体架构模块

2.系统模块图

2.1 acd模块

  1. 1.acd模块
    acd在平台中的位置

  2. 2.配置坐席呼出
    https://blog.csdn.net/weixin_34242819/article/details/90492301
    对于登录坐席工号进行呼出的情况,我们有如下步骤:1.坐席签入后能上线成功 2.坐席能够正确路由到运营商的sip电话进行呼叫

2.1.1 坐席签入后能上线成功
坐席上线

1.在cti_work表中找到分机,如:100003。
2.配置100003到cti_work_queue中去
3.在cti_outcaller中配置上线的主叫

3.在cti_telno中配置分机路由:100003分机呼出使用内线字段、长度在1-6(因为:100003是6位数)、

4.查看/cc/bin/log下面的日志:

发现话机没有注册,打开一看:是注册的服务错了

5.如果出问题,查看Acdgate模块下Tomcat日志,在查看/cc/log/acd_acd01.log下的日志
acd_acd01.log里面r:开头的。

机器人锁定坐席转人工

我们在排查之前可以关掉hmp,设置:hmpcheck=0

1.在确保坐席能够上线情况下,先配置转人工的机器人场景:1013502011

2.在批次场景里面创建人批次场景,然后创建对应批次,进行外呼
3.查看acd_acd01_xxxx.log下的日志:锁定坐席成功与否?—>TRptque::getandlockagent

4.外呼后查看日志:httpg_httpg01_xxxx.log

查看机器人转人工文档说明书知道:”att_status”:”0”不在线,”att_status”:”1”在线
5.如果和ai交互时候,传递的参数不对的话,我们查看acd模块:
TRptque::getandlockagent res=[-1]表示没有获取到空闲坐席
6.如果转人工时候,坐席挂不断,说明是坐席表里面的相同workno有多条。

6.正常交互如下:
acd:2019-09-15 09:48:03.453 TRptque::getandlockagent res=[0], workno=[100002] quueueid=[52] usid = [90046126300563]
httpg:ai获取空闲坐席:key:[{“userid”:”900461263”,”inaction”:0,”inparams”:{“call_id”:”900461263”,”call_sor_id”:”15188317019”,”call_dst_id”:”051289578445”,”att_status”:”1”}}].
ai转人工传递queueid:ok:0,resultbuf[{“ret”:0,”userid”:”900461263”,”outaction”:”11”,”outparams”:{“call_dst_id”:”051289578445”,”queue_id”:”52”,”call_id”:”900461263”,”inter_idx”:”8”,”call_sor_id”:”15188317019”}}].

2.1.2 正确路由到运营商的sip电话进行呼叫

1.acd.cfg配置(配置是不是开启did,did是优先级最高的,如果开启,呼叫客户的主叫号码将会是did号码-DID的中文意思是直接拨入,是运营商提出的概念,通过这个号码,运营商可以呼叫到voip系统内,freeswitch上实现外乎呼叫的方式为配置一个网关,指定运营商的接入号和密码,有呼叫这个号码时,运营商会把这个号码送给freeswitch。)

2.acd.cfg配置(设置使用的主叫号码:usefromcaller,如果想要使用cti_work里面的,需要配置为1)

3.配置坐席呼出的主叫显示:cti_outcaller

4.使用web页面上的软电话条进行呼叫,然后查看呼叫的结果里面是不是我们配置的主叫

从上面我们可以知道,坐席呼出时候是两通电话。

2.2.fsg模块

FSG模块作为:AG(CTI)和FS进行交互模块,其作用就是一个接口调用服务。
对应的配置文件是:/cc/cfg/fsg.cfg
对应的日志文件是:/cc/log/fsg**.log和/cc/bin/log/log*.log
其日志记录了ipcc内部和外部中继网络交互的日志详情。

2.2.1.fsg模块修改日志

有时候,我们为了排查和外部对接的错误信息时候,可以通过两种方式:
1.修改fsg的日志级别为6
2.通过tcpdump -w xx.cap抓包
以下为修改fsg的日志级别为6的设置

2.2.1.1.删除原来的fsg相关日志文件
  1. 删除/cc/bin/log文件目录下的文件
  2. 删除/cc/log/fsg*.log文件
    2.2.1.2.修改日志级别配置文件fsg.cfg
  3. 修改fsg.cfg里面SET下的日志级别文件为6

    acd在平台起到用户转座席排队,座席分配,座席操作控制等和座席呼叫相关的功能。
    2.2.1.3.以写入文件的方式启动fsg.sh
    进入/cc/bin下输入
1
fsg.sh restart > /cc/bin/log/xxx.log

2.3 ag模块

2.3.1 概述

AG在整个YC平台中起着集中管理的作用。AG模块就是我们常说的CTI模块。
AG起的作用有以下几点:
1、 管理多个适配节点的接入。
2、 统一对多个节点的电路进行全局编号。
3、 对电路进行分组管理。
4、 呼入电话路由相应的IVR流程进行处理。
5、 呼出电话路由到相应的电路组。
6、 管理呼叫电话分配媒体资源(播音,录音,会议,传真等媒体资源)

2.3.2 呼叫问题排查(AG问题排查)

理解T、HT、R、HR是理解ag模块的关键

  1. 1.按照流程来:T是收到 R是发送 HR是收到发送端的消息 HT是给T端返回信息
  2. 2.对于AG来说:T端是ACD、Dyflow等;R端是fsg
  3. 3.对于FSG来说: T端是ag R是fsapi
  4. 4.ACD等来说:T端是自己 R端是ag

我们查相关日志时候,先从ag模块(cti模块)查询起,然后一次找到T、R。
分析:看ag的日志—>这种交互ag的日志是两边都有的–>从ag里面开始分析—>平台挂机0、200是用户挂的—>从ag开始看确定消息在什么地方不对了 然后再分析fsg测 或者是ivr测的日志

2.日志文件模块

2.1.查看和机器人交互日志

和机器人交互日志都是通过ivr流程中http传数据,所以在httpg日志,需要看就提详细信息可以看dyflow日志

2.2.查看任务加载,工作日,时间段,呼叫情况
  1. 1.任务即是notify,但是任务在呼叫前任务加载,工作日,时间段都是在dbg_dbg01模块
  2. 2.查看任务呼叫情况:callnotify_callnotify01.log
  3. 3.查看任务调用api模块:callnotify_callnotifyapi.log
  4. 4.查看任务呼叫失败情况,没有数据插入到cti_cdr、ocm_result:查看callnotify_callnotifyfailsql.log

3.ipcc对接其他server

参考:https://blog.csdn.net/gredn/article/details/40581871

3.1 修改freeswitch配置

从平台架构我们知道,我们现在需要和外部第三方sipServer对接,首先需要打通各自的网络,然后就是配置相关的网管

  1. 1.进入freeswitch目录下freeswitch/conf/sip_profiles/external其中有外部网管模块。 拷贝存在的一个网关配置
  2. 2.修改gw3.xml中对接的外部sipServer地址和端口:
  3. 3.重启freeswitch
    进入freeswitch的bin目录停止fs:./freeswitch -stop
    进入freeswitch的bin目录启动fs:./freeswitch -nc -nonat
3.2 修改号码网管路由
  1. 1.修改cti_route表
    打开数据库表cti_route配置主叫外显号码和网关对应的关系
  2. 2.重启fsg
    进入/cc/bin目录下:执行:./fsg.sh restart
3.3 使用抓包工具抓包

对接完之后,如果电话不通,那么就需要使用wireshake进行网络抓包,分析包

4.ipcc对每个号码并发进行控制

在/cc/cfg/notify.cfg下的callnotify添加:examentline=1表明开启了号码并发设置

5.ipcc配置空号检测

5.1 安装空号检测
  1. 1.首先正常安装并启用空号检测da2(安装数据库、程序)
  2. 2.如果空号检测部署在一台服务器上,我们呼叫平台部署在多台服务器上,我们如何配置呢?
  3. 3.查看/usr/local/freeswitch/conf下面文件:da2.json
  4. 4.重启freeswitch:进入freeswitch的bin目录:执行:./freeswitch -stop 再执行:./freeswitch -nc -nonat
  5. 5.打开freeswitch客户端:
    1
    ./fs_cli -P 8031 -p testtest

  1. 6.在fs控制台客户端输入:da2 show

    出现上面问题说明成功,如果一直不成功检查对应数据库表
5.2 添加新的授权

部署新的话务平台节点时候需要添加新的授权,修改两个表:user,bill;

6.ipcc中cdr关于服务

  1. 1.服务水平只对呼入而言的 呼出不用管 calltype=100 and dir=1
  2. 2.starttime connecttime和endtime 是整个电话的开始 接起和结束时间
  3. 3.workstarttime 是电话进入acd的时间 workconnect是坐席接起电话的时间 workendtime是坐席服务结束的时间 acmtime 在呼入的时候是坐席开始振铃时间(注意 在呼出的时候是用户振铃时间)
  4. 4.acmtime是服务水平的统计标志
  5. 5.用户呼叫系统的全部电话(呼入我们目前都要进入ivr ):calltype<300 and dir = 1
  6. 6.坐席呼出用户的电话 calltype=100 || calltype=113||calltype=114 and dir=0
  7. 7.自动外呼呼出的电话 notifyid is not null
  8. 8.里面 connecttime workconnecttime字段很重要 判断是否接通的依据
  9. 9.建议:现在数据除了cdr表外 通话数据 坐席数据 其实已经通过ice推送给ccms了、ccms能不能做一些文件存储 然后通过一些外部工具进行数据分析、毕竟cdr是生产上的 不能频繁访问、 ZeroC ICE提供一种打补丁方式,名为IcePatch2。基本功能就是通过ICE通讯将服务器上的最近软件部署到各个客户端中,这间接的实现了文件传输功能,

7.ipcc中任务呼叫失败原因

8.ipcc中任务脚本通知

通过shell脚本的iniwrite和ice不能并存,如果用ice需要把iniwrite改成iniwrite1或者其他

9.ipcc中配置

ipcc各种配置请参考对应的doc文档。

2.空号检测模块搭建及录音库文件更新

注意:金服空号检测服务器由于私有云不能访问到外网,所以将空号检测license所在服务部署到了金服金融云。(金融云是连通公有云和私有云的桥梁)

空号检测服务daserver是根据局端返回的录音文件:然后通过asr识别来返回信令结果:dropcause

2.1服务搭建

  1. 1.解压da.tar.gz数据库
  2. 2.安装mysql
    centos6
    -yum install mysql-server
    -service mysqld start
    -chkconfig mysqld on

centos7
-yum install mariadb-server
-systemctl start mariadb.service
-systemctl enable mariadb.service

  1. 3.创建数据库da
    mysqladmin -uroot -p create da

  2. 4.导入数据到da
    mysql -uroot -p da < da.sql
    生成的数据库和表如下:

  3. 5.执行machinecode获取机器码,发给cdevelop@qq.com申请授权码,写入 license.txt .
  4. 6.根据安装文档word版本,配置数据库和JSON

  5. 7.启动daserver
    临时启动: ./daserver
    后台启动: nohup ./daserver &

注意:启动出现 ./daserver: relocation error: ./libssl.so.10: symbol private_ossl_minimum_dh_bits, version libcrypto.so.10 not defined in file libcrypto.so.10 with link time reference
一般是系统已经有了其他版本的ssl,删除 本目录的 libssl.so.10 文件

2.2更新录音文件库

电话在拨打过程中出现了运营商返回的错误信令:dropcause为480
通过查询da模块(空号检测模块)录制的录音知道:”您拨打的号码是非本地号码,请在拨打号码前加0” 我们知道空号检测模块的录音库中没有识别到此空号录音,所以我们需要更新录音库(使用da提供的win下的工具samplemgr,连接da所在license的库数据库da),有时候我们是无法直接连接license所在的da数据,而只能连接测试数据库,所以我们需要在测试环境下操作,然后把对应的数据替换到生产库。

2.2.1更新da语音库
  1. 1.打开samplemgr,连接对应的数据库

  2. 2.启动服务,输入key(key是da数据库中)


    启动成功日志:

  3. 3.添加录音库测试

    文件要求 8000hz 16位 单声道,文件名要是数字,比如 电话号码.wav 这样子。

    后续步骤按照samplemgr里面的文档:添加样本例子.docx

2.2.2 测试环境da数据导入到生产环境

注意:1.由于da表结构中字段类型是:blob所以我们不能使用SQLyog或者Navicat工具直接将表数据导出,经测试直接导出的数据通过source导入到生产环境时候会由于乱码导入报错。而只能直接在测试环境所在服务是使用mysqldump指令导出数据。

1.测试环境da数据导出

  1. 1.进入测试环境da数据库数据(以导出mfcc数据为例)
    mysqldump -u -p > /path/to/*.sql
    我们直接输入:mysqldump -u root -p123456 da mfcc>mfcc.sql 报错如下:

    说明我们导出表数据时候不能直接输入密码。我们更换成如下:
    2.生产环境da数据导入
  2. 1.连接生产环境数据库(注:如果连接不上时候加上-h 127.0.01参数)
  3. 2.数据导入
3.启动da的license所在服务

从数据导入之后使用./daserver启用之后,大概到了下午4点11分左右,局端又返回许多480结果,然后查看da的录音

听录音是没有识别到,于是进入freeswitch里面的log下的da.log打开后发现下午4点11分左右就不开始识别了:

查看daserver进程发现进程挂了,所以使用下面后太启动方式。

  1. 1.进入daserver所在目录下执行后台启动指令:
    nohup ./daserver &

10.定时备份日志

  1. 1.编写clearlog.sh

    1
    2
    3
    4
    5
    6
    7
    cd /cc/log/bak
    find /cc/bin/log -mtime +1 -type f -name "log*.log" -exec mv {} /cc/log/bak/. \;
    tar zcvf fslog$(date +"%Y%m%d%H%M")tar.gz log*.log
    rm -f log*.log
    find /cc/log -mtime +1 -type f -name "*.log" -exec mv {} /cc/log/bak/. \;
    tar zcvf log$(date +"%Y%m%d%H%M").log.tar.gz *.log
    rm -f *.log
  2. 2.添加到系统定时任务中去
    a.在root下执行 crontab -e
    b.将0 0 * /cc/bin/cleanlog.sh > /dev/null 2>&1 放进去 保存退出。

  3. 3.运维查询每天日志的最小、最大拨打时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT MIN(starttime),MAX(starttime),SUBSTRING(starttime,1,10) FROM cti_cdr WHERE entid = 1308 GROUP BY SUBSTRING(starttime,1,10) ORDER BY starttime ASC;
```
#### 11.停止掉空号检测
1.进入:/cc/freeswitch/conf;不是删除da2.json
2.注释掉:load mod_da2
进入:/cc/freeswitch/conf/autoload_configs找到文件:modules.conf.xml
然后注释掉:
![](https://raw.githubusercontent.com/startshineye/img/master/2019/10/114.png)
3.fsg.cfg里面:注释掉:识别da2的注释掉
![](https://raw.githubusercontent.com/startshineye/img/master/2019/10/116.png)
#### 12.fs中注释掉影响通话质量的元素
1.conf/vars.xml里面的以下几行注释掉:

```

毕业于<br>相信技术可以改变人与人之间的生活<br>码农一枚