本文主要是介绍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拨号计几种常见使用方式及拨号计划高可用HA浅谈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!