所以我知道这是一个相当简单的问题,但我似乎无法find一个好的答案。 我有一个相当困难的DID(或者至less对我来说,每天大概有1-3个电话)和来自非1-8XX号码的电话推销员。 然而,只有less数几个号召日复一日。 所以很自然,我只想阻止他们,所以我的手机不响了,我没有收到电话的费用。
我正在寻找发送一个SIP / 404或其他一些非答复的答复 – 不发送到语音邮件或其他logging。 我真的不关心伐木或类似的事情,我只是想能够很容易地添加(或删除)一个数字,这样我就可以减less不必要的电话。
我发现的一切似乎都不是太复杂就是太简单(只有一个封锁号码),我找不到一个好的媒介。 希望别人能有更好的见解! 我正在使用Asterisk 1.6。 谢谢!
我做了类似的其他提交者,我使用了一个数据库。 我使用了cmd MySQL ,而不是使用内置的int DBfunction。 这是我可以写一个网页,与相同的数据库进行交互,我的数据库pipe理员可以在这个“目录”表和MySQL CDR之间进行数据库select。
在我的例子中,我设置了一个有4个字段的表格。 id (auto_increment int), number (电话号码), name (用户名), ban (一个默认为0的int)。 这个例子做了两件事,1-从DB查找名字,并将其设置为来电号码(因为我们的POTS线路没有通信)2-查看是否ban设置为1,并阻止呼叫。
exten => s,1,答案
exten => s,n,NoOp(“来电显示:$ {来电显示(号码)}”)
exten => s,n,MYSQL(连接connid HOST USER PASSWORD数据库)
exten => s,n,MYSQL(Query resultid $ {connid} SELECT name,ban FROM directory WHERE number ='$ {CALLERID(number)}')
exten => s,n,MYSQL(取fetchid $ {resultid} name ban)
exten => s,n,NoOp(“我们发现:$ {name} $ {ban}”)
exten => s,n,MYSQL(Clear $ {resultid})
exten => s,n,MYSQL(Disconnect $ {connid});
exten => s,n,Set(CALLERID(name)= $ {name})
exten => s,10,NoOp()
exten => s,n,GotoIf($ [“$ {ban}”=“1”]?wedontlikeyou,s,1)
exten => s,n,转到(mainmenu,s,1)
之后,你会有你的[mainmenu]和[wedontlikeyou]。 后者是你的禁令,可能是一个简单的挂断,错误信息,你想要什么。 我喜欢拥塞(),因为这往往会使人们认为电话号码不在服务中。
你的编程技巧如何? 我不确定所有的细节,但我想从你的问题:
看看链接kaptk2中提到的代码。
然后看看星号的DB()函数: Asterisk函数DB() 。 您将查询每个传入的调用者标识作为数据库密钥,您可以从星号命令行维护数据库密钥。
数据库pipe理的简单例子:
greenblatt*CLI> database put blockcaller 18005551212 1 Updated database successfully greenblatt*CLI> database get blockcaller 18005551212 Value: 1
你可以像这样访问值:
exten => s,1,GotoIf($[${DB(blockcaller/${CALLERID(num)}))} = 1]?blocked:ok
“杀死”呼叫的最好方法是使用Hangup()函数。 或者,如果你坚持404代码:发送到一个不存在的扩展。