freeswitch之SIP动态注册及动态配置拨号方案

简介: 本文档描述freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题

本文档描述freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题。

一、 环境配置

服务器 centos 6.9 (64bit)

Java jdk1.8

Freeswitch 1.6.15~64bit ( 64bit)

Freeswitch路径 /usr/local/freeswitch(下述步骤全部以全路径为主)

二、 配置步骤

1、 修改freeswitch配置信息

修改文件配置文件xml_curl.conf.xml

若为默认配置,最好清空哦:

echo ""> /usr/local/freeswitch/conf/autoload_configs/xml_curl.conf.xml

修改文件

vim/usr/local/freeswitch/conf/autoload_configs/xml_curl.conf.xml

修改内容为:

   <binding name="directory ">

   <param name="gateway-url"value="http://localhost:8080/directory"bindings="directory"/>

   </binding>

   <binding name="dialplan ">

            <paramname="gateway-url" value="http://localhost:8080/dial"bindings="dialplan"/>

   </binding>

其中

gateway-url 为javaWeb的接口地址

bindings="directory" 表示该接口返回注册信息

bindings="dialplan" 表示该接口返回拨号方案信息

2、 动态配置SIP信息

修改好配置文件后,freeswitch获取验证sip注册信息时,将调用接口:directory来进行获取注册信息

创建sip表:

CREATE TABLE sip (

idint(11) NOT NULL AUTO_INCREMENT,

user varchar(11) DEFAULT NULL COMMENT '用户名',

pwdvarchar(11) DEFAULT NULL COMMENT '密码',

creat_at datetime DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULTCHARSET=utf8;

创建注册接口/directory,如下

1、根据参数action参数判断用户的动作信息,获取参数中的sip帐号信息

2、根据sip帐号信息,从数据库查询相应的用户信息

3、用户为空时直接返回注册失败的xml

4、用户不为空时生成注册的xml信息

5、使用sip信息,参数:sip_to_host(ip地址)以及数据库中获取的密码信息:pwd,进行md5加密,加密失败时返回注册失败的xml信息

6、生成参数map,调动方法:replaceArgsNew,或者使用beel工具类,根据模版生成注册的xml信息

备注:

1、 模版文件内容

2、 注册失败的模版

3、工具类:replaceArgsNew

**public** **static** String replaceArgsNew(Stringtemplate, Map<String, String> data) {

   // sb用来存储替换过的内容,它会把多次处理过的字符串按源字符串序 存储起来。

   StringBuffer sb = **new** StringBuffer();

   **try** {

       Pattern pattern = Pattern.*compile*("\\$\\{(.+?)\\}");

       Matcher matcher = pattern.matcher(template);

       **while** (matcher.find()) {

            String name = matcher.group(1);// 键名

            String value = (String) data.get(name);// 键值

            **if** (value != **null**) {

                value = value.replace("\\", "\\\\\\");

                value = value.replace("$", "\\$");

                matcher.appendReplacement(sb, value);

            }

       }

       matcher.appendTail(sb);

   } **catch** (Exception e) {

       e.printStackTrace();

   }

   **return** sb.toString(); // 加一个空行(结束行)

}

3、 使用beel工具类处理模版信息时,项目需要导入jar包:antlr4-runtime-4.7.1.jar,beetl-core-2.2.3.jar,按需配置

3、动态配置拨号方案

修改好配置文件后,freeswitch获取验证sip注册信息时,将调用接口:dial来进行获取注册信息

创建拨号方案表

CREATE TABLEdial_tab (

id int(11) NOT NULL,

call_prefix varchar(6) DEFAULT NULL COMMENT'被叫前缀',

gateway varchar(20) DEFAULT NULL COMMENT '网关名称',

tranfer_prefix varchar(6) DEFAULT NULLCOMMENT '转接前缀',

call_number varchar(20) DEFAULT NULLCOMMENT '主叫号码',

creat_at datetime DEFAULT NULL,

PRIMARY KEY (id)

)ENGINE=MyISAM DEFAULT CHARSET=utf8;

创建拨号方案接口:dial

本接口使用beel工具类,根据模版生成拨号方案信息,模版文件:dial.xml

其中参数:

call_prefix 为前缀判断规则,当被叫号码符合相应表达式时才会允许使用该拨号拨号按方案:^ (.)$,允许所有号码使用该拨号方案,^91(.)$,允许被叫前缀为91的被叫号码使用该拨号方案。

effective_caller_id_number 为透传参数信息,即即被叫显示的来电号码,可忽略该参数,未设置该参数时,默认为真实主叫号码,本代码默认设置为来电号码。

Data 转接参数信息。

Freeswitch呼出时,或者收到呼入信息时,会调用接口:dial获取拨号方案信息,

获取参数:

Hunt-Caller-ID-Number 主叫号码

Caller-Destination-Number 被叫号码

variable_sip_contact_host 呼叫ip,即呼叫方的ip地址,可用作ip判断处理。

1、判断被叫号码是否是SIP帐号,若是SIP帐号,转接到指定的SIP帐号信息。

参数:call_prefix设置为空,允许所有号码通过

参数:effective_caller_id_number,设置为来电号码

参数:转接信息:data设置为:"user/"+variable_sip_to_user,即为呼叫SIP帐号:123456时,为:user/12345,也可设置为:user/$1,表示为,默认被叫号码,即主叫键入的被叫号码,

2、当被叫帐号不是sip帐号时,获取拨号方案列表信息。

表dial_tab参数:call_number,用于判断主叫是否为指定的号码,循环判断,若与主叫号码相同,即为某一指定主叫呼入时,转送到指定的落地网关上

表dial_tab参数:call_prefix,即为被叫前缀信息,即设定的呼叫规则,当被叫的前缀为指定值时,才可使用该呼叫规则,

转接到网关时,转接信息:data为:"sofia/gateway/"+gateway+"/"+tranfer_prefix+"$1";

其中参数:gateway,为相应的落地网关名称,

参数:tranfer_prefix,为转接到落地网关时,送的前缀信息,

参数:$1,为默认的被叫信息,注意,当存在前缀规则call_prefix时,freeswitch将自动去除相应的前缀信息,即呼叫被叫:9118860233225,设定前缀规则:call_prefix为91时,$1表示:18860233225

3、当根据主叫信息,没有在拨号方案表:dial_tab中获取拨号方案信息时,则循环查询拨号方案列表,根据被叫前缀,即call_prefix,来获取相应的拨号方案信息,根据拨号方案信息,转接到指定的网关即可。

4、上述描述的为多个拨号方案列表的情况,我们可根据拨号方案表中的信息,自由设定返回相应的拨号方案给freeswitch,当只有一个拨号方案时,我们可直接返回即可,freeswitch将根据我们返回的拨号方案进行匹配判断是否符合,若不符合则会挂断呼叫。

相关文章
使用vos3000时sip O 口网关注册成对接网关作为 ivr 接入,主叫号码如何设置
在VOS3000系统中,将SIP终端作为IVR接入点涉及配置SIP网关指向IVR应用,注册SIP设备并设定含用户名和域名的SIP账户。主叫号码设置可在注册时通过 Caller-ID 头部或拨号计划完成。拨号规则用于控制主叫号码传递,例如根据来源自动调整。配置后需测试主叫号码及IVR接入。不同版本可能有差异,欢迎交流学习。
|
存储 编解码 监控
VOS3000作用与功能
VOS3000是一套VoIP 运营支撑系统,系统拥有强大的功能集合及可靠的安全保障,可支撑 5000 路并发,适用于话务转发,企业终端,APP 业务,大型呼叫中心调度等多种业务形态,满足了大部分高并发大容量 VoIP 业务的需求。
2999 0
|
语音技术
FreeSwitch中音乐功能保持和静音回铃声怎样设置
FreeSwitch中音乐功能保持和静音回铃声怎样设置
|
Web App开发 存储 人工智能
从入门到进阶-如何基于FreeSWITCH搭建呼叫中心平台
FreeSWITCH 是一个开源的电话交换平台。博主从事多年AI技术,外呼中心搭建,需要演示站或技术支持联系博主。官方给它的定义是–世界上第一个跨平台的、伸缩性极好的、免费的、多协议的电话软交换平台
1963 0
|
关系型数据库 MySQL 数据库
debian11编译安装freeswitch
debian11编译安装freeswitch
396 0
|
Java Linux 应用服务中间件
docker编译部署freeswitch-1.10.10
docker编译部署freeswitch-1.10.10
1364 0
|
缓存 编解码 应用服务中间件
srs+rtmp和nginx+rtmp推流延时比较
srs+rtmp和nginx+rtmp推流延时比较
1029 0
srs+rtmp和nginx+rtmp推流延时比较
|
XML 编解码 机器人
Freeswitch在呼叫中心系统应用
一.freeswitch是什么 freeswitch是一款基于sip的开源电话软交换平台,具有很强的扩展性和稳定性,能实现电话语音、ivr、电话会议、视频会议、机器人、短信等核心语音应用;因为支持丰富的语音、视频编码使得几乎能兼容市面上绝大部分的sip软交换平台;
2655 0
|
Java 数据库连接 数据库
FreeSwitch实现简单呼叫中心功能
FreeSwitch实现简单呼叫中心功能