对于每个呼叫,Asterisk 都会设置一些变量,其中包含有关当前来电的信息。如果呼叫来自特定国家/地区,这些信息有助于采取不同的行动,您还可以阻止来自他们电话号码的不良呼叫者,...
我们正在寻找一种方法来检索 DID,这实际上意味着直接拨入号码,即呼叫者拨打您办公室的号码。
有两种方法可以检索它:
通过CALLERID(dnid)
直接使用变量,它的值将设置为0120120020或0230230030
[sip-incoming-calls]
exten => s,1,Set(thedid=${CALLERID(dnid)})
如果上述变量为空,那么您的 SIP 提供商不会根据需要发送任何信息以使 Asterisk 正确填充它。
但是,您可以使用 直接从 SIP 标头内的 To 字段中检索电话号码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)})
一旦你在变量中检索到 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)