在任何FreeSWITCH安装中,拨号规则是一个非常主要的部分。确实,任何PBX必须有一个拨号规则,有时称之为号码计划,来处理呼叫路由规则。简单地说,拨号规则就是控制呼叫的列表。例如,当用户拿起电话,拨打1000,系统如何知道怎么处理这个呼叫?在实例的拨号规则中,系统将连接呼叫方和注册的用户1000。但是,拨号规则可以做更多工作,不仅仅是连接呼叫方和被呼叫方。拨号规则包含了很多命令来控制呼叫应该怎么进行和如何进行。
在上一个章节中,我们对拨号规则做了一点细小的修改。在本章节中,我们基于以上的基础继续介绍路由基础和路由控制,因此我们将讨论以下内容:
· XML拨号规则概要
· Contexts, extensions和actions
· Conditions, patterns和regular expressions
· 通道变量
· 创建测试新分机
· 重要拨号规则应用模块
· 编写拨号符
FreeSWITCH XML拨号规则要素
FreeSWITCH XML拨号规则实例是一个比较好的学习XML 拨号规则概念的切入点。在conf/dialplan文件夹下,配置文件包含三个主要文件和两个文件路径:
· default.xml: 包含FreeSWITCH 拨号规则的基本配置文件。
· public.xml: 包含从FreeSWITCH 以外呼入的处理配置文件
· features.xml: 包含一些特别的context 配置,负责处理特定的拨号功能。
· default/: 所有default 目录下的文件,都包含在default context
· public/: 所有public 目录下的文件,包含在 public context
XML实例配置文件包含了多个呼叫路由指令,这些指令构成了基本的拨号规则,它们是:contexts, extensions, conditions和actions. 一个context 是一个或多个extensions的逻辑组。一个extension 包含一个或多个必须满足的条件。 Conditions包含一些执行命令,根据不同的条件设置或者判断结果,执行这些命令。在进一步讨论这些结构体之前,我们有必要回忆一下我们第三章学习的一些概念。
Contexts
Contexts 是extensions逻辑组。系统把contexts 作为拨号规则的一部分。每个部分有一个特定的目的,每个部分包含extensions,这些extensions和这些目的相关联。这样做的目的就是使得extensions 相互独立。一个典型的例子就是“多租户”。一个FreeSWITCH 服务器可以支持一个或者多个业务入口或者多用户使用,每个租户都有自己的context,防止和其他业务体号码发生冲突。例如,每个租户可以支持这样的服务 "拨0转前台"的extension. 在每个租户的平台上,用户可以拨0 呼叫到自己的前台分机, 不同的租户平台的用户可以拨0拨打完全不同的extensions. Contexts的安全也是一个应该考虑的因素。从一个context 呼出的电话都必须在指定的路由规则中进行,例如可能长途电话,国际长途,或者占用系统的其他资源,例如多方会议的会议室等等。系统没有对Extensions的号码数进行定义…… 实例中的XML拨号规则定义了三个不同的contexts, 让我们继续做更多了解。
Default
default context包含所有extension 支持注册的用户。当我们在conf/dialplan/default.xml添加了分机1000时, 实际上我们修改了默认context下的extension. 大部分实例拨号规则中的功能都定义在这里。
未完待续······