我有一个主电话号码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)
变量,其值将设置为0120120020或0230230030[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