一.freeswitch是什么
freeswitch是一款基于sip的开源电话软交换平台,具有很强的扩展性和稳定性,能实现电话语音、ivr、电话会议、视频会议、机器人、短信等核心语音应用;因为支持丰富的语音、视频编码使得几乎能兼容市面上绝大部分的sip软交换平台;
二.freeswitch优势
freeswitch作为一款开源软交换平台,相较于其他传统的软交换平台(如asterisk),具有并发高,caps处理强,ivr处理灵活等特点,在一些中大型语音场景应用较多;
freeswitch还提供esl接口,支持主流的lua、java、php、python等语言,企业开发者可以通过esl接口方便的调用freeswitch,开发freeswitch高级应用和实现外呼流程控制,进而和内部各个应用平台实现数据互通,这也是各个企业非常看重的一点。
当然,freeswitch也有不足的地方,相较于asterisk来说,缺乏标准的图形化配置界面,各个企业多少需要针对各自的场景开发属于自己的cti server,在一些并法要求不高,开发资源有限的需求下,asterisk则相对具有优势。好在freeswitch现在也有fusionpbx图形化组件,虽然面对对象是有通信基础的管理员,没有得到广泛的推广和认可,但还是简化了不少freeswitch操作。
三.freeswitch运行机制
freeswitch 使用线程模型来处理并发请求,每个连接都在单独的线程中进行处理。这不仅能提供最大强度的并发,更重要的是,即使某路电话发生问题,也只影响到它所在的线程,而不会影响到其它电话。freeswitch 的核心非常短小精悍,这也是保持稳定的关键。所有其它功能都在外围的模块中。模块是可以动态加载(以及卸载)的,在实际应用中可以只加载用到的模块。外围模块通过核心提供的 Public API 与核心进行通信,而核心则通过回调机制执行外围模块中的代码。
freeswitch主要配置文件:
freeswitch的核心底层代码是由C语言编写,如果需要重构freeswitch核心功能、基于freeswitch二次开发软交换,或者针对freeswitch开发其他自定义通信模块,则需要在符合freeswitch通信规范的情况下进行改造;
而使用freeswitch或者针对freeswitch做esl应用端开发,则基本不需要通过C去更改freeswitch底层代码逻辑,freeswitch自身是通过提供基于静态xml的文件配置方式,来实现对freeswitch所有功能的配置和调度控制。且freeswitch原生支持lua,通过lua能够极大的增加freeswitch功能的灵活性。开源的fusionpbx组件就是基于lua+php+nginx+pgsql,几乎100%还原了freeswitch强大功能,给了freeswitch一个动态的web控制台。
freeswitch主要配置文件(/usr/local/freeswitch/conf): 1、freeswitch.xml #freeswitch顶层文件,一般不做改动 2、vars.xml #调整一些全局变量及参数 3、dialplan #拨号计划,freeswitch的主要目录之一,所有的拨号计划及各种路由规则实现,都在这个目录操作 4、directory/default/*.xml #SIP分机,所有的分机号生成目录 5、sip_profiles/internal.xml #内部分机连接的配置文件,用于对接分机 6、sip_profiles/external.xml #定义和外部线路对接的相关信息,用于线路对接,通过sip_profiles/external/目录定义各个sip线路,也就是日常说的网关配置目录; 7、autoload_configs/ #freeswitch所有模块的存放路径,加载或者卸载某些模块都在这里实现,这里有除了freeswitch core以外的所有外围模块,比如常用的有cdr、shout、mrcp、event_socket等等模块,模块是否默认加载在modules.conf.xml中定义; 8、mrcp_profiles/ #通过mrcp协议模块,和asr/tts对接,实现基于语音的机器人业务,目前公司的所有机器人业务就是通过这个mrcp协议实现的对接 复制代码
四.freeswitch架构
一般来说,一个简单的freeswitch架构,必须需要以下几点,freeswitch平台、语音网关、外呼线路、开发调度平台;
一个简单的freeswitch架构,可以解决一个企业的办公电话需求,而一个呼叫中心系统,则需要一个高级的freeswitch调度系统,这个调度系统给了各个企业开发者极大的想象和发挥空间,直接决定了外呼系统是否足够的智能和高效。
随着业务的扩展,外呼平台架构会逐渐加入机器人外呼、语音质检、筛号等等其他的业务,还需要考虑外呼平台本身的高可用集群等问题,外呼架构会逐渐复杂起来,下图是我们公司后期计划的外呼架构,目前除集群的部分其他基本已实现。
在呼叫中心应用中,电话的呼入呼出,不再是像个人手机终端那样只看通话记录来简单处理,一通电话从呼入、呼出到挂断,都需要从多个维度进行衡量;而围绕电话相关的服务也就变得多样化。
在上面的架构中,外呼调度系统会介入机器人业务,会有语音质检(离线&实时在线)服务,会有筛号等等服务。这些服务都是围绕着电话系统来开展,机器人服务是代替人工实现效率提升,语音质检是做话务分析,做风险投诉管控,筛号是提高外呼号码的接通率。
五.总结
1、freeswitch是一个功能丰富,实用性强的软交换平台;
2、freeswitch单机并发在包含媒体的情况下可以达到1k,caps值也可以到100以上;
3、freeswitch在中小型语音架构中可以很好的运行;
4、freeswitch可以和其他sip服务器如opensips,kamailio搭配实现超大型的语音架构(目前处在探索阶段)。