Asterisco bloqueia a chamada recebida com certos identificadores de chamadas

1

Então eu sei que esta é uma questão bastante simples, mas não consigo encontrar uma boa resposta para isso. Eu tenho um DID que está sendo atingido bastante difícil (ou pelo menos para mim, cerca de 1-3 chamadas por dia) com telemarketing de números não 1-8XX. No entanto, há apenas um punhado de números que chamam dia após dia. Então, naturalmente, eu gostaria apenas de bloqueá-los para que meu telefone não toque e eu não seja cobrado por uma ligação.

Estou tentando enviar um SIP / 404 ou outra resposta que não seja de resposta - não enviá-los para o correio de voz ou outra gravação. Eu realmente não me importo com o registro em log ou qualquer coisa assim, eu só gostaria de poder adicionar (ou remover) um número com bastante facilidade para que eu possa reduzir as chamadas desnecessárias.

Tudo que eu acho parece ser muito complexo ou muito simples (apenas um número bloqueado) e não consigo encontrar um bom meio. Espero que alguém tenha uma visão melhor! Eu estou usando o Asterisk 1.6. Obrigada!

    
por user98651 13.01.2012 / 07:54

2 respostas

2

Eu fiz algo parecido e, como o outro apresentador, usei um banco de dados. Em vez de usar a funcionalidade int do DB, usei cmd MySQL . Isto foi para que eu pudesse escrever uma página web que interage com o mesmo DB E meu DBA poderia cruzar DBs entre esta tabela "Directory" e o CDR do MySQL.

No meu exemplo, configuro uma tabela com 4 campos. id (auto_increment int), number (o número do telefone), name (O nome do usuário), ban (um int cujo valor padrão é 0). O exemplo faz 2 coisas, 1- ele procura o nome do DB e o define como o identificador de chamadas (já que nossa linha POTS não comunica isso) 2- Olha para cima para ver se ban está definido como 1, e bloqueia a chamada.

exten => s,1,Answer
exten => s,n,NoOp("Caller ID IS: ${CALLERID(number)}")
exten => s,n,MYSQL(Connect connid HOST USER PASSWORD database)
exten => s,n,MYSQL(Query resultid ${connid} SELECT name,ban FROM directory WHERE number='${CALLERID(number)}')
exten => s,n,MYSQL(Fetch fetchid ${resultid} name ban)
exten => s,n,NoOp("We found: ${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,Goto(mainmenu,s,1)

Depois disso, você terá seu [mainmenu] e [wedontlikeyou]. O mais atrasado é seu ban, poderia ser um simples hangup, mensagem de erro, o que quer que você quer. Minha preferência é Congestion () pois isso tende a fazer as pessoas pensarem que o número de telefone está fora de serviço.

    
por 31.01.2012 / 08:07
4

Como estão suas habilidades de programação? Não tenho certeza sobre todos os detalhes, mas acho que da sua pergunta:

  • Você recebeu um número de entrada dos EUA por meio do protocolo SIP
  • Este é um número para o qual você paga custos de chamadas de entrada para (1-800?)
  • Você tem vários números de identificação de chamadas que deseja bloquear
  • Esse número é grande o suficiente (mais de 10, eu acho) para não escrever uma ou duas linhas de código em extensions.conf para cada número

Dê uma olhada no código no link kaptk2 mencionado.

Depois, dê uma olhada nas funções do asterisco do DB (): Função Asterisk DB () . Você faria uma pesquisa de cada identificador de chamadas recebidas como chave do banco de dados e poderá manter as chaves do banco de dados a partir da linha de comando do asterisco.

Breve exemplo de gerenciamento de banco de dados:

greenblatt*CLI> database put blockcaller 18005551212 1
Updated database successfully
greenblatt*CLI> database get blockcaller 18005551212
Value: 1

Você pode acessar o valor com algo como:

exten => s,1,GotoIf($[${DB(blockcaller/${CALLERID(num)}))} = 1]?blocked:ok

A melhor maneira de "matar" a chamada seria usar a função Hangup (). Ou se você insistir em um código 404: envie-o para uma extensão inexistente.

    
por 16.01.2012 / 22:43

Tags