Tutorial Asterisk
Tutorial Asterisk
Tutorial Asterisk
ndice de captulos
Seccin 1
1. Qu es la VoIP
VoIP Qu es y por qu es tan importante?
Breve historia de la VoIP
Pero qu supuso el verdadero 'boom' de la VoIP?
2. Los protocolos que hay detrs de la VoIP
Protocolos ms importantes
Paquetes de Voz
Sealizacin - Protocolo H.323
Sealizacin - Protocolo SIP
Sealizacin - Protocolo IAX
3. Qu son y cmo funcionan los cdecs?
4. La infraestructura de la VoIP y Proveedores de VoIP
Infraestructura de una red de VoIP
Proveedores de VoIP
Seccin 2
1. Qu es Asterisk? Digium y la comunidad de Asterisk
Todava no sabes qu es Asterisk?
Digium y la comunidad de Asterisk
2.Interfaces Web para Asterisk
3. Asterisk 11 LTS - Qu cosas nuevas trae?
Seccin 3
1. Instalacin y configuracin Asterisk
Instalacin de Asterisk
Configurando Asterisk - sip.conf
Configurando Asterisk - extensions.conf
2. IVR y funciones Dialplan
Creando un IVR
Buzones de Voz
Fichero sip.conf
Fichero extensions.conf
Fichero voicemail.conf
Aplicaciones imprescindibles en tu Dialplan
3. Trabajando con Bases de datos
La base de datos interna de Asterisk
Conexin con bases de datos externas
Conectando con la BBDD
Aplicando la nueva configuracin
Llamadas a la base de datos desde el Dialplan
Seccin 3
1. El CLI de Asterisk
2. La eterna pelea con la NAT y el Trunking
NAT en Asterisk
Trunking
Seccin 1
1. Qu es la VoIP
VoIP Qu es y por qu es tan importante?
A estas alturas todava no sabes lo que es la VoIP? Pu1es siendo lo ms precisos
posible podramos decir que la VoIP es una tecnologa de comunicacin que hace
posible que la voz digitalizada viaje a travs de Internet empleando el protocolo IP
(Internet Protocol) en lugar de hacerlo de forma analgica a travs de circuitos
dedicados.
Como la aplicacin ms comn de la VoIP es la telefona (Telephony over IP, ToIP),
casi nunca se habla de ToIP sino que hablamos de VoIP refirindonos a la
posibilidad de realizar llamadas telefnicas a travs de Internet ahorrando en costes
de establecimientos de llamada, tarificaciones por uso de la red telefnica, costes
por roaming, etc.
La idea de cmo funciona todo esto es muy sencilla: El origen solicita una conexin
con el destino mediante envo de informacin a travs de la red y, cuando la
comunicacin se acepta, se comienza a enviar la voz digitalizada desde cada
extremo al opuesto, hasta que se finalice la llamada.
destino. Las compaas telefnicas eran las propietarias de la los cables por los que
se enviaban las llamadas enrutadas.
Con el desarrollo de las redes de ordenadores, empezamos a enviar informacin
entre equipos situados a mucha distancia y no se tard en plantear la posibilidad de
enviar paquetes de datos de voz para "simular" el comportamiento de las redes
telefnicas tradicionales. La diferencia principal entre esta solucin y la telefona
tradicional es que ya no se reservaran recursos en la red por lo que sta quedara
ms descongestionada y se podran reducir los costes de las llamadas. Cada
paquete con voz digitalizada sabe cul es su destino, y la red simplemente se
encarga de que se reciban los paquetes de voz. Cuando uno de los extremos no
habla, simplemente no se enva nada, y la red no se satura con canales que no se
utilizan. Aunque al principio, slo podamos contar con soluciones propietarias que a
su vez eran bastante caras e incompatibles entre s, con la aparicin de los sistemas
multimedia, y en concreto las tarjetas de sonido y su bajada de precios, se lleg a
una situacin en la que cualquier ordenador tena la capacidad de trabajar con VoIP.
Protocolos ms importantes
Paquetes de Voz
Los paquetes de voz van a viajar siempre sobre el protocolo de transporte UDP (User
Datagram Protocol) que es un protocolo que no est orientado a conexin y no es
fiable aunque s que es mucho ms rpido que TCP. Adems, al no importar que
algunos paquetes se pierdan, no se retransmite informacin lo cual tambin supone
una ventaja a la hora de transmitir datos de voz.
Dentro de UDP, lo normal es que los paquetes de voz se encapsulen en tramas RTP
(Real-Time-Protocol) pero no vamos a profundizar este punto. Simplemente
tenemos que tener claro que va a existir un flujo de paquetes de voz que llegan al
destino. Si algn paquete se pierde por el camino no hacemos nada por recuperarlo
porque con la informacin que nos llega del resto de paquetes podemos
"recomponer" la seal de voz. En el apartado de Cdecs desarrollaremos mejor este
punto.
protocolo
H.323
es
una
recomendacin
de
la
ITU
(International
(digital). Esto quiere decir que si queremos enviar paquetes con datos que
contengan la informacin necesaria para reproducir un fragmento de voz, tendremos
que digitalizar la voz previamente.
El proceso de convertir una seal analgica a una seal digital se realiza a travs de
un elemento llamado codificador. Si el codificador adems es capaz de realizar el
proceso contrario, esto es, pasar de una seal digital a una analgica aunque sea
slo de forma aproximada, entonces tendremos un codificador-decodificador. A un
codificador-decodificador tambin se le denomina 'cdec'.
Aunque pueda parecer que slo nos interesara seleccionar uno o dos cdecs
teniendo en cuenta los parmetros de calidad de voz (MOS, Mean Opinion Score) y
de bit-rate que necesita cada cdec, lo cierto es que de cara a nuestra red tambin
tenemos que fijarnos mucho en el tamao de los paquetes que vamos a enviar ya
que cada paquete de voz est formado tambin por bits que son utilizados para
temas de enrutamiento y correccin de errores. Como aaden carga, saturan la red y
hacen que el sistema completo vaya ms lento. Reducimos el nmero de paquetes
que tenemos que enviar hacindolos ms grandes? No siempre es una buena idea
porque la prdida de un paquete de gran tamao va a provocar un impacto mayor a
la salida, incluso un corte de la comunicacin!. Lo que se recomienda en estos
casos es tener cierto compromiso entre la cantidad de paquetes que se envan a la
red y la proteccin que queremos tener. El tamao de referencia deberan ser unos
20ms de voz por paquete.
10
11
En el caso de los telfonos analgicos (los de toda la vida), como stos no pueden
conectarse directamente a una red de datos, lo que se hace es intercalar una etapa
que realice la conversin analgica/digital. A esta etapa se le denomina ATA
(Adaptador de telfono analgico). Aunque no presentan las funcionalidades y
ventajas de un telfono IP, muchas empresas siguen esta opcin al no querer
cambiar la infraestructura que tenan anteriormente.
Los softphones permiten utilizar un ordenador como terminal VoIP. Como su
nombre indica, es una aplicacin software que simula un telfono. Entre los modelos
ms conocidos destacan el X-Lite de CounterPath Corporation o el Zoiper
Softphone.
Tambin existen soluciones para terminales Android, IOs, Symbian,... pensadas para
telefona mvil. Con el auge de las comunicaciones 3G y 4G en telefona mvil,
todava 'no se entiende' que las compaas estn tan interesadas en vetar la VoIP en
12
la telefona mvil. No ser que estas compaas quieren que paguemos ms por un
servicio mucho peor? :)
Tarjetas de Comunicaciones
En Espaa los dos tipos de conexin telefnica ms importantes han sido
tradicionalmente la conexin telefnica bsica (analgica) y la conexin telefnica
mediante lnea RDSI que es digital pero no IP. Si queremos conectarnos a este tipo
de redes nos har falta un elemento capaz de realizar la conversin analgico-IP o
RDSI-IP. El elemento encargado de esta conversin recibe el nombre de tarjeta de
comunicaciones y su seleccin depender de la tecnologa (o conjunto de
tecnologas si hablamos de una tarjeta hbrida) a la que queramos conectarla: Lnea
telefnica bsica, Lnea telefnica por RDSI, Enlace GSM, Bluetooth, etc.
Gateways
Es la otra posibilidad de conectar nuestra red de VoIP a la red telefnica
convencional. Difiere de las tarjetas de comunicaciones en que aqu tenemos un
dispositivo externo que es el que hace de interfaz entre la red telefnica y la red IP.
Es como si sacramos la tarjeta de comunicaciones la colocsemos en un
dispositivo aparte. Existen gateways para lneas analgicas, para lneas digitales,
para lneas de GSM,... y el funcionamiento es idntico a su equivalente en tarjeta de
comunicaciones.
13
Proveedores de VoIP
Hasta ahora hemos comentado que la VoIP nos permite ahorrar costes de todo tipo:
roaming, establecimiento de llamada, costes por tiempo de llamada,... pero slo si
no tenemos que pasar por una red telefnica tradicional. En ese caso, la seal digital
tendra que convertirse a seal telefnica y nos tarificara la empresa responsable de
la red telefnica tradicional.
Una alternativa a esta situacin es contar con un proveedor de VoIP. La labor de este
tipo de empresas es la de sustituir a la lnea telefnica convencional. De esta forma,
14
Ubunet
Telecom,
somos
especialistas
en
soluciones
Full-VoIP
15
Linux LPIC-1
Examen 101
Linux LPIC-1
Examen 102
NodeJS,
ExpressJS y
MongoDB
AngularJS y
TypeScript
Servidores VoIP
con Asterisk
Desarrollo
Frontend
Profesional
Virtualizacin de
Servidores con
Promox
Desarrollo
Backend con
Django
16
Seccin 2
1. Qu es Asterisk? Digium y la comunidad de Asterisk
Todava no sabes qu es Asterisk?
Asterisk es un servicio software, libre bajo licencia GPL, que proporciona
funcionalidades de centralita telefnica (PBX). Al igual que ocurre con cualquier otra
PBX, Asterisk puede conectarse a un grupo de telfonos para hacer llamadas entre
s enrutando dichas llamadas a los destinos adecuados e incluso a destinos en el
exterior de su red incluyendo a proveedores, lneas telefnicas tradicionales, lneas
GSM, lneas de datos, etc. Podramos decir que ms que una PBX es un servidor de
comunicaciones ya que tambin permite trabajar con videoconferencias,
interactividad con bases de datos, funcionalidades de IVR y un largo etctera.
Por hacer mencin a la explicacin que hacen de Asterisk desde su website oficial,
(www.asterisk.org), "Asterisk es un framework para la construccin de soluciones de
comunicaciones y aplicaciones multiplataforma y en tiempo real".
Hoy en da Asterisk cuenta con ms de un milln de sistemas de comunicaciones en
ms de 170 pases. Durante 2009 se convirti en el software Open Source ms
descargado y utilizado con ms del 85% del mercado de cdigo abierto y en l estn
basados sistemas tan famosos como Skype con los que se superan con creces a
los fabricantes de PBX tradicionales como Nortel, Cisco o Avaya.
17
18
FreePBX
Disponible en www.freepbx.org. Es una de las interfaces web ms conocidas porque
funciona bien y porque incluye muchas funcionalidades.
19
TrixBox (Fonality)
Disponible en www.fonality.com. Contaba con dos versiones, una libre bajo licencia
GPL2, y otra con soporte completo pero previo pago. Ahora slo est disponible la
de pago. Pensada ms paraaplicaciones empresariales, utiliza un lenguaje sencillo,
fcil de manejar, optimizada para sistemas Cloud,... La contra, es de pago y no
cuenta ya con comunidades de desarrolladores tan extensas como las de las otras
plataformas.
Elastix
Disponible en www.elastix.org. Es de las pocas que podemos encontrar totalmente
en espaol. Ha mejorado mucho en los ltimos aos gracias a los cursos de
formacin para la plataforma. Tiene herramientas bsicas de Asterisk y algunas
suyas propias.
20
AsteriskNOW
Basado en el panel libre que ofrece Digium a travs de la pgina de Asterisk
(www.asterisk.org), slo disponible en imagen ISO con Linux incluido, tiene como
pblico objetivo a desarrolladores, integradores de sistemas, estudiantes, hackers,...
y todo aquel que pueda contribuir de alguna forma a mejorar Asterisk. Existen varias
opciones de soporte previo pago pero la plataforma es totalmente gratuita y Open
Source.
Lo mejor - Como suele ser lo primero que prueban los iniciados en VoIP,
existe mucha documentacin. Adems viene perfecto si estamos trabajando
con equipos de Digium. Los ficheros de configuracin estn bien
estructurados y no es excesivamente complicado trabajar con ellos.
Lo peor - Pese a que debera ser la mejor plataforma por tener el respaldo de
Digium actualmente no ocupa la primera posicin de las interfaces web
libres. Al margen de esto, tambin destaca que hay que tener muchos
conocimientos de Asterisk para poder explotarla bien.
21
Support Type
Release Frequency
Soporte
Asterisk 12
Standard
Hasta 2014-12-20
Hasta 2015-12-20
Cert. Asterisk 11
LTS
2-4 veces al ao
Hasta 2016-10-25
Hasta 2017-10-25
Asterisk 11
LTS
Hasta 2016-10-25
Hasta 2017-10-25
LTS
2-4 veces al ao
Hasta 2014-10-21
Hasta 2015-10-21
Asterisk 1.8
LTS
Hasta 2014-10-21
Hasta 2015-10-21
22
Asterisk 11 introduce algunos cambios y nuevas funcionalidades entre las que cabe
destacar respecto de Asterisk 10:
23
Seccin 3
1. Instalacin y configuracin Asterisk
Instalacin de Asterisk
Antes de instalar cualquier servicio, siempre se recomienda por motivos de
seguridad actualizar la mquina en la que vayamos a realizar dicha instalacin. En
este caso, se ha decidido instalar Asterisk en un SO Debian 7 y para ello vamos a
seguir los siguientes pasos:
apt-get
install
libncurses5-dev
libnewt-dev
24
/etc/init.d/asterisk stop
/etc/init.d/asterisk start
6. O bien...
service asterisk stop
service asterisk start
25
sip.conf que es el fichero que permite definir los canales SIP, tanto para
llamadas entrantes como salientes, y el fichero extensions.conf que es el que
define el comportamiento que va a tener una llamada en nuestra centralita (qu
reglas rigen su enrutamiento o qu aplicaciones van a ejecutar). Si en vez de utilizar
el protocolo SIP se prefiere trabajar con IAX2, ser necesario configurar el fichero
[general]
language=es
disallow=all
allow=alaw
allow=ulaw
videosupport=no
...
Ya que los clientes SIP deben ser declarados previamente para poder lanzar o recibir
llamadas, lo siguiente que se puede hacer es definir uno o varios contextos para los
posibles clientes del servicio que proporciona Asterisk. Algunos de los parmetros
de configuracin ms importantes en este caso sern:
26
type - Tipo de cliente SIP. Existen 3 tipos: peer, user y friend en funcin
de cmo se manejan las llamadas entrantes/salientes y cmo se identifica el
usuario.
parmetros ms...
[general]
language=es
disallow=all
allow=alaw
allow=ulaw
videosupport=no
...
[102]
type=friend
secret=1ezkR
host=dynamic
27
context=ext_internas
callerid="Jose Luis" <102>
dtmfmode=rfc2833
qualify=yes
mailbox=1002@default
...
[103]
type=friend
secret=e7uKz
host=dynamic
context=ext_internas
callerid="Beatriz" <103>
dtmfmode=rfc2833
qualify=yes
mailbox=1003@default
...
Si fuera necesario configurar cientos de extensiones, quizs sea ms cmodo de
cara a la programacin definir una mscara y aplicarla a cada una de las
extensiones que se quiera crear. En este caso, a la mscara se le ha llamado
28
[general]
language=es
disallow=all
allow=alaw
allow=ulaw
videosupport=no
...
[extensiones-internas](!)
type=friend
host=dynamic
context=ext_internas
dtmfmode=rfc2833
qualify=yes
...
[102](extensiones-internas)
secret=1ezkR
callerid="Jose Luis" <102>
mailbox=1002@default
[103](extensiones-internas)
secret=e7uKz
29
callerid="Beatriz" <103>
mailbox=1003@default
Para profundizar en este tema lo mejor es coger el fichero de configuracin por
defecto, o de ejemplo, que trae Asterisk y leerse uno a uno cada uno de los
parmetros que incluye. Con algo de experiencia, y muchas ganas de aprender, se
depurar cualquier fallo en las comunicaciones que se produzca por una mala
configuracin de los clientes SIP.
un
conjunto
de
valores:
(nmero
de
30
[llamadas-entrantes]
exten
=>
958993803,1,NoOp(Tenemos
una
llamada
entrante...)
exten => 958993803,2,Answer()
exten => 958993803,3,Playback(bienvenida)
exten => 958993803,4,Dial(SIP/958)
exten => 958993803,5,Hangup()
[llamadas-salientes]
exten => 20001,1,Dial(SIP/102&SIP/103)
exten => 20001,2,Hangup()
31
[casa]
exten
30001,1,NoOp(IVR
de
casa)
NoOp
es
una
; Para responder la
llamada
same => n,Wait(1)
; Esperar un segundo
; Terminar la llamada
32
[empresa]
exten => _400X,1,NoOp(Llamando a la extensin ${EXTEN})
same => n,Dial(SIP/${EXTEN})
same => n,Hangup()
Con estas 3 lneas la centralita interpreta que si se llama a cualquiera de las
extensiones definidas por el patrn de marcado 400X (en el rango: 4000, 4001,
4002... 4009), estaremos llamando al cliente SIP con nmero de cliente igual al
valor almacenado en la variable reservada EXTEN y que coincide con el nmero que
se acaba de marcar. Como se puede observar, el juego que da un patrn de marcado
es muy amplio.
33
oficina (que vamos a suponer de 08:00 a 15:00), entonces saltar el buzn de voz de
soporte. Si el cliente no selecciona ninguna de las dos opciones o la opcin
seleccionada no es vlida, saltar un mensaje de despedida. Toda esta
configuracin se incluye en el fichero extensions.conf.
[globals]
COMERCIAL=SIP/200&SIP/201&SIP/202 ; Variable con las extensiones del dpto
comercial
SOPORTE=SIP/300&SIP/301
; Variable con las extensiones del dpto de
soporte
[llamadas-entrantes]
exten => s,1,NoOp(Llamada entrante de ${CALLERID(num))
same => n,Answer()
same => n,Playback(bienvenida)
same => n,Background(menu-ivr)
same => n,WaitExten(4)
exten => 1,1,NoOp(El usuario ha elegido la opcin ${EXTEN} - Departamento
Comercial)
same => n,Dial(${COMERCIAL})
same => n,Hangup()
exten => 2,1,NoOp(El usuario ha elegido la opcin ${EXTEN} - Departamento
Soporte)
same => n,GotoIfTime(08:00-15:00,mon-fri,*,*?continuar,contestador)
same => n(continuar),NoOp(Llamando al Departamento de Soporte)
same => n,Dial(${SOPORTE})
same => n,Hangup()
same
same
same
same
=>
=>
=>
=>
34
Buzones de Voz
Quizs uno de los servicios que ms ha costado conseguir para la telefona
tradicional, es uno de los servicios ms sencillos de Asterisk. Para crear un buen
sistema de buzn de voz tan solo hace falta responder a tres cuestiones: Cuntos
mensajes esperamos recibir en nuestro buzn de voz? Cuntos buzones de voz
hacen falta en una empresa? y Queremos integrar el servicio de buzn de voz con
otros servicios como es el caso del correo electrnico?
Con Asterisk se pueden responder a estas tres preguntas y sin ms dificultad que
aadir pocas lneas ms en el dialplan y configurar tambin el fichero
Fichero sip.conf
[general]
language=es
disallow=all
allow=alaw
allow=ulaw
35
videosupport=no
...
[103]
type=friend
secret=e7uKz
host=dynamic
context=trabajadores
callerid="Beatriz" <103>
dtmfmode=rfc2833
qualify=yes
mailbox=1003@default
...
[104]
type=friend
secret=ieLp3
host=dynamic
context=trabajadores
callerid="ngeles" <104>
dtmfmode=rfc2833
qualify=yes
mailbox=1004@default
...
Fichero extensions.conf
[trabajadores]
include => internas
include => funciones ; Incluimos varios contextos como si fueran parte del
contexto 'trabajadores'
[internas]
...
exten => _000XXXX,1,NoOp(Dejar mensaje en buzn de ${EXTEN:3}) ; Con ${EXTEN:3}
se recortan los 3 primeros dgitos de la variable EXTEN
same => n,Answer()
same => n,VoiceMail(${EXTEN:2}@default) ; Para dejar un mensaje en el buzn XXXX
del grupo 'default' del voicemail.conf
same => n,Hangup()
...
[funciones]
...
exten => _000*,1,NoOp(Accediendo al buzn de ${CALLERID(num)})
same => n,Answer()
same => n,VoiceMailMain(${CALLERID(num)}@default) ; Para acceder al buzn de voz
de la propia extensin que est llamando
same => n,Hangup()
...
36
Fichero voicemail.conf
[general] format=wav49|gsm|wav ; Formato del mensaje de audio ... [zonemessages]
european=Europe/Copenhagen|'vm-received' a d b 'digits/at' HM [default] 1003 =>
pass_bea,B.
Sanchez,beatriz@miempresa.com,,attach=yes|saycid=yes|envelope=yes|delete=yes|t
z=european
1004
=>
pass_ngela,A.
Santos,angeles@miempresa.com,,attach=yes|saycid=yes|envelope=yes|delete=yes|t
z=european
Como se puede comprobar, el fichero voicemail.conf contiene todos los
parmetros necesarios para configurar cada buzn de voz. Los mensajes
convertidos a ficheros de audio se almacenan por defecto en el directorio
AGI
Permite ejecutar aplicaciones externas (principalmente scripts). Tiene una
variable asociada, AGISTATUS que permite comprobar si la ejecucin del
37
Answer
Responder a una llamada entrante (para ser ms exactos, responde a un
canal en estado 'ringing').
Sintaxis: Answer([delay,[nocdr]])
Background
Reproduce una locucin pasada como parmetro a la vez que espera a que el
lado al que se le est reproduciendo la locucin marque una extensin a la
que saltar dentro del Dialplan. En funcin del nmero de DTMFs que se quiera
especificar para el men, puede ser tambin necesario el uso de la aplicacin
WaitExten().
Sintaxis:
BackGround(filename1&[filename2[&...]],[options,[lang
override,[context]]])
Busy
Indica al lado llamante (calling part) que el lado llamado (called part) est
ocupado.
Sintaxis: Busy([timeout])
ConfBridge
Permite que un usuario entre en una sala de conferencias especfica. Si lo
desea, el usuario puede salirse de la sala colgando la llamada o pulsando un
DTMF si est configurado as. Esta aplicacin es la evolucin de la aplicacin
38
Sintaxis:
ConfBridge(conference,[bridge_profile,[user_profile,[
menu]]])
Congestion
Indica al lado llamante (calling part) que el lado llamado (called part) est
congestionado.
Sintaxis: Congestion([timeout])
Dial
Es la aplicacin as importante de Asterisk. Permite lanzar una llamada a uno
o ms destinos especificados como argumentos de la aplicacin. Tiene
varias variables asociadas, DIALEDTIME, ANSWEREDTIME y DIALSTATUS
adems de ms de 20 opciones disponibles para utilizar como argumento
options.
Sintaxis:
Dial(Technology/Resource&[Technology2/Resource2[&...]
],[timeout,[options,[URL]]])
GoSub
Salta al punto del dialplan objetivo y contina la ejecucin del dialplan. Una
vez encuentra una orden de Return, vuelve al punto del programa desde el
cual se inici el salto. Existen alternativas a esta aplicacin con saltos
condicionales.
Sintaxis:
Gosub([context,[exten,]]priority[(arg1,[...][argN]]))
Goto
39
Hangup
Permite colgar un canal que est siendo utilizado.
Sintaxis: Hangup([causecode])
NoOp
"Do Nothing". No realiza ninguna operacin pero si se le pasa como
argumento un string de texto, ste aparecer en el CLI de Asterisk cada vez
que se ejecute esta lnea. Principalmente se utiliza para depurar el dialplan.
Sintaxis: NoOp([text])
Queue
Mete la llamada entrante en una queue de llamadas a la espera de ser
atendidas por un agente libre. Tiene una variable asociada, QUEUESTATUS
que controla el estado de la queue a la que se quiere enviar la llamada.
Sintaxis:
Queue(queuename,[options,[URL,[announceoverride,[time
out,[AGI,[macro,[gosub,[rule,[position]]]]]]]]])
Read
Lee un valor por la entrada estndar y lo almacena en una variable.
Sintaxis:
Read(variable,filename&[filename2[&...]],[maxdigits,[
options,[attempts,[timeout]]]]])
Record
40
Record(filename.format,[silence,[maxduration,[options
]]])
Set
Permite asignarle un valor a una variable.
Sintaxis: Set(name=value)
Verbose
Enva el mensaje pasado como parmetro a la salida de Verbose (si est
configurado el fichero logger.conf, los mensajes aparecern en los logs
del sistema).
Sintaxis: Verbose([level,]message)
VoiceMail
Permite dejar un mensaje en el buzn de voz (mailbox) indicado como
parmetro. Tiene una variable asociada, VMSTATUS que permite comprobar
si la llamada a la aplicacin VoiceMail ha sido un xito, ha fallado o
incluso si se ha abandonado antes de que la ejecucin de la aplicacin haya
almacenado algn dato.
Sintaxis: VoiceMail(mailbox1&[mailbox2[&...]],[options])
VoiceMailMain
Permite comprobar el estado del buzn de voz indicado como argumento. Da
acceso al men del buzn de voz para escuchar, cambiar de directorio o
borrar los mensajes de voz almacenados.
Sintaxis: VoiceMailMain([mailbox@[context]],[options])
Wait
41
WaitExten
Espera durante un tiempo a que el usuario introduzca un nmero de extensin
al que saltar.
Sintaxis: WaitExten([seconds,[options]])
1. Aadirunaentradaomodificarunaexistente:
42
2. Borrarunaentrada:
exten
=>
*544,1,NoOp(${DB_DELETE(contestador/activo)})
3. Copiarelvalordeunaentradaaunavariable:
exten
=>
*545,1,Set(mivariable=${DB(contestador/activo)})
4. Saltoenfuncindelvalordeunaentrada:
exten
=>
*546,1,GotoIf($["${DB(contestador/activo)}"="1"]?cont
estador_activo,contestador_inactivo
Vamos a ver cmo se puede hacer un desvo bsico de llamadas con Asterisk:
[extensiones]
43
un
desvo
same
n,Set(DB(desvios/${CALLERID(num)})=${EXTEN:1})
de
=>
44
exten
=>
_*000,1,NoOp(Se
${CALLERID(num)})
elimina
el
desvo
de
same
n,Set(DB(desvios/${CALLERID(num)})=${CALLERID(num)})
=>
Para trabajar con una base de datos ODBC necesitamos instalar los paquetes
45
base de datos vamos a apuntar? Vamos a suponer que tenemos instalado MySQL
Server (si no lo tenemos, tan slo tendremos que hacer apt-get install
[MySQL]
Description = MySQL ODBC Driver
Driver = /usr/lib/odbc/libmyodbc.so
FileUsage = 1
Lo segundo, editar el fichero /etc/odbc.ini con el que especificamos a qu
base de datos queremos apuntar:
[MySQL-Asterisk]
Description = Conector ODBC para MySQL
Driver = MySQL
46
Socket = /var/run/mysqld/mysqld.sock
Server = direccion_bbdd
User = usuario_bbdd
Password = password_bbdd
Database = nombre_bbdd
Option = 3
En el escenario ms comn, la base de datos estar en la misma mquina en la que
est ejecutndose el Asterisk. Si este es el caso, el campo Server apuntar a
localhost.
Para hacer que Asterisk pueda acceder a la base de datos objetivo, se edita el
47
password = password_bbdd
pooling => no
limit => 1
pre-connect => yes
Aplicando la nueva configuracin
Si toda la configuracin es correcta, tan slo tendremos que hacer que Asterisk
cargue la nueva configuracin para trabajar con la base de datos en MySQL. Para
ello, tan slo hay que ejecutar la siguiente lnea en el CLI de Asterisk (para los que no
lo conozcan, en el siguiente captulo le hemos dedicado un apartado entero).
CLI >
Aunque ya estamos preparados para leer y escribir datos en la base de datos que
hemos configurado anteriormente, primero vamos a crear una funcin personalizada
en el fichero/etc/asterisk/func_odbc.conf con el siguiente contenido:
[CALLERID]
dsn=asterisk
48
readsql=SELECT
nombre
FROM
numero='${SQL_ESC(${ARG1})}'
agenda_telefonica
WHERE
En realidad lo que estamos haciendo es editar una funcin que consulte en la tabla
agenda_telefonica el nombre asociado al nmero que le pasemos como argumento
a la funcin.
Para que Asterisk registre esta funcin, o cualquier otra que hayamos editado,
tendremos que volver al CLI de Asterisk y cargar el mdulo func_odbc.so:
CLI >
[llamadas-entrantes]
exten => _X.,1,NoOp(Llamada entrante de ${CALLERID(num)})
same
=>
n,Set(CALLERID(name)=${ODBC_CALLERID(${CALLERID(num)})})
Seccin 3
1. El CLI de Asterisk
Una de las tareas ms importantes de un administrador de Asterisk es la supervisin
y correccin de fallos que pueden surgir en el sistema, tanto a nivel de servicio como
a nivel de entender por qu se ha producido un fallo en una llamada o si un cliente se
est registrando en el servicio o no. Para facilitar esta gestin contamos con el CLI
49
(Asterisk Command Line Interface), o traducido al espaol como "Interfaz por Lnea
de Comandos de Asterisk". Gracias a esta interfaz podemos realizar una amplia
variedad de acciones de administracin en el servicio de Asterisk entre las que
podemos destacar:
Opcin -d: (Debug) - Permite indicar el nivel de debug que queremos para los
mensajes que nos aporta el CLI. Si queremos un alto nivel de debug
tendremos que pasarle al comando asterisk tantas veces "d" como nivel
queramos. Por ejemplo: "dddddd".
Opcin -T: (Time) - Para que se muestren marcas de tiempo en cada mensaje
de la consola.
Opcin -v: (Verbose) - Permite indicar el nivel de verbose que queremos para
los mensajes que nos aporta el CLI. Si queremos un alto nivel de verbose,
tendremos que pasarle al comando asterisk tantas veces "v" como nivel
queramos. Por ejemplo: "vvvvvv".
50
$ asterisk -rvvv
Si queremos hacer una llamada remota al sistema que haga que ste se reinicie
cuando no est procesando ninguna llamada, ejecutamos lo siguiente:
$ asterisk -h
-V Display version number and exit
-C Use an alternate configuration file
-G Run as a group other than the caller
-U Run as a user other than the caller
-c Provide console CLI
-d Enable extra debugging
-f Do not fork
-F Always fork
-g Dump core in case of a crash
-h This help screen
51
Same
as
-r,
except
attempt
to
reconnect
if
disconnected
-s Connect to Asterisk via socket (only valid with -r)
-t Record soundfiles in /var/tmp and move them where they
belong after they are done
-T Display the time in [Mmm dd hh:mm:ss] format for each
line
of output to the CLI
-v Increase verbosity (multiple v's = more verbose)
-x Execute command (implies -r)
52
-X
Execute
includes
by
default
(allows
#exec
in
asterisk.conf)
-W Adjust terminal colors to compensate for a light
background
Volvamos al punto en el que abrimos una nueva consola, lo primero que observamos
es que nos aparece un nuevo prompt indicndonos que estamos dentro del CLI:
hostname*CLI>
Si queremos salir de la consola, tan slo tendremos que escribir y ejecutar los
comandos "quit" o "exit".
hostname*CLI> exit
Dentro de la consola existen muchos comandos que podemos ejecutar, tan slo
tendremos que ejecutar "help" para obtener la lista completa:
hostname*CLI> help
Algunos de los comandos que ms se utilizan:
console dial - Nos permite hacer una llamada desde consola a una extensin
que se encuentra en un contexto determinado. Muy til en tareas de
depuracin de fallos y control del plan de marcado.
dialplan reload - Nos permite hacer una recarga de configuracin del fichero
dialplan.conf, indispensable cuando realizamos algn cambio sobre dicho
fichero y queremos que el cambio se haga efectivo sin reiniciar el servicio
completo.
53
sip reload - Nos permite hacer una recarga de configuracin del fichero
sip.conf. Cuando perdemos la comunicacin con un troncal al que estamos
registrados, obliga a lanzar un nuevo registro contra dicho troncal.
sip show peers - Nos permite ver la lista de clientes registrados as como
informacin adicional como puede ser el ping que tenemos con esos clientes
o la IP desde la cual nos conectamos a ellos.
54
Trunking
En pocas palabras podramos decir que el trunking es un mecanismo que nos
permite comunicar nuestros clientes (pertenecientes a una red 'A') con otros clientes
dentro de una red diferente, a la que llamaremos 'B', como si estuvieran dentro de
nuestra misma red.
Cuando trabajamos con varias sedes (por ejemplo, una en Madrid y otra en Berln),
nos puede interesar tener dos servicios Asterisk (uno en cada sede) y comunicarlos
entre s mediante trunking. Si slo tuviramos un servidor de Asterisk en Madrid, y
alguien de Berln quisiera llamar a un compaero de su mismo edificio, la llamada
tendra que ir a Madrid, ser procesada en el servidor de Madrid y volver a Berln (lo
que supone un tiempo de ida y vuelta relativamente alto y un esquema poco
eficiente). En cambio, si configuramos servidores en ambos puntos, las llamadas de
Berln con destino Berln SE OLVIDAN de lo que ocurra en Madrid con lo que
ganamos velocidad, eficiencia o una mala calidad del servicio.
Tal y como se comentaba recientemente en el grupo de usuarios de Asterisk en
espaol, el esquema del que podemos aprender ms es el que tiene como extremos
un servidor con Asterisk y con una direccin IP pblica fija, y otro configurado con IP
dinmica:
Equipo en Madrid - Tiene una IP Fija
[trunk-berlin]
55
type=friend
context=entrantes-berlin
host=dynamic
secret=password-berlin
fromuser=trunk-berlin
defaultuser=trunk-berlin
;
...
resto
de
parmetros
como
dtmfmode,
qualify,
canreinvite, etc.
[general]
...
register
=>
asterisk-berlin:password-berlin@madrid.es/asterisk-berlin
[trunk-madrid]
type=friend
context=entrantes-madrid
host=madrid.es
fromdomain=madrid.es
insecure=port,invite
;
...
resto
de
parmetros
como
dtmfmode,
qualify,
canreinvite, etc.
56
Si ambos servidores tienen IPs fijas - Entonces hacemos una definicin del
sip-trunk por IP sin necesidad de user/pass. El servidor de Asterisk de cada
sede estar haciendo el registro por hostname/IP.
57