Asterisk 中 background 使用要注意的地方

exten => s,1,background(voice_file)

exten =>1,1,playback(choice1)

exten => 1,2,hungup()

exten => i,1,playback(wrongchoice)

exten =>1,2,goto(s,1)

exten => t,1,play(timeout)

exten =>t,2,hungup()

 

一直以来都认为,当没有按键的时候,会自动进入t,谁知道,原来不是这样的。

background之后,会自动进入s,2 步,但是由于s,2没有了,所以就自动挂掉了。

 

查了资料才知道,要执行t,必须得先在background之后设置超时时间,可以在这里改成:

exten => s,1,background(voice_file)

exten => s,2,set(TIME(response)=10)  //在这里设定为十秒

exten =>s,3,WaitExten(2)     //在这里再跳回2再次设置,如果不这样的话,就自动挂掉了。

                因为还没有到时间去执行t.

exten =>1,1,playback(choice1)

exten => 1,2,hungup()

exten => i,1,playback(wrongchoice)

exten =>1,2,goto(s,1)

exten => t,1,play(timeout)

exten =>t,2,hungup()

 

 

 

关于BackGround的在宏内的使用时,要特别注意:

 

     如下方案:

 

     [default]

     exten => s,1,Macro(exeBG)

     exten => 1,1,Noop(Press 1)

     exten => 2,1,Noop(Press 2)

 

 

     [macro-exeBG]

     exten => s,1,BackGround(file1)

     exten => s,n,WaitExten(10)

 

     exten => 1,1,Noop(macro 1)

     exten => 2,1,Noop(macro 2)

 

     如上方案,如果用户响应的按键为1时,是不会转到[macro-exeBG]中的1那里的,而是会转到[default]中的1,即打印出Press 1.

 

     如果希望转到[macro-exeGB],必须在BackGround中加入一个参数,参数值就是整个宏的名称,即:

  [macro-exeBG]

     exten => s,1,BackGround(file1,,,macro-exeGB)

     exten => s,n,WaitExten(10)

 

     exten => 1,1,Noop(macro 1)

     exten => 2,1,Noop(macro 2)

 

     这样的话,才会转到宏内对应的响应的按键那里。

 

 

  不过,就我而言,我比较喜欢用Read来响应用户的按键,可以为响应按键单独写一个宏,   如下:

 

   [macro-FuncPressDigit]      ;播放提示音,并输入一个数字键
;入口: ${ARG1},即{IR1}等待时长
;       ${ARG2},即{SR1}要播报的文件
;出口: ${IR1} ,10输入了*号,11超时没输入

exten => s,1,Read(IR1,${ARG2},1,,,${ARG1})
exten => s,n,GoToIf($[${LEN(${IR1})}=0]?10)        ;表示超时没有输入
exten => s,n,GoToIf($["${IR1}"="*"]?20)                ;输入了*号
exten => s,n,Noop(${IR1})

exten => s,10,Set(IR1=11)                    ;超时
exten => s,20,Set(IR1=10)                    ;输入了*号时,设置为10

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值