Bem amigos,
Como sabem estou apaixonado pelo asterisk, cada dia mais fico impressionado com o que ele pode fazer.
Acordei hoje cedo e resolvi brincar um pouco com ele. E montei um serviço despertador.
Vamos ver como funciona :D
Primeiro o cenário.
Eu tenho em casa um Pentiu II 300 com 96M de RAM e 4Gb de HD. Montei nele um sistema debian com asterisk e a2billing.
O sistema está completo, tarifando as ligações e com ramais SIP ligados a ele.
Eu possuo um contexto de chamadas entrantes chamado custom-niptel e um contexto para os ramais chamado custom-internal.
Agora vamos ao que interessa
O despertador funciona da seguinte maneira
- o ramal disca para 50
- atende uma URA solicitando 1 para ativar e 2 para desativar
- se pressionar 1 ele solicita a hora com dois dígitos e os minutos com dois dígitos
- se pressionar 2 ele desativa o alarme e encerra a chamada
Os dados do alarme são salvos no banco de dados do proprio asterisk, para isso criei uma entrada no banco chamada despertador, ela possui 3 chaves, hora, minuto e status. Status é 0 para desativado e 1 para ativado.
No meu contexto tem uma pequena redundância para a leitura do que foi digitado pelo usuário, não testei sem ela. os comando para o contexto ficam assim:
;;;;;;;;;;;;;;; Servico Despertador ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 50,1,NoOp(Servico Despertador)
exten => 50,2,NoOp(Status: ${DB(despertador/status)})
exten => 50,3,Goto(30)
exten => 50,30,DigitTimeout,5
exten => 50,31,ResponseTimeout,10
exten => 50,32,Wait(1)
exten => 50,33,Read(digito|despertador/ativa|1||2|5)
exten => 50,34,GotoIf($[${digito}=1]?50:70)
exten => 50,50,Set(DB(despertador/status)=1)
exten => 50,51,Read(digito|despertador/hora|2|5)
exten => 50,52,Set(DB(despertador/hora)=${digito})
exten => 50,53,Read(digito|despertador/minuto|2||2|5)
exten => 50,54,Set(DB(despertador/minuto)=${digito})
exten => 50,55,Goto(100)
exten => 50,70,Set(DB(despertador/status)=0)
exten => 50,71,Goto(100)
exten => 50,100,Playback(vm-goodbye)
exten => 50,101,HangUp()
exten => 1,1,Set(DB(despertador/status)=1)
exten => 1,2,Goto(50,51)
exten => 2,1,Set(DB(despertador/status)=0)
exten => 2,2,Goto(50,100)
;;;;;;;;;;;;;;; Fim do Servico Despertador ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Pronto, o asterisk já está pronto para ser configurado como despertador.
Agora temos que montar um script em php que leia estes dados e realize a chamada a hora que você configurou para ser alertado
Estou usando uma API em php chamada AsteriskManager (depois atualizo aqui e coloco o link)
#!/usr/bin/php -q
exec("asterisk -rx 'database get despertador hora' | grep Value | cut -d ':' -f 2",$despertador_hora);
exec("asterisk -rx 'database get despertador minuto' | grep Value | cut -d ':' -f 2",$despertador_minuto);
exec("asterisk -rx 'database get despertador status' | grep Value | cut -d ':' -f 2",$despertador_status);
$hora = date(H);
$minuto = date(i);
if(trim($despertador_hora[0]) == $hora){
if(trim($despertador_minuto[0]) == $minuto){
if($despertador_status[0]==1){
require 'AsteriskManager.php';
//Setup basic parameters for the connection
$params = array(
'server' => '127.0.0.1',
'port' => '5038',
'auto_connect' => true
);
//Initialise
$am = new Net_AsteriskManager($params);
//Login to the Asterisk Manager interface
$am->login('loginmanager', 'senhamanager');
//Originate Call is one of the commands available and it causes a call to be made and connected between two endpoints.
$am->originateCall("2000", "SIP/2000", "despertador", "2002", 1, 30000);
}
}
}
?>
Este programa consulta os dados do banco do asterisk e verifica a hora e o minuto selecionado realizando uma ligação para o ramal SIP/2000 se for a hora solicitada. E ele chama o contexto despertador que ficou assim:
[despertador]
exten => s,1,NoOp(Chamada de Despertador)
exten => s,2,Wait(1)
exten => s,3,Set(DB(despertador/status)=0)
exten => s,4,Playback(despertador/acorda)
exten => s,5,HangUp()
notem que ele desativa o despertador quando acionado o alarme :D
Ainda faltam algumas adições, como por exemplo, criar vários alarmes, com datas distintas e coisas assim, mas este já é o primeiro passo.
Pois é, é isso, espero que tenham gostado :D
Abraços a todos!


asterisk
Estou precisando de uma ajudinha com o a2billing, topa me da umas dicas? valeu, fique com Deus, ficou ótimo se despertador com asterisk.
Realmente impressionante
Realmente impressionante kaduzin!
rsrsrsrsrs
Abraço camarada, saudade de ti véio!
mande notícias.
Enviar novo comentário