星号阻止来电与某些来电显示

所以我知道这是一个相当简单的问题,但我似乎无法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]。 后者是你的禁令,可能是一个简单的挂断,错误信息,你想要什么。 我喜欢拥塞(),因为这往往会使人们认为电话号码不在服务中。

你的编程技巧如何? 我不确定所有的细节,但我想从你的问题:

  • 你有一个美国来电号码通过SIP协议传送给你
  • 这是您拨打(1-800?)来电费用的电话号码
  • 你有一些你想阻止的来电号码
  • 这个数字是足够大的(超过10,我猜)不要在extensions.conf中为每个数字写一两行代码

看看链接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代码:发送到一个不存在的扩展。