domingo, 23 de junho de 2013

Tutorial - CAllBACK asterisk

Fonte: http://drasterisk.blogspot.com.br/

 Hoje precisei criar um callback na empresa que trabalho, esse callback funciona da seguinte maneira:

Ligo na empresa do meu celular(ou de qualquer número que bine) de qualquer região, o servidor pega o meu número, desliga a chamada e me retorna, após isso, digito o numero que desejo fazer a ligação e ele disca e completa para mim.
Isso foi necessário, pois nossos celulares só fazem ligação para região 43...

Então criei uma tutorial Básico para quem necessitar.

Callback para ligações externas

primeiro, criaremos a regra de entrada, nesse caso estou simulando uma ligação entrando por um
determinado DDR de um link E1, mais pode ser ligações de entrada de qualquer tipo (FXO, SIP,
Analógico, etc) bastando apenas ser alterado para cada situação.

[entrada]

exten => _3200,1,NoOp(Realizando CallBack )
exten => _3200,2,Wait(1)
exten => _3200,3,Macro(callback,)
exten => _3200,4,Hangup()

linha 1 - mostra na tela a descrição dentro dos parenteses "()"
linha 2 - espera um segundo antes de continuar
linha 3 - vai para macro callback que veremos a seguir.
linha 4 - derruba a ligação após colher as primeiras informações.

agora, criaremos uma macro callback onde criaremos o arquivo .call que fará o retorno da ligação para o número que ligou.


[macro-callback]
exten => s,1,set(CALLBACK-FILE=/var/spool/asterisk/outgoing/${MACRO_EXTEN}-${CALLERID(num)}.call)
exten => s,n,system(echo Channel: SIP/0${CALLERID(num)}@g1entrada > ${CALLBACK-FILE})
exten => s,n,system(echo Context: saida-callback >> ${CALLBACK-FILE})
exten => s,n,system(echo Extension: 1000 >> ${CALLBACK-FILE})
exten => s,n,system(echo Callerid: ${CALLERID(num)} >> ${CALLBACK-FILE})
exten => s,n,system(echo MaxRetries: 2 >> ${CALLBACK-FILE})
exten => s,n,system(echo RetryTime: 30 >> ${CALLBACK-FILE})
exten => s,n,system(echo WaitTime: 30 >> ${CALLBACK-FILE})
exten => s,n,MacroExit


linha 1 - seto uma variável com o diretório /var/spool/asterisk/outgoing/ + o nome do arquivo que será criado automaticamente.
linhas n - no restante das linhas, escrevo dentro do arquivo as opções necessárias para rodar um arquivo .call (vejam mais informações de arquivos .call para entenderem melhor caso tenham dúvidas).
linha 2 - canal que sairá a ligação, no meu caso estou enviando pela operadora da empresa em que trabalho.
linha 3 - contexto que será direcionado para que a pessoa possa digitar o numero desejado.
linha 4 - extensão que será entregue esta ligação dentro do contexto anterior.
linha 5 - callerid da chamada
linha 6 - Numero maximo de vezes que o asterisk irá  tentar chamar o originador antes de considerar que a chamada falhou.
Este parâmetro não considera a primeira tentativa, portanto se definido como 0, o asterisk tentará chamar apenas uma vez.
linha 7 - Seguntos entre as tentativas de chamar o originador. O padrão é 300 segundos.
linha 8 - Numero de segundos que o asterisk irá chamar o originador a cada tentativa. O padrão é 45.
linha 9 - sai da Macro.

após sair da macro, o asterisk dará o hangup conforme linha 4 do contexto entrada, após isso, o arquivo .call criado já será executado chamando o número que havia ligado anteriormente, quando houver o atendimento dessa chamada, jogará para o contexto descrito no arquivo .call que criamos (saida-callback).

o contexto saida-callback dará um bip e aguardará um numero ser digitado. Nesse caso dará um Bip, mais pode-se personalizar com uma gravação da maneira que desejar.

[saida-callback]

exten => 1000,1,Answer()
exten => 1000,2,PlayBack(beep)
exten => 1000,n,Read(NUMERO)
exten => 1000,n,Dial(SIP/${NUMERO}@g1telecom,40,tg)
exten => 1000,n,Macro(hangupcall,)

linha 1 - atende a chamada
linha 2 - dá um bip após o atendimento da chamada, aqui pode-se colocar uma mensagem para o usuário ouvir tipo: digite o numero que deseja, ou coisa do tipo.
linha 3 - lê os digitos e salva na variável NUMERO
linha 4 - dá um dial para o numero capturado.
linha 5 - dá um hangup ao término da ligação.

acho que é isso pessoal, desculpem qualquer coisa, mais esse é um dos meus primeiros tutoriais e fiz correndo, qualquer erro me perdoem..rsrs.

abraços.

Nenhum comentário:

Postar um comentário