CallBack de acordo com o status do Ramalcallback

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

#################################################
#
# CallBack Agendado
# Autor: Mestre Asterisk
# http://mestreasterisk.com.br
#
# Descrição: Ao ligar para um ramal que está
# ocupado você tem a opção de digitar 9 para
# agendar um callback assim que o mesmo estiver
# desocupado.
#
#################################################

make_callfile()
{
ORIGEM=$1
DESTINO=$2

CALLFILE=$(cat <<-EOF1
Channel: SIP/$ORIGEM
MaxRetries: 120
RetryTime: 5
WaitTime: 10
Context: ramais
Extension: $DESTINO
Priority: 1)

FILE_NAME=”$TEMP_SPOOL”/$(date +%YNaVM%S)-$RAMAL_DESTINO.call
echo “$CALLFILE” >> $FILE_NAME
chown root /$FILE_NAME
chmod 777 /$FILE_NAME
mv /$FILE_NAME /var/spool/asterisk/outgoing
}

#VARIAVEIS DIRETORIOS
ASTERISK_CFG=”/etc/asterisk”
TEMP_SPOOL=”/var/spool/asterisk”

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

Related Posts with Thumbnails

12 Comentarios para “CallBack Agendado no Asterisk”

  1. Jose Sanchez says:

    Mestre
    Fazia algum tempo que nao visitava sua pagina, e fiquei surpreso com a quantidade de material , parabens

  2. Cara, ainda não conhecia o site, tem bastante material legal!!!
    Como posso configurar esse Callback Agendado no Elastix?

  3. 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

  4. Ele vai tentar apenas pelos segundos configurados. Tente alterar o tempo do parametro de Retry

  5. Você tera que faze-lo na mão.

    Via interface web não é possível.

    Abs

  6. Olá Adriano, boa tarde!

    Utilizo Elastix 2.4 com Asterik 11 FreePBX 2.11, atualizei pra testar o recurso Camp-on, mas também não consegui.

    Antes disso, segui os passos do seu artigo adaptando apenas pra minha estrutura de ramais (_22XX) mas não consegui fazer funcionar, tive dúvidas em qual arquivo editar para colocar as informações, pois utilizando Elastix não podemos editar o extensions.conf, pois ele é gerado automaticamente pela interface gráfica, para isso utilizamos o extensions_custom.conf, mas não sei se preciso dar algum “include” pra funcionar.

    Se puder me dar um norte, agradeço.

Deixe um comentario