Configuracion de Asterisk 1.6.X - Sexta parte - features.conf

Actualizado 11 Septiembre 2009

El archivo features.conf es donde vamos a configurar el parqueo de las llamadas y asignar una función a una determinada combinación de teclas. Es aquí, por ejemplo, donde definimos cuales son las teclas que tenemos que hundir para transferir una llamada, grabarla, iniciar una aplicación, y muchas más. Este archivo de configuración se basa sobre él de muestra que viene con la versión 1.6.X de Asterisk. Vamos a empezar

nano /etc/asterisk/features.conf

;
; Features.conf
;

[general]
parkext => 700               ; La extensión donde transferir la llamada para parquearlas
parkpos => 701-710        ; el numero de extensiones reservadas para parquear las llamadas
context => parkedcalls        ; el contexto usado para parquear las llamadas (luego hay que definirlo en extension.conf)

parkinghints = yes        ; si está en yes podemos monitorear las extensiones donde se parquean las llamadas
parkingtime => 45        ; Numero de segundos después de los cuales la llamada parqueada viene transferida a la extensión definida por el próximo parámetro

comebacktoorigin = yes    ; si està en yes la llamada parqueda, después del parkingtime, vuelve a la extensión que la parqueò, si está en no la llamada será transferida al contexto parkedcallcallstimeout a la extensión 's' y la prioridad '1' que tendremos que crear en extensions.conf

courtesytone = beep        ; El sonido que será enviado a la llamada parqueada cuando alguien la llama o cuando empieza y termina la grabación de la llamada
parkedplay = caller        ; A quien enviar el beep cuando se llama la extensión parqueada. Puede ser: parked(canal parqueado), caller(llamante) y both(ambos)
parkedcalltransfers = caller   ; Habilita o deshabilita la secuencia de tonos para transferir la llamada cuando es una llamada parqueada. Puede ser: habilitar para: callee(llamado), caller (llamante), both (ambos). Si se quiere deshabilitar hay que poner no.

parkedcallreparking = caller   ; Habilita o deshabilita la secuencia de tonos para parquear una llamada cuando era ya una llamada parqueada. Puede ser: habilitar para: callee(llamado), caller (llamante), both(ambos). Si se quieres deshabilitar hay que poner no.

parkedmusicclass=default    ; La clase de música en espera que escuchará la extensión que ha sido parqueada 
transferdigittimeout => 5    ; Numero de segundos de espera entre cada dígito cuando se esta transfiriendo una llamada

xfersound = beep        ; El sonido que indicará que la transferencia de la llamada "asistida" se completó
xferfailsound = beeperr        ; El sonido que indicará que la transferencia de la llamada fracasó
pickupexten = *8        ; De esto hablaremos en otro articulo. Por ahora lo dejamos así
featuredigittimeout = 2000    ;numero de milisegundos entre cada dígito cuando se activan le funcionalidades que veremos más adelante. El predefinido el 500 milisegundos pero a mi no me funcionaba. Tuve que subir este valor así que cuidado.

atxfernoanswertimeout = 15 ; Tiempo máximo para contestar una llamada transferida con el método "asistido". Ya veremos que significa

atxferdropcall = no        ; Si quien transfiere una llamada con el método "asistido" cuelga antes que la llamada sea transferida completamente, asterisk devuelve la llamada a quien la estaba transfiriendo. Si está en yes la llamada no se devuelve y se considera terminada.

atxferloopdelay = 10       ; Numero de segundos de espera antes de devolver la llamada (si atxferdropcall = no)
atxfercallbackretries = 2  ; Las veces que se intentará devolver la llamada

; La mapa de las funcionalidades que aparecen aquí abajo solo funcionan si asterisk hace de puente entre las

; llamadas. Si por ejemplo en la

;configuración de las extensiones en sip.conf ponemos canreinvite=yes es probable que estas funcionalidades

; noresulten

[featuremap]
blindxfer => #
             ; la tecla que hay que hundir para empezar la transferencia de una llamada
disconnect => *           ; la tecla que hay que hundir para terminar la llamada
automon => *1            ; La secuencia de teclas que hay que hundir para grabar la llamada (en dos archivo, uno para cada interlocutor)
atxfer => *2                ; La secuencia de teclas para una transferencia de llamada "asistida". Que diferencia hay entre blindxfer y atxfer? Al terminar este bloque la explicación.
parkcall => *7                ; La secuencia de teclas para parquear la llamada. Podemos usar esta secuencia o transferir directamente la llamada a la extensión 700 (véase el inicio de este archivo)
automixmon => *3        ; La secuencia de teclas que hay que hundir para grabar la llamada en un único archivo mezclando las voces de los dos interlocutores

;blinxfer: estamos hablando con una extensión y queremos transferir la llamada a otra. Hundimos la tecla # y ;luego el numero de la extensión.

; La llamada será transferida y nuestra llamada terminará

;atxfer: Estamos hablando con una extensión y queremos transferir la llamada a otra. Hundimos la secuencia *2 y ;luego el numero de la extensión

; donde queremos transferir la llamada. Escucharemos timbrar la extensión y podremos hablar con el interlocutor ;(por ejemplo para anunciar la llamada

; que le vamos a transferir). Solamente cuando colgaremos las dos extensiones serán conectadas entre ellas.

[applicationmap]
; en esta parte del archivo podemos añadir funcionalidades particulares que luego podremos usar a lo largo de una llamada.

; la sintaxis para estas funcionalidades es:

;<FeatureName> => <DTMF_sequence>,<ActivateOn>[/<ActivatedBy>],<Application>[,<AppArguments>[,MOH_Class]]
;
FeatureName   -> El nombre de la funcionalidad; 

; DTMF_sequence -> la secuencia de teclas para activar la funcionalidad.
ActivateOn    -> Aquí se define para quien activar la funcionalidad. Los valores son self y peer. Con self la funcionalidad se activa para quien la requiere, con peer para el otro canal

ActivatedBy   -> Este parámetro define quien tiene acceso a la funcionalidad. Las opciones son: caller (llamante), callee (llamado), both (ambos). ;Predefinido es both

Application   -> La aplicación que se va a ejecutar
AppArguments  -> Las opciones que queremos usar con la aplicación

MOH_Class     -> la clase de música en espera que escuchará el canal libre mientras se ejecuta la funcionalidad

; Un ejemplo
;
test1 => *9,peer,Playback,tt-monkeys,default 
;Hundiendo la secuencia *9 desde un canal, el otro escuchará la voz tt-monkeys mientras el canal libre escuchará música en espera presente en la clase
;default. Ambos (llamante y llamado) puede activar esta función.

_____________________________________________________________________

No voy a explicar la parte que queda del archivo de configuración porque me parece que no se necesita para una configuración básica de Asterisk.

Bueno, ahora que tenemos que hacer para que todo funcione?

Primero tenemos que modificar el archivo de configuración extensions.conf Vamos a abrir el archivo como lo dejamos cuando hablamos de su configuración. En negrita aparecerán las partes que hay que añadir.

nano /etc/asterisk/extensions.conf

[general]
static=yes 
writeprotect=no 
autofallthrough=yes 
priorityjumping=yes

[globals]
SUP = SIP/2100
FUL = SIP/0057310000000
JUST = SIP/justvoip

DYNAMIC_FEATURES=test1#automon#disconnect#atxfer#parkcall#automixmon

[subscribe]
exten => 701,hint,park:701@parkedcalls
exten => 702,hint,park:702@parkedcalls
exten => 703,hint,park:703@parkedcalls
exten => 704,hint,park:704@parkedcalls
exten => 705,hint,park:705@parkedcalls
exten => 706,hint,park:706@parkedcalls
exten => 707,hint,park:707@parkedcalls
exten => 708,hint,park:708@parkedcalls
exten => 709,hint,park:709@parkedcalls
exten => 710,hint,park:710@parkedcalls

[internas]

exten => 123,1,Answer()
exten => 123,2,Playback(hello-world)
exten => 123,3,Hangup()

[externas]
exten => _00573.,1,Dial(${JUST}/${EXTEN})
exten => _00573.,n,Playback(all-outgoing-lines-unavailable)
exten => _00573.,n,Hangup()

[solo-internas]
include => internas

[todas]
include => internas
include => externas
include => parkedcalls

__________________________________

Para que las funcionalidades configuradas en features.conf funcionen hay que definir la variable DYNAMIC_FEAUTURES y añadirle todas las funcionalidades que hemos configurado. Después de la etiqueta [internas] hemos puesto diez líneas para monitorear las extensiones usadas para parquear las llamadas. De esta forma siempre sabremos cuantas llamadas están parqueadas (en los teléfonos IP software y hardware que prevén esta posibilidad). Aquí va un ejemplo.

En mi X-lite he puesto en la lista de contactos dentro del grupo ParkedCalls, las 10 extensiones. Como pueden ver en la imagen la extensión 701 está on the phone, esto significa que hay una llamada parqueada en esa extensión. Si quisiera podría posicionarme sobre esa línea con el ratón, hundir el teclado derecho y llamar. En seguida estaré conectado con la llamada parqueada y la extensión 701 ya no aparecerá on the phone.

Para terminar en la etiqueta [todas] hemos añadido el contexto parkedcalls. Todos los que tengan acceso al contexto todas, además de tener acceso al contexto internas y al contexto externas, tendrán acceso al contexto parkedcalls es decir podrán parquear las llamadas que contesten.

Ahora para que todo funcione tenemos que volver a arrancar asterisk

/etc/init.d/asterisk restart

Desde la consola de Asterisk podemos ver las funcionalidades activadas.

asterisk -rvvvvvvvvvvvv

CLI> features show
Builtin Feature           Default Current
---------------           ------- -------
Pickup                    *8      *8
Blind Transfer            #       #
Attended Transfer                 *2
One Touch Monitor                 *1
Disconnect Call           *       *
Park Call                         *7
One Touch MixMonitor              *3

Dynamic Feature           Default Current
---------------           ------- -------
test1                     no def  *9

Call parking
------------
Parking extension   :      700
Parking context     :      parkedcalls
Parked call extensions:      701-710

Hagas sus pruebas y luego me cuentan. Mañana veremos como integrar estas funcionalidades en el dialplan a través de la aplicacion Dial.

Comentarios

Muchas gracias por el tutorial de configuración básica de Asterisk, pero, en este apartado, ¿no falta el contexto [parkedcalls] en el extensions.conf? ¿Cómo debería ser éste?

Es que entiendo que hay que añadirlo, pero no sé qué prioridades tiene que contener...

Muchas gracias de nuevo, muy útil.

Un saludo.

No hace falta definir para este contexto extensiones y prioridades porque ya todo está contenido el el archivo de configuraciones features.conf.

Lo unico que hay que hacer es decidir quienes tienen acceso a esta "feature" incluyendo ese contexto en otro/otros como se muestra al final del articulo.

Ok, gracias, me di cuenta después de mandar el e-mail que ciertamente incluías ese contexto en uno de los del archivo 'extensions.conf', concretamente, en tu ejemplo, en el [todas]. Lo siento, había entendido que debía definirse un contexto especial, como [internas] o [todas] que se llamase [parkedcalls] y que en él era donde era necesario definir alguna característica más...

Mi sincera enhorabuena, no sólo por el artículo, sino por tu disposición a la hora de contestar mi pregunta.

Gracias,

Paco

PD.- Ya era hora de que nos dejasen postear a los trolls....

Bueno, lo importante es que te funcione sino no tiene sentido, por lo menos para mi, escribir estas pequeñas guías.

Desde siempre podían postear solamente que configuré una solución espacial para los trolls ;)
Chao

Primero felicitarte por tu portal, es muy buena y clara, mi consulta es donde quedan guardados los archivos cuando uno presiona *3 en una llamada, o como puedo recuperar la grabacion de una llamada.

 

Muchas gracias de antemano y muchas felicidades.

Hola,

si la instalación se ha hecho desde las fuentes las grabaciones se guardan en :

/var/spool/asterisk/monitor

Saludos

Hola a todos,

Llevo varios días intentando realizar una llamada a una extensión para monitorizarla y guardar la conversación pero nada más descolgar se cuelga.

He probado a implementar la llamada usando el AMI, a través de callfiles, en el dialplan... y siempre me pasa lo mismo :'(

¿Alguna idea de lo que me está pasando?

Un cordial saludo

Es posible obtener un segundo tono de discado, es decir como en las centrales tradicionales, una extension marca el 9 y cambia de tono para llamar hacia la red publica. Pasando al mundo asterisk, podriamos tener unas extensiones que esten dentro de un contexto y luego de discar el 9, cambia de tono de discado y tambien pasan a un nuevo contexto con otras reglas de discado. Esto se podria?

Gracias desde ya por tu ayuda.

Saludos,

Roger

La unica solución que veo es utilizar la aplicación DISA.

Encuentra su sintaxis con el comando:

CLI> core show aplication DISA

Saludos

Hola amigos

Me estoy encontrando con un problema bastante extraño. En mi sistema, con la transferencia atendida (*2) llega un punto en el que no es posible transferir ninguna llamada. Lo único que se muestra por la consola que puede dar alguna pista es lo siguiente:

features.c:1444 builtin_atxfer: did not read data

He buscado en Google este error, pero no le encuentro solución. ¿A alguien le ha ocurrido lo mismo?

Un saludo y gracias de antemano!

Javier

Hola de nuevo!

Sigo intentando resolverlo, pero no hay manera. 

La poca información que hay sobre esto en internet no despeja ninguna duda. He comprobado que no tenga nada que ver con la cantidad de canales abiertos (el volumen de llamadas en esa sede es elevado y continuo, pero nunca llega a ocupar todos los canales del primario), tampoco parece que tras pasar una llamada con *2 el canal se quede en el limbo y luego no deje transferir ninguna llamada más. Tengo los teléfonos con call-limit=1... No se me ocurre nada más que mirar. ¿Se os ocurre a vosotros algo que nos pueda dar solución a esto?

Un saludo

Javier

buenas tardes,

he configurado esta aplicación y me funciona sin problemas pero con las llamadas internas del asterisk, pero cuando es una llamada que viene externa(desde dahdi) no me funcionan ninguna de estas opciones, saben como activarlas?