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.