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)

Herramientas personales