Freeswitch修炼宝典(三)-----拨号方法详解

本文详细解析Freeswitch的拨号计划(dia plan),重点介绍如何设置匹配规则和常用action命令,包括extension的name设定、condition字段的destination_number匹配、正则表达式的运用,以及answer、conference、bridge等action的应用。

在freeswitch中比较重要的一个部分就是diaplan了,diaplan拨号计划简单的来说就是一种号码规则,他可以根据自己定义的规则,设置对应did(目标号码)或者设置匹配的规则,每一步如何实现,都在这里设置实现的。拨号计划一般都放在安装目录的:conf/dialplan下。首先我们拿一个比较有代表性的拨号计划进行拆分:

    <extension name="jdconference">

 <condition field="destination_number" expression="^01086465454_(\d{6})$">

   <action application="set" data="vccid=8001"/>

  <action application="set" data="servicekey=900005"/>

 <action application="answer"/>

 <action application="set" data="conference_enforce_security=false"/>

 <action application="conference" data="${1}@default++flags{nomoh}"/>

       </condition>

</extension>

 

     这个拨号计划是一个简单的sip会议呼入的拨号计划。

   <extension name="jdconference"></extension>

代表一个拨号计划的开始到结束,name表示设置一个拨号计划的名称,这个名称没有什么强制性的界定,只是方便可以在日志中查看到,在fs的日志匹配上可以看到,自己可以直观的看出匹配走了那个拨号计划,去哪里修改,所以这个名称自己可以设置的简单易懂,起码让人在日志中可以一眼看出。

 <condition field="destination_number" expression="^01086465454_(\d{6})$">

这里就是写匹配规则了,condition field表示你需要匹配的信息是取什么参数进行匹配,freeswitch提供匹配的参数很多,有如下参数:

rdnis :重定向号

destination_number :被叫号码

caller_id_name :主叫名称(坐席名称)

caller_id_number:主叫号码

ani Automatic 自动号码(呼叫方主叫号码)

uuid Unique :号码的通话uuid

source :呼叫来源

network_addr :对端ip地址

Year:年

yday :1年的某一天(1-365)

mon :几月(1-12)

mday :1月的某一天(1-31)

week :1年的某一周(1-53)

mweek 1月的某一周(1-6)

wday :1周的某一天(1-7)

minute :1小时的某分钟(1-60)

date-time:详细时间范围 formatted: YYYY-MM-DD hh:mm[:ss]~YYYY-MM-DD hh:mm[:ss]

 

 

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

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

平常我们写好拨号计划,不懂正则写的是否正确,我们可以通过进行fs_cli,使用regex 进行校验, 规则为  regex 目标号码|正则   ,如果正确的话,会返回true,如果写的错误的话,会返回false。

 

这一部分写完之后,其余中间的内容就是我们想实现的内容,执行的内容大体可以分2种类,一种叫action,一种叫anti-action,action是在condition匹配的时候执行,而anti-action是在condition不匹配的时候执行。

action有两个参数,一个是application,一个是data。其中application是指一个注册的应用程序。data是给这个应用程序传递的参数。

在anti-action里不能使用$1这样的变量,原因是expression没有匹配成功,所以$1没有值。

 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值