持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
我们将从多个方面讨论呼叫路由相关的知识,主要包括:
- 内部呼叫
- DID内呼
- 外呼
- 同振
- 顺振
- 定时路由呼叫
介绍
呼叫路由是每一个FREESWITCH服务器的核心。虽然有若干处理复杂呼叫建立的方法,但它可以提供基本的工具,确保解决这些问题。
呼叫路由的最基本内容是拨码计划(dialplan)。拨码计划由一系列动作组成,以完成各种拨码(就像书中诸多章节提到的,拨码计划还有许多特性能影响呼叫路由)。拨码计划包含若干个contexts,每个contexts包含若干个extensions,每个extensions由若干个actions组成,每个actions完成特定的呼叫路由。呼叫路由的解析通过regular expressions完成。regular expressions是正则表达式匹配模式,以完成各个extensions和actions的执行。
为了确保能正确理解本章的内容,了解默认配置中的正则表达式匹配和三个contexts非常必要。
Regular expressions
FreeSWITCH 使用Perl-compatible regular expressions(PCRE) 进行正则表达式匹配。请看如下拨码计划的片段,
<action application=”log” data=”INFO dialed number is [$1]“/>
该例子是包含了拨码计划的大部分内容。匹配destination_number(是指用户要进行呼叫的号码)字段并把该值保存在一个名为1的变量里。假如一个用户拨打1025,该号码正好和我们例子中的(10\d\d)1的变量里。假如一个用户拨打1025,该号码正好和我们例子中的^(10\d\d)1的变量里。假如一个用户拨打1025,该号码正好和我们例子中的(10\d\d)相符合。所有在action中的动作将执行。在我们的例子中将执行log输出。将在终端上显示一条绿色信息,并将变量$1的值用1025代替。打印出的内容如下:
2011-01-09 13:38:31.864281 [INFO] mod_dptools.c:1152 dialed number is [1025]
理解了这个基础的例子,你可以写出更为出色的拨码计划。更多关于正则表达式匹配相关的内容,可以参考如下链接:wiki.freeswitch. org/wiki/Regex.
[wiki部分翻译开始]
介绍
在FreeSWITCH中大量使用了正则表达式匹配。具体可以参见wiki.freeswitch.org/wiki/Dialpl…
可以通过在CLI中运行regex命令测试所写正则表达式是否符合您的想法。
regex
Evaluate a regex (regular expression). This command behaves differently depending upon whether or not a substitution string is supplied:
- If a subst is not supplied, regex returns either true or false
- If a subst is supplied, regex returns the subst value on a true condition, or the source string on a false condition (this is an update as of revision 14727, previously the regex would return “false” on a failed match.)
The regex delimiter defaults to the | (pipe) character. The delimiter may be changed to ~ (tilde) or / (forward slash) by prefixing the regex with m: (new behavior as of 14727).
Usage: regex |[|]
regex m://[/]
regex m:[~]
Examples:
regex test1234|\d <== Returns “true”
regex m:/test1234/\d <== Returns “true”
regex m:test1234\d <== Returns “true”
regex test|\d <== Returns “false”
regex test1234|(\d+)|$1 <== Returns “1234″
regex sip:foo@bar.baz|^sip:(.)|$1 <== Returns “foo@bar.baz”*
regex testingonetwo|(\d+)|$1 <== Returns “testingonetwo” (no match)
[wiki部分翻译结束]
默认配置中的重要拨码计划
如前所述,contexts是由若干个extensions组成。FreeSWITCH默认的配置包括三类contexts。
- default
* public
* features
每一类都有其特定的作用,了解他们,有助于您更好地实现您想要实现的功能。具体可参见wiki.freeswitch.org/wiki/Dialpl…。
在默认配置中使用最多的context是 default context。默认不修改的情况下,所有在FREESWITCH上认证的用户之间的通话都将使用该context。一般的修改包括使用ACLs以及禁用认证。Default context可以看作是一种“内部的”context,即它管理所有在FreeSWITCH注册的用户之间的路由,与之相对应的是“外部的”呼叫。
许多传统PBX所拥有的特性在default context中都有所体现。在 conf/dialplan/default. Xml 中有许多值得学习的实例。可以通过简单的实例开始学习,例如 show_info,可以在终端打印一些提示信息; vmain, which allows a user to log into his/her voicemail box.
Local_Extension非常有用,它包含如下内容:
- 内部用户之间的呼叫路由
- 语音留言功能
- 使用 bind_meta_app实现in-call特性
- 更新本地数据库,实现回呼、监听等功能
本章讨论的许多内容都可以在Local_Extension中找到。