拨号计划(Dialplan)主要作用就是对电话进行路由,决定和影响通话的流程。当一个用户拨号时,Dialplan对用户所拨的号码进行分析,进而决定下一步该做什么。

XML Dialplan

XML Dialplan由一系列的XML配置文件组成,这些XML可以是静态配置的,也可以使用动态配置方式从其他服务器或脚本中动态获取。拨号计划文件在/etc/freeswitch/dialplan中
拨号计划由多个Context组成。每个Context中有多个Extension。所以Context就是多个Extension的逻辑集合,它相当于一个分组。一个Context中的Extension与其他Context中的Extension在逻辑上是隔离的。

condition

在Extension中可以对一些condition(测试条件)进行判断,如果满足测试条件所指定的表达式,则执行对应的Action(动作)。

condition field 表示你需要匹配的信息是取什么参数进行匹配,freeswitch提供匹配的参数很多,有如下参数:
rdnis :重定向号
destination_number :被叫号码
caller_id_name :主叫名称(坐席名称)
caller_id_number:主叫号码
ani Automatic 自动号码(呼叫方主叫号码)
uuid Unique :号码的通话uuid
source :呼叫来源
network_addr :对端ip地址

expression

图片.png

expression则是设置匹配的正则表达式,这里直接关乎的这个拨号计划是否可以匹配上,freeswitch的正则和平常我们使用的正则都是一样的,只要搞懂这些正则,即可写好一个拨号计划。
1. ^表示匹配以XXX开头的 如:^1234

  1. | 表示或的意思 比如 ^1234|5678
  2. [] 表示匹配一个范围 比如:[0-9] 表示匹配0-9的数字
  3. \d 表示匹配一个数字,比如 \d 就相同于匹配0-9
    • 表示匹配至少一个或者多个,比如 \d+ 表示匹配至少1个数字
    • 表示匹配任意0个或者多个 比如\d* 表示匹配0个或者多个
  4. $ 表示匹配什么结尾的,如: 456$ 表示匹配456结尾的
  5. {} 表示精确匹配位数,如 \d{5} 表示精确匹配5位数字
  6. . 表示匹配任意一个字符

动作与反动作

执行的内容大体可以分2种类,一种叫action,一种叫anti-action,action是在condition匹配的时候执行,而anti-action是在condition不匹配的时候执行。
action有两个参数,一个是application,一个是data。其中application是指一个注册的应用程序。data是给这个应用程序传递的参数。
在anti-action里不能使用$1这样的变量,原因是expression没有匹配成功,所以$1没有值。

这里简单的介绍一些常用的action命令:

  1. set / unset 表示写入一个参数,或者取消写入一个参数,data则标识写入的内容,如: ,表示写入一个vccid=8001的参数,这样的用法同第二部分在拨号计划中加入{vccid=8001}产生的效果是一样的,我们同样可以通过variable_vccid 在通道事件中取出这个通道变量。
  2. answer: 表示接听,这种app可以无需传递data信息,只需 即可完成。
  3. confence:表示进入一个会议,data中填写相应的会议参数
  4. bridge:表示进行桥接,data中填写相应转接的相关信息
  5. sleep:睡眠,表示让通话休眠多长的时间,data中可以填写休眠的时间
  6. hangup:挂断,data是可选参数,里面可以填写挂断原因,单参数也不是自己随意设定的,仅可以填写freeswitch hangupcause中的任意参数。
    等等,具体各种详细的action方法可以参考资料:https://freeswitch.org/confluence/display/FREESWITCH/XML+Dialplan 里也有详细介绍diaplan