-1

我正在尝试制定拨号计划以阻止来自国家代码为 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 的东西都应该被发送到黑名单。目前,如果我使用来电显示 88 测试呼叫,它可以工作,但如果呼叫来自 88XXXXXXX,这不起作用我该怎么做才能让我的拨号计划阻止来自 88XXXXXXX 的任何内容进入黑名单

4

2 回答 2

0

为什么要使用复杂的 REGEX 函数?做这样的事情:

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”变量中。然后它会检查变量的前 2 个字符是否等于 88。如果是,则呼叫将被挂断。如果要将列入黑名单的调用发送到要对其执行其他操作的特定上下文,也可以使用 GoToIf 而不是 ExecIf。

于 2021-01-05T14:54:57.777 回答
0

Asterisk dialplan 本身就是正则表达式。为什么你使用其他正则表达式?

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
于 2020-10-22T10:16:08.010 回答