Callback en Asterisk
De Linuxmall Wiki
Ejemplo de callback en Asterisk utilizando el Callerid del llamante
por: Pablo Umanzor A.
Este ejemplo hace que Callback Asterisk llame devuelta a un telefono que ha marcado algún numero de nuestra Central con anterioridad y lo conecta con un DISA para marcar algun anexo de la central, un anexo permitido dentro del contexto o que lo derive con la operadora o IVR, el flujo global se detalla a continuación
1.- Un telefono marca el numero 1234567 2.- Asterisk analiza el numero marcado (1234567) y si existe en el dialplan (extensions.conf) lo procesara 3.- Ingresa al callback, captura el CallerID(la linea debe tener contratado el servicio de callerid). 4.- El caller ID es ingresado a la rutina callback y ejecutara los comandos que posee la aplicación.
El siguiente contexto expresa en comandos lo anterior:
[callback]
exten => 1234567,1,Ringing
exten => 1234567,n,Wait(1)
exten => 1234567,n,System(/etc/asterisk/llamada.sh ${CALLERID(num):0})
exten => 1234567,n,Hangup
[disa]
exten => s,1,Background(algun-mensaje)
exten => s,2,DISA(no-password,algun-contexto)
exten => s,3,Hangup
[algun-contexto]
exten => _1XXX,1,Dial(SIP/${EXTEN:0},100,rtT)
exten => _1XXX,2,Hangup
Luego crear el archivo llamada.sh dentro de /etc/asterisk con el siguiente contenido:
#!/bin/bash DEST="/var/spool/asterisk/outgoing" CALL=`mktemp` echo "Channel: Zap/g0/$1">>$CALL #echo "Channel: SIP/$1">>$CALL ; descomentar para el caso de generar el callback por una troncal SIP echo "Maxretries: 2">>$CALL echo "RetryTime: 10">>$CALL echo "WaitTime: 30">>$CALL echo "Context: disa">>$CALL echo "Extension: s">>$CALL echo "Priority: 1">>$CALL echo "Callerid: $1">>$CALL 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 $CALL mv $CALL $DEST #EOF
En el dial plan se puede apreciar que se pasa como parametro del callerid del llamante al script llamada.sh, luego es rescatado usando la variable $1 , el canal utilizado en el ejemplo es un canal Zaptel usando el grupo 0 (g0), si deseamos que callback use alguna troncal SIP entonces usar SIP/$1.
Maxretries, indica las veces que intentara llamar al usuario si por alguna razon la llamada no se pudo completar, ejemplo el numero del llamante esta ocupado, no contesta etc.
Las variables NOW y TOUCH_TMSP sirven para que el archivo que se genera en /var/spool/asterisk/outgoing sea ejecutado en 10 segundos mas desde que se ingreso la llamada, esto para asegurarse que el llamante cuelgue antes que callback lo contacte , para cambiar este delay modificar en la variable let NOW=$NOW+10 el valor 10 por otro.
Siguiendo en el archivo llamada.sh la variable Context: disa indicara donde debe caer la otra parte de la llamada, en este caso es el contexto disa que a su vez nos dara un tono de la central y no derivara a algun-contexto y permitira marcar algun anexo de la seria 1XXX, ejemplo 1000 (operadora, etc)
