本文更新于2022-12-20,使用FreeSWITCH 1.10.7。

目录

FreeSWITCH默认的配置是一个SOHO PBX(家用电话小交换机)。


(资料图)

X-PRE-PROCESS标签是FreeSWITCH特有的,称为预处理指令,用于根据data参数设置(set)一些全局变量,以及将data参数指定的文件内容包含(include)到当前文件中。FreeSwitch在加载阶段只对其进行简单替换,并不进行语法分析,因此对它进行注释是没有效果的,解决办法是破坏X-PRE-PROCESS的定义(如将其替换为XPRE-PROCESS)。

可以$${VAR[:OFFSET[:LENGTH]]}形式引用全局变量,以${VAR[:OFFSET[:LENGTH]]}形式引用通道变量(局部变量)。OFFSET从0开始,如为负数表示从尾部开始。

加载顺序

配置文件的加载顺序如下:

freeswitch.xml  |- vars.xml  |- autoload_configs/*.xml  | [autoload_configs/acl.conf.xml]  | [autoload_configs/callcenter.conf.xml]  | [autoload_configs/cdr_csv_conf.xml]  | [autoload_configs/cdr_pg_csv.conf.xml]  | [autoload_configs/conference.conf.xml]  | [autoload_configs/distributor.conf.xml]  | [autoload_configs/event_socket.conf.xml]  | [autoload_configs/fifo.conf.xml]  | [autoload_configs/ivr.conf.xml]  |    `- ivr_menus/*.xml  |      [ivr_menus/demo_ivr.xml]  | [autoload_configs/local_stream.conf.xml]  | [autoload_configs/lua.conf.xml]  | [autoload_configs/modules.conf.xml]  | [autoload_configs/nibblebill.conf.xml]  | [autoload_configs/post_load_modules.conf.xml]  | [autoload_configs/sofia.conf.xml]  |    `- sip_profiles/*.xml  |      [sip_profiles/external.xml]  |         `- sip_profiles/external/*.xml  |           [sip_profiles/external/example.xml]  |      [sip_profiles/internal.xml]  | [autoload_configs/switch.conf.xml]  | [autoload_configs/tts_commandline.conf.xml]  | [autoload_configs/xml_cdr.conf.xml]  | [autoload_configs/xml_curl.conf.xml]  | [autoload_configs/xml_rpc.conf.xml]  |- dialplan/*.xml  | [dialplan/default.xml]  |    `- dialplan/default/*.xml  | [dialplan/public.xml]  |    `- dialplan/public/*.xml  |- directory/*.xml  | [directory/default.xml]  |    `- directory/default/*.xml  |      [directory/default/1000.xml]  `- lang/en/*.xml    [lang/en/en.xml]       `- lang/en/demo/*.xml         [lang/en/demo/demo-ivr.xml]

重要的配置文件:

autoload_configs/

自动加载的模块的配置文件的目录。

一般来说每个模块有一个配置文件,文件名格式为“不包含mod_的模块名.conf.xml”,但文件名并不重要,可以改成其他的名字,只要扩展名为.xml。模块在启动时会向XML注册表中查找name为指定值的configuration,进而访问其下面的配置参数。

autoload_configs/acl.conf.xml

ACL权限控制配置。文件内容如下:

                                                                

listname属性为名字,用于在其它地方引用。

autoload_configs/callcenter.conf.xml

呼叫中心模块配置。这是文件内容的一部分:

                                                                                                            

queue为队列,name为队列的名字,用于在其它地方引用。

queueparamname可为:

agent为坐席,可使用以下属性:

tire为梯队,将队列与坐席关联起来。

autoload_configs/cdr_csv_conf.xml

使用CSV文件存储话单的配置。文件内容如下:

                                                                                

paramname可为:

autoload_configs/cdr_pg_csv.conf.xml

使用PostgreSQL存储话单的配置。文件内容如下:

                                                                                                                                    

paramname可为:

schema配置通道变量与数据库中字段的对应关系。

field的属性有:

autoload_configs/conference.conf.xml

多人电话会议配置。这是文件内容的一部分:

                                                                                                                            

controlaction属性可为:

paramname可为:

autoload_configs/distributor.conf.xml

号码连选模块配置。文件内容如下:

                                

autoload_configs/event_socket.conf.xml

Event Socket配置。文件内容如下:

                            

autoload_configs/fifo.conf.xml

呼叫队列模块配置。文件内容如下:

                          

paramname可为:

fifos用于配置静态坐席。

fifoname属性为队列的名字,用于在其它地方引用。

每个member相当于一个坐席,其值为该坐席的呼叫字符串。坐席会轮流振铃(拒接其中一个,另一个就会振铃)。

timeout属性为呼叫超时的秒数。

simo属性为最大能服务的呼叫的数量。

lag属性为该坐席接听一个呼叫后再接听下一个呼叫的间隔秒数。

autoload_configs/ivr.conf.xml

IVR模块配置。文件内容如下:

        

autoload_configs/local_stream.conf.xml

本地文件流的配置。这是文件内容的一部分:

                                                                          

name为名字,斜杠前面用于在其它地方引用,斜杠后面用于自动匹配采样率。如果找不到指定的流则会使用default流,如果default流也不存在则会提示错误。

path为声音文件的目录。

autoload_configs/lua.conf.xml

Lua语言配置。文件内容如下:

                                                        

paramname可为:

autoload_configs/modules.conf.xml

配置FreeSWITCH启动时自动加载哪些模块。这是文件内容的一部分:

                        

autoload_configs/nibblebill.conf.xml

预付费计费模块配置。这是文件内容的一部分:

      

paramname可为:

autoload_configs/post_load_modules.conf.xml

其格式和用法与autoload_configs/modules.conf.xml差不多,不同的是其中定义的模块加载时间较晚。

autoload_configs/sofia.conf.xml

SIP模块配置。文件内容如下:

                                                  

各参数的含义如下:

autoload_configs/switch.conf.xml

SIP核心配置。这是文件内容的一部分:

        

paramname可为:

autoload_configs/tts_commandline.conf.xml

调用其他TTS软件命令行的配置。文件内容如下:

                        

在调用该模块时会自动设置以下变量:

autoload_configs/xml_cdr.conf.xml

生成XML格式的话单发送至外部HTTP服务器的配置。这是文件内容的一部分:

      

paramname可为:

autoload_configs/xml_curl.conf.xml

请求外部HTTP服务器生成XML的配置。这是文件内容的一部分:

                  

paramname可为:

autoload_configs/xml_rpc.conf.xml

FreeSWITCH Portal配置。文件内容如下:

                                    

dialplan/

拨号计划的配置目录。支持多个Context,每个Context可以写到一个XML文件中。

由于在处理Dialplan时要对每一项进行正则表达式匹配,这是非常影响效率的,所以在生产环境中往往要删除默认的Dialplan。

dialplan/default.xml

默认Context,一般用于内部注册用户路由。这是文件内容的一部分:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                          

每个context中有多个extension,一个context中的extension与其他context中的extension在逻辑上是隔离的。

contextname用于在其它地方引用。

extensionname对呼叫流程没有任何影响。

extension的属性continue表示执行完action是否继续匹配其他extension,缺省为false

extension中可以对一些condition(测试条件)进行判断,如果匹配测试条件所指定的表达式则执行对应的action(动作),如不匹配则执行对应的anti-action(反动作)。

condition可使用以下属性(可同时使用多个属性):

conditionbreak可为:

expressionfield匹配的正则表达式。

没有fieldexpression的空condition被认为匹配所有规则,称其为绝对条件(Absolute Condition)。

actionanti-actionapplication属性,表示要执行的APP。

actionanti-action可有data属性,表示APP的参数,可用$N(从1开始)表示expression匹配的内容,用${API([ARG[ ...]])}表示API调用。如没有参数,也可省略。

actionanti-actioninline设置为true表示内联执行。

action可设置loop属性,如失败则重复执行直至指定次数。

可以使用sip_h_开头的通道变量添加扩展的SIP消息头。

默认号码如下(官方文档:https://freeswitch.org/confluence/display/FREESWITCH/Default+Dialplan+QRF):

号码说明
1000-1019呼叫默认分机号(默认密码为1234)
2000-2002呼叫组
30xx电话会议,8kHz(其中xx可为00~99)
31xx电话会议,宽带,16kHz(其中xx可为00~99)
32xx电话会议,超宽带,32kHz(其中xx可为00~99)
33xx电话会议,CD音质,48kHz(其中xx可为00~99)
4000听取语音信箱
5000示例IVR
5900呼叫停泊
5901呼叫取回
7243组播
9178收传真
9179发传真
9180铃音测试,使用远端生成的回铃音
9181铃音测试,产生英式铃音
9182铃音测试,使用音乐当铃音,彩铃
9183先应答,然后发送英式铃音
9184先应答,然后发送音乐铃音
9191ClueCon
9192在log中显示Channel信息
9193录像
9194播放录像
9195echo,回音测试,延迟5秒
9196echo,回音测试
9197milliwatte extension,铃音生成
9198TGML铃音生成示例
9664保持音乐

dialplan/public.xml

公共Context,一般用于网关路由。这是文件内容的一部分:

                                                                    

大部分参数与dialplan/default.xml相同。

directory/

用户目录。支持多个域(Domain),每个域可以写到一个XML文件中。

directory/default.xml

用户目录默认域。这是文件内容的一部分:

                                                                                                                                                                                      

domainname属性为租户域的名字。

params定义了该域中所有用户的公共参数。dial-string参数为呼叫字符串。

variables定义了一些公共变量,在用户主叫或被叫时,这些变量会绑定到相应的Channel上形成Channel Variable。

还定义了很多组(group),组名并无特殊意义。组里面包含很多用户(user),可以是指向已存在用户的指针。使用组并不是必需的,可以将users直接放到domain下一级。

paramsvariables可以出现在usergroupdomain中,当有重复时按此优先级从高到低。

directory/default/

本地用户目录。

directory/default/1000.xml

一个本地用户。文件内容如下:

                                                                                

user_context的值为此用户发起的呼叫的拨号计划的context

freeswitch.xml

主配置文件,使用X-PRE-PROCESS指令的include语句载入其他文件。这是文件内容的一部分:

    

ivr_menus/

IVR菜单配置。

ivr_menus/demo_ivr.xml

IVR菜单配置示例。文件内容如下:

                                                                                                                  

每个menu描述一个菜单,有以下属性(如文件为相对路径,则相对于/usr/local/freeswitch/sounds):

菜单有若干个菜单项entry,其action可为:

lang

语言配置目录。

lang/en

英语配置目录。

lang/en/demo

英语配置示例。

lang/en/demo/demo-ivr.xml

英语IVR的Phrase宏示例。这是文件内容的一部分:

                                                                                                                                                                                                                                                                                                                                                              

name为宏名称,用于其他地方引用。

pause表示每个action之间暂停多长时间(毫秒)。

可指定多个input,根据pattern正则表达式匹配不同的输入。

function可为:

data可使用$N引用pattern匹配的内容。

lang/en/en.xml

英语配置。这是文件内容的一部分:

                                                                           

name为语言的名字,用于在其它地方引用。

say-module表示该语言用来支持Say接口的模块,本例中为mod_say_en。

sound-prefix为该语言Say接口的声音文件的路径前缀。

tts-engine为TTS引擎。

tts-voice为TTS嗓音。

sip_profiles

SIP Profile配置。

sip_profiles/external.xml

SIP external Profile配置。这是文件内容的一部分:

                            

大部分参数与sip_profiles/internal.xml相同。

sip_profiles/external/

SIP external Profile配置目录。

sip_profiles/external/example.xml

SIP external Profile网关配置示例。文件内容如下:

                                                                              

各参数的含义如下:

sip_profiles/internal.xml

SIP internal Profile配置。这是文件内容的一部分:

                                                                            

profilename用于在其它地方引用。

paramname可为:

vars.xml

使用X-PRE-PROCESS指令的set语句定义一些全局变量。这是文件内容的一部分:

      

data各变量的含义如下:

另外,系统自动设置的变量有(系统自动设置的变量是在vars.xml加载前设置的,因而可以在vars.xml中覆盖它们):

推荐内容