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