2011-08-29 34 views
0

我希望能够从拨号计划中分离出唯一的免费电话号码,然后通过SIP路由,而不是通过本地中继线。我的问题是优先编号,看起来免费电话号码也会与中继线延长相匹配。Asterisk有匹配可能性的优先级

目前: `

exten => _1XXXXXXXXXX,1,SetCallerID(${DEFAULT_CIDName} <${DEFAULT_CIDNum}>) 

exten => _1XXXXXXXXXX,n,Dial(${TRUNK_OB}/${EXTEN:0:11}) 

exten => _1XXXXXXXXXX,n,Hangup 

`

我希望能够补充:

exten => _1800NXXXXXX,1,Dial(SIP/sip.server.com/${EXTEN})

(以及888,855,877 & 866)

但是免费电话号码与中继线拨号相匹配。

如果我将添加设置为优先级2,然后将中继线拨号设置为优先级3,是否只拨打SIP并跳过中继线,或者是否可以将它们设置为优先级1,如果它是免费的,只拨打SIP?

我已到处寻找,不能拿出结论。任何建议将不胜感激!!

回答

0

在您的示例中,您覆盖优先级1,并且dialplan在“更宽”扩展模式内继续优先级2。在你的情况下,当您拨打180,下面的拨号方案将执行:

exten => _1800NXXXXXX,1,Dial(SIP/sip.server.com/${EXTEN}) 
exten => _1XXXXXXXXXX,2,Dial(${TRUNK_OB}/${EXTEN:0:11}) 
exten => _1XXXXXXXXXX,3,Hangup 

的SetCallerID()是由免费电话分机覆盖。有两种方法来解决这个问题:

  1. 覆盖扩展2,而不是1

    exten => _1XXXXXXXXXX,1,SetCallerID(${DEFAULT_CIDName} <${DEFAULT_CIDNum}>) 
    exten => _1XXXXXXXXXX,n,Dial(${TRUNK_OB}/${EXTEN:0:11}) 
    exten => _1XXXXXXXXXX,n,Hangup 
    ; overwrite priority 2 (Dial) for toll free numbers 
    exten => _1800NXXXXXX,2,Dial(SIP/sip.server.com/${EXTEN}) 
    

    这可能不是最干净的解决方案,你将通过priorites走动代码时会感到困惑。

  2. 设置优先级为1的“dialstring”变量,您可以覆盖并稍后使用它。

    exten => _1XXXXXXXXXX,1,Set(DIALOUTSTRING=${TRUNK_OB}/${EXTEN:0:11}) 
    exten => _1XXXXXXXXXX,n,SetCallerID(${DEFAULT_CIDName} <${DEFAULT_CIDNum}>) 
    exten => _1XXXXXXXXXX,n,Dial(${DIALOUTSTRING}) 
    exten => _1XXXXXXXXXX,n,Hangup 
    ; use another dialout for toll free numbers 
    exten => _1800NXXXXXX,1,Set(DIALOUTSTRING=SIP/sip.server.com/${EXTEN})