FreeSWITCH拨号计划几种常见使用方式及拨号计划高可用HA浅谈

一、浅谈FreeSWITCH拨号计划的几中实现方式

1、直接在拨号计划中配置多条路由信息
(1)配置注册分机的路由

这个拨号计划匹配1000-1019这20个被叫号码,如果匹配上后,通过export设置被叫分机号dialed_extension通道变量,再执行其他操作,最后通过bridge去执行呼叫真正的被叫分机号。

(2)一条规则匹配所有的被叫号码,执行同一类路由操作

这个示例比较简单,通过 .+正则来匹配所有的被叫号码,通过export(如果呼叫还有b-leg,则export设置的通道变量还会在b-leg中生效)设置被叫号码通道变量,通过answer执行应答操作,呼叫建立成功后,通过playback进行放音,放音动作结束后,执行echo操作。

2、对所有的呼入做park处理,然后通过esl监听的事件控制后续呼叫路由动作

3、基于mod_xml_curl动态生成XML拨号计划

(1)xml_curl.conf.xml配置示例

(2)工作原理浅谈

加载mod_xml_curl模块时,通过SWITCH_MODULE_LOAD_FUNCTION(mod_xml_curl_load)调用do_config函数,在do_config函数中通过switch_xml_bind_search_function(xml_url_fetch, switch_xml_parse_section_string(binding->bindings), binding)向FreeSWITCH核心注册相dia应的回调函数,当FreeSWITCH收到呼入的呼叫后,就会调用相应的回调函数,然后在xml_url_fetch函数中通过http向路由中心获取当前呼叫的路由信息,收到Http响应后,mod_xml_curl的示例处理如下:

if (config_data.err) {
		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error encountered! [%s]\ndata: [%s]\n", binding->url, data);
		xml = NULL;
} else {
		if (httpRes == 200) {
			if (!(xml = switch_xml_parse_file(filename))) {
				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Parsing Result! [%s]\ndata: [%s]\n", binding->url, data);
			}
		} else {
			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Received HTTP error %ld trying to fetch %s\ndata: [%s]\n", httpRes, binding->url,
							  data);
			xml = NULL;
		}
}

4、三种拨号计划的优缺点

dialplan中xml拨号计划,适合那种操作不是特别负责的呼叫路由操作,如果要修改、增加和删除路由规则,需要通过esl执行reloadxml操作;

基于拨号计划park+esl处理呼叫路由的方式,优点是对呼叫路由处理比较灵活,但是编程复杂度要求会高点,重点在esl开发上;

基于mod_xml_curl动态获取路由的方式,有点是处理呼叫路由也是比较灵活,工作重点在生成动态拨号xml计划的路由中心。

5、拨号计划高可用HA,这里主要基于兜底的方式

如果通过mod_xml_curl模块向路由中心动态获取xml拨号计划,路由中心由于某种原因不可用或者返回的xml内容不对,FreeSWITCH使用dialplan拨号计划中事先配置好的路由规则进行兜底处理。

FreeSWITCH是一个开源的电话交换软件平台,它提供了丰富的功能和灵活的配置选项,可以用于构建各种类型的通信系统。拨号计划FreeSWITCH中用于定义呼叫路由规则的一种机制,可以根据呼叫的来源、目的地和其他条件来确定呼叫的处理方式。 在FreeSWITCH中,可以使用Lua脚本来编写自定义的拨号计划,并且可以通过传递参数来实现更加灵活的呼叫路由。以下是一个简单的示例,演示了如何在Lua脚本中定义一个拨号计划并传递参数: 1. 首先,在FreeSWITCH的配置文件中定义一个拨号计划,例如在`dialplan/default.xml`文件中添加以下内容: ```xml <extension name="my_dialplan"> <condition field="destination_number" expression="^123$"> <action application="lua" data="my_lua_script.lua ${my_param}" /> </condition> </extension> ``` 上述配置定义了一个名为`my_dialplan`的拨号计划,当目标号码为"123"时,将执行一个Lua脚本,并传递一个名为`my_param`的参数。 2. 创建一个Lua脚本文件,例如`my_lua_script.lua`,并在其中获取传递的参数并进行相应处理: ```lua api = freeswitch.API() -- 获取传递的参数 local my_param = argv -- 在日志中输出参数值 freeswitch.consoleLog("info", "Received parameter: " .. my_param .. "\n") -- 进行其他处理逻辑... ``` 上述Lua脚本通过`argv`获取传递的参数,并可以根据需要进行相应的处理。在示例中,它将参数值输出到FreeSWITCH的日志中。 这样,当有呼叫目标号码为"123"时,FreeSWITCH将执行该Lua脚本,并将参数传递给脚本进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值