【Freeswitch从入门到精通】五、Dialplan

DiaplanFreeswitch 是指路由表, 也可以称为 拨号方案

路由表 其实很简单,也是快速入门的首要学习内容。

路由表旨在接受呼叫请求,决定它应该转发到哪里,然后转发到应用程序。

1、支持类型

命令: show dialplan

获取支持的路由类型,以及支持模块。

freeswitch@ays-virtual-machine> show dialplan
type,name,ikey
dialplan,LUA,mod_lua
dialplan,XML,mod_dialplan_xml
dialplan,asterisk,mod_dialplan_asterisk
dialplan,enum,mod_enum
dialplan,inline,mod_dptools
dialplan,signalwire,mod_signalwire

6 total.

2、工作流程

  • 来电,通过注册用户 context (默认:default),或者 sofia profile --> internal/external 指定 context(默认:public),查找 context 入口,这是呼叫处理的“路由”阶段。
  • context 就是一个 extension 列表,呼叫从头到尾处理每个 extension ,如果走到context尽头,那就自动挂断。
  • 如果一个extension被评估为“匹配”,那么是否继续下一个extension,取决于当前extension的"continue"参数值,如果为 true,则继续执行,否则,终止。
  • 每个extension由一个或多个条件(condition)组成,每个condition 包含一个或多个action / anti-action
  • 定义呼叫的特征(比如说被叫号码)、配置(在vars.xml或其它地方设置的变量),以及系统信息(一天中的时间),都可以通过变量访问。【详细可参考:Variables 篇】
  • 每个条件(condition)都会检查一些特定的变量值与某些(正则)表达式的匹配。
  • 根据表达式的匹配结果,条件(condition)值被评估为truefalse,如果condition值为true,它的action将被添加到TODO列表;如果是false,那么anti-action将被添加到TODO列表中。同时注意:只要进入了该condition,无论当前condition值为true还是falsecontinue都会生效。
  • 在一个condition内,"break"参数值决定是否继续判断后续的condition。值可取为:on-true, on-false, nerver, always(字面意思理解就行,比如:on-true,就是当前condition值为true,就break退出extension,不继续执行)。
    actions (和 anti-actions)都是拨号方案的APP(由FreeSWITCH及附加模块提供,大部分由mod_dptools模块提供)
  • 遍历拨号方案的context并检查完extension之后,结束“路由”阶段,并进入“执行阶段”。在“执行阶段”,所有堆积在TODO列表中的action挨个执行(先进先出)
  • “路由阶段”与“执行阶段”的分离,意味着你不能在拨号方案同一阶段中同时设置并检查变量(不能在同一extension的下一个condition中检查,也不能在后续extensioncondition中检查)。如果确实需要,使用"set" APP提供的"inline"参数。
  • 初始进入拨号方案的呼叫称为"A-leg",FreeSWITCH发起的,并最终与"A-leg“桥接的呼叫,称为”B-leg"。(注:如果桥接的呼叫为多个,那么和这多个呼叫建立的连接,均称为"B-leg")
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeSWITCHDialplan 是用 XML 文件编写的,它定义了呼叫路由、语音信箱、队列、语音菜单等呼叫中心功能。以下是编写 Dialplan 的基本步骤: 1. 创建 Dialplan 文件:在 FreeSWITCH 的配置文件夹中创建 Dialplan XML 文件,例如 `dialplan.xml`。 2. 定义 Dialplan:在 Dialplan 文件中定义 `<include>` 标签,引用其他 Dialplan 模块。 3. 定义 Context:在 Dialplan 文件中定义 `<context>` 标签,定义呼叫路由的上下文。 4. 定义 Extension:在 `<context>` 标签中定义 `<extension>` 标签,定义呼叫路由。 5. 定义 Action:在 `<extension>` 标签中定义 `<action>` 标签,定义呼叫路由的动作。 6. 定义变量:在 `<extension>` 标签中定义 `<var>` 标签,定义变量。 7. 使用条件语句:在 `<extension>` 标签中使用 `<condition>` 标签,定义条件语句。 8. 使用循环语句:在 `<extension>` 标签中使用 `<anti-action>` 标签,定义循环语句。 9. 定义语音信箱:在 `<context>` 标签中定义 `<mailbox>` 标签,定义语音信箱。 10. 定义语音菜单:在 `<context>` 标签中定义 `<menu>` 标签,定义语音菜单。 以上是 Dialplan 的基本编写步骤。需要注意的是,在编写 Dialplan 时,需要遵循 FreeSWITCH 的语法规则,并且需要考虑呼叫路由的优先级、呼叫转移、呼叫会议等各种情况。同时,需要结合 FreeSWITCH 的其他模块,如 IVR、语音信箱、队列等,实现完整的呼叫中心功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值