O arquivo gerado pela aplicação PHP terá sete linhas, com o seguinte formato:
1. Channel: OOH323/XXXXXXXX@Avaya
2. WaitTime: 60
3. set: host=SERVIDOR_BANCO_POSTGRES
4. Extension: 10
5. set: id=2
6. set: id_evento=338
7. Context: astnagios
Onde:
- Linha 1 - canal e telefone
- Linha 2 - tempo que ficará chamando antes de considerar não atendido
- Linha 3 - variável que será utilizada pelo contexto, que no caso contém o nome do host que se encontra indisponível
- Linha 4 - extensão responsável pela ligação
- Linha 5 - id do colaborador para quem a ligação está sendo efetuada. Também será utilizada pelo contexto no Asterisk
- Linha 6 - id do evento. Também será utilizada pelo contexto no Asterisk
- Linha 7 - nome do contexto em que a ligação deverá ocorrer.
Quando o Asterisk receber o arquivo, automaticamente procederá seu processamento. Assim que o destinatário atender o telefone, o fluxo obedecerá o seguinte contexto:
[astnagios]
;ERROS DE CHAMADA
* as razões são parte da aplicação Asterisk. Cada razão de falha de ligação é relacionado a um código
exten => failed,1,NoOp(A ligacao falhou)
exten => failed,n,GotoIf($[${REASON}=1]?1)
* Se falhar devido à razão 1, execute a linha 1
exten => failed,n,GotoIf($[${REASON}=3]?3)
* Se falhar devido à razão 3, execute a linha 3
exten => failed,n,GotoIf($[${REASON}=5]?5)
* Se falhar devido à razão 5, execute a linha 5
exten => failed,n,GotoIf($[${REASON}=8]?7)
* Se falhar devido à razão 8, execute a linha 7
;[reason4]
exten => failed,1,NoOp(OCUPADO OU NUMERO INVALIDO)
* Imprime na tela de command line do asterisk a mensagem entre parênteses
exten => failed,2,Goto(hang_astnagios,10,1)
* vai para o contexto hang_astnagios, na linha 10
;[reason5]
exten => failed,3,NoOp(NAO ATENDE)
* Imprime na tela de command line do asterisk a mensagem entre parênteses
exten => failed,4,Goto(hang_astnagios,10,1)
* vai para o contexto hang_astnagios, na linha 10
[reason3]
exten => failed,5,NoOp(OUTRAS RAZOES)
* Imprime na tela de command line do asteris a mensagem entre parênteses
exten => failed,6,Goto(hang_astnagios,10,1)
* vai para o contexto hang_astnagios, na linha 10
[reason6]
exten => failed,7,NoOp(CONGESTIONAMENTO)
* Imprime na tela de command line do asteris a mensagem entre parênteses
exten => failed,8,Goto(hang_astnagios,10,1)
* vai para o contexto hang_astnagios, na linha 10
;LIGACAO ATENDIDA
exten => s,1,Answer
* Atende
exten => s,n,WaitExten(2)//
* Aguarda dois segundos
exten => s,n,MP3Player(/opt/php/servidores/audios/${host}.mp3)
* toca o arquivo $host.mp3. A variável $host foi recebida do arquivo .call, na linha 3 (set:host=SERVIDOR_BANCO_POSTGRES)
Explicação: na pasta
/opt/php/servidores/audios, foram criados vários áudios MP3, um para cada host crítico que foi selecionado (no caso foram 21 hosts). Nesse áudio, gravei uma mensagem simples, tal como:
"O servidor de banco Postgres deixou de responder."
Os nomes dos arquivos de áudio devem ser idênticos aos nomes que os hosts têm no Nagios Core, para que possamos receber o nome via variável. Meu arquivo de áudio do Postgres, por exemplo, tem o nome "SERVIDOR_BANCO_POSTGRES.mp3".
exten => s,n,WaitExten(2)
* Aguarda mais dois segundos
exten => s,n,Playback(/opt/php/servidores/audios/mensagem)
* Executa um áudio que diz "Se você entendeu a mensagem, tecle 3.
exten => s,n,WaitExten(10)
* Aguarda 10 segundos. Se o usuário não teclar 3 nesse tempo, ele repete as mensagens.
exten => s,n,MP3Player(/opt/php/servidores/audios/${host}.mp3)
* toca o arquivo $host.mp3. A variável $host foi recebida do arquivo .call, na linha 3 (set:host=SERVIDOR_BANCO_POSTGRES)
exten => s,n,WaitExten(2)
* Aguarda dois segundos
exten => s,n,Playback(/opt/php/servidores/audios/mensagem)
* Executa um áudio que diz "Se você entendeu a mensagem, tecle 3.
exten => s,n,WaitExten(10)
* Aguarda 10 segundos.
exten => h,n,Goto(hang_astnagios,10,1)
* Nada aconteceu. Provavelmente caiu em caixa postal. Será executada a linha 10 do contexto hang_astnagios
exten => 3,1,Goto(teclou3,3,1)
* Se o usuário teclou 3, o fluxo é direcionado para o contexto "teclou3", na linha 3.
[teclou3]
exten => 3,1,NoOp(Teclou 3)
* Imprime na tela do command line do asterisk a mensagem entre parênteses.
exten => 3,2,System(/usr/bin/php /opt/php/servidores/insert.php ${id} ${id_evento})
* Executa a aplicação php chamada "insert.php", com dois parâmetros, id e id_evento, que foram recebidos do arquivo call ( set: id e set_id_evento), com id sendo a identificação do responsável, e id_evento a identificação do evento na tabela do banco;
exten => 3,3,PlayBack(/opt/php/servidores/audios/responsavel)
* Executa um áudio que diz "Você foi registrado como responsável".
exten => 3,4,System(/usr/bin/php /opt/php/servidores/hangup.php)
* Executa a aplicação "hangup.php", cujo código fonte será exibido logo adiante.
[hang_astnagios]
* Contexto de desligamento
exten => 10,1,NoOp( HANGUP ASTNAGIOS )
* Imprime na tela do command line do asterisk a mensagem entre parênteses.
exten => 10,2,Hangup()
* Executa o hangup da ligação.