CallBack asterisk

1- Recebimento da chamada, (no meu caso eu so permito callback dos números cadastrados e descarto o resto.)
[khomp-01-03]

;;;Atende Celular Vivo 9153XXXX

exten => s,1,Set(ip_banco=127.0.0.1)
exten => s,n,Set(usuario=asteriskuser)
exten => s,n,Set(senha=senha)
exten => s,n,Set(banco=asteriskcdrdb)
exten => s,n,NoOp(${CALLERID(name)})
exten => s,n,Set(consulta= select\ callback\, x.telefone\ from\ agenda a\, agendaux x\ where\ a.codigo =\ x.codage\ and\ a.callback=\ 1\ and\ x.telefone like \’%\${CALLERID(num):2}\’\)
exten => s,n(consulta),MYSQL(Connect connid ${ip_banco} ${usuario} ${senha} ${banco})
exten => s,n,MYSQL(Query resultid ${connid} ${consulta})
exten => s,n,MYSQL(Fetch fetchid ${resultid} callback\ nrtelefone)

exten => s,n,NoOp(Status da busca ${callback})
exten => s,n,GotoIf($[“${callback}” = “1”]?40:51)

exten => s,40,NoOp(Realizando callback para ${CALLERID(num)})
exten => s,41,system(cp /etc/callback/callback.call /etc/callback/callback.tmp.call)
exten => s,42,agi(identifica.php|${nrtelefone})
exten => s,43,system(echo ‘Channel: khomp/G${retorno}/${nrtelefone:2}’ >> /etc/callback/callback.tmp.call) ****** aqui você coloco o tronco de saída)
exten => s,44,system(echo ‘CallerID: ${nrtelefone:2} “<"${nrtelefone}">“‘ >> /etc/callback/callback.tmp.call) ****** idetificacao do telefone destino
exten => s,45,system(echo ‘Extension: ${nrtelefone}’ >> /etc/callback/callback.tmp.call) ***** telefone destino
exten => s,46,system(mv /etc/callback/callback.tmp.call /etc/asterisk/${nrtelefone}.call) ***** move o arquivo para pasta callback
exten => s,47,System(bash /etc/asterisk/callback.sh ${nrtelefone}) ***** muda data de criação e move para pasta outgoing do asterisk
exten => s,48,MYSQL(Clear ${resultid})
exten => s,49,MYSQL(Disconnect ${connid})
exten => s,50,Hangup()

exten => s,51,NoOp(Desligando chamada) ***** senão esta cadastrado rejeita.
exten => s,52,MYSQL(Clear ${resultid})
exten => s,53,MYSQL(Disconnect ${connid})
;exten => s,n,Dial(IAX2/SAP2-TRUNK/8000,90,Tt)
exten => s,n,Hangup()

2- Context Callback

[callback]
exten => s,1,Answer
exten => s,n,BackGround(OpCallBack) ***** URA
exten => s,n,hangup()

exten => 1,1,Dial(destino 1)
exten => 2,1,Dial(destino 2)
exten => 3,1,Dial(destino 3)
exten => 4,1,Dial(destino 4)
exten => 5,1,Dial(destino 5)
exten => 6,1,Dial(destino 6)
exten => *,1,DISA(no-password|diretoria) * para efetuar ligações utilizando callback

3 – Arquivo .call utilizado no extensions.

Context: callback
MaxRetries: 2
RetryTime:15
WaitTime:20
Priority: 1
Account: Callback

4 – Arquivo callback.sh (serve para atrasar em alguns segundos a chamada do callback, senão o asterisk retorna antes da pessoa desligar.

#!/bin/sh
DESTINO=$1

# Altera a Data do arquivo para faze a ligação depois de 10s.
NOW=`date +%s`
let “NOW=$NOW+10”
TOUCH_TMSP=`date -d “1970-01-01 $NOW sec GMT” +%Y%m%d%H%M.%S`
touch -t $TOUCH_TMSP /etc/asterisk/”$DESTINO”.call

mv /etc/asterisk/”$DESTINO”.call /var/spool/asterisk/outgoing/
chmod 777 /var/spool/asterisk/outgoing/”$DESTINO”.call

#Fim do Script

Deixe um comentário