freeswitch连接mysql报错_基于freeswitch的号码脱敏方案

场景

呼叫中心中将呼叫平台模块作为通用中心进行单独部署,呼叫平台模块呼叫是通过其对应的呼叫管理系统来作为外呼数据管理、外呼策略管理、外呼结果报表管理以及外呼数据接入管理。需要使用外呼功能的其他业务模块第三方系统中心会传递数据给呼叫管理系统,但是为了数据的安全性。第三方业务系统传递的数据是加密脱敏数据。因此进入呼叫管理系统的数据都是加密的数据。

方案

1.常规呼叫方式

随着voip技术的发展,越来越多的呼叫使用voip的sip跟rtp协议;其中代表性地就是freeswitch。实现号码脱敏方案,需要对整体外呼链路清楚熟悉。不使用号码退敏的常规呼叫具体流程如下图:

272d5133c22fa51434d30134f385d88a.png

2.号码脱敏呼叫方式

需要进行号码脱敏就是送给中继网关的号码一定是运营商可以识别的解密号码。所以在上面的常规呼叫方式链路中,我们只能在第三方中继跟平台接入层FS模块做改造,并添加一个加密解密的服务。具体呼叫流程图如下:

b970bdf2b26130c389107532bd6d9c43.png

所以基于以上架构:我们在呼叫管理系统里面只需要配置不同的对接网关地址;如果需要进行脱敏的直接对接脱敏服务的sip网关地址;不需要脱敏的直接对接对应的第三方网关即可。

3、号码脱敏部署

1、freeswitch安装创建cc目录,在生产系统打包/cc/cclib和/cc/freeswitch fs打包前清理日志

将打包文件拷贝后解压,设置$LD_LIBRARY_PATH环境变量,增加/cc/cclib目录,并确保生效(参照平台安装文档)

建立软连 ln -s /cc/freeswitch /usr/local/freeswitch

2、替换拨号计划表 :将default.xml替换 /cc/freeswitch/conf/dialplan/下的文件

3、替换网关配置将gw1.xml替换 /cc/freeswitch/conf/sipprofile/external/下的文件

修改gw1.xml realm为最终需要呼出的网关地址,username为实际呼出需要的主叫(如果网关不需要,则不用改username)

4、加入lua将httpgetcalled.lua拷贝到/cc/freeswitch/scripts/下

5、加入lua库将lua.tar.z拷贝到/cc/cclib/目录下,解压

6、启动freeswitch 拨测验证

4.号码脱敏设计细节

号码脱敏解密模块实现原理主要是通过getcalled.lua脚本实现具体如下:package.path = '/cc/cclib/lua/?.lua;'

package.cpath = '/cc/cclib/lua/?.so;'

local http=require("socket.http");

local gw=argv[1] //获取的是gw1

local url=argv[2] //获取的是解密服务url

local uuid = session:get_uuid()

--开始发送http请求

local response_body = {}

local res, code, response_headers = http.request{

url = url,

sink = ltn12.sink.table(response_body)}

if(code == nil or code ~=200) then

freeswitch.consoleLog("ERR","http访问错误\n")

return

end

if type(response_body) == "table" then

res=table.concat(response_body)

freeswitch.consoleLog("INFO","请求结果是: "..res.."\n")

local cjson = require("cjson");

local jsdata = cjson.decode(res);

freeswitch.consoleLog("INFO","请求结果是: "..tostring(jsdata).."\n")

if(jsdata ~=nil) then

freeswitch.consoleLog("INFO","请求结果是11: "..tostring(jsdata).."\n")

local ret = jsdata["status"]

local value = tostring(jsdata["data"]);

if (ret ~= nil and ret == 1) then

local new_session = freeswitch.Session("sofia/gateway/" .. gw .. "/" .. value) //所以需要配置一个gw1外部网关

--freeswitch.consoleLog("ERR","请求结果是111: "..tostring(new_session).."\n")

--if(new_Session ~= nil) then

freeswitch.bridge(session, new_session)

--else

-- session:hangup()

--end

return

end

end

end

session:hangup()

5.数据库连接问题

我们启动服务发现报错如下:

ff329e7a54e5be74a506eaf1f651207e.png

原因是我们使用lua脚本连接了数据库,现在我们需要将其注册掉,进入fs的自动装配文件下,注释掉user.lua连接数据库。

253ebf1cbad0963d87b13d408fc1ab0d.png


版权声明:本文为weixin_36087469原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。