asterisk拨号方案设计
2016-04-13 13:39
316 查看
Playback()和Background()的区别:
构建交互式Asterisk系统的关键是Background()应用。与Playback()相同的是,它也播放事先录制好的语音文件;
与Playback()不同的是,当主叫方按下电话键(1个或者多个)的时候,会中断语音的播放,转到所按数字对应的extension。
例如:主叫方按下5,Asterisk停止播放语音,把呼叫的控制发送给extension 5 的第一个priority。
Background()应用通常用于创建语音菜单(也称作自动话务员或者电话树)。
很多公司使用语音菜单来引导主叫方到适当的分机,以免接待员每一个电话。
Background()的语法与Playback()类似:
exren => 123456,1,Background(hello-world)
Asterisk带有很多专业录制的语音文件,他们在默认的语音文件目录内(通常是/var/lib/asterisk/sounds/)
一段拨打10086,然后提示请拨分机号码的拨号方案(我模拟的拨打10086的情景):
先来配置:
sip.conf
[9901]
type=friend
host=dynamic
secret=123
context=demotest2
[9902]
type=friend
secret=123
host=dynamic
context=demotest2
extensions.conf
[globals]
;下面这行是错误代码,[globals]中不能使用${EXTEN}
;MY=SIP/${EXTEN}
[demotest1]
;下面这行也有问题,MY本来就是错的
;exten => _99.,1,Dial(MY,5)
;下面这行是对的
exten => _99.,1,Dial(SIP/${EXTEN},5)
exten => _99.,2,SayDigits(${EXTEN})
exten => _99.,5,Playback(vm-nobodyavail)
;等待10s,使用Wait(10)
;exten => _99X.,n,Wait(10)
;挂断
exten => _99X.,n,Hangup()
实现有三种方法
方法一
这个方法的缺陷是:当vm-enter-num-to-call.gsm播放完毕之前必须按下分机号,否则出错。
[demotest2]
exten = 10086,1,Background(vm-enter-num-to-call)
exten = 1,1,Playback(digits/1)
exten = 1,2,Goto(demotest2,10086,1):
exten = 10,1,Playback(digits/10)
exten = 10,2,Goto(demotest1,10086,1)
exten = 11,1,Playback(digits/11)
exten = 11,2,Goto(10086,1)
exten = 12,1,Playback(digits/12)
exten = 12,2,Dial(SIP/9901)
exten = i,1,Playback(pbx-invalid)
exten = i,2,Goto(10086,1)
exten = t,1,Playback(vm-goodbye)
exten = t,2,Hangup()
方法二:
这种方法的特点是使用WaitExten()等待用户输入。
[demotest2]
exten = 10086,1,Playback(vm-enter-num-to-call)
exten = 10086,n,WaitExten()
exten = 1,1,Playback(digits/1)
exten = 1,2,Goto(demotest2,10086,1):
exten = 10,1,Playback(digits/10)
exten = 10,2,Goto(demotest1,10086,1)
exten = 11,1,Playback(digits/11)
exten = 11,2,Goto(10086,1)
exten = 12,1,Playback(digits/12)
exten = 12,2,Dial(SIP/9901)
exten = i,1,Playback(pbx-invalid)
exten = i,2,Goto(10086,1)
exten = t,1,Playback(vm-goodbye)
exten = t,2,Hangup()
方法三:
这种方法是最简单的,代码最少。read是一个相当重要的应用,很多时候都会用到它。
[demotest2]
;exten => 10086,1,Read(digit,vm-enter-num-to-call,11,,3,5)
;exten = _X.,1,Playback(digits/${EXTEN})
;exten => 10086,n,Dial(SIP/${digit})
;exten => 10086,n,NoOp("===${HANGUPCAUSE}===")
;exten => 10086,n,GotoIf($[${HANGUPCAUSE}=20]?1)
;exten => 10086,n,Hangup()
构建交互式Asterisk系统的关键是Background()应用。与Playback()相同的是,它也播放事先录制好的语音文件;
与Playback()不同的是,当主叫方按下电话键(1个或者多个)的时候,会中断语音的播放,转到所按数字对应的extension。
例如:主叫方按下5,Asterisk停止播放语音,把呼叫的控制发送给extension 5 的第一个priority。
Background()应用通常用于创建语音菜单(也称作自动话务员或者电话树)。
很多公司使用语音菜单来引导主叫方到适当的分机,以免接待员每一个电话。
Background()的语法与Playback()类似:
exren => 123456,1,Background(hello-world)
Asterisk带有很多专业录制的语音文件,他们在默认的语音文件目录内(通常是/var/lib/asterisk/sounds/)
一段拨打10086,然后提示请拨分机号码的拨号方案(我模拟的拨打10086的情景):
先来配置:
sip.conf
[9901]
type=friend
host=dynamic
secret=123
context=demotest2
[9902]
type=friend
secret=123
host=dynamic
context=demotest2
extensions.conf
[globals]
;下面这行是错误代码,[globals]中不能使用${EXTEN}
;MY=SIP/${EXTEN}
[demotest1]
;下面这行也有问题,MY本来就是错的
;exten => _99.,1,Dial(MY,5)
;下面这行是对的
exten => _99.,1,Dial(SIP/${EXTEN},5)
exten => _99.,2,SayDigits(${EXTEN})
exten => _99.,5,Playback(vm-nobodyavail)
;等待10s,使用Wait(10)
;exten => _99X.,n,Wait(10)
;挂断
exten => _99X.,n,Hangup()
实现有三种方法
方法一
这个方法的缺陷是:当vm-enter-num-to-call.gsm播放完毕之前必须按下分机号,否则出错。
[demotest2]
exten = 10086,1,Background(vm-enter-num-to-call)
exten = 1,1,Playback(digits/1)
exten = 1,2,Goto(demotest2,10086,1):
exten = 10,1,Playback(digits/10)
exten = 10,2,Goto(demotest1,10086,1)
exten = 11,1,Playback(digits/11)
exten = 11,2,Goto(10086,1)
exten = 12,1,Playback(digits/12)
exten = 12,2,Dial(SIP/9901)
exten = i,1,Playback(pbx-invalid)
exten = i,2,Goto(10086,1)
exten = t,1,Playback(vm-goodbye)
exten = t,2,Hangup()
方法二:
这种方法的特点是使用WaitExten()等待用户输入。
[demotest2]
exten = 10086,1,Playback(vm-enter-num-to-call)
exten = 10086,n,WaitExten()
exten = 1,1,Playback(digits/1)
exten = 1,2,Goto(demotest2,10086,1):
exten = 10,1,Playback(digits/10)
exten = 10,2,Goto(demotest1,10086,1)
exten = 11,1,Playback(digits/11)
exten = 11,2,Goto(10086,1)
exten = 12,1,Playback(digits/12)
exten = 12,2,Dial(SIP/9901)
exten = i,1,Playback(pbx-invalid)
exten = i,2,Goto(10086,1)
exten = t,1,Playback(vm-goodbye)
exten = t,2,Hangup()
方法三:
这种方法是最简单的,代码最少。read是一个相当重要的应用,很多时候都会用到它。
[demotest2]
;exten => 10086,1,Read(digit,vm-enter-num-to-call,11,,3,5)
;exten = _X.,1,Playback(digits/${EXTEN})
;exten => 10086,n,Dial(SIP/${digit})
;exten => 10086,n,NoOp("===${HANGUPCAUSE}===")
;exten => 10086,n,GotoIf($[${HANGUPCAUSE}=20]?1)
;exten => 10086,n,Hangup()
相关文章推荐
- 给 Android 开发者的 RxJava 详解
- 【java】java线程并发测试模版
- IntelliJ idea下的项目结构
- 修改Oracle Virtual Box中vdi的大小
- new和delete
- Visual Studio 2013 自定义工具 MSLinqToSQLGenerator失败的解决方案
- java 获取硬件信息
- 哈儿小波分解和重构(降维和升维)实现算法
- iOS 开发— JSONS字符串转字典
- Openwrt上Php+Mysql+Lighttpd的安装配置
- C++运算符重载
- iOS 8 Auto Layout界面自动布局系列5-自身内容尺寸约束、修改约束、布局
- C++运算符重载
- 似曾相识,去年今日也是在找工作,没有后悔走上IT这条路,只是后悔选择的有些迟,但我不会放弃的!
- 本地电脑访问远程服务器上的共享文件夹
- bzoj 2959: 长跑 lct
- 传递给数据库 'master' 中的日志扫描操作的日志扫描号无效
- Android studio svn的相关操作
- centos6虚拟机配置静态IP
- 工厂模式学习