CallBack de acordo com o status do Ramal
Acompanhando as listas de discussões sobre Asterisk nosso amigo José Sanchez perguntou se existiria a possibilidade de adicionar ao seu PBX Asterisk uma facilidade encontrada nas centrais telefonicas convencionais de mercado. O Callback agendado em caso de ramal ocupado.
Uma das caracteristicas mais atraentes do Asterisk é sua flexibilidade em relação a customizações. Valendo-se desta caracterisitica resolvi criar esse tutorial para incorporar ao seu PBX Asterisk uma funcionalidade padrão encontrada em sistemas convencionais.
Como funciona:
Vamos imaginar que o José (ramal 6001) precisa falar urgentemente com Ana (ramal 6050) do departamento de recursos humanos, ele acaba de ganhar uma viagem de 15 dias para as Ilhas Canário com direito a um acompanhante e necessita antecipar suas férias o quanto antes, do contrário perderá a viagem.
Então ele tira o seu telefone do gancho e liga desesperadamente para Ana, mas o ramal de Ana está ocupado pois ela acaba de receber flores do seu marido e logo ligou para sua melhorar amiga para contar a novidade, ou seja, o ramal não irá desocupar tão cedo. José, desesperado tem que preencher o formulario no site da empresa que o premiou e não terá tempo de fazer as duas coisas, ou preenche o formulario ou fica tentando ligar para Ana.
Neste caso a solução do CallBack Agendado o ajudaria perfeitamente. Quando ligar para Ana e o ramal estiver ocupado o PBX da o sinal de Busy e logo após informa: Disque 9 para conectar-se imediatamente a esse ramal assim que desocupar ou deixe um recado em sua caixa postal após o sinal.
Configurando o CallBack Agendado
O CallBack agendado é composto de 2 blocos em seu DialPlan(extensions.conf) e um shell script.
Os nomes em verde são arquivos de audio que necessitam ser gravados.
Dialplan (extensions.conf)
| ;Esse é contexto de discagens dos seus ramais, no meu caso: 6000 ~ 6199
[ramais] exten => _6[0-1][0-9][0-9],1,Dial(Local/${EXTEN},20,Tt) exten => _6[0-1][0-9][0-9],n,goto(status-${DIALSTATUS}) ;———————————————————————————————— exten => _6[0-1][0-9][0-9],n(status-BUSY),Noop(** Ramal Ocupado – Com opção de Callback **) exten => _6[0-1][0-9][0-9],n,Set(R-DESTINO=${EXTEN}) exten => _6[0-1][0-9][0-9],n,Playback(ramal-ocupado) exten => _6[0-1][0-9][0-9],n,Playback(digite-9-callback) exten => _6[0-1][0-9][0-9],n,Read(digito||1|9) ; utilize pipe para Asterisk 1.4 e coma para Asterisk 1.6 exten => _6[0-1][0-9][0-9],n,GotoIf($(digito) = 9)?callback,s,1:voicemail,s,1) ;———————————————————————————————— exten => _6[0-1][0-9][0-9],n(status-NOANSWER),Noop(** Ramal não Atende **) exten => _6[0-1][0-9][0-9],n,Playback(ramal-naoatende) exten => _6[0-1][0-9][0-9],n,Hangup() ;———————————————————————————————— exten => _6[0-1][0-9][0-9],n(status-CHANUNAVAIL),Noop(** Ramal Indisponivel **) exten => _6[0-1][0-9][0-9],n,Playback(ramal-indisponivel) exten => _6[0-1][0-9][0-9],n,Goto(voicemail,s,1) ;———————————————————————————————— exten => _6[0-1][0-9][0-9],n(status-CONGESTION),Noop(** Rede Congestionada **) exten => _6[0-1][0-9][0-9],n,Playback(rede-congestionada) exten => _6[0-1][0-9][0-9],n,Goto(voicemail,s,1) ;———————————————————————————————— ;Esse é o contexto do CallBack Agendado [callback] exten => s,1,Set(RAMAL-DESTINO=${R-DESTINO}) exten => s,n,Set(RAMAL-ORIGEM=${CALLERID(num)}) exten => s,n,System(/var/lib/asterisk/scripts/callback-agendado.sh ${RAMAL-ORIGEM} ${RAMAL-DESTINO}) exten => s,n,Playback(callback-agendado-ativo) exten => s,n,hangup() |
Shell Script (callback-agendado.sh)
| #!/bin/bash
################################################# make_callfile() CALLFILE=$(cat <<-EOF1 FILE_NAME=”$TEMP_SPOOL”/$(date +%YNaVM%S)-$RAMAL_DESTINO.call #VARIAVEIS DIRETORIOS make_callfile “$1″ “$2″ exit |
Copie o script callback-agendado.sh para
/var/lib/asterisk/scripts
De permissão na pasta:
chmod 777 /var/lib/asterisk/scripts
Veja também: http://www.voip-info.org/wiki/view/Asterisk+tips+callback
Testando o CallBack
Para testar o CallBack agendado basta ocupar um ramal fazendo uma chamada para qualquer lugar e depois de outro ramal ligar para ele.
Se o status do ramal estiver ocupado ele abrira um menu para que agende o callback quando o ramal desocupar, discando 9. Quando o ramal desocupar automaticamente o Asterisk ira disparar uma chamada para o ramal de origem e outra para o ramal destino, assim conectando os dois.
Se reparar no bloco [ramais] irá perceber que existem outros status, como: NOANSWER, CHANUNAVAIL e CONGESTION. Você poderá utilizar o CallBack Agendado para cada um desses status, basta seguir a lógica do status BUSY.
Download dos Sources
Download do Script: Script CallBack Agendado
Download Dialplan: Dialplan Callback Agendado
9 Comentarios para “CallBack Agendado no Asterisk”


Mestre
Fazia algum tempo que nao visitava sua pagina, e fiquei surpreso com a quantidade de material , parabens
Cara, ainda não conhecia o site, tem bastante material legal!!!
Como posso configurar esse Callback Agendado no Elastix?
Grande Mestre,
Realizei os procedimentos e funciona perfeitamente, mas nao quando o destino desliga e sim quando a origem, assim fica tentando fazer o callback o tempo todo.
Tem idéia do que pode ser
valeu
Ele vai tentar apenas pelos segundos configurados. Tente alterar o tempo do parametro de Retry
Você tera que faze-lo na mão.
Via interface web não é possível.
Abs