Callback com Asterisk 1.6

Categories: Geral
Tags: No Tags
Comments: No Comments
Published on: 25 de fevereiro de 2013
Este código surgiu da necessidade de programar em um cliente em Brasília – DF, na época com Asterisk 1.6, e se encontrava semi-funcional. Em uma formação sobre tecnologias Khomp com Asterisk em São Paulo – SP eu apresentei o código ao Wagner Nunes, o nosso formador neste evento. O WNUNES (como e conhecido) gostou da ideia central da extension e realizou algumas adaptações, por ele usar Asterisk 1.4, assim como outras melhorias na extension.
Estou residindo em Portugal, na cidade do porto, em uma formação realizada aqui na cidade do porto fui questionado por um dos participantes sobre CallBack, como o conceito e para mim transparente, pela minha formação básica ser telecomunicação, informei possuir um código para isto no Asterisk.
Ao programar o código na formação, surpresa ele voltou a ser semi-funcional, com ajuda do Filipe Mota (um dos participantes da formação) o código voltou a ficar 100% funcional. Acredito (tenho 90% de certeza) que isto aconteceu pelo código estar voltado mais para o Asterisk 1.4, e utilizarmos Asterisk 1.6, mas não faço a mínima idéia de como vai se comportar este código no Asterisk 1.8 ou Asterisk 1.10.
A ideia central é está: Você liga para um ramal, se o ramal não atender você tem a opção de digitar um código para que o ramal te chame de volta quando possível.
Existem basicamente três formas de fazer com que o Asterisk origine uma chamada.
  •  Ficheiro “.call”
  •  O comando originate no Manager
  •  O comando originate na console do Asterisk
A solução aplicada no caso foi baseada em ficheiros, “.call”, do Asterisk, portanto trataremos o recurso de callback neste artigo da mesma forma, mas a estrutura aplicada no ficheiro “.call” é a mesma nas demais forma.
Ficheiros “.call”

Os “call files” são basicamente arquivos texto que contem as características da chamada que o Asterisk irá originar.

O ficheiro.call é composto pelos seguintes parâmetros:

Parâmetros que definem quem e como chamar
channel: SIP/211 – Canal utilizado para a chamada.  Pensando que esta é uma chamada originada pelo Asterisk, estes parâmetros contem o endereço completo do canal que será considerado o originador da chamada.

callerID: “1000” <1000> – CallerId do “originador”. Este parâmetro pode não funcionar corretamente se o formato não for respeitado.

maxRetries:10 – 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.

retryTime: 60 – Segundos entre as tentativas de chamar o originador. O padrão é 300 segundos.

waitTime: 30 – Numero de segundos que o Asterisk irá chamar o originador a cada tentativa. O padrão é 45.

account: 1122 – Para quem usa ferramentas de billing, este parâmetro equivale ao accountcoude do ramal.

Se a chamada for atendida, os próximos parâmetros definem com quem será conectado o originador
context: RAMAIS – Do lado do destino, ao contrário do originador, a chamada será processada como uma chamada normal, desta forma é necessário informar por qual contexto a chamada será executada.
extension: 1001 – Define o numero de destino da chamada.
priority: 1 – Define a prioridade que o extension será processado dentro do contexto.

Set: CDR(recurso)=CALLBACK – Pode ser utilizado para definir uma variável de canal no processamento da chamada.

Agora que já teorizamos o suficiente, vamos ao código:

O exemplo abaixo mostra um contexto de chamadas para ramais que tentará chamar o ramal durante 30 segundos, depois fornecerá um áudio perguntando se o originador quer deixar uma mensagem no voicemail ou ativar o callback.

Se o originador optar pelo callback, a macro a seguir criará o ficheiro.call e desligará a chamada.

Este ficheiro irá tratar o destino da chamada original como origem e vice-versa, desta forma, quando o destino da chamada original atender, a ligação irá retornar para o originador. Uma vez terminada a função do ficheiro.call o próprio Asterisk se responsabiliza de eliminar o ficheiro.call.

Para que todo o evento tenha funcionalidade é necessário colocar um ficheiro de áudio no seguinte directório:

# /var/lib/asterisk/sounds/

O nome deste ficheiro de áudio tem que ser o que está descrito na linha do extension do contexto ramais:

exten => _10XX,n,Read(op,digite-1-para-voicemail-ou-2-para-callback,1)

Para fazer um teste você pode utilizar o áudio do ficheiro “vm-enter-num-to-call.wav”, copie este ficheiro de áudio para o diretório descrito acima e altere o nome do ficheiro para “digite-1-para-voicemail-ou-2-para-callback.wav”.

Bom no momento seria isto, obrigado pela colaboração de todos, espero que seja útil e espero poder ajudar em caso de qualquer duvida.

Fontes: WNunes (http://wnunes.com/2011/03/03/callback-com-asterisk), Filipe Mota e Angelo Delphini.

Shell Script: Qualquer distribuição Linux inclui um número absurdo de comandos e pequenos utilitários de modo texto, que são o terror dos iniciantes, mas a alegria dos usuários mais avançados. O motivo de utilitários como o “tar”, “dump”, “dd”, “rsync” e muitos outros terem sobrevivido durante tantas décadas sem muitas modificações, não é apenas resultado do saudosismo de alguns, mas resultado do fato de que, ao contrário da maioria dos utilitários gráficos, eles podem ser combinados com outros comandos e entre si, formando scripts poderosos de backup, automatização de tarefas diversas e muitas outras coisas.

O shell script é uma espécie de linguagem universal no Linux, pois combina comandos de terminal com estruturas lógicas, similares às encontradas em outras linguagens para criar programas de poucas linhas, capazes de executar tarefas complexas. Via shell script é possível desenvolver em minutos ferramentas que demandariam horas de trabalho em outras linguagens.

Muitos dos utilitários de configuração usados nas distribuições (embora muitas vezes não pareçam) são na verdade shell scripts elaborados, que aparentam ser muito mais complexos do que realmente são.

Um exemplo de uso de shell scripts são os ícones mágicos, painéis e outras ferramentas que o Carlos Morimoto desenvolveu para ser usado no Kurumin. Uma outra vantagem é que estes programas não precisam ser compilados. Você simplesmente escreve os comandos em um ficheiro de texto e executa diretamente. Quando precisa fazer alguma alteração você altera o ficheiro e pronto, o problema está resolvido.

No Comments - Leave a comment

Leave a comment

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Please copy the string RQ6rjD to the field below:


Welcome , today is sábado, 25 de fevereiro de 2017