freeswitch的mod_xml_curl模块

概述
freeswitch是一款简单好用的VOIP开源软交换平台。
随着fs服务的增多,每一台fs都需要在后台单独配置,耗时耗力,心力憔悴。
如果有一个集中管理配置的配置中心,统一管理所有fs的配置,并可以实现动态的修改配置就好了。
于是就发现了mod_xml_curl模块。
环境
centos:CentOS release 7.0 (Final)或以上版本
freeswitch:v1.10.7
GCC:4.8.5
模块介绍
mod_xml_curl模块默认不编译安装。
进入“freeswitch/src/mod/xml_int/mod_xml_curl”目录,执行如下命令
sudo make install
检查模块安装情况。
cd /usr/local/freeswitch/mod
ll
-rwxr-xr-x. 1 root root 104456 Jul 28 10:47 mod_xml_curl.so
-rwxr-xr-x. 1 root root 1316 Jul 28 10:47 mod_xml_curl.la
检查conf/autoload_configs/modules.conf.xml文件,mod_xml_curl模块要放在配置的顶部。
<load module="mod_console"/>
<load module="mod_logfile"/>
<load module="mod_xml_curl"/>
检查conf/autoload_configs/xml_curl.conf.xml文件。
mod_xml_curl模块的主要使用场景。
运行多个FreeSWITCH实例而不必维护多个服务器配置。
集中的配置管理。
从连接到数据库的web应用程序动态填充配置。
提供了一种自动化FreeSWITCH配置部署的简单方法(例如,托管VoIP平台)。
mod_xml_curl的工作原理与典型的API一样,向web应用程序发送POST请求,获取XML格式的响应消息并刷新本地配置。
mod_xml_curl从web接口获取到有效响应则直接加载配置,如果收到无效响应或404则尝试从本地磁盘查找配置文件。
mod_xml_curl模块可以分为4个不同的绑定章节,基本可以覆盖全部的xml配置项。
configuration,配置项,比如mod_sofia的配置。
directory,用户鉴权目录。
dialplan,拨号计划。
phrases,语音短语管理。
测试
修改conf/autoload_configs/xml_curl.conf.xml文件。
<configuration name="xml_curl.conf" description="cURL XML Gateway">
<bindings>
<binding name="dialplan">
<param name="gateway-url" value="http://10.55.55.137:8080/fs/dialplan" bindings="dialplan"/>
</binding>
</bindings>
</configuration>
启动fs,检查启动日志,如下。
…
2023-07-28 11:56:24.029966 [NOTICE] mod_xml_curl.c:543 Binding [dialplan] XML Fetch Function [http://10.55.55.137:8080/fs/dialplan] [dialplan]
2023-07-28 11:56:24.029979 [ERR] mod_xml_curl.c:459 Binding has no url!
2023-07-28 11:56:24.029994 [CONSOLE] switch_loadable_module.c:1540 Successfully Loaded [mod_xml_curl]
2023-07-28 11:56:24.030003 [NOTICE] switch_loadable_module.c:338 Adding API Function 'xml_curl'
…
发起呼叫,使用10011呼叫13712345678,日志如下。
2023-07-28 15:22:15.918548 [INFO] mod_dialplan_xml.c:637 Processing 10011 <10011>->13712345678 in context public
2023-07-28 15:22:15.918548 [ERR] mod_xml_curl.c:315 Received HTTP error 403 trying to fetch http://10.55.55.137:8080/fs/dialplan
data: [hostname=localhost.localdomain§ion=dialplan&tag_name=&key_name=&key_value=&Event-Name=REQUEST_PARAMS&Core-UUID=54544416-2d17-11ee-87f0-0d9ab89b9404&FreeSWITCH-Hostname=localhost.localdomain…
Dialplan: sofia/external/10011@10.55.55.138 parsing [public->test] continue=false
Dialplan: sofia/external/10011@10.55.55.138 Regex (PASS) [test] destination_number(13712345678) =~ /^(\d+)$/ break=on-false
Dialplan: sofia/external/10011@10.55.55.138 Action answer()
从日志可以看出,呼叫流程中,首先使用“mod_xml_curl”模块获取“http://10.55.55.137:8080/fs/dialplan”的值,获取失败则使用本地dialplan继续呼叫流程。
总结
mod_xml_curl模块功能较复杂,涉及流程较多,同时需要web服务器提供数据接口配合。
后续尝试使用接口返回dialplan数据,动态控制呼叫流程。
空空如常
求真得真
freeswitch的mod_xml_curl模块的更多相关文章
- FreeSWITCH 加载模块过程解读
今天来学习FreeSWITCH 加载模块过程. 哪些模块需要编译,是由源码下的 modules.conf 文件决定的. 哪些模块在程序启动时自动加载,是由 freeswitch/conf/autolo ...
- freeswitch插件式模块接口实现方式
概述 freeswitch的外围模块是插件式的,可以动态的加载和卸载,使用起来非常的灵活和方便. 如果我们自己来设计一个开源的代码框架,相信这种插件式的模块结构是非常适合多人合作的模式. 本文对fs的 ...
- freeswitch的话单模块
概述 最近因为业务需要,在看freeswitch中话单相关的一些模块. 在voip的使用过程中,话单是重要的基础模块,涉及到计费和问题查找. 呼叫话单最重要的一点是稳定,不能有错误或遗漏. 本章对fs ...
- freeswitch的mod_curl模块
概述 有时候,我们需要在呼叫的过程中,或过程后调用web api接口. freeswitch的mod_curl模块可以很方便的实现web api的接口调用. mod_curl模块默认不安装,需要进入模 ...
- freeswitch使用mod_shout模块播放mp3
概述 freeswitch 在对VOIP语音通话中,可以通过playback命令播放IVR语音文件. 默认情况下,freeswitch支持wav文件,也可以直接播放VOIP中常见编解码的G711文件. ...
- freeswitch编译mod_av模块
需要先编译libav库 编译libav下载:git clone https://freeswitch.org/stash/scm/sd/libav.git cd libav ./configure - ...
- 《FreeSWITCH: VoIP实战》:SIP 模块 - mod_sofia
SIP 模块是 FreeSWITCH 的主要模块,所以,值得拿出专门一章来讲解. 在前几章时里,你肯定见过几次 sofia 这个词,只是或许还不知道是什么意思.是这样的,Sofia-SIP 是由诺基亚 ...
- freeswitch新增模块API
概述 上一章我们讲解了freeswitch的源码基本结构,以及如何新增一个插件式模块. freeswitch的架构非常适合这种业务开发模式,即以freeswitch的基本功能为开发平台,新增插件式模块 ...
- Freeswitch 添加可转码的G729编码
默认情况下Freeswitch自带的G729模块是pass-through-并不支持转码. 不过我们依然有个好奇的心, 所以我们决定添加一个支持G729转码的模块到Freeswitch. 1. 下载m ...
- Freeswitch配置之sofia
SIP模块 - mod_sofia SIP 模块是 FreeSWITCH的主要模块. 在 FreeSWITCH中,实现一些互联协议接口的模块称为 Endpoint.FreeSWITH支持很多的 End ...
随机推荐
- SpringCore完整学习教程4,入门级别
本章从第4章开始 4. Logging Spring Boot使用Commons Logging进行所有内部日志记录,但保留底层日志实现开放.为Java Util Logging.Log4J2和Log ...
- 使用axios发送请求的几种方式
1.是什么? axios 它的底层是用了 XMLHttpRequest(xhr)方式发送请求和接收响应,xhr 相对于之前讲过的 fetch api 来说,功能更强大,但由于是比较老的 api,不支持 ...
- 中企网安信息科技:协同办公OA信息化管理系统概述
由华企网安总公司北京中企网安信息科技有限责任公司开发的<协同办公OA信息化管理系统>,获得国家版权局颁发的计算机软件著作权登记证书. 协同办公OA信息化管理系统是一种综合性的软件系统,用于 ...
- 数字孪生结合GIS能够在公共交通领域作出什么贡献?
数字孪生结合地理信息系统(GIS)在公共交通领域具有潜在的重大贡献,这种结合可以帮助城市更高效地规划.运营和改进公共交通系统.以下是一些关键方面的讨论,以说明数字孪生和GIS在这一领域的作用: 数字孪 ...
- 数字孪生结合GIS能给物流行业带来怎样的改变
随着科技的不断发展和创新,数字孪生技术和地理信息系统(GIS)正日益在各个行业中发挥重要作用.其中,物流行业作为一个复杂而庞大的系统,也能从数字孪生和GIS的结合中获得许多益处和改变. 数字孪生是指通 ...
- ElasticSearch之Delete index API
删除指定的索引. 同时删除索引关联的数据.分片.元数据等相关的资源,因此执行前需要慎重. 命令样例如下: curl -X DELETE "https://localhost:9200/tes ...
- intel 虚拟化 VT-d VT-x VT-c 的区别
intel 虚拟化 VT-d VT-x VT-c 有什么区别,各是什么意思,有什么作用 简单描述理解 VT-d VT-x VT-c VT-d 英文全程为 Virtualization Technolo ...
- 8.解决elasticsearch深度分页问题
前面说到,分页可以使用from和size参数,类似于mysql的分页offset和limit.但是如果数据量比较大时,elasticsearch会对分页做出限制,因为此时会比较消耗性能. 为什么要限制 ...
- 2023-05-13:你现在手里有一份大小为 n x n 的 网格 grid, 上面的每个 单元格 都用 0 和 1 标记好了其中 0 代表海洋,1 代表陆地。 请你找出一个海洋单元格,这个海洋单元格
2023-05-13:你现在手里有一份大小为 n x n 的 网格 grid, 上面的每个 单元格 都用 0 和 1 标记好了其中 0 代表海洋,1 代表陆地. 请你找出一个海洋单元格,这个海洋单元格 ...
- Typora+Docsify快速入门
Typora是什么? Typora中文版是一款好用极简的跨平台Markdown编辑器,软件使用这款软件能够帮助用户轻松将文本转换到HTML,软件从底层向上设计,软件支持markdown的标准语法, ...