Configurar el desvio de llamada en Asterisk

Hoy veremos como configurar el desvío de llamada en Asterisk. Esta guía funciona con asterisk 1.4.X y asterisk 1.6.X Esta configuración es para que el numero a que se desvían las llamadas sea un fijo o celular y no una extensión interna de Asterisk. Para programar el desvío, la llamada tiene que ser efectuada desde una extensión interna de Asterisk. Claramente, lo pueden modificar según sus exigencias. Cada línea tiene un comento después del punto y coma

Antes que nada abrimos nuestro archivo extensions.conf

nano /etc/asterisk/extensions.conf

Y añadimos estas líneas:

[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

La base de datos interna de asterisk funciona de este modo: cada valor puede ser asignado a una familia/clave. En nuestro caso la familia es el numero de la extensión que ha programado el desvió de llamada (la variable NUM), la clave el la palabra FORW. Un ejemplo: desde nuestra consola una vez que tengamos programado el desvió de llamada

asterisk -rvvvvvvvvvvvvvvvvv

CLI> database show
/2000/FORW                                        : 005750000000

Como pueden ver a la familia 2000 (la extensión que ha programado el desvío de llamada) clave FORW ha sido asignado el numero 005750000000. Cuando alguien llamará la extensión 2000 la llamada se desviará a este numero

[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

Esta segunda parte del código no hace nada más que borrar, para la extensión que llama, el numero configurado para el desvió de las llamadas.

Ahora en nuestro contexto local en extensions.conf tenemos que añadir dos líneas más:

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

Si llamamos la extensión 71 iremos al contexto callfwd-add, extensión s, prioridad 1 (es decir nuestro contexto para configurar el desvío de llamada.

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

Llamando la extension 72 iremos al contexto callfwd-remove, extensión s, prioridad 1, (el contexto para borrar el desvío de llamada)

Supongamos que tenemos configurado el desvío de llamada para la extensión 2000. Como lo vamos a usar en nuestro plan de llamadas (dialplan)?

Aquí van las líneas

exten => 2000,1,Answer() ; contestamos la llamada
exten => 2000,n,Set(NUM=${DB(${EXTEN}/FORW)}) ; Leemos la base de datos para ver si hay algún valor en la familia 2000/FORW y lo asignamos al variable NUM
exten => 2000,n,GotoIf($["${NUM}" = ""]?normal:forw) ; si la variable NUM es vacía seguimos normalmente sino vamos a la etiqueta forw
exten => 2000,n(normal),Dial(SIP/2000,30,tTwmkKxX) ; llamamos la extensión 2000
exten => 2000,n,Hangup() ; terminamos la llamada
exten => 2000,n(forw),DIAL(SIP/justvoip/${NUM},60,tTwmgkKxX) ; si el desvío es activo, usando nuestro proveedor de llamadas VoiP, marcamos el numero configurado para el desvío
exten => 2000,n,Hangup() ; terminamos la llamada

Los comandos disponibles para la base de datos de asterisk:

CLI> help database
                  database del Removes database key/value
              database deltree Removes database keytree/values
                  database get Gets database value
                  database put Adds/updates database value
                 database show Shows database contents
              database showkey Shows database contents

Creo que es más difícil explicarlo que configurarlo... :)

Hagan sus pruebas y me cuentan

Chao

 

Technorati Tag: ,,

Comentarios

Excelente

Excelente la aportación que estas haciendo al mundo asterisk, yo siempre que entro en tu web doy a varias anuncios para que te salga mas rentable tu aportación, sigue así

que muchas gracias

Pues, que te puedo decir, muchísimas gracias, y aunque en teoría no debería decirlo, sigue así ;)

Chao

Dudas

Hola,

Soy Novato y ademas un poco gañan....Alguien me podria orientar un poquito para saber como se puede hacer el desvio desde el telefono de una recepcionista a otro telefono de la oficina?? y para un movil??

Es que no consigo aclararme.

En cualquier caso es un muy buen articulo (aunque yo no sea capaz...)

Un saludo.

Desvio

Para tranferir las llamadas usando Asterisk se digita la tecla # y luego el numero a donde se quiere enviar la llamada.

Para que eso funcione hay que configurar el archivo features.conf come explicato en este enlace:

http://www.voztovoice.org/?q=node/78

En algunos telefonos IP y SoftPhone ese tipo de caracteristica viene incluida entre las funciones avanzadas del telefono mismo.

Saludos.

Ops

Hola, gracias por la respuesta, pero creo que me he explicado mal. Lo que yo quiero hacer es lo siguiente:

- La recepcionista no ha venido hoy asi que su telefono no para de sonar y quiero que las llamadas entrantes en lugar de llegar a la recepcion, lleguen a otra de las extensiones o incluso a un numero de movil.

Para conseguir esto llamo a una extension que me pida a donde lo quiero desviar y listo. (es lo que creo que intenta explicar este articulo).

Gracias y espero haberme explicado mejor esta vez

Recepionista

Funciona propio así.

Desde la extension de la recepcionista llamas a la extensión para configurar el desvío y lo configuras.

Cada vez que llega una llamada a la extensión de la recepcionista automáticamente se desviará a la extensión/móvil configurado.

duda

Hola, gracias por tu aporte es muy bueno pero me quede con una duda y al parecer es la q no me deja funcionar esto, es donde exactamente coloco el exten => 71,1,Goto(callfwd-add,s,1)???

Gracias por tu ayuda.

Re: duda

Esa linea la pone en tu contexto local, es decir el contexto que utilizas para tus llamadas internas.

Mira aqui, quizas te pueda quedar más claro

Gracias por tu ayuda,

Gracias por tu ayuda, encontre que eso esta en otro archivo y ya me recepta el numero pero en realidad no funciona, vi en el database show y tambien consta y asoma configurado para el telefono dado pero ni asi es como si no pudiera capturar la linea y luego hacer la marcación hacia el telefono dado.

De antemano gracias por tu ayuda.

Dialplan

Si lograste registrar el numero al que quieres desviar la llamada, como describes en tu comentario, lo unico que te hace falta es configurar bien el dialplan para que te funcione.

En el ejemplo presente en el articulo se considera que el numero adonde se desvia la llamada es un numero externo (fijo, celular). Dependiendo del tipo de proveeodr de Voip que estás usando tendràs que grabar ese numero respetando la sintaxis de marcacion que ese proveedor te pide.

De todas formas este tipo de funcion se puede hacer tambien con la aplicacion Followme. Echale una miradita para ver si te sirve, en cuanto pueda escribiré un articulo sobre le tema.

Si quieres pegar el log de la consola quizas podemos resolver el asunto.

Chao

 

 

 

Error al llamar a 71

Saludos,

 

El articulo esta muy interesante de hecho lo estoy probando; sin embargo al momento de llamar a la extension 71 el sistema contesta la llamdad y todo, pero no puedo o no me da oportunidad de ingresar el numero de celular al cual quiero realizar la llamada solome deja escuchar la grabacion he probado con poner un exten => Wait(7) despues de cada playback pero es como si no tomara ninguna instruccion solo reproduce el sonido y ya...  ...Echenme una mano a esto pa ver...ta raro...gracias...

artículo

Un artículo muuuuuy interesante. Menos mal que hay gente como tú para enseñarnos cosillas.

Sigue así!!

desvio de llamadas en asterisk

todo perfecto solo como cambio la musica

Adaptar código para desvio a extensiones

Hola buscando información para configurar los desvios encontré este articulo, me ha servido a la perfeccióna ENORABUENA lo único es que no se como adaptarlo para que tambien sirva para desviar la llamada a otra extensión, es decir poder desviar la llamada o a un número fijo o un número móvil o una extensión.

Un saludo y muchas gracias.

Distribuir contenido Distribuir contenido