Enviado por admin el
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
14 comentarios
Excelente
Enviado por asteriskman (no verificado) el
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
Enviado por admin el
Pues, que te puedo decir, muchísimas gracias, y aunque en teoría no debería decirlo, sigue así ;)
Chao
Dudas
Enviado por figu78 (no verificado) el
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
Enviado por admin el
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
Enviado por figu78 (no verificado) el
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
Enviado por admin el
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
Enviado por Anónimo (no verificado) el
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
Enviado por admin el
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,
Enviado por Anónimo (no verificado) el
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
Enviado por admin el
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
Enviado por josue (no verificado) el
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
Enviado por Jose (no verificado) el
Un artículo muuuuuy interesante. Menos mal que hay gente como tú para enseñarnos cosillas.
Sigue así!!
desvio de llamadas en asterisk
Enviado por Anónimo (no verificado) el
todo perfecto solo como cambio la musica
Adaptar código para desvio a extensiones
Enviado por David (no verificado) el
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.