freeswitch Routing Calls

简介: freeswitch Routing Calls

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

我们将从多个方面讨论呼叫路由相关的知识,主要包括:

  • 内部呼叫
  • DID内呼
  • 外呼
  • 同振
  • 顺振

  • 定时路由呼叫

介绍


呼叫路由是每一个FREESWITCH服务器的核心。虽然有若干处理复杂呼叫建立的方法,但它可以提供基本的工具,确保解决这些问题。


呼叫路由的最基本内容是拨码计划(dialplan)。拨码计划由一系列动作组成,以完成各种拨码(就像书中诸多章节提到的,拨码计划还有许多特性能影响呼叫路由)。拨码计划包含若干个contexts,每个contexts包含若干个extensions,每个extensions由若干个actions组成,每个actions完成特定的呼叫路由。呼叫路由的解析通过regular expressions完成。regular expressions是正则表达式匹配模式,以完成各个extensionsactions的执行。


为了确保能正确理解本章的内容,了解默认配置中的正则表达式匹配和三个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中找到。


相关文章
|
网络协议 网络架构
RIP(Routing Information Protocol,路由信息协议)
RIP是由Xerox公司在20世纪七十年代开发的,最初定义的RFC1058中。每个有RIP功能的路由器在默认情况下每隔30秒利用UDP520端口向与它直连的网络邻居广播(RIP v1)或组播(RIP v2)路由更新。因此,路由器不知道网络的全局情况,如果路由更新在网络上传播慢,将会导致网络收敛较慢,造成路由环路。为了避免路由环路,RIP采用水平分割、毒性逆转、定义最大跳数、触发更新和抑制计时器等机制来避免路由环路。
416 0
RIP(Routing Information Protocol,路由信息协议)
|
XML 网络协议 数据格式