varios

Upload: comas-olivos

Post on 14-Jan-2016

13 views

Category:

Documents


0 download

DESCRIPTION

dialplan

TRANSCRIPT

Funciones del Dialplan

Las funciones le permiten calcular la longitud de cadena, fechas y horas,,todo dentro de una expresin.

Sintaxis: Function_name (argumento)

Al igual que las variables, para referenciar el valor de la funcin se usan argumentos:

$ {Function_name (argumento)}

Las funciones tambin pueden encapsular otras funciones:

${FUNCTION_NAME(${FUNCTION_NAME(argument)})} Para obtener una lista completa de funciones disponibles:

*CLI> core show functions

Configuracin para canales de VoIP: SIP e IAX2

Los ficheros a manipular son sip.conf e iax.conf, la instalacin crea ficheros de ejemplo con la sintaxis bastante comentada a modo de gua.

En sip.conf se definen:

Variables generales de SIP.

Clientes SIP.

Servidores SI

En sip.conf tambin se definen tanto los clientes que se conectarn a Asterisk, como los proveedores que se utilizaran para encaminar llamadas. Conceptualmente, se distinguen:

user: Envia llamadas a Asterisk

peer: Recibe llamadas de Asterisk (proveedor).

friend: Recibe y Enva llamadas (usuario). Un ejemplo bsico del archivo sip.conf:

[general]

context=default

port=5060 ; Puerto UDP en el que responder el Asterisk .

bindaddr=0.0.0.0 ; Si queremos especificar que Asterisk est en una IP (si un

; equipo tiene 3 IPs .por ej.) 0.0.0.0 vale para cualquiera. srvlookup=yes ; Habilita servidor DNS SRV.

[david]

type=friend ;puede recibir y hacer llamadas. secret=1234

qualify=yes ;Tiempo de latencia no superior a 2000 ms. nat=no

host=dynamic ; El dispositivo se registra con una IP variante . canreinvite=no ; Asterisk por defecto trata de redirigir. context=internal ; El contexto que controla todo esto.

Igual que tenemos para el protocolo SIP el fichero sip.conf, tambin tenemos el fichero iax.conf para el protocolo IAX2.

En este fichero se definen:

Variables generales de IAX.

Clientes IAX.

Servidores IAX.

Un ejemplo bsico del archivo iax.conf: [general]

bindport = 4569 ;Puerto de IAX

bindaddr = 0.0.0.0

disallow=all ;Para permitir la utilizacion de codecs primero hay que

;desabilitar todos

allow=ulaw allow=alaw allow=gsm

[david]

type=friend

username=david secret=1234 host=192.168.1.30 context=fromiax qualify=yes

Verificacin de la configuracin con el CLI. Para ver los usuarios sip e iax:

*CLI>sip show peers

*CLI>iax show peers

Buzones de voz (Voicemail)

Uno de los servicios ms interesantes de las PBX, Asterisk implementa un sistema de buzones de voz bastante flexible.

Algunas caractersticas de este servicio:

-Ilimitados contenedores voicemail con proteccin de password, contenidos en carpetas.

-Saludos diferentes para los estados busy y unavailable.

-Saludos configurables.

-Habilidad de asociar un telefono con varios voicemail's y un voicemail con varios telefonos.

-Posibilidad de envio al correo electrnico con el archivo de sonido como adjunto.

La configuracin se har en el archivo voicemail.conf (en /etc/asterisk/). Aqu deberemos definir los contextos y contenedores voicemail.

A continuacin vamos a ver una configuracin bsica.

La configuracin avanzada se encuentra en el apartado Configuracin de Asterisk.

Aadir el voicemail al Dialplan

Para ello, vamos a utilizar VoiceMail().

VoiceMail() : aplicacin que enva al llamante un mensaje. El buzn debe ser especificado como mailbox@context (el contexto por defecto es default). Si se utiliza la letra b, la persona que llama escuchara el mensaje de ocupado. Si se usa la letra u, la persona que llama escuchar el mensaje de no disponible (si existe).

exten => 101,1,Dial(${JOHN},10) ; despus de 10 segundos pasa al voicemail exten => 101,n,VoiceMail(101@default,u)

Acceso al voicemail

Los usuarios pueden recuperar sus mensajes de correo de voz, cambiar sus opciones de voz, y grabar sus saludos de voz utilizando el VoiceMailMain().

exten => 700,1, VoiceMailMain() :accedes al buzon de voz del llamante.

Marcacin por nombre de directorio

Una ltima caracterstica del sistema de correo de voz de Asterisk es la de marcacin por nombre de directorio.

Esto se crea con Directory(). Esta aplicacin utiliza los nombres definidos en los mailbox de voicemail.conf .

Sintaxis: Directory (voicemailcontext,context,options)

-7 voicemailcontext: El contexto voicemail para leer los nombres.

-7 context: El contexto opcional del dialplan para llamar al usuario.

-7 options: Por defecto se busca el usuario por apellido.

Con la opcin f se busca por nombre. Con la opcin e se busca por extensin.

Se solicita al usuario que introduzca por teclado las 3 primeras letras del nombre/apellido/extension del empleado.

Codecs y carga de CPU

En principio Asterisk puede reproducir de muchisimos codecs (GSM,G711,G729,MP3) y de archivos de audio sin codificar (WAV), siempre que nos sea posible deberiamos pasar cualquier archivo que queramos reproducir a WAV, pues decodificar es un trabajo que puede cargar mucho a la CPU con cada reproduccion. Aunque tambien es cierto que un archivo codificado ocupa bastante menos que uno que no lo est, pero sacrificamos espacio por cantidad de llamadas que pueden ser atendidas.

Qu uso se da de los Cdecs de audio en Asterisk?

Sirven para digitalizar la voz humana.

Cuando dos dispositivos van a establecer una comunicacin, acuerdan el cdec a utilizar.

Factores importantes a la hora de seleccionar un cdec:

Calidad de audio.

Coste computacional.

Gasto de ancho de banda.

Comparacin de ancho de banda utilizado por los cdecs:Cdec & Bit Rate (Kbps)Bandwidth Ethernet(Kbps)

G.711 (64 Kbps)87.2 Kbps

G.729 (8 Kbps)31.2 Kbps

G.723.1 (6.3 Kbps)21.9 Kbps

G.723.1 (5.3 Kbps)20.8 Kbps

G.726 (32 Kbps)55.2 Kbps

G.726 (24 Kbps)47.2 Kbps

G.728 (16 Kbps)31.5 Kbps

Los proveedores VoIP suelen trabajar en G.729, que consume muy poco ancho de banda y no sera viable utilizar G.711 por ejemplo. El cdec G.729 no es libre, cada licencia de G.729 para un canal es de 10$ pero hay una implementacin que puede utilizarse con fines no lucrativos o educacionales, tanto de este cdec como del G.723.1, en el siguiente enlace:

http://asterisk.hosting.lv/. Para comprobar cuntos codecs soporta Asterisk :

*CLI> core show codecs audio

Para comprobar el coste de transcoding :

*CLI> core show translation

Asterisk no soporta por defecto la reproduccion de mp3, puedes activarla compilando el paquete de addons y activando el soporte para MP3, o instalando el paquete de tu distribucion.

Castellanizar Asterisk

Por defecto las voces que incluye Asterisk estn en Ingls, el lenguaje universal, pero a veces para la perfecta compresin de algunas de las diversas funcionalidades de Asterisk, como el buzn de voz, es necesario tener las voces en Castellano.

Con estos sencillos pasos lo conseguiremos:

Aadir lo siguiente al fichero asterisk.conf (en /etc/asterisk/): [options]

languageprefix = yes

Incluir la lnea language=es en los ficheros de configuracin. (sip.conf, iax.conf, extensions.conf, voicemail.conf,...,diposnibles en /etc/asterisk/).

Editar el fichero indications.conf, poniendo country=es. Ficheros de sonido en castellano:

-http://www.voipnovatos.es/voces/

-Descargamos en formato gsm, alaw, g729, ...

-Editar rbol de directorios (todo cuelga de es)

-Copiar a /var/lib/asterisk/sounds/es/

Macros

Las macros son una herramienta excelente para ahorrarte repeticin de cdigo, y facilidad de cambio y adaptacin para tu Dialplan.

Si tuviera que repetir para un centenar de usuarios las lneas siguientes supondra una gran cantidad de copy/paste. Sera ms sencillo un cambio en la manera en que trabaja las extensiones.

exten => 101,1,Dial(${JOHN},10)

exten => 101,n,VoiceMail(101@default)

exten => 101,n,Hangup()

.

Puede definir una macro que contiene una lista de pasos a seguir. Todo lo que necesita para el cambio es la macro, y las referencias. Si est familiarizado con la programacin, usted reconocer que las macros son similares a las subrutinas en muchos lenguajes de programacin modernos.

Definicin de macros

Los contextos de toda macro deben ser [macro-nombreMacro]. Esto les distingue de los contextos ordinarios y facilita su llamada.

Los comandos de la macro se construyen casi igual a cualquier otra cosa en el Dialplan, el nico factor limitante es que solo se usan en la extensin s.

Llamadas a macros

Para utilizar una macro en nuestro dialplan, utilizamos Macro() . exten => 101,1, Macro (nombreMacro)

Macro () define varias variables especiales para nuestro uso. Son:

${MACRO_CONTEXT}: El contexto original en el que se llama a la macro.

${MACRO_EXTEN}: La extensin original en la que se llama a la macro.

${MACRO_PRIORITY}: La prioridad inicial en el que se llama a la macro.

${ARG n }: El ensimo argumento pasado a la macro . Aplicando al ejemplo:

exten => 101,1, Macro (voicemail) [macro-voicemail]

exten => s,1,Dial(${JOHN},10)

exten => s,n,VoiceMail(${MACRO_EXTEN}@default)

exten => s,n,Hangup()

Si todo el que llame va a realizar la llamada a travs del mismo canal y extensin que define la variable JOHN ya hemos terminado sino es necesario el uso de argumentos.

Utilizacin de argumentos en macros

Vamos a pasar el canal como argumento:

exten => 101,1,Macro(voicemail,${JOHN}) [macro-voicemail]

exten => s,1,Dial(${ARG1},10)

exten => s,n,VoiceMail(${MACRO_EXTEN}@default)

exten => s,n,Hangup()

Uso de la base de datos de Asterisk (AstDB)

Asterisk proporciona un poderoso mecanismo para el almacenamiento de valores de llamada con el uso de una base de datos interna llamada AstDB. Esta no es una relacional tradicional como MySQL, SQLServer y otras, es del tipo Berkeley DB Version 1.

Nos puede ser de utilidad para sistemas pequeos.

Existen dos entidades: familias(Families) y llaves(Keys), cada key esta asociada a una

Family, si un Key toma un valor nuevo, el anterior es superpuesto por este nuevo valor.

Almacenamiento de datos en AstDB

Para almacenar un nuevo valor en la base de datos de Asterisk, utilizamos la aplicacin Set(), pero en lugar de usarlo para establecer un canal de la variable, la usamos para definir una variable AstDB.

Para asignar la clave count en la familia test con el valor 1:

exten => 456,1,Set(DB(test/count)=1)

Tambin puede guardar los valores de Asterisk con la lnea de comandos CLI, ejecutando el comando database poniendo el valor de la clave de la familia.

*CLI>database put family key value.

*CLI>database put test count 1

Recuperacin de datos de AstDB

Para recuperar un valor de AstDB y asignarlo a una variable, usamos la aplicacin Set () de nuevo. Vamos a recuperar el valor de count de la familia test,asignando a una variable llamada COUNT y, a continuacin, decimos el valor:

exten => 456,n,Set(COUNT=${DB(test/count)})

exten => 456,n,SayNumber(${COUNT})

Tambin puede comprobar el valor de una clave desde la lnea de comandos de

Asterisk utilizando el comando:

database get family key database get test key

Para ver todo el contenido de AstDB, se utiliza el comando:

database show

Borrado de datos de AstDB

Hay dos maneras de borrar los datos de la base de datos de Asterisk. Borrar solo la llave devolviendo su valor antes de eliminarla: DB_DELETE().

exten => 457,1,Set(COUNT= ${DB_DELETE(test/count)}) En el CLI : *CLI>database del key

Borrar la familia y la clave: DBdeltree(family).

exten => 457,1, DBdeltree(test)

En el CLI:*CLI>database deltree family .

Transferencias de llamadas

La configuracin de la transferencia de llamadas entre diversos usuarios, independientemente de la tecnologa que usen se realiza en el archivo features.conf en /etc/asterisk/.

Hay que especificar en dicho archivo las siguientes caractersticas:

blindxfer => secuencia : Permite realizar una transferencia de llamada a ciegas marcando la secuencia.

atxfer => secuencia : Permite realizar una transferencia de llamada atendida.

El origen es puesto en espera, mientras el destino se comunica con el nuevo destino para anunciarle la llamada. Si el nuevo destino cuelga, la llamada no se transfiere.

pickupexten => secuencia : Especifica la secuencia a marcar para coger una llamada de alguien del mismo callgroup.

Para poder realizar transferencias va PBX, Asterisk debe estar a la escucha de los

tonos configurados, para ello la aplicacin Dial debe haber recibido como parmetro 't' para permitir la transferencia en destino o 'T' para hacerlo en origen (o ambas).

CallParking

El callparking o aparcamiento de llamadas es una funcionalidad que permite transferir la llamada a un 'parking' virtual. Pudiendo colgar sin que la llamada origen sea desconectada de Asterisk, ya que se encontrar aparcada.

Manejo de Colas

Una llamada entrante puede ser enviada a una cola de llamadas, que ser distribuida entre los agentes disponibles, miembros que contestan las llamadas.

Las colas se utilizan mucho en entornos tipo 'Call Center', con los canales tipo de

Agente (que hacen 'login en el sistema'). El sistema de colas se compone de:

-Llamadas entrantes que son ubicadas en una cola.

-Miembros que contestan las llamadas en la cola

-Una estrategia sobre cmo manejar la cola y repartir las llamadas entre los miembros.

-Msica que se reproduce durante la espera en la cola. La configuracin de las colas se define:

-Estticamente: en el archivo queues.conf

-Dinmicamente: la configuracin se almacena en una BD, disponibilizando los cambios sin necesidad de realizar un reload.

La configuracin de los agentes se define en el archivo agents.conf. Los agentes atienden las llamadas de una cola especfica.

Un agente debe realizar un login (llamando a una extensin especial que contiene la aplicacin AgentLogin()) indicando que est listo para tomar llamadas. Tambin existe el concepto de agente dinmico por si cualquier usuario quiere agregarse a una cola. Para esto se utilizan las aplicaciones AddQueueMember() y RemoveQueueMember(). Los miembros son aquellos canales disponibles que estn activamente atendiendo la cola. Pueden ser tanto agentes como tambin canales regulares (SIP/105).

Las llamadas son distribuidas entre los miembros de una cola siguiendo alguna de las

siguientes estrategias:

-ringall: hace sonar todos los canales disponibles hasta que alguno responda (configuracin por defecto).

-roundrobin: hace sonar cada agente disponible por turnos.

-leastrecent: hace sonar el agente que es menos recientemente llamado por esta cola.

-fewestcalls: hace sonar el agente con la menor cantidad de llamadas completas.

-random: hace sonar una interfaz al azar.

-rrmemory: igual que el round robin pero recuerda cual fue el ltimo telfono que atendi una llamada y contina con el siguiente.

Registro de llamadas(CDR)

Asterisk permite llevar un control exhaustivo de todas las llamadas que se han realizado o recibido. Este control es interesante para el propio control de facturacin,

independientemente del proveedor y adems permite realizar estadsticas. Dicho control se denomina CDR(Call Detail Record).

El registro del CDR se escribe por defecto en el archivo:

/var/log/asterisk/cdr-csv/Master.csv

Tambien es posible almacenar los registros en una base de datos MySQL configurando el archivo cdr_mysql.conf en /etc/asterisk/, para configurar el CDR se hace en cdr.conf en la misma carpeta.

Para confirmar el estado del CDR desde el CLI, se puede ejecutar:

*CLI> cdr status

Algunos de los campos ms importantes son:

accountcode: cdigo de la cuenta a utilizar.

src: nmero del caller ID. dst: extensin destino. dcontext: contexto destino.

start: comienzo de la llamada (fecha/hora).

answer: respuesta de la llamada (fecha/hora).

end: fin de la llamada (fecha/hora).

duration: duracin de la llamada en segundos, desde que fue discada hasta el corte.

billsec: duracin de la llamada en segundos, desde que fue atendida hasta el corte.

disposition: estado de la llamada (atendida, no atentendida, ocupado, fallida).

Existen muchas aplicaciones que permite gestionar el CDR. Desarrollar una propia no es realmente muy complejo. Para la aplicacin se utilizar Asternic CDR Reports

IVR (Interactive Voice Response)

IVR es el nombre de la tecnologa que permite interactuar con un men de voz utilizando un telfono.

Es relativamente fcil y sencillo, configurar un men de ese tipo en Asterisk.

Una vez hechas varias grabaciones de mensajes con la aplicacin Record() como hemos comentado y haberlas guardado estos en /var/lib/asterisk/sounds/ se puede comenzar a configurar el IVR en extensions.conf.

Las ventajas que proporciona el sistema no reside solamente en la reduccin de costes y en el incremento de la eficiencia del CallCenter sino que tambin:

Y Ayuda a reducir los turnos de los operadores y sus costes asociados.

Y Incrementa las horas de servicio.

Y Disminuye la tasa de llamadas perdidas.

Y Incrementa la disponibilidad de los operadores.

Y Proporciona una tasa de re-direccionamiento solucionando un mayor nmero de primeras llamadas.

Y Mejora la flexibilidad para responder a las necesidades del cliente o a picos de llamadas.

El 95% del xito del diseo de los sistemas IVR de Asterisk se basa en trabajar junto al cliente desarrollando casos de uso consistentes y probar (y rehacer) prototipos con usuarios finales "reales" (a los cuales, incluidos nosotros mismos, les fastidia "hablar" con una maquina). Si la transaccin promedio es corta y amigable, la ventaja frente al acceso Web es que no todos tienen Internet en todo momento, aunque si un telfono.

Discado automtico (Auto-dial out)

Los Call Files (.call) se utilizan para iniciar llamadas desde una aplicacin externa. Son archivos de texto que al copiarse en el directorio /var/spool/asterisk/outgoing, Asterisk notar su presencia e inmediatamente activar la extensin en la prioridad especificada en el archivo .call. Generalmente, se combinan con el programador de tareas de Linux: el cron.

Algunos ejemplos de uso son: soluciones de callback, despertador telefnico, anuncios automticos.

La estructura de un Call File es la siguiente:

Channel: ; La extensin que queremos llamar.

Callerid: ; El identificativo de llamada que queremos enviar a la

;extensin llamada.

WaitTime: ; Cuantos segundos esperamos antes de considerar la

;llamada sin xito.

Maxretries: ; Numero de veces que intentaremos llamar la

;extensin

RetryTime: ; Cuantos segundos debe esperar asterisk para volver a

; marcar

Account: ; El nombre de la cuenta con la cual queremos grabar

; esta llamada (CDR)

Una vez que la extensin llamada conteste tenemos que decirle a asterisk lo que tiene que hacer. Esto tambin se define en el mismo archivo. Hay dos opciones:

Ejecutar una aplicacin:

Application: ; la aplicacin que queremos utilizar

Data: ; aqu podemos definir las opciones de la aplicacin

Ejecutar un punto exacto del plan de llamadas (Dialplan):

Context: ; El contexto en el dial plan

Extension: ; La extensin que queremos usar en el contexto; especificado.

Priority: ; El numero de la prioridad o la etiqueta si definida

Setvar: ; Variables que se pueden necesitar en el ; contexto, extensin y prioridad que definimos.

Ejemplo:

En el siguiente ejemplo: se llama al 43424444 en el canal SIP y enva la llamada al contexto [mensajes-salida], extensin 84, Prioridad 1:

-Archivo mensaje.call

Channel: SIP/43424444

MaxRetries: 2

RetryTime: 60

WaitTime: 30

Context: mensajes-salida

Extension: 84

Priority: 1

-extensions.conf

[mensajes-salida]

exten => 84,1,Playback(anuncio) exten => 84,2,Playback(vm-goodbye) exten => 84,3,Hangup

Sistema de logs

En el archivo /etc/asterisk/logger.conf se encuentra la configuracin del sistema de logging de Asterisk.

Los distintos niveles de informacin a capturar en los logs son:

Verbose: mensajes generales sobre lo que est ocurriendo en el sistema (por ejemplo si el valor de verbosity es mayor a 3, muestra las instrucciones del plan de marcacin).

Debug: mensajes con informacin extendida, en general utilizados porprogramadores.

Notice: notificaciones no crticas.

Warning: mensajes de alerta posiblemente crticos.

Error: mensajes indicando que ocurri algo grave.

En el contexto [logfiles] del archivo logger.conf se indican los archivos y mensajes a loguear en c/u, la sintaxis es: archivo => nivel1,...,niveln

Los archivos de log se crean por defecto en /var/log/asterisk/ (esto se puede cambiar

/etc/asterisk/asterisk.conf).

En el contexto [logfiles] del archivo logger.conf se indican los archivos y mensajes a loguear en c/u, la sintaxis es: archivo => nivel1,...,niveln

Los archivos de log se crean por defecto en /var/log/asterisk/ (esto se puede cambiar

/etc/asterisk/asterisk.conf).

Ejemplos:

debug => debug

full => notice,warning,error,debug,verbose

Para enviar a la consola, hay que definir el archivo especial console:

console => notice,warning,error,debug

Tambin se pueden enviar al syslog:

syslog.local0 => debug, warning, error, notice, verbose

Configurando adems en /etc/syslog.conf:

local0.*@ip_servidor

Los comandos relacionados con el manejo del log en el CLI son:

Reabre los archivos de log del Asterisk y recarga la configuracin del logger:

*CLI>logger reload

Rota los archivos de log y luego hace un logger reload.

*CLI>logger rtate

Cambia el nivel de informacin a mostrar en la consola. Por ej.: set verbose 999

*CLI>core set verbose