我有一个工作的Asterisk 13 Dialplan,其中一个调用进入extensions.conf,然后在extensions.conf中进入一个switch语句:
switch => Realtime
有效。调用根据数据库表的内容完成。
现在我要做的是在调用Realtime表之前进行一些过滤。像这样:
exten => _X.,1,Set(GROUP()=${ACCOUNTCODE:0:4})
exten => _X.,n,GotoIf($[${GROUP_COUNT(ABCD)} > 2]?tooMany,1)
exten => _X.,n,Log(VERBOSE,Call Continuing. ${ACCOUNTCODE} is not a limited group)
switch => Realtime
exten => tooMany,1,Congestion(4)
exten => tooMany,n,hangup(503)
但是,似乎发生的事情是,一旦扩展名匹配(_X。),处理将继续进行匹配,但不会继续并处理" switch =>实时" line(它永远不会执行拨号方案的数据库组件)
如何在通过过滤器后让Realtime拨号方案执行?
顺便说一句,我可以在全文文件extensions.conf中遇到类似的问题,我希望所有调用都能完成某些操作,然后执行特定于某些调用的操作。 e.g。
exten => _X.,1,<do something>
exten => 1122,1,<do some more stuff to the same call>
这在文档中处理,1122是更具体的行,将是执行的行。但是,对所有来电做某事的正确方法是什么,然后做具体的事情?
答案 0 :(得分:0)
我想您不明白Switch Realtime的工作原理。
仅可以切换一个扩展(或模式)。对于CONTEXT可以这样做。当星号引擎看到switch =&gt;实时它就像include一样工作,即在这个WHOLE上下文中包括数据库搜索。
你也接触不了解拨号方案的工作方式(否则将毫无疑问2)。请阅读像ORelly&#34; Asterisk这样的电话未来的书#34;它逐步描述了它是如何工作的。