0102.配置文件简介

简介

基本的 FreeSWITCH 安装使用 XML 文件来配置核心以及所有模块。您可以想象,配置可能会变得非常大和复杂。默认的配置为新用户提供了一个良好的起点,让他们可以从工作系统开始。如果您只想跳入并开始使用 FreeSWITCH,请参阅配置 FreeSWITCH,快速了解默认配置以及启动切换之前需要进行的更改。但是,如果您想使用 FreeSWITCH 进行任何严肃的项目,我们强烈建议您花时间更深入地了解配置文件的工作原理。在本页中,我们将深入概述配置系统。获得更多经验后,您可能希望完全删除默认配置,然后从头开始使用框架文件。

高级 FreeSWITCH 安装可以通过数据库查找检索一些动态配置,如拨号计划和用户扩展目录。

XML

配置文件以 XML 格式写入。如果您不熟悉 XML,请花时间阅读“XML 基础知识”页。有关执行配置的更高级方法,请参阅下面的“配置模块”部分。该配置名为 freeswitch.xml默认情况下,它位于软件包安装和从源代码编译的安装的位置,尽管您可以指定备用文件路径作为命令行参数。/etc/freeswitch/usr/local/freeswitch/conf

XML 文件分为多个部分,如下面配置文件的基本架构所示。每个部分都有自己的子部分和架构,在以下部分中,我们将探讨每个单独部分的架构。这些文件没有 DTD(文档类型定义)。

配置文件结构
<document type="freeswitch/xml">
  <section name="configuration" description="Various Configuration">
    <!-- 配置各个模块的配置信息 -->
  </section>  
  <section name="dialplan" description="Regex/XML Dialplan">
    <!-- 配置如何路由来电 -->
  </section>
  <section name="chatplan" description="Regex/XML Chatplan">
    <!-- 配置如何路由短消息 -->
  </section>
  <section name="directory" description="User Directory">
    <!-- 配置用户信息 --> 
  </section>
  <section name="languages" description="Language Management">
    <!-- 配置不同的系统语音支持 -->
  </section>
</document>

Configuration

在配置部分,您可以配置 FreeSWITCH 核心和大多数模块。配置部分内有许多配置元素,通常每个模块一个。大多数配置元素使用以下 XML 架构。

配置示例
<section name="configuration" description="Various Configuration">
    <configuration Name="模块名.conf" Description="我的模块参数设置描述">
        <settings>
            <param name="自定义参数" value="参数的值" />
        </settings>
    </configuration>
    <configuration Name="另一个模块名" Description="我的另一个模块参数设置描述">
        <settings>
            <param name="自定义参数" value="参数的值" />
        </settings>
    </configuration>
</section>

除了单个模块的配置元素外,还有 2 个特殊的配置元素用于配置 FreeSWITCH 内核本身。

switch.conf
这是您配置 FreeSWITCH 核心设置的地方。完整的参数列表记录在“XML 交换机配置”页上。

modules.conf
告诉 FreeSWITCH 在启动时要加载哪些模块。您始终可以在以后从命令行加载其他模块。有关详细信息,请参阅模块配置页。当FreeSWITCH启动时,它首先加载switch.conf,然后加载modes.conf。加载每个模块时,FreeSWITCH 将解析并加载该模块使用的配置元素。

Dialplan

拨号计划部分是设置所有呼叫路由规则的位置。有关详细信息,请参阅拨号计划页面。

Chatplan

在这里,您可以为SMS和其他聊天拖曳设置路由规则。有关详细信息,请参阅mod_sms。

Directory

用户目录定义了将注册到FreeSWITCH™的扩展,通常是手机。

Languages

FreeSWITCH语音提示可以用多种人类语言播放。每个语言系列都位于声音目录下。

预处理指令

XML文件是纯文本,没有内置于XML中的编程逻辑功能。虽然它具有易于阅读的优点,但也有一些缺点。

  1. 对于像FreeSWITCH这样庞大而灵活的系统,配置文件可能会变得庞大。默认freeswitch.xml.fsxml配置总共接近 15000 行。
  2. 如果要在配置中的许多位置使用特殊值,则必须手动复制它。当您要更改它时,这可能会导致问题。
  3. 不能运行脚本来动态计算静态 XML 配置的值。
    为了解决这些问题,FreeSWITCH 使用自定义预处理器指令。有一个预处理器引擎在系统启动(和 reloadxml)时在原始配置文件上运行,以使用预处理器指令的结果创建新的配置文件。输出的freeswitch.xml.fsxml文件存储在日志目录中(默认情况下对于软件包是/var/log/freeswitch, 如果 FreeSWITCH 是从源代码编译的则为/usr/local/freeswitch/log)。这是FreeSWITCH在启动时实际加载的文件。预处理器在启动时以及重新加载配置文件时运行。如果遇到预处理器指令的问题,查看已处理的文件会很有帮助。

每当FreeSWITCH报告配置文件错误时,错误行号实际上是指巨大的freeswitch.xml.fsxml文件,因此这是首先要查看的地方。确定哪个单独的配置文件生成了错误后,必须编辑该单个 XML 文件,而不是已编译的freeswitch.xml.fsxml日志文件。

有 2 种方法可以指定预处理器指令。

  1. 自定义 X-PRE-PROCESS XML 标记
  2. 在 XML 注释中,可以在指令前面加上 #前缀。
预处理示例
<!--Using the X-PRE-PROCESS custom XML tag-->
<X-PRE-PROCESS cmd="set" data="my_variable='value'"/>
<!--Using an XML comment with a #-->
<!--#set my_variable='value'-->

标准 XML 注释对预处理命令没有影响。如果想要注释掉预处理命令,可以将 X-PRE-PROCESS 替换为 X-NO-PRE-PROCESS

<!--This is a standard XML comment, the Pre-Process command WILL be processed--> 
<!--<X-PRE-PROCESS cmd="set" data="my_global_var='some value'"/>-->
<!--This pre-process command will NOT run-->
<X-NO-PRE-PROCESS cmd="set" data="my_global_var='some value'"/>

以下是所有可用的预处理指令。 并且是迄今为止最常用的

include

此预处理命令允许我们将配置分解为多个文件。include 指令指定附加文件的路径,预处理器将在出现包含的行处将包含指令替换为指定文件的内容。路径可以是单个文件,也可以是通配符;通过使用通配符,您可以拉入目录中的所有文件。在默认配置中,主配置文件(freeswitch.xml)只是一组包含指令,一个用于vars.xml(稍后会详细介绍),一个用于每个配置部分。这使我们能够为各种系统配置构建干净的目录层次结构。

include示例
<!--这个默认的include用于加载vars.xml文件至主配置文件-->
<X-PRE-PROCESS cmd="include" data="vars.xml"/>
<!-- 这个默认的include指令用于从autoload_configs文件夹加载所有的模块配置文件,这允许我们为每个模块使用单独的配置文件。-->
<section name="configuration" description="Various Configuration">
   <X-PRE-PROCESS cmd="include" data="autoload_configs/*.xml"/>
</section>

在include文件中,预处理将仅包含包含在include标记中的子 XML,如本示例所示

include标记
<include>
   <!--这里是要包含的内容-->
</include>

set

set 指令允许我们为全局变量名称赋值,然后我们可以使用语法 {variable_name} 在整个配置文件中引用该变量。当预处理器运行时,它将使用指定的名称和值创建一个全局变量。全局变量由 FreeSWITCH 引擎存储,可以在配置中的任何位置引用,也可以从 API 或脚本中动态引用。 除了设置全局变量之外,预处理器还将对配置文件中使用{variable_name} 语法的所有文本执行静态替换。该文本将替换为预处理器运行时变量的值。由于它是静态替换,因此必须在调用变量之前执行 set 指令。此外,如果在运行时更改全局变量的值,则配置仍将具有旧值。
set 指令对于在配置中调用多次,但预计不会更改的值(如 IP 地址和域)很有用。
通过set和include指令,我们可以创建一个用来设置所有变量的文件。这样我们可以在许多服务器上共享同这一配置文件,并且只需要更改一个文件即可包含特定于服务器的设置。实际上,这就是默认配置的设置方式:include指令加载了一个名为vars.xml的文件,其中设置了IP地址和域等值。

使用 Set 指令
<!--使用set指令设置全局变量-->
<X-PRE-PROCESS cmd="set" data="domain=example.com"/>
 
<!--使用$${variable_name}语法查询变量的值-->
<action application="bridge" data="sofia/$${domain}/1234@example.com"/>
 
<!-- 这就是已预先执行set指令后配置文件中实际显示的xml代码 (freeswitch.xml.fsxml文件中) -->
<!-- 请注意,此时对变量的引用已消失 -->
<action application="bridge" data="sofia/example.com/1234@example.com"/>

exec

如果您有一些非常复杂的配置规则,则可以使用一个脚本来生成部分配置文件。exec 指令将作为 shell 命令运行,并将输出包含在配置文件中。

exec示例
<X-PRE-PROCESS cmd="exec" data="/path/to/my_script_that_dumps_all_configs_to_stdout.pl"/>

exec-set

这类似于 exec,但它不会将输出包含在配置文件中,而是在输出中设置一个全局变量。

exec-set示例
<!-- Set local_ip_v4 to eth1 address -->
<X-PRE-PROCESS cmd="exec-set" data="local_ip_v4=ip addr show eth1 | awk '/inet /{print $2}' | head -n 1 | cut -d '/' -f 1"/>

Comment

如果不希望注释出现在最终的 XML 文件中,则可以使用预处理注释。

<X-PRE-PROCESS cmd="comment" data="预处理器将删除此文本" />

配置模块

我们稍后会看到,除了使用纯 XML 文件之外,还有其他选择,但是您仍然需要一些 XML 来启动 FreeSWITCH 并指示它加载不同的配置提供程序。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容