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

Axe*_*ard 1 voip telephony asterisk communication sip

我的SIP服务提供商为我的办公室提供了一个电话号码0120120020.我最近已经向我的SIP提供商询问了同一SIP帐户上的第二个电话号码0230230030.

当有人通过拨打电话号码来打电话给办公室时,我希望Asterisk拨打属于A组的所有电话,如果拨打第二个电话号码,我希望它能拨打属于B组的所有电话.

我的extensions.conf包含以下行:

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

扩展10,11和12属于A组,扩展20和21属于B组.每个来自主要第二个电话号码的来电都会响铃.

如何在CentOS 6.3下使用Asterisk 1.8进行此操作?

Axe*_*ard 5

对于每次调用,Asterisk会设置一些包含有关当前传入呼叫的​​信息的变量.如果呼叫来自特定国家/地区,这些信息对于采取不同的行动非常有用,您还可以阻止来自其电话号码的不良呼叫者,......

我们正在寻找一种方法来检索DID,这实际上意味着直接拨入号码,这是呼叫者拨打您办公室所拨打的号码.

有两种方法可以检索它:

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

    [sip-incoming-calls]
    exten => s,1,Set(thedid=${CALLERID(dnid)})
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果上述变量为空,则您的SIP提供程序不会根据需要发送任何信息,以使Asterisk正确填充它.

    但是,您可以直接从SIP标题内的"收件人"字段中检索电话号码SIP_HEADER(To),此变量将包含<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)})
    
    Run Code Online (Sandbox Code Playgroud)

一旦在变量中检索了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)
Run Code Online (Sandbox Code Playgroud)


小智 5

[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) 
Run Code Online (Sandbox Code Playgroud)