当我在同一个SIP提供商有多个电话号码时,如何路由来电



我有一个电话号码0120120020,由我的SIP提供商为我的办公室提供。我最近向我的SIP提供商询问了同一SIP帐户上的第二个电话号码0230230030

当有人通过拨打电话号码呼叫办公室时,我希望Asterisk给属于的所有电话打电话,如果改为拨打第二个号码,我希望它给属于的每个电话打电话。

My extensions.conf包含以下行:

[sip-incoming-calls]
exten => s,1,Dial(SIP/10&SIP/11&SIP/12&SIP/20&SIP/21,20,tr)

扩展10、11和12属于组A,扩展20和21属于B。每个电话都会为来自第二电话号码的每个来电铃声响起。

如何在CentOS 6.3下使用Asterisk 1.8?

对于每个呼叫,Asterisk都会设置一些变量,其中包含有关当前传入呼叫的信息。这些信息有助于采取不同的行动。如果电话来自特定的国家,你也可以屏蔽坏来电者的电话号码,。。。

我们正在寻找一种检索DID的方法,它实际上意味着直接向内拨号号码,这是来电者拨打给您办公室的号码。

有两种方法可以检索:

  • 通过直接使用CALLERID(dnid)变量,其值将设置为01201200200230230030

    [sip-incoming-calls]
    exten => s,1,Set(thedid=${CALLERID(dnid)})
    
  • 如果上述变量为空,则SIP提供商不会根据需要发送任何信息以使Asterisk正确填写该变量。

    但是,您可以使用SIP_HEADER(To)直接从SIP标头内的"收件人"字段中检索电话号码,当有人从您的第二个电话号码致电您的办公室时,此变量将包含<sip:0230230030@sip.provider.com>

    [sip-incoming-calls]
    exten => s,1,Set(thedid=${SIP_HEADER(To)})
    exten => s,2,Set(thedid=${CUT(thedid,@,1)})
    exten => s,3,Set(thedid=${CUT(thedid,:,2)})
    

一旦检索到变量内部的DID,就必须设置一个条件,让我们使用GotoIf。在你的情况下,结果会是这样的:

exten => s,4,GotoIf($["${thedid}" = "0120120020"]?6:5)
exten => s,5,GotoIf($["${thedid}" = "0230230030"]?7)
exten => s,6,Dial(SIP/10&SIP/11&SIP/12,20,tr)
exten => s,7,Dial(SIP/20&SIP/21,20,tr)
[sip-incoming-calls]
exten => s,1,goto(${CUT(CUT(SIP_HEADER(TO),@,1),:,2)},1)
exten => 0120120020,1,Dial(SIP/10&SIP/11&SIP/12,20,tr)
exten => 0230230030,1,Dial(SIP/20&SIP/21,20,tr) 

您可以轻松地创建trunk(单独的dahdi端口)并将trunk重定向到特定的扩展。

请您的voip提供商发送拨号呼叫的DID号码然后使用下面的拨号计划

[sip-incoming-calls] 
exten => _0120120020,1,Dial(SIP/10&SIP/11&SIP/12,tr) 
exten => _0120120020,n,hangup
exten => _0230230030,1,Dial(SIP/20&SIP/21,20,tr) 
exten => _0230230030,n,hangup

最新更新