lunes, 26 de septiembre de 2011

Desvío de Llamada

En este caso vamos a ver como se utiliza dicha función con tres internos. El desvío de llamada o call forwarding nos permite definir un desvío de llamada que se realiza a un interno a otro interno.

En el archivo/etc/asterisk/extensions.conf agregamos las siguientes líneas






 [phones]include => internal[internal]exten => _2XXX,1,Answer() ; contestamos la llamada

exten => _2XXX,n,Set(NUM=${DB(${EXTEN}/FORW)}) ; Leemos la base de datos para ver si hay algun valor en la familia 2XXX/FORW y lo asignamos al variable NUM

exten => _2XXX,n,GotoIf($["${NUM}" = ""]?normal:forw) ; si la variable NUM es vacía seguimos normalmente sino vamos a la etiqueta forw

exten => _2XXX,n(normal),Dial(SIP/${EXTEN},30,tTwmkKxX) ; llamamos a la extensión 2xxx

exten => _2XXX,n,Hangup() ; terminamos la llamada

exten => _2XXX,n(forw),DIAL(SIP/${NUM},60,tTwmgkKxX)  ; si el desvío es activo, marcamos el numero configurado para el desvío

exten => _2XXX,n,Dial(SIP/${EXTEN},10); sino existe desvío la llamada entra por esta línea

exten => _2XXX,n,VoiceMail(${EXTEN}@default,u)

exten => _2XXX,n,Playback(vm_goodbye)

exten => _2XXX,n,Hangup()

;;;;;con *98 entro a mi casilla de mensajes

exten => *98,1,Answer

exten => *98,2,Wait(1)

exten => *98,3,VoiceMailMain(${CALLERID}@default)

exten => *98,4,Hangup

;;;;;;;;con *71 desvío la llamada y con *72 cancelo

exten => *71,1,Goto(callfwd-add,s,1)

exten => *72,1,Goto(callfwd-remove,s,1)    

[callfwd-add] ; contexto para programar el desvió de llamada
exten => s,1,Answer() ; contestamos la llamada
exten => s,n,Set(NUM=${CALLERID(num)}) ; asignamos a la variable NUM el numero de la extensión que está llamando
exten => s,n,Set(COUNT=1) ; asignamos el valor 1 a la variable COUNT
exten => s,n(inicio),Playback(please-enter-the&telephone-number&for&your&call-forwarding&astcc-followed-by-the-pound-key) ; La voz de asterisk nos dirá que tenemos que digitar el numero al cual queremos desviar todas las llamadas
exten => s,n,Read(forw,,15,,2,10) ; Asterisk leerá los dígitos y los guardará en la variable forw
exten => s,n,Playback(call-forwarding) ; La voz de AsterisK dirá que el desvío de la llamada ha sido configurado para el numero
exten => s,n,Playback(has-been-set-to)
exten => s,n,SayDigits(${forw}) ; Saydigits lee uno a uno los digitos de la variable forw
exten => s,n,Playback(if-this-is-correct-press&digits/1&if-this-is-not-correct&digits/2) ; Si el numero que escuchamos es exacto presionamos 1 sino 2
exten => s,n,Read(sino,,1,,,5) ; asterisk lee nuestra respuesta y la guarda en la variable sino
exten => s,n,GotoIf($["${sino}" = "1"]?setf:conta) ; si sino es igual a uno vamos a la etiqueta setf sino a conta
exten => s,n(conta),Set(COUNT=$[${COUNT} + 1]) ; añadimos a la variable COUNT (que era 1) una unidad (el nuevo valor es 2)
exten => s,n,Gotoif($["${COUNT}" < "4"]?inicio:bye) ; si la variable COUNT es menor que 4 vamos a etiqueta inicio sino a la etiqueta bye. Esto sirve para permitir tres intentos de configuración antes de colgar la llamada.
exten => s,n(setf),Set(DB(${NUM}/FORW)=${forw}) ; etiqueta setf, guardamos en numero en la base de datos interna de Asterisk
exten => s,n,Wait(1) ; esperamos un segundo
exten => s,n(bye),Playback(goodbye) ; Escucharemos un saludo de despedida
exten => s,n,Hangup ; la llamada será terminada

[callfwd-remove]
exten => s,1,Answer
exten => s,n,Set(NUM=${CALLERID(num)})
exten => s,n,Wait(1)
exten => s,n,Set(forw=${DB_DELETE(${NUM}/FORW)})
exten => s,n,Playback(call-fwd-cancelled)
exten => s,n,Playback(goodbye)
exten => s,n,Hangup     

 
 
 
 
Cómo funciona el desvío de llamada.
 En este ejemplo mostramos como una llamada desde un interno cualquiera (2XXX) llama a la extensión 2002 donde el usuario realizo previamente  un desvío de llamada al interno 2003 digitando las siguientes teclas *71 2003#1 (con *71 activamos el desvío de llamada y con *72 lo desactivamos).  Como el interno 2002 no es atendido se deriva automáticamente a la extensión 2003 que es la oficina donde el usuario esta momentáneamente.

No hay comentarios:

Publicar un comentario