2016-10-21 30 views
0

我有一个Asterisk服务器(主要是)工作拨号计划运行。星号 - 如何处理多位输入

我有这样的场景:

在一个点上的主叫方听到“输入任意号码”。 然后他在手机上输入一个号码。

如果他输入0,我想跳到拨号方案中的'Context0'。 如果他输入1到10000之间的数字,我想跳转到'Context1'。 如果输入的数字高于10000,我想跳转到'Context2'。

处理这一情况的背景是这样的:

[Context] 
exten => 100,1,Background(/var/lib/asterisk/sounds/sound) 

exten => 0,1,Goto(Context0,100,1) 
exten => _Z,1,Goto(Context1,100,1) 
exten => _ZX,1,Goto(Context1,100,1) 
exten => _ZXX,1,Goto(Context1,100,1) 
exten => _ZXXX,1,Goto(Context1,100,1) 
exten => 10000,1,Goto(Context1,100,1) 

exten => i,1,Goto(Context2,100,1) 

这工作,如果我只输入5位数字。如果我输入f.e. 123456然后在12345之后它进入'我的扩展',进入Context2并在这个上下文中应用最后一个数字(在这个例子中是6)。

所以我的问题是,如果输入大于10000,并且它跳到Context2更大,我该如何进行拨号规划检查?

我希望你明白我的问题,我的英语不太好.. :)

非常感谢和问候

回答

0

可以使用Read功能,做任何你想要的检查:

[Context] 
exten => 100,1,Read(mynumber,/var/lib/asterisk/sounds/sound,10,skip,1,5) 
same => n,GotoIf($[${mynumber} = 0]?Context0,100,1) 
same => n,GotoIf($[${mynumber} <= 10000]?Context1,100,1:Context2,100,1) 

上面的代码没有经过测试,可能需要一些调整。

+0

但是,如果我尝试使用Read,它总是会挂断。在日志中我总是看到: [Oct 24 11:34:57]警告[1356] [C-00000000] pbx.c:没有应用程序'Read'用于扩展(Context,s,1) 我也尝试了这样简单的事情:[链接](https://wiki.asterisk.org/wiki/display/AST/The+Read+Application)但它给了我同样的错误... 我必须配置我可以使用应用程序“读取”? – simplex

+0

@simplex确保'app_read.so'已加载。如果您的星号未配置为自动加载,您可以使用'module load app_read.so'命令手动加载并重新运行测试。 –

0

完成后,您可能只需设置数字间超时或按井号(#)。超时可以使用设置:

Set(TIMEOUT(digit)=5) 

或者对旧版本(1.2 <):

DigitTimeout(5) 

应该在拨号方案的背景 CMD前开始出现问题。

0

123456无效,因为您的模式不允许使用6位数字。 (你的模式不允许5位数字,除了10000以外)。

我建议你重新考虑你在做什么以及为什么。

你真的是指'任何数字?'如果我尝试输入100,000位数字会怎么样?

是否可以将“输入任意数字”更改为“输入最多x个数字后跟井号键?”

然后,您可以使用'read()'应用程序和几个'gotoif()s'将调用者路由到不同的上下文。

也许如果你解释了你正在努力完成的任务,可以提出一个更好的方法。