Asterisk 星号阻止仅来自特定国家/地区的来电

Asterisk 星号阻止仅来自特定国家/地区的来电,asterisk,dialplan,Asterisk,Dialplan,我正试图制定一个拨号计划来阻止来自孟加拉国的来电,比如说,孟加拉国的国家代码是88 这是我的拨号计划 exten => _X.,1,NoOp(${CALLERID(num)}) same => n,Set(regx=^(88)[0-9]$) same => n,GotoIf($[${REGEX("${regx}" ${CALLERID(num)})} = 1]?blacklisted,s,1) same => n,Dial(SIP/8.8.8.8/${

我正试图制定一个拨号计划来阻止来自孟加拉国的来电,比如说,孟加拉国的国家代码是88

这是我的拨号计划

exten => _X.,1,NoOp(${CALLERID(num)})
same => n,Set(regx=^(88)[0-9]$)
same => n,GotoIf($[${REGEX("${regx}" ${CALLERID(num)})} = 1]?blacklisted,s,1)
same => n,Dial(SIP/8.8.8.8/${EXTEN}
[blacklisted]
exten => s,1,Wait(9)

我想做的是,来自88的任何东西都应该被发送到黑名单。目前,如果我使用呼叫者ID 88测试呼叫,它可以工作,但是如果呼叫来自88XXXXXXX,这不起作用。我可以做什么使我的拨号计划阻止从88xxxxx到转到黑名单的任何呼叫。

星号拨号计划本身就是regexp。为什么使用其他regexp

exten => _X.,1,NoOp(${CALLERID(num)})
same => n,Gosub(cid-blacklist,${CALLERID(num)},1)
same => n,Dial(SIP/8.8.8.8/${EXTEN}
[cid_blacklist]
exten => _88.,1,Noop(bangladesh)
same => n,Wait(100)
; this works only when not found match in context.
include=> cid_blacklist_not_found
[cid_blacklist_not_found]
exten => _X.,1,Return;not found in cid blacklist

为什么要使用复杂的正则表达式函数?就这样做吧:

exten => _X.,1,NoOp(CallerID is: ${CALLERID(num)})
exten => _X.,n,Set(number=${CALLERID(num)})
exten => _X.,n,ExecIf($[${number:2} = 88],Hangup())
exten => _X.,n,NoOp(Call is being continued)
这将把callerid num保存到“number”变量中。然后它将检查变量的前两个字符是否等于88。如果是这样,电话将被挂断。如果要将黑名单调用发送到特定上下文,并在其中执行其他操作,也可以使用GoToIf而不是ExecIf