freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题

前赴后继
• 阅读 2339

一、环境配置
服务器 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
修改内容为:
<configuration name="xml_curl.conf" description="XML Gateway">
<bindings>

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

</bindings>
</configuration>
其中
gateway-url 为javaWeb的接口地址
bindings="directory" 表示该接口返回注册信息
bindings="dialplan" 表示该接口返回拨号方案信息

2、动态配置SIP信息
修改好配置文件后,freeswitch获取验证sip注册信息时,将调用接口:directory来进行获取注册信息
创建sip表:
CREATE TABLE sip (
id int(11) NOT NULL AUTO_INCREMENT,
user varchar(11) DEFAULT NULL COMMENT '用户名',
pwd varchar(11) DEFAULT NULL COMMENT '密码',
creat_at datetime DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
创建注册接口/directory,如下

引用
freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题
freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题

1、根据参数action参数判断用户的动作信息,获取参数中的sip帐号信息
2、根据sip帐号信息,从数据库查询相应的用户信息
3、用户为空时直接返回注册失败的xml
4、用户不为空时生成注册的xml信息
5、使用sip信息,参数:sip_to_host(ip地址)以及数据库中获取的密码信息:pwd,进行md5加密,加密失败时返回注册失败的xml信息
6、生成参数map,调动方法:replaceArgsNew,或者使用beel工具类,根据模版生成注册的xml信息

备注:
1、模版文件内容
freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题
2、注册失败的模版
freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题
3、工具类:replaceArgsNew

public static String replaceArgsNew(String template, 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 TABLE dial_tab (
id int(11) NOT NULL,
call_prefix varchar(6) DEFAULT NULL COMMENT '被叫前缀',
gateway varchar(20) DEFAULT NULL COMMENT '网关名称',
tranfer_prefix varchar(6) DEFAULT NULL COMMENT '转接前缀',
call_number varchar(20) DEFAULT NULL COMMENT '主叫号码',
creat_at datetime DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
创建拨号方案接口:dial

freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题
freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题
freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题
本接口使用beel工具类,根据模版生成拨号方案信息,模版文件:dial.xml
freeswitch的动态配置SIP账户,以及动态修改拨号方案的问题
其中参数:
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将根据我们返回的拨号方案进行匹配判断是否符合,若不符合则会挂断呼叫。
点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
springboot读取外部配置文件
springboot项目打成jar包后不好进行配置文件修改,可设置为读取外部配置文件,方便进行配置修改.步骤:1.将jar包中的application.properties配置文件复制到自定义路径下;2.运行jar包命令指定外部配置文件路径:nohupjavajar.jarspring.config.location
Stella981 Stella981
3年前
JsSIP和FreeSWITCH整合
写在前面:FreeSWITCH作为服务器,通过SIP协议,Web端使用jssipwebrtc和其他软电话进行通信一、先配置FreeSWITCH(用的版本1.6.20)的配置:1、修改vars.xml文件,找到下面字段,并设置<XPREPROCESScmd"set"data"internal_ssl_enabletrue"
Stella981 Stella981
3年前
FreeSWITCH 学习笔记(一)
【1】FreeSWITCH学习笔记1、Windows安装包下载地址:http://files.freeswitch.org/windows/installer/2、源码下载地址:http://files.freeswitch.org/freeswitch1.2.10.tar.gz3、FreeSWITCH后台模式启动命令:freesw
Stella981 Stella981
3年前
FreeSWITCH 安装
\TOC\FreeSWITCH安装!FreeSWITCH(https://gitee.com/yaozhf/mypictures/raw/master/0003.png"FreeSWITCH")FreeSWITCH是一个电话的软交换解决方案,包括一个软电话和软交换机用以提供语音和聊天的产品驱动。
Wesley13 Wesley13
3年前
FreeSWITCH视频会议“标准”解决方案
本文由FreeSWITCH中文社区创始人杜金房在LiveVideoStack线上分享的演讲内容整理而成,详细介绍了FreeSWITCH做为一种开源的视频会议解决方案如何在开源、开放的基础上,对接各种无法修改的“标准”视频会议终端、WebRTC浏览器以及微信小程序等,迎接各种挑战。文/ 杜金房整理/ LiveVideoStack
Stella981 Stella981
3年前
FreeSWITCH 客户端fs_cli连接设置(acl)
FreeSWITCH默认配置只能在本机连接,要从外面连接,就要配置:1acl.conf.xml::networklists/list2event_socket.conf.xml::applyinboundacl参数(指定使用哪个acl.xml::networklists/list)而 applyinbou
Stella981 Stella981
3年前
FreeSWITCH1.6安装教程Centos
介绍FreeSWITCH是个网络电话转化器,相当与网络转换器,不过这个是用于IP电话,构建公司的电话通讯系统需要用该技术,因为按照官方文档无法成功安装。本文目的:FreeSWITCH安装步骤官方参考:https://freeswitch.org/confluence/display/FREESWITC
Stella981 Stella981
3年前
Freeswitch配置之sofia
  SIP模块 mod\_sofiaSIP 模块是 FreeSWITCH的主要模块。在 FreeSWITCH中,实现一些互联协议接口的模块称为 Endpoint。FreeSWITH支持很多的 Endpoint,如 SIP、H232等。那么实现 SIP 的模块为什么不支持叫 mod\_sip呢?这是由于 FreeSWITCH的 Endpoint 
Stella981 Stella981
3年前
Linux设置文件夹共享
linux环境实现文件夹共享,常用的方法就是安装Samba,以下就是实现文件夹共享的步骤:一、安装Samba  yumyinstallsambasambaclientsambacommon二、修改Samba配置文件1.配置内核参数 ulimit
Stella981 Stella981
3年前
Linux ReviewBoard安装与配置
目录0\.引言1\.安装步骤2\.配置站点2.1创建数据库2.2开始安装2.3修改文件访问权限2.4Web服务器配置2.5修改django相关配置正文回到顶部(https://www.oschi
Wesley13 Wesley13
3年前
ubuntu16.0.4安装freeswitch
1\.安装freeswitch库gitclonehttps://github.com/signalwire/freeswitch.git2\.安装环境依赖aptgetinstalllibeditdevlibldnsdevlibpcre3devlibspeexdspdevlibspeexdevl