You are on page 1of 11

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
nombre/apellido/extension del empleado.

por

teclado

las

primeras

letras
2

del

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 Bandwidth
(Kbps)
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:
3

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
exten
exten
exten

=>
=>
=>
=>

101,1, Macro (voicemail) [macro-voicemail]


s,1,Dial(${JOHN},10)
s,n,VoiceMail(${MACRO_EXTEN}@default)
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)
4

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:
5


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
6

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
7

automticos.
La estructura de un Call File es la siguiente:
Channel: <channel> ; La extensin que queremos llamar.
Callerid: <callerid>
;extensin llamada.

; El identificativo de llamada que queremos enviar a la

WaitTime: <number> ; Cuantos segundos esperamos antes de considerar la


;llamada sin xito.
Maxretries: <number> ; Numero de veces que intentaremos llamar la
;extensin
RetryTime: <number>
; marcar

; Cuantos segundos debe esperar asterisk para volver a

Account: <account>
; esta llamada (CDR)

; El nombre de la cuenta con la cual queremos grabar

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: <appname> ; la aplicacin que queremos utilizar
Data: <args>

; aqu podemos definir las opciones de la aplicacin

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


Context: <context> ; El contexto en el dial plan
Extension: <exten>

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

Priority: <priority>

; El numero de la prioridad o la etiqueta si definida

Setvar: <var=value>
; 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]
8

exten => 84,1,Playback(anuncio)


84,3,Hangup

exten

=>

84,2,Playback(vm-goodbye)

exten

=>

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 por
programadores.
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
9

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

10

11

You might also like