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
[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
[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.
para bloquear quem pode usar o callback, pode-se também colocar uma senha. Basta adicionar uma linha no contexto saida-callback:
ResponderExcluir[saida-callback]
exten => 1000,1,Answer()
exten => 1000,n,Authenticate(123), linha adicionada que irá pedir senha.
exten => 1000,n,PlayBack(beep)
exten => 1000,n,Read(NUMERO)
exten => 1000,n,Dial(SIP/${NUMERO}@g1telecom,40,tg)
exten => 1000,n,Macro(hangupcall,)
Boa tarde Danilo.
ResponderExcluirMuito grata pela sua contribuição.
Aqui necessito fazer callback para e somente para ligações à cobrar.
Exemplo: Se a ligação entrante for à cobrar, o servidor deve desligar a chamada e retornar, no entanto, não sei como se identificar se a ligação é à cobrar ou não.
Você tem alguma ideia?
Desde já agradeço!
olá, boa tarde!
ExcluirNunca precisei implementar desta forma, porém, sei que tem uma maneira de fazer isto. Se a sinalização da sua operadora for mfcr2, existe uma variável chamada MFCR2_CATEGORY, que armazena a categoria da ligação, sendo assim, creio que conseguirá saber quando uma ligação é a cobrar ou não. Como disse, nunca precisei utilizá-la, creio que com alguns testes no seu asterisk pode conseguir identificar qual o valor da variável quando se trata de uma ligação a cobrar.... fico no aguardo de notícias..rsrs...
P.S. para testes, imprima o valor da variável quando enviar ligações a cobrar ou não.
ex:
[from-pstn]
exten => s,1,NoOp(--> o valor da variável é: ${MFCR2_COTEGORY} <--)
.
.
.
BOM TESTE
Olá Danilo, muito boa sua contribuição! Tenho aqui uma necessidade um pouco diferente veja se pode ajudar, preciso implementar no site a empresa um tipo de 0800web, onde a pessoa digite seu telefone e o script faça a ligação entre o telefone da pessoa e o ramal ip do servidor asterisk, pode ajudar?
ResponderExcluirblz Eduardo... Creio que terei que criar um outro tutorial para esta necessidade. Me adiciona no skype que te ajudo. Abraço
ExcluirDanilo, boa tarde
ResponderExcluirVeja se pode me ajudar. Estou querendo fazer com que o Asterisk atenda uma chamada com uma gravação, derrube e retorne via rota de menor custo.
No meu caso estou usando como operadora um E1, placa Dahdi da Aligera.
Desde já agradeço.
Olá.... criei um callback simples via web no elastix, para diminuir o custo de um 0800, ele desliga a ligação e retorna como o esperado, porém ao retornar.. Se a pessoa não atender no primeiro toque o elastix desiste da ligação. .. sabe como corrigir isso???
ResponderExcluirestou com o mesmo problema, conseguiu resolver ? helio@traxxtecnologia.com.br
ExcluirOlá.... criei um callback simples via web no elastix, para diminuir o custo de um 0800, ele desliga a ligação e retorna como o esperado, porém ao retornar.. Se a pessoa não atender no primeiro toque o elastix desiste da ligação. .. sabe como corrigir isso???
ResponderExcluirCara, não conheço essas funcionalidades do elastix.. configurando manual, a variável "MaxRetries" contém a quantidade de tentativas que o asterisk vai tentar antes de descartar a ligação.. procure alguma coisa ai na configuração do elastix, deve ter algo.
ExcluirOlá Danilo. Estou com um probleminha no meu callback. e gostaria de saber como faria para que a ligação do callback saisse por uma rota de acordo com o contexto interno, pois tenho 2 rotas, uma para celular e uma para fixo então gostaria que ele encaminhasse para a rota certa. tem como fazer isso ? poderia me dar uma dica ? obrigado
ResponderExcluirBoa tarde Danilo. Vc teria alguma dica para fazer um callback para ser utilizado para retorno no callcenter, caso a atendente esteja ocupada o callback retorna mas somente quando ela desocupar para que no retorno o cliente não fique na fila novamente, ou seja teria que analisar o status da atendente. Tem alguma dica para montar isso ? obrigado
ResponderExcluirMuito bom o tutorial. Uso GOIP, mas ele nao está identificando o número de entrada. Pode ser alguma configuração nele ou no Asterisk?
ResponderExcluirDanilo Boa Tarde.
ResponderExcluirCriei um callback issabel está retornando a ligação certinha, o único problema que toca 8 segundo e encerra, poderiam me ajudar?