You are on page 1of 83

Qu es Asterisk?

Es software open source


Captulo Bsico #1 Creado por Mark Spencer
Creado como una alternativa a PBX propietarios

Introduccin a Asterisk Convierte una PC ordinaria en un servidor de


comunicaciones

Es un proyecto, no un modelo ni fabricante


Ante el crecimiento de Asterisk, se funda Digium, que es la
Ing. Christian Cabrera R. empresa que patrocina el desarrollo de Asterisk

Permite enlazar diferentes medios de comunicacin,


no solamente voz
Introduccin a Asterisk 2

Uso actual Versiones de Asterisk


Ms de 1 milln de servidores Asterisk en Versiones inferiores a 1.8 se consideran obsoletas
produccin hoy en da Sin soporte oficial. Se recomienda actualizar.
1000+ descargas diarias en cdigo fuente
Asterisk 11 es lo recomendado hoy en da
Mltiples comunidades activas de usuarios Fecha de Actualizaciones de
http://voip-info.org Versin Tipo
lanzamiento seguridad
Fin de vida
http://asteriskmx.com 1.4.X LTS Dic 2006 Abr 2011 Abr 2013

Varias distros listas para usarse 1.6.2.X Estndar Dic 2009 Abr 2011 Abr 2012

Elastix, Trixbox, AsteriskNow, PBX in a Flash 1.8.X LTS Oct 2010 Oct 2014 Oct 2015
10.X Estndar Dic 2011 Dic 2012 Dic 2013
Muchos entornos de uso 11.X LTS Oct 2012 Oct 2016 Oct 2017
Oficinas, callcenters, corporativos, carriers, aplicaciones remotas
12.X Estndar Oct 2013 Oct 2014 Oct 2015
Introduccin a Asterisk 3 Introduccin a Asterisk 4
Diferencias con un PBX
Dos tipos de versiones
convencional
LTS (Long Term Support) No se requiere hardware propietario
Permanencia mnima de 5 aos en el mercado Muchos fabricantes ofrecen productos similares
Orientado a estabilidad Hardware genrico intercambiable
Mejor opcin para empresas Diferentes soluciones de diferentes fabricantes
Libre competencia = mejores precios y productos
Estndares
Dos aos de vida Sigue una arquitectura universal de PC
Orientado a impulsar nuevas funcionalidades Procesador, memoria, motherboard y almacenamiento
Apta para entusiastas y desarrolladores de nuevas Es posible instalar Asterisk en una PC (ej. Raspberry Pi)
tecnologas
Free software: tanto libre como gratis
Sin pago de licencias
Introduccin a Asterisk 5 Introduccin a Asterisk 6

Diferencias (2) Escenarios de uso


Totalmente programable y configurable Hay muchas maneras en las que podemos aprovechar
No es necesario solicitar servicios especiales ni las caractersticas de Asterisk, entre ellas:
comprar mdulos extras PBX tradicional
Todo se hace a travs de software PBX IP
PBX hbrido
Ofrece servicios adicionales de datos Pasarela (Gateway) VoIP
Puede integrarse con cualquier sistema que pueda Aumento de funcionalidades
correr en una PC con Linux Call center
Bases de datos, consultas web, lectura de archivos, etc. Plataforma para carriers

Puede interactuar con conmutadores existentes


Interconexin a travs de puertos anlogos/digitales
Introduccin a Asterisk 7 Introduccin a Asterisk 8
PBX tradicional PBX VoIP

Introduccin a Asterisk 9 Introduccin a Asterisk 10

PBX hbrido Pasarela VoIP

Introduccin a Asterisk 11 Introduccin a Asterisk 12


Aumento de Qu es lo que SI es
funcionalidades Asterisk?
Es un SIP registrar
Entidad SIP que mantiene el registro de diferentes
usuarios y de su ubicacin
Es un back-to-back user agent (B2BUA)
Se comporta como un servidor y un telfono de
manera simultnea
Controla una llamada estableciendo comunicacin
individual con cada parte (y luego puentea la
llamada)
Es un cliente multi-sesin, multi-usuario
Convierte la comunicacin entre canales
Introduccin a Asterisk 13 Introduccin a Asterisk 14

Qu es lo que NO es
B2BUA vs Proxy
Asterisk?
No es un SIP proxy
Proxy Por definicin, un proxy nunca es parte del fin de la
llamada (ej. Voicemail, IVRs, etc)
Llamada Un proxy solo hace reenvo de paquetes, manejando las
llamadas en nombre de otros usuarios (Asterisk las procesa
completamente en sealizacin y RTP)

No es un sistema plug-and-play
Podemos crear complejas aplicaciones con l, pero es
necesario configurarlo primero
Llamada 1 Llamada 2
Y es muy importante practicar para lograrlo!

Introduccin a Asterisk 15 Introduccin a Asterisk 16


Requisitos de hardware Requisitos de hardware (2)
Lo ms importante es la estabilidad Si nuestro sistema es 100% IP, no necesitamos tarjetas
Siempre usar hardware de marca (HP, IBM, Dell). El hardware adicional se usa solamente cuando queremos
Evitar equipos armados con componentes de dudosa procedencia. conectarnos directamente a la PSTN.
Procurar siempre ofrecer soluciones de redundancia en los
componentes de fallas ms comunes: El CPU depende de las tareas a realizar
Discos duros Adicional a las llamadas, cada nueva accin (grabar, consultar BD,
Fuentes de poder reproducir audios, etc) reducen la capacidad del sistema

El procesamiento necesario se mide segn los Cualquier PC es buena para pruebas


requerimientos Asterisk 1.2 en Celeron 333 Mhz con 32 MB RAM
No existe una regla fija de cuanto se necesita. Es posible usar PCs (ej. Raspberry Pi)
Lo ms importante es la cantidad de llamadas concurrentes.
Soluciones basadas en ARM son aptas para pequeos entornos. Espacio en disco dependiente de grabaciones
Cdec * horas de llamada * llamadas simultneas * dias a
Pueden usarse entornos virtualizados permanecer
Limitados a hardware PSTN externo conectado por IP
Introduccin a Asterisk 17 Introduccin a Asterisk 18

Requisitos de software DAHDI


Preferentemente, Linux nativo Para la interaccin con tarjetas (Digium, Sangoma,
FreeBSD y Mac OS tienen soporte parcial Openvox, etc), Asterisk requiere de las libreras de DAHDI
Digium Asterisk Hardware Device Interface
Asterisk requiere de paquetera adicional: DAHDI son un conjunto de controladores que le permiten
Recuerda instalar las versiones -devel a Asterisk entenderse con las tarjetas
GCC Esto solo aplica para dispositivos USB y PCI/PCI-e
Ncurses
En CentOS instalamos estas dependencias con:
Para conectar hardware externo se hace a travs de protocolos
Termcap yum install -y gcc gcc-c++ ncurses- como SIP o IAX
Newt devel libtermcap-devel openssl-
OpenSSL devel newt-devel libuuid-devel En si, DAHDI no es un requisito obligado para Asterisk
LibUUID Pero se recomienda instalar siempre para tener disponible el
mdulo dahdi_dummy que se usa al crear conferencias con
En Debian instalamos todas con Meetme y troncales IAX.
apt-get build-dep asterisk
Introduccin a Asterisk 19 Introduccin a Asterisk 20
Libreras extras para
DAHDI (2)
Asterisk
DAHDI tiene su propia lista de dependencias Cualquier librera que agregue funcionalidades a
Principalmente, necesitamos los encabezados de la misma Asterisk (ej. openr2 o libsrtp) debe ser instalada antes
versin del kernel de Linux que estamos usando
Los headers podemos conseguirlos fcilmente: de compilar Asterisk.
En CentOS: yum install kernel-devel
En Debian: apt-get install linux-headers-<versin> En caso de que Asterisk ya est instalado, tendremos
que repetir el proceso de instalacin para que use las
Si queremos usar enlaces digitales (E1s), necesitamos nuevas libreras.
ms libreras:
libopenr2 si usaremos enlaces con R2 modificado Siempre es posible agregar funcionalidades sobre la
libpri si usaremos enlaces con ISDN PRI marcha.
Durante el curso tendremos que recompilar Asterisk en
En nuestra prctica de DAHDI aprenderemos como varias ocasiones para aprender a agregar libreras.
compilar estas libreras para su uso

Introduccin a Asterisk 21 Introduccin a Asterisk 22

Instalando Asterisk Compilando Asterisk


Tenemos 2 alternativas: La ltima versin de Asterisk est disponible desde
Instalar desde RPMs o DEBs (fcil) http://asterisk.org
Compilar desde cdigo fuente (difcil) El histrico de versiones, parches y otros componentes, se
consigue desde http://downloads.digium.com
Los RPMs nos permiten instalar paquetes de manera fcil
y rpida, as como cumplir sus dependencias El proceso para compilar es muy parecido al de otros
Sin embargo, son paquetes pre-hechos, lo que quiere decir que paquetes de software:
no es tan fcil personalizarlos
Descargar el paquete (normalmente, con wget, o tambin
podemos copiarlo desde nuestro equipo por SFTP).
Compilar el cdigo fuente nos da mximo control
Desempaquetar el cdigo fuente (usando tar).
Toma ms tiempo, es ms trabajo, ms cosas pueden salir mal,
pero creamos un sistema a la medida Entrar al directorio ya desempaquetado.
Compilar (normalmente con make)
Obviamente, nos iremos por el camino difcil ;-) Instalar

Introduccin a Asterisk 23 Introduccin a Asterisk 24


Compilando Asterisk Algunas notas precautorias
Dentro del proceso de compilacin hay varios En caso de que ./configure nos arroje errores, quiere
comandos: decir que nos faltan dependencias
./configure : Revisar dependencias En caso de que make nos arroje errores, probablemente
tengamos dependencias incompatibles
make menuselect : Escoger las opciones a compilar
make : Compilar cdigo fuente Nunca debemos ejecutar make samples en un
make install : Copiar a las carpetas necesarias sistema que ya fue configurado
make config : Crear scripts de autoarranque De lo contrario sobreescribiremos nuestra configuracin
make samples : Crear ejemplos de configuracin con los archivos de ejemplo

make y make install pueden ejecutarse cuantas veces


Al terminar estos comandos habremos dejado necesitemos para compilar nuevas funcionalidades
Asterisk instalado Estos pasos sern repetidos constantemente durante el
El siguiente paso sera arrancarlo y configurarlo. curso.
Introduccin a Asterisk 25 Introduccin a Asterisk 26

Iniciando Asterisk Iniciando Asterisk (2)


Hay 2 maneras en las que podemos ejecutar Asterisk: Para arrancar Asterisk en primer plano:
Como un comando en primer plano
Como un servicio asterisk vvvc
La v significa verbosidad (ms detalle)
Al ejecutar Asterisk como un comando, la consola se
queda pegada a la sesin del usuario que estemos Para arrancarlo como servicio
ocupando (normalmente root)
Si cerramos nuestra sesin de usuario, Asterisk se cerrar /etc/init.d/asterisk start
tambin.
Por esta razn, este mtodo se ocupa solamente cuando Una vez que Asterisk ya est ejecutndose:
queremos hacer pruebas y debug de nuestro sistema.
Para acceder a la consola lo hacemos con:
Al ejecutarlo como servicio, permanece activo aunque asterisk r
nuestra sesin se cierre
Asterisk sigue corriendo en segundo plano. Si nos da un error de conexin, arranqumoslo primero
como servicio y reintentemos

Introduccin a Asterisk 27 Introduccin a Asterisk 28


Deteniendo Asterisk Reiniciando Asterisk
Para detener el servicio completo (desde el CLI): Solo hay que cambiar stop/start por restart:
/etc/init.d/asterisk stop /etc/init.d/asterisk restart
*CLI> core restart now
Desde adentro del CLI de Asterisk
*CLI> core stop now
En varias ocasiones se nos pedir reiniciar el servicio
Matando el proceso (desde el CLI) de Asterisk
Usar como ltimo recurso: Es conveniente familiarizarse con los comandos.
ps eF | grep asterisk
kill -9 <PID de Asterisk>

Introduccin a Asterisk 29 Introduccin a Asterisk 30

Configurando Asterisk
La manera ms simple de configurar Asterisk es a
travs de archivos de texto
Prctica 1.1 En modalidades ms avanzadas podemos usar el CLI, el AMI
o bases de datos
Veremos todo eso ms adelante

Los archivos se ubican en /etc/asterisk


Tienen extensin *.conf
Instalacin de Asterisk Sintaxis muy similar a archivos *.ini

Introduccin a Asterisk 32
Archivos de configuracin asterisk.conf
Hay muchos, pero estos son los ms importantes: Archivo maestro de configuracin
Le indica a Asterisk donde buscar o crear otros archivos
Archivo Funcin

Especifica las rutas default y ajusta opciones generales Configuraciones que afectan a todo el sistema:
asterisk.conf
de todo el conmutador Lmite de llamadas en general
extensions.conf Controla las reglas del plan de llamadas Estructura de archivos de sonido
Nombre de este equipo (en caso de tener ms de uno)
sip.conf Todo lo relacionado al protocolo SIP

iax.conf Igual que el anterior, pero para IAX2 Raramente necesita ser editado
Se recomienda mucho colocar verbose=3 para subir la
chan_dahdi.conf Configura las tarjetas DAHDI verbosidad del sistema por default

Introduccin a Asterisk 33 Introduccin a Asterisk 34

sip.conf iax.conf
Configuracin del canal SIP Configura lo relacionado al canal IAX2
El archivo de muestra viene lleno de ejemplos Igual que con SIP, configura valores generales e
individuales para usuarios
2 tipos de configuraciones
Campos que afectan a todos los usuarios Se definen conexiones con dispositivos IAX as como
Campos que afectan de manera individual a cada usuario con troncales IAX

Aqu se configuran tanto telfonos SIP como Se ver ms a detalle en el mdulo intermedio
proveedores (troncales) SIP
No confundir usuarios SIP con extensiones
Las extensiones se declaran en el extensions.conf

Introduccin a Asterisk 35 Introduccin a Asterisk 36


chan_dahdi.conf extensions.conf
Toda la tarjetera se configura aqu: Aqu se define el plan de llamadas
Enlaces digitales (E1s) Los permisos a los que cada usuario tiene derecho para
marcar (clases de servicio)
Troncales anlogas (FXO)
Se construye por contextos, extensiones, prioridades y
Extensiones anlogas (FXS) aplicaciones
Requiere de la configuracin equivalente dentro del Los archivos de SIP e IAX controlan quien puede
/etc/dahdi/system.conf acceder a l
Dedicaremos un captulo a explicar esto El archivo de extensiones controla que es lo que ese
alguien puede hacer
Se ver ms a detalle adelante
Similar a un archivo de programacin
La mayora del curso se centra en este archivo
Introduccin a Asterisk 37 Introduccin a Asterisk 38

En resumen
Asterisk fue escrito por Mark Spencer
Una alternativa open source a conmutadores cerrados.
Captulo Bsico #2
Corre en cualquier distro de Linux
Siempre y cuando, cumplamos sus dependencias Configuracin de Asterisk
No es un proxy, es un B2BUA
Acta como un telfono y un servidor al mismo tiempo
Ing. Christian Cabrera R.
Necesitamos cumplir dependencias para instalar Asterisk
Muy recomendado instalar DAHDI
Los archivos de configuracin se guardan en /etc/asterisk

Introduccin a Asterisk 39
Introduccin Sintaxis de archivos *.conf
La configuracin inicial de Asterisk es a travs de Son similares a un archivo *.ini
archivos de texto Se contruye a partir de un encabezado y varios campos
Conforme avancemos en el curso veremos mtodos ms
complejos El contexto determina el nombre de la seccin en la
que estamos trabajando
Todos los archivos pueden ser modificados Los campos especifican los detalles de configuracin
directamente desde la consola
nano, pico, emacs, vi, vim, cualquier editor nos sirve Estructura base:
[contexto] ; <-- Este es el contexto
campo1=valor1
campo2=valor2 ; <-- Estos son los campos

Configuracin de Asterisk 41 Configuracin de Asterisk 42

Comentarios Ejemplo de sintaxis


Los archivos de configuracin en Linux tienen Archivo res_mysql.conf
comenarios que se especifican con el smbolo #
Sin embargo, los de Asterisk reciben comentarios con el ;
(punto y coma)
Todo lo que est a la derecha del ; ser ignorado

Tambin podemos declarar comentarios multilnea:


Usamos los tags de ;-- y --;

Ejemplo
;--- Todo esto
es un
comentario ---;

Configuracin de Asterisk 43 Configuracin de Asterisk 44


Inclusin de archivos Inclusin de archivos (2)
Si un archivo es muy grande, puede resultar difcil de Tambin es posible incluir configuracin a partir de
administrar la ejecucin de scripts usando #exec.
Podemos separar el contenido en archivos ms pequeos Todo lo que el comando imprimira a pantalla, es
Esta idea es muy usada por interfases como FreePBX interpretado como cdigo de configuracin por Asterisk

Sintaxis: Ejemplo:
#include mi_otro_archivo.conf #exec /bin/database_config.sh
[general]
Ejemplo: #include sip_general_custom.conf
Esto puede usarse para generar la configuracin
sip.conf #include sip_general_additional.conf desde un sistema externo (ej. base de datos)
Considerar que esto puede afectar el rendimiento
; Aqu comienza la configuracin de usuarios
#include sip_custom.conf Sin embargo, nos da mucha flexibilidad
#include sip_additional.conf
Configuracin de Asterisk 45 Configuracin de Asterisk 46

Usuarios SIP/IAX <>


Contextos
extensiones
Son secciones que identifican un grupo de campos Usuario SIP/IAX no es igual a extensin
Se les identifica por escribirse entre [ ] Confusin creada por distribuciones como Elastix/Trixbox.
Segn el archivo en que se ocupe, el [contexto] puede Un usuario se refiere al dispositivo que se conectar con
significar algo diferente Asterisk (archivo sip.conf/iax.conf).
sip.conf: Un usuario SIP Las extensiones representan lo que se puede marcar
extensions.conf: Un grupo de extensiones (archivo extensions.conf).
voicemail.conf: Un conjunto de buzones de voz
El campo context define los derechos de marcacin
Un [contexto] permanece abierto hasta que se de un usuario SIP
encuentre con otro [contexto]
Al abrir un nuevo contexto hay que cuidar no romper los ya
existentes

Configuracin de Asterisk 47 Configuracin de Asterisk 48


Dejando en claro la
sip.conf
diferencia
El telfono requiere del sip.conf para autenticarse Aqu se define todo lo relacionado con SIP
Configuracin de usuarios y troncales
El usuario requiere de las reglas del extensions.conf
para poder marcar Tiene 2 secciones: [general] y rea de usuarios
[general] contiene valores que afectan a todos los
usuarios, as como al canal SIP mismo. Es la configuracin
default.
El rea de usuarios define la configuracin especfica de
cada usuario.

En caso de que el mismo campo est configurado en


ambas secciones, la individual gana
Fuente: Asterisk The Definitive Guide
Cualquier dato que no exista, se tomar su valor default.
Empezaremos por la configuracin del sip.conf
Configuracin de Asterisk 49 Configuracin de Asterisk 50

sip.conf (2) Campos bsicos


Hay muchos campos diferentes que podemos configurar Campo
Valores
Funcin
posibles
para cada usuario SIP
Controla las llamadas que hace/recibe, as como
Hay ms de 30, y la lista crece en cada versin nueva de Asterisk. interpretar la autenticacin del dispositivo
user,
user: Se autentica por username. Solo puede
type peer
Para dar de alta un usuario SIP existen 3 campos o friend
hacer llamadas hacia Asterisk
peer: Se autentica por direccin IP y puerto.
obligatorios: friend: Combinacin de ambas
type Especifica si el equipo (el telfono) tiene una IP
host <direccin IP> fija o si puede tomar cualquiera (dinmica).
host o dynamic Tambin indica si el telfono tiene que
context
registrarse hacia Asterisk o no.
El nombre del usuario es lo que aparece como el [encabezado]
<nombre del Determina el contexto (el conjunto de reglas de
context contexto> marcacin) al que podr acceder el usuario.
Cualquier campo no especificado se usar su valor
default secret <contrasea> Especifica la contrasea para el usuario

Configuracin de Asterisk 51 Configuracin de Asterisk 52


Algunos campos
Ejemplos de usuarios SIP
adicionales
Algunos campos adicionales por usuario: Bsico Avanzado Seguro
Campo Valores posibles Funcin
allow / Habilita o deshabilita el uso de ciertos [usuario1] [usuario2] [usuario2]
<cdec> context=agentes context=supervisor context=supervisor
disallow cdecs
type=friend type=peer type=friend
Permite cambiar el lenguaje default de este host=dynamic host=192.168.1.34 host=dynamic
language <cdigo de idioma>
usuario secret=abcde12345 secret=JuK!23+c9
auto, inband, Determina como se enviarn los cdigos dtmfmode=auto deny=0.0.0.0/0
dtmfmode rfc2833 DTMF disallow=all permit=192.168.1.0/24
<buzn>@ Hace que el telfono consulte el buzn de
allow=g729
mailbox <contexto> voz por nuevos mensajes
language=es
mailbox=200@default
Limita el registro a dispositivos cuya IP
permit <Direccin IP>
coincida con la indicada aqu. Esto permite que un El usuario tiene ms Esto limita a una
/deny /<Mscara>
El orden de deny/permit es importante. telfono se registre argumentos contrasea ms
Para conocer todos los campos, consultar los comentarios del archivo hacia Asterisk sin configurados segura y obliga a que
muestra sip.conf contrasea tenga que tener una
IP local
Configuracin de Asterisk 53 Configuracin de Asterisk 54

Control de nombres Control de nombres (2)


Crear/cambiar Fcil de
Debemos llevar un control de nombre de los Mtodo Ejemplo Seguridad
usuarios recordar
dispositivos 101 Difcil
Baja Muy Fcil
Evitar que se repitan Extensiones 201 fciles de adivinar
Cambiar equipos sin cambiar
extensin
Dgitos simples
320
Dar seguridad
Difcil
Facilitar la administracin Personas/ jortiz Imaginar casos donde el Muy Fcil
Media mismo usuario tiene 2
Ubicaciones sala_juntas dispositivos, o 2 personas se
Nombres sencillos

Diferentes esquemas de nombrado de dispositivos llaman igual en la compaa

Direcciones Sencillo
tiene sus propias ventajas y desventajas MAC
00121419AEFF Alta
Difcil de adivinar
Nuevos dispositivos tienen Difcil
nuevas MAC
Debemos decidir cual se adapta mejor a nuestras Mxima
necesidades Virtualmente
Sencillo
Contraseas tel-aJ13K74 imposible de
Es muy simple crear nuevas Muy difcil
entradas aleatoriamente
adivinar

Configuracin de Asterisk 55 Configuracin de Asterisk 56


Un poco ms de seguridad Plantillas
Adicional al campo secret, Es posible crear plantillas [usuario](!)
siempre que sea posible de usuarios type=friend
debemos utilizar el permit [juan]
context=micontexto
y deny. type=friend Los campos comunes se
host=dynamic
Solo en aquellos usuarios context=agentes aplican una nica vez y de ah
externos dinmicos no ser host=dynamic se reutilizan las veces que
posible aplicarlo deny=0.0.0.0/0 sean necesarias [local](usuario,!)
permit=192.168.5.1/24 nat=no
El orden es importante Ahorro de cdigo al no tener deny=0.0.0.0/0
Lo comn es negar todo y [carrier] que redeclarar valores permit=10.1.1.2/24
luego permitir lo que type=peer
queremos contect=from-trunk Se declaran con (!) [100](usuario)
host=201.194.200.9 secret=55tDyXID
Podemos usar deny=0.0.0.0/0.0.0.0
Es posible aplicar mltiples
nomenclatura estndar permit=201.194.200.9/255.255.255.255
(/255.255.255.0) o plantillas al mismo tiempo [200](local)
abreviada (/24) secret=32nAc5Tt
Configuracin de Asterisk 57 Configuracin de Asterisk 58

Ejemplo general sip.conf


[general]
disallow=all ; Negamos todos los codecs a todos
allow=alaw ; y solo permitimos alaw

[usuarios](!) ; Creamos una plantilla para


host=dynamic
type=friend
context=micontexto
deny=0.0.0.0/0
; homologar nuestros usuarios
Prctica 2.1
permit=192.168.1.0/24

[usuario1](usuarios) ; Invocamos la plantilla y solo


secret=abcde12345 ; declaramos la contrasea

[usuario2](usuarios) ; Mismo caso. Podemos repetir cuantas


secret=fghij9876 ; veces queramos Creacin de usuarios SIP y
configuracin de softphone
[micarrier] ; Una troncal SIP para enviar llamadas
username=ccabrera ; No podemos reaprovechar la plantilla
secret=$uYjOpa2! ; porque los campos son muy diferentes
context=from-trunk
type=peer

#include sip_extra.conf ; Podemos tener la configuracin en ms


; distribuida en varios archivos
Configuracin de Asterisk 59
Plan de marcacin
Se define en el archivo extensions.conf
Contiene 3 secciones:
Prctica 2.2 [general]
[globals]
rea de contextos

[general] configura el manejo del archivo de


extensiones (comnmente no se altera)
Configurar un telfono IP [globals] define constantes que pueden ser
referenciadas desde cualquier parte del dialplan
El rea de contextos declara los diferentes contextos que
definen el plan de llamadas

Configuracin de Asterisk 62

Ejemplo de extensiones
Sintaxis
vlidas
La sintaxis general del plan de llamadas es: exten => 123,1,Answer
exten => 123,2,Wait(5)
[contexto] exten => 123,3,Hangup
exten => <extensin>,<prioridad>,<aplicacin>
exten => hola,1,Noop(nada)
exten => hola,2,Playback(welcome)
<extensin> es cualquier valor alfanumrico exten => hola,3,Dial(SIP/100)
<prioridad> es el orden con el que se ejecutarn las
diversas aplicaciones exten => 5546144330,1,Wait(3) *1.6.2+
<aplicacin> es el comando a ejecutar Notar el uso de
same => 2,Dial(DAHDI/g0/${EXTEN}) same => para
same => 3,Hangup abreviar extensiones

Configuracin de Asterisk 63 Configuracin de Asterisk 64


Extensiones especiales Extensin s (start)
MEX GDL
Extensin Significado Funcin
Extensin que llega al no ingresar dgitos dentro
t timeout
del tiempo establecido
Se activa automticamente cuando la llamada s
absolute
T cumple con la duracin especificada por
timeout
${TIMEOUT(absolute)}
h hangup Activada al colgar un canal Llamada hacia
SIP/GDL/101
Activada al teclear una extensin que no existe
i invalid
en el contexto Llamada hacia
Utilizadas para escapar de un Voicemail al SIP/GDL ?
a,o operator presionar * o cero al momento de escuchar la
bienvenida
s start Extensin default de entrada 101 101

Configuracin de Asterisk 65 Configuracin de Asterisk 66

Prioridades Ejemplos de prioridades


Determinan el orden de ejecucin de los comandos Extensin escrita en desorden pero numerada
exten => 100,3,Hangup
de una extension exten => 100,1,Noop
Siempre deben comenzar con 1, de lo contrario Asterisk exten => 100,2,Answer
invalidar toda la extensin
La misma extensin escrita con prioridad n
El orden debe ser consecutivo exten => 100,1,Noop
exten => 100,n,Answer
exten => 100,n,Hangup
Al numerarlas, pueden ser escritas en cualquier orden
Asterisk las ordenar en memoria O bien:
exten => 100,1,Noop
El uso de la prioridad n (next) facilita la escritura same => n,Answer
same => n,Hangup
Facilita hacer inserciones o cambios
Usar n es ms fcil al no tener que renumerar

Configuracin de Asterisk 67 Configuracin de Asterisk 68


Prioridades (2)
Para diferenciar una prioridad de otra, la prioridad n
puede contener etiquetas:
[default]
exten => 100,1,Answer
same => n,Wait(2)
Prctica 2.3
same => n(bienvenida),Playback(welcome)
same => n,Hangup

La referencia a estas etiquetas se puede hacer


mediante un Goto Plan de llamadas sencillo
exten => 100,n,Goto(default,100,bienvenida)

Esto nos permite controlar el flujo de nuestro plan de


marcacin
Configuracin de Asterisk 69

Plan de llamadas Patrones


No es posible definir todas las posibles extensiones
Usuarios SIP
Los patrones son caracteres especiales que reemplazan un rango de
dgitos:
micontexto Patrn Dgitos que reemplaza
X Dgitos entre 0 y 9
Z Dgitos entre 1 y 9
N Dgitos entre 2 y 9
[x-y] Cualquier dgito comprendido en el rango
. uno o ms dgitos cualesquiera

Todos los patrones deben ser precedidos por _ para no ser


descartados al momento de marcarlos
Configuracin de Asterisk 71 Configuracin de Asterisk 72
Ejemplos Patrones (3)
Patrn Dgitos que reemplaza En caso de que ms de un patrn coincida, Asterisk los
ordena del ms especfico al ms general:
_0133ZXXXXXXX 1. Nmeros/letras (1 nica coincidencia)
_0181ZXXXXXXX Llamadas de LDN hacia MGM 2. Rangos [ ] (coincidencias de 1 a 7 dgitos)
_0155ZXXXXXXX 3. N (8 coincidencias)
_01NXXZXXXXXX Llamadas de LDN a provincia 4. Z (9 coincidencias)
_01900XXXXXXX Llamadas a 01900 5. X (10 coincidencias)
6. . (infinitas coincidencias)
_ZXXXXXXX Llamadas locales
_ZXXXXX00 Llamadas locales que terminen en 00 Por lo que si marcamos un nmero 019001234567:
_01NXXXXXXXXX
_0[347]0 Servicios 030, 040 y 070 _01900XXXXXXX
_9. Todo lo prefijado por 9 Siempre coincide primero el 01900 por ser el ms especfico
_1XZ Extensiones 101-199, excepto 100, 110, 120, etc.
Considerar esto al momento de permitir/negar patrones

Configuracin de Asterisk 73 Configuracin de Asterisk 74

Atencin especial a los


Variables
patrones
[largadistancia] Mismo concepto que en un lenguaje de programacin
exten => _01ZXXXXXXXXX,1,Noop(Llamada de LD) Son etiquetas que hacen referencia a un valor
same => n,Dial(SIP/carrier/${EXTEN}) Podemos extraer el valor en cualquier momento

Hay 4 tipos de variables


exten => _01900ZXXXXXX,1,Noop(No permitir llamada) Globales
De canal (definidas por el usuario o pre-definidas)
Si marcramos hacia 019001234567, De entorno
la llamada pasara o se colgara? Heredadas
R: La llamada pasara Se declaran conforme al tipo de variable
Si bien no hay un Dial explcito que la deje salir, al no colgarse la
llamada coincide con el patrn _01ZXXXXXXXXX prioridad 2. Se identifican por los smbolos ${ }
Siempre colgar la llamada cuando no deba continuar. El ${ } solo se usa al invocar, no al guardar el valor
Configuracin de Asterisk 75 Configuracin de Asterisk 76
Variables globales Variables de canal
Se declaran en la seccin [globals] del archivo Asociadas con una nica instancia (copia) del canal
extensions.conf Diferentes copias del canal no cruzan sus variables
Al colgar un canal, se destruyen las variables asociadas con l
[globals]
celular=0445512345678
Se declaran con la aplicacin Set
[micontexto] exten => s,1,Set(MIVAR=hola)
exten => 911,1,Dial(DAHDI/g0/${celular})
Hay algunas variables pre-definidas por el sistema:
Si se actualiza el archivo, todas las referencias a la ${CONTEXT}: el contexto actual
variable cambian ${EXTEN}: la extensin actual (marcada)
Disponibles desde todos los canales ${PRIORITY}: la prioridad de procesamiento actual
Es global porque puede accederse desde cualquier lado ${DIALSTATUS}: el estado del ltimo comando Dial ejecutado

Configuracin de Asterisk 77 Configuracin de Asterisk 78

Variables de entorno Variables heredadas


Variables de Linux que se pueden acceder desde Heredadas
Llevan un guin bajo _
Asterisk Solo estn disponibles para el primer canal creado por el canal padre

Se acceden con la funcin ${ENV(variable)} Heredadas indefinidamente


Llevan dos guiones bajos __
Disponibles para todos los canales generados por el padre
[micontexto]
exten => 100,1,Set(VAR1=1)
Ejemplo: same => n,Set(_VAR2=2)
same => n,Set(__VAR3=3)
same => n,Noop(Var1 es ${VAR1}, Var2 es ${VAR2}, Var3 es ${VAR3})
same => n,Dial(Local/nivel1@micontexto)
exten => 123,1,Noop(El path de Linux es ${ENV(PATH)})
exten => nivel1,1,Noop(Var1 es ${VAR1}, Var2 es ${VAR2}, Var3 es ${VAR3})
; Var1 dar vaco, Var2 dar 2 y Var3 dar 3
same => n,Dial(Local/nivel2@micontexto)

exten => nivel2,1,Noop(Var1 es ${VAR1}, Var2 es ${VAR2}, Var3 es ${VAR3})


; Var1 dar vaco, Var2 dar vaco y Var3 dar 3
Configuracin de Asterisk 79 Configuracin de Asterisk 80
Manipulando variables
Se usa la sintaxis:
${<nombre variable>[:<offset>:[<cantidad>]]}
Ejemplo
${MIVAR} = holamundo Prctica 2.4
${MIVAR:3} = amundo
${MIVAR:-5} = mundo
${MIVAR:3:2} = am
Cmo nos quedaramos solo con 'hola'?
Uso de patrones y variables
til para reformatear nmeros:
Noop(${EXTEN}) ;015546144330
Set(EXTEN=52${EXTEN:2})
Noop(${EXTEN}) ;525546144330
Configuracin de Asterisk 81

Contextos de extensin Contextos de extensin (2)


Considerar cada contexto [nivel3] Notar lo siguiente:
como un grupo de Celulares [internas]
permisos nico exten => _ZXXX,1,Dial(SIP/${EXTEN})

[locales]
include => internas
[nivel2] exten => _ZXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})

Reutilizar contextos LDN [largadistancia]


declarados previamente include => locales
exten => _01ZXXXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
Pueden incluirse contextos exten => _ZXXXXXXX,1,Hangup
dentro de otros
[nivel1] Al marcar 50181181 dentro de [largadistancia] obtendremos
Locales siempre un hangup, a pesar que en [locales] se permite
Contexto principal siempre tiene preferencia sobre contextos incluidos

Configuracin de Asterisk 83 Configuracin de Asterisk 84


Contextos de extensin (3) Prioridades de ejecucin
Pueden incluirse contextos basados en tiempo Exten vs. Exten
Gana el que tenga el patrn de marcacin ms especfico
Sintaxis:
Exten vs. Include
include => contexto,<hora>,<dia>,<dia mes>,<mes>
Siempre gana el exten
Ejemplo:
Include vs. Include
[micontexto] Gana el que est declarado primero
include => gratis,21:00-23:59,mon-fri,*,*
include => gratis,*,sat-sun,*,*

Es recomendable incluir primero lo ms especfico y


al ltimo lo ms general
Configuracin de Asterisk 85 Configuracin de Asterisk 86

Evaluador Funciones
Podemos evaluar una operacin lgica o aritmtica Permiten procesar valores o datos que normalmente
usando $[ ] no estaran accesibles:
Ejemplo: exten => s,1,Noop(${MD5(${MI_CLAVE_SECRETA})})
exten => s,1,Set(MiValor=$[10/2])
same => n,Noop(${MiValor}) ;5 Se despliegan con el comando
core show functions
Esto puede usarse para hacer reemplazos o evaluar desde el *CLI
condicionales
Asterisk no evala operaciones por default Se escriben completamente en maysculas
Operadores vlidos
Se acceden como si fueran variables ${FUNC()}
+, -, *, /, %, >, >=, <, <=, =, !=, &, |, ~ No perder de vista el orden de los { ( ) }

Configuracin de Asterisk 87 Configuracin de Asterisk 88


Funciones (2) Subrutinas
Algunas funciones guardan valores, otras slo los Conjuntos de acciones agrupadas que reciben parmetros
despliegan Hechas por el usuario
tiles para procesos repetitivos con cambios entre invocaciones
Ejemplo: LEN() regresa la longitud de una cadena
Set(MIVAR=hola mundo) Reemplazan el concepto de macros de versiones
Noop(${LEN(${MIVAR})}) ; 10
anteriores de Asterisk
Las subrutinas no tienen lmite de anidamiento
Ejemplo: CALLERID(num) permite cambiar o mostrar
Al ejecutar una subrutina, se brinca hacia el contexto-
el caller id
extensin-prioridad que la subrutina indique
Set(CALLERID(num)=5544332211)
Es necesario agretar un Return() para regresar al punto desde el
Noop(El valor es ${CALLERID(num)}) que se invoc a la subrutina.

Configuracin de Asterisk 89 Configuracin de Asterisk 90

Subrutinas (2) Ejemplo de una subrutina


Cuando se invoca una subrutina, se pueden [sub-llamada]
proporcionar argumentos exten => s,1,Answer ; Este es el cdigo que
Se usan para personalizar la subrutina same => n,Dial(${ARG1},20) ; declara la subrutina.
same => n,Voicemail(${ARG2}) ; No sirve de nada hasta
Se crean automticamente en las variables same => n,Hangup ; que no la invoquemos
${ARG1}, ${ARG2}, ${ARG3}, etc same => n,Return
Cada subrutina tiene variables individuales
[default]
Los argumentos no se mezclan entre si exten => 100,1,Gosub(sub-llamada,s,1(SIP/chris,${EXTEN}))
exten => 110,1,Gosub(sub-llamada,s,1(SIP/juan,${EXTEN}))
Se invocan con la aplicacin Gosub exten => 120,1,Gosub(sub-llamada,s,1(SIP/carlos,${EXTEN}))
Gosub(<contexto>,<extensin>,<prioridad>([argumentos]))
De esta manera, pueden alterarse todas las acciones modificando
solamente la subrutina
Cualquier extensin puede convertirse en subrutina En este ejemplo el Return sobra porque de cualquier manera, la llamada se
cuelga antes de llegar a l.
Configuracin de Asterisk 91 Configuracin de Asterisk 92
En resumen
Cada archivo en Asterisk tiene una labor especfica
Usuarios SIP en sip.conf
Plan de llamadas en extensions.conf

Cada extensin debe tener una prioridad y aplicacin para


ejecutarse
Prctica 2.5
No repetir extensiones/prioridades

Los patrones nos ahorran extensiones


Muchas extensiones coinciden con una sola lnea

Las variables almacenan valores que podemos reutilizar Subrutinas e inclusiones

Podemos agrupar tareas usando subrutinas


E invocarlas las veces que sean necesarias cambiando solo los
argumentos

Configuracin de Asterisk 93

Plan de llamadas

Captulo Bsico #3
Usuarios SIP

llamada
micontexto
Arquitectura de Asterisk
internas

adicional Ing. Christian Cabrera R.

Configuracin de Asterisk 95
Antecedentes Sistema de archivos
Los mdulos de Asterisk coloca sus archivos en diferentes carpetas:
Asterisk se
configuran de Tipo de archivo Ubicacin

manera Configuracin /etc/asterisk


independiente Mdulos /usr/lib/asterisk/modules
Alto nivel de Logs /var/log/asterisk
control
AGIs /var/lib/asterisk/agi-bin
En el ncleo, Sonidos /var/lib/asterisk/sounds
Asterisk solo es Voicemail /var/spool/asterisk/voicemail
un conmutador
Grabaciones /var/spool/asterisk/monitor
Ajeno a cualquier
tecnologa Salida de llamadas /var/spool/asterisk/outgoing
Fuente: wiki.asterisk.org
Arquitectura de Asterisk 97 Arquitectura de Asterisk 98

Ncleo de Asterisk Haciendo crecer a Asterisk


Para agregar/quitar funcionalidades, controlamos los
mdulos que Asterisk carga
Editando /etc/asterisk/modules.conf limitamos cuales
mdulos sern cargados

Responsable de Ajeno a cualquier tecnologa Tenemos 4 clases principales de mdulos:


Podemos hacer crecer a Asterisk Canales
Administrar mdulos agregando el mdulo que le
brinde las nuevas Cdecs
Carga de configuracin funcionalidades
Sincrona del sistema Aplicaciones/funciones
Provee las interfaces de Recursos adicionales
Manejo de canales configuracin y control del
Control del plan de sistema
llamadas AMI, AGI, CLI

Arquitectura de Asterisk 99 Arquitectura de Asterisk 100


Lista de mdulos Mdulos: Canales
app_adsiprog.so app_originate.so cdr_syslog.so func_aes.so func_strings.so
app_alarmreceiver.so app_page.so chan_agent.so func_audiohookinherit.so func_sysinfo.so
app_amd.so app_parkandannounce.so chan_bridge.so func_base64.so func_timeout.so

Asterisk puede interactuar con cualquier medio para


app_authenticate.so app_playback.so chan_dahdi.so func_blacklist.so func_uri.so
app_cdr.so app_playtones.so chan_iax2.so func_callcompletion.so func_version.so
app_celgenuserevent.so app_privacy.so chan_local.so func_callerid.so func_vmcount.so
app_chanisavail.so
app_channelredirect.so
app_chanspy.so
app_queue.so
app_readexten.so
app_read.so
chan_multicast_rtp.so
chan_sip.so
codec_adpcm.so
func_cdr.so
func_channel.so
func_config.so
func_volume.so
pbx_ael.so
pbx_config.so
el cual tenga un canal para comunicarse
SIP, IAX2, H323, DAHDI, Local, Unicall, etc
app_confbridge.so app_record.so codec_alaw.so func_cut.so pbx_loopback.so
app_controlplayback.so app_sayunixtime.so codec_a_mu.so func_db.so pbx_realtime.so
app_dahdiras.so app_senddtmf.so codec_dahdi.so func_devstate.so pbx_spool.so
app_db.so app_sendtext.so codec_g722.so func_dialgroup.so res_adsi.so
app_dial.so app_sms.so codec_g726.so func_dialplan.so res_ael_share.so
app_dictate.so
app_directed_pickup.so
app_directory.so
app_softhangup.so
app_speech_utils.so
app_stack.so
codec_g729.so
codec_gsm.so
codec_ilbc.so
func_enum.so
func_env.so
func_extstate.so
res_agi.so
res_calendar.so
res_clialiases.so
Cada canal es responsable de manejar su propia
app_disa.so
app_dumpchan.so
app_echo.so
app_system.so
app_talkdetect.so
app_test.so
codec_lpc10.so
codec_resample.so
codec_ulaw.so
func_frame_trace.so
func_global.so
func_groupcount.so
res_clioriginate.so
res_config_sqlite3.so
res_convert.so
lgica y memoria
app_exec.so
app_externalivr.so
app_festival.so
app_transfer.so
app_url.so
app_userevent.so
format_g719.so
format_g723.so
format_g726.so
func_hangupcause.so
func_iconv.so
func_jitterbuffer.so
res_crypto.so
res_fax.so
res_format_attr_celt.so
El funcionamiento de un canal no afecta a los dems
app_flash.so app_verbose.so format_g729.so func_lock.so res_format_attr_h263.so
app_followme.so app_voicemail.so format_gsm.so func_logic.so res_format_attr_h264.so
app_forkcdr.so
app_getcpeid.so
app_ices.so
app_waitforring.so
app_waitforsilence.so
app_waituntil.so
format_h263.so
format_h264.so
format_ilbc.so
func_math.so
func_md5.so
func_module.so
res_format_attr_silk.so
res_limit.so
res_monitor.so
Algunos canales representan un protocolo (ej. SIP),
app_image.so
app_macro.so
app_while.so
app_zapateller.so
format_jpeg.so
format_pcm.so
func_pitchshift.so
func_presencestate.so
res_musiconhold.so
res_mutestream.so mientras que otros solo siguen argumentos lgicos
(ej. Local)
app_milliwatt.so bridge_builtin_features.so format_siren14.so func_rand.so res_realtime.so
app_minivm.so bridge_multiplexed.so format_siren7.so func_realtime.so res_rtp_multicast.so
app_mixmonitor.so bridge_simple.so format_sln.so func_sha1.so res_security_log.so
app_morsecode.so bridge_softmix.so format_vox.so func_shell.so res_smdi.so
app_mp3.so cdr_custom.so format_wav_gsm.so func_sprintf.so res_speech.so
app_nbscat.so cdr_manager.so format_wav.so func_srv.so res_stun_monitor.so

Arquitectura de Asterisk 101 Arquitectura de Asterisk 102

Mdulos: Aplicaciones Mdulos: Aplicaciones (2)


Ejecutan acciones durante una llamada Algunas aplicaciones:
Aplicacin Accin
Se cargan dinmicamente conforme se necesitan
Dial Marca hacia la tecnologa/canal especificado
Ejecutadas sncronamente Wait Espera x segundos
Se invoca la aplicacin al momento en que se le manda llamar, Goto Brinca hacia la prioridad especificada
sin que previamente est corriendo
GotoIf Brinca condicionalmente
Podemos aumentar la serie de comandos que Asterisk Macro Permite agrupar ms aplicaciones y repetirlas
puede ejecutar en cada llamada AGI Invoca un AGI script externo
Asterisk carga 180+ aplicaciones al momento de arrancar el Playback Reproduce un archivo de sonido
sistema
Background Igual que Playback, pero permite ingresar DTMFs
Pueden consultarlas usando Read Pide dgitos al usuario y los almacena en una variable
*CLI> core show applications Hangup Cuelga la llamada
Set Guarda un valor en una variable
Arquitectura de Asterisk 103 Arquitectura de Asterisk 104
Mdulos: Recursos Asterisk CLI
Integran a Asterisk con recursos externos La interfaz humano-Asterisk
Bases de datos Nuestra principal herramienta de control en el curso
Calendarios
Msica en espera Le permite al administrador:
Monitoreo (grabacin) Consultar el estado del sistema
Recargar o reiniciar el sistema
Se cargan de manera esttica Actualizar valores en tiempo real
Requieren una recarga de mdulo al modificarse Desplegar ayuda
Hacer debug
Pueden operar simultneamente en varios canales
Cada canal recibe lo mismo que los otros Mdulos pueden agregar comandos al *CLI
Ej. sip show peers depende del mdulo chan_sip.so
Arquitectura de Asterisk 105 Arquitectura de Asterisk 106

AGI: Asterisk Gateway AMI: Asterisk Manager


Interface Interface
Ejecuta scripts externos a Asterisk A diferencia del CLI, esta es una interfaz computadora-
Asterisk
Escritos en diferentes lenguajes
Perl, PHP, Python, Bash, etc Permite ejecutar comandos o monitorear al sistema
Permite que Asterisk sea una puerta de enlace Al igual que el CLI, algunos mdulos agregan
(gateway) entre un telfono y una aplicacin no- comandos
telefonica
Encuestas, IVRs, juegos, etc Usada por aplicaciones como el FOP, popups de
agente para callcenter, sistemas de click-to-call, etc
Se ver ms a detalle en un captulo propio
Se ver ms a detalle al final del curso

Arquitectura de Asterisk 107 Arquitectura de Asterisk 108


Prctica 3.1 Prctica 3.2

Instalando un mdulo desde source:


Instalando un mdulo precompilado: Cdec G729
format_mp3 para msica en espera

Prctica 3.3 Captulo Bsico #4


(opcional) Aplicaciones
Cambiando el idioma de Asterisk Ing. Christian Cabrera R.
Introduccin Buzones de voz
Existen muchas aplicaciones en Asterisk Ofrecer funcionalidad de dejar mensaje a un usuario.
Ms de 150+
Los buzones se crean en archivo voicemail.conf
Cada aplicacin tiene su propia sintaxis All se definen los usuarios, sus nombres, contraseas y
correos para envio de mensajes
No es necesario aprenderlas todas, pero si las ms
importantes Se usa a travs de 2 aplicaciones:
Dejar el mensaje: Voicemail
Todas son consultables desde el *CLI Recuperar los mensajes: VoicemailMain
core show applications
core show application <aplicacin> Es necesario programar estas aplicaciones en el
extensions.conf

Aplicaciones de Asterisk 113 Aplicaciones de Asterisk 114

voicemail.conf Voicemail
Aqu configuramos los buzones y sus contraseas Permite dejar un mensaje de voz al buzn
especificado
Configuracin general y mltiples contextos de El buzn/contexto deben existir en el voicemail.conf
buzones de voz Podemos dejar un mensaje en ms de un buzn a la vez
Si queremos tener activo el envo de correos Sintaxis:
debemos instalar un MTA (Mail Transfer Agent) en Voicemail(<buzn>[@<contexto>],<opciones>)
Linux
[general] Ejemplos:
; Aqu va la configuracin general de los buzones de voz
Voicemail(100,b)
[default] Voicemail(201&202,u)
101 => 1234,Juan Prez,juan@dominio.com,,attach=yes
102 => 1234,Jorge Lpez,jorge@dominio.com,,attach=yes
Aplicaciones de Asterisk 115 Aplicaciones de Asterisk 116
VoicemailMain VMAuthenticate
Desde aqu escuchamos nuestros mensajes Autentica al usuario a partir de la contrasea de su buzn
Permite tambin configurar las opciones del buzn, tales como Las contraseas estn definidas en el voicemail.conf
las bienvenidas
Es importante vaciar el buzn para evitar que se llene Usando VoiceMailMain, el usuario final puede actualizar
sus contraseas sin intervencin del administrador
Podemos saltar la autenticacin El usuario se debe hacer responsable de su contrasea y su uso
Permite personalizar contraseas a nivel individual
Hacer que no se le pida contrasea al usuario y pasar directo a
los mensajes
3 intentos fallidos y la llamada es colgada
Sintaxis: Sintaxis:
VoicemailMain([buzn],[opciones]) VMAuthenticate([buzn][@contexto],[opciones])
Ejemplos: Ejemplos:
VoicemailMain(100,s) VMAuthenticate(101@default)

Aplicaciones de Asterisk 117 Aplicaciones de Asterisk 118

Ejemplos de uso
; voicemail.conf
[default]
101 => 1234,Juan Prez,juan@dominio.com,,attach=yes

; extensions.conf
[sub-llamar]
Prctica 4.1
exten => s,1,Dial(${ARG1},20)
same => s,n,Voicemail(${ARG2}@default)
same => s,n,Hangup
same => s,n,Return

[internas] Agregar servicio de voicemail para nuestras


include => larga-distancia extensiones
exten => _*86,1,VoicemailMain()
exten => _1XX,1,Gosub(sub-llamar,s,1(SIP/${EXTEN},${EXTEN}))

[larga-distancia]
exten => _01ZXXXXXXXXX,1,VMAuthenticate(${CALLERID(num)}@default)
same => n,Dial(SIP/carrier/${EXTEN})
Aplicaciones de Asterisk 119
Interaccin con el usuario Playback
En ocasiones tenemos necesidades como: Reproduce el sonido especificado
Repetir alguna grabacin (bienvenidas) Obliga al usuario a escucharlo (no puede saltarse)
Dar opciones de menu No pueden recibirse tonos mientras se reproduce
Capturar dgitos ingresados en el telfono
La extensin del archivo se omite
Reproducir nmeros
Asterisk escoger el mejor cdec disponible
Lo mismo aplica para el resto de las aplicaciones de sonidos
Asterisk permite reproducir archivos de audio
Se soportan diferentes cdecs, adems de diferentes Sintaxis:
idiomas para los archivos de sonido
Playback(<archivo>,[opciones])
Los sonidos se buscan por default en
/var/lib/asterisk/sounds Ejemplo:
Playback(bienvenida)
Aplicaciones de Asterisk 121 Aplicaciones de Asterisk 122

Background Read
Muy parecida a Playback, salvo que al usuario se le Pide dgitos al usuario
permiten ingresar dgitos No se hace nada con ellos, solo se almacenan en una
Asterisk transferir al usuario a la extensin marcada variable para uso posterior
Si el nmero marcado no existe, transferir a la extensin i
(invlida) Sintaxis:
Read(<var>,[archivo],[maxdigitos],[opciones],
Sintaxis: [intentos],[timeout])
Background(<archivo>)
Ejemplo:
Ejemplo: Read(pass,enter-account,4)
Background(digite-opciones)

Aplicaciones de Asterisk 123 Aplicaciones de Asterisk 124


Entendiendo la diferencia SayDigits
Read pide datos para almacenar o procesar Reproduce un nmero dgito por dgito
Ej. Contraseas o nmeros de cuenta 12345 = Uno dos tres cuatro cinco

Se usa para reproducir nmeros que no correspondan


Background transfiere hacia la ext. marcada a una cantidad
Ej. Para ventas, digite 1. Soporte digite 2 Nmeros de contrato
Nmeros de cuenta
Contraseas
Playback solo reproduce archivos
Obligamos al usuario a que escuche la grabacin Ejemplo:
SayDigits(123192)

Aplicaciones de Asterisk 125 Aplicaciones de Asterisk 126

Sobre las aplicaciones


SayNumber
de audio
Lee un nmero como una cantidad Todos los sonidos se buscan por default en
12345 = Docemil trescientos cuarenta y cinco /var/lib/asterisk/sounds

Debe recibir solamente nmeros enteros Para cambiar el idioma de los sonidos, hay 2 maneras:
No hace distincin de nmeros o cadenas Cambiar el campo language=XX dentro del sip.conf, iax.conf o
chan_dahdi.conf
Hacer un Set(CHANNEL(language)=XX) en el plan de llamadas
XX es el cdigo de idioma deseado (es, fr, it, en, etc)
Ejemplo:
Si algn archivo de sonido no existe en el idioma
Saynumber(123192) deseado, se usar el mismo archivo en ingls
Si tampoco existe el archivo en ingls, dar un error

Aplicaciones de Asterisk 127 Aplicaciones de Asterisk 128


Ejemplo

[from-pstn]
include => horario-habil,9:00-18:00,mon-fri,*,*

Prctica 4.2
include => fuera-de-horario

[horario-habil]
include => internas
exten => s,1,Background(bienvenida)
same => n(opciones),Background(digite-opcion)
same => n,Goto(opciones)

[fuera-de-horario]
exten => s,1,Playback(recordamos-horarios-operacion)
Rutinas con reproduccin de audio
same => n,Hangup

Aplicaciones de Asterisk 129

Control de llamadas Answer


Para asegurar que el audio fluya a travs del canal, es Contesta un canal y comienza la tarificacin
recomendable contestarlo primero Puede especificarse un tiempo de espera antes de continuar
Algunas aplicaciones lo hacen automticamente con la siguiente prioridad

Procurar no usar Answer sino dejar que otra


aplicacin haga un contestado implcito
Es ocasiones es necesario insertar silencios antes o
despus del audio Sintaxis:
Dar mejor espacio entre llamadas o dar oportunidad al Answer([milisegundos])
usuario a que ingrese dgitos
Ejemplo:
Answer(3000)

Aplicaciones de Asterisk 131 Aplicaciones de Asterisk 132


Wait WaitExten
Hace al usuario esperar un tiempo obligatorio Funciona igual que Wait, pero el usuario puede
No se pueden ingresar dgitos mientras se espera ingresar dgitos
Puede especificarse el tiempo que dure el silencio en Asterisk intentar comunicar al usuario a la extensin
marcada
decimales
til para dar tiempos adicionales en IVRs
Es equivalente a un Playback en silencio
Es equivalente a un Background en silencio
Sintaxis:
Wait(<segundos>) Sintaxis:
WaitExten(<segundos>,[opciones])
Ejemplo:
Wait(10) Ejemplo:
WaitExten(3.5)

Aplicaciones de Asterisk 133 Aplicaciones de Asterisk 134

Comunicacin entre
Dial
usuarios
La tarea ms importante en un conmutador es Permite enlazar usuario con usuario
comunicar extensiones Siempre debe contener una tecnologa y un usuario
Asterisk puede convertir entre los protocolos

Podemos marcar a ms de un usuario a la vez


Asterisk ofrece la posibilidad de comunicar Sintaxis:
varios usuarios en una misma llamada Dial(<tech/user>,[timeout],[opciones])

Ejemplo:
Dial(SIP/100,30,tT)
Dial(SIP/201&SIP/202,30,tT)

Aplicaciones de Asterisk 135 Aplicaciones de Asterisk 136


Meetme Controles de flujo
Establece cuartos de conferencia El dialplan sigue una programacin secuencial
Une a n personas en una sola llamada
Cada evento que ocurre va despus de otro
Tiene muchas opciones disponibles: Es posible alterar el flujo haciendo saltos
Solo hablar, solo escuchar, grabar conferencia, ejecutar AGI en el fondo,
usar contrasea, etc
Podemos evaluar condiciones para saber si es
Si no se proporciona el nmero de la conferencia, se le pedir necesario saltar o no
uno al usuario
Al colgar el ltimo usuario, la conferencia se cierra
Tambin es posible evaluar acciones directamente
Sintaxis:
MeetMe([conferencia][,opciones[,nip]])

Ejemplo:
Meetme(8500,d)
Meetme(8501,D,2198)
Aplicaciones de Asterisk 137 Aplicaciones de Asterisk 138

Goto GotoIf
Hace saltos incondicionales hacia cualquier contexto- Igual que Goto, pero solo brinca si la condicin se
extensin-prioridad
cumple
Puede recibir 1, 2 o 3 parmetros Dos posibles destinos
1: Solo prioridad (misma ext. y contexto) Es importante evaluar la condicional
2: Extensin y prioridad (mismo contexto)
3: Contexto, extensin y prioridad

Sintaxis:
Goto([contexto],[extensin],<prioridad>) Sintaxis:
GotoIf(<condicin>?<verdadero>:[falso])
Ejemplos:
Goto(opciones)
Goto(s,continua) Ejemplos:
Goto(default,s,1) GotoIf($[${var}>3]?s,1:default,123,1)

Aplicaciones de Asterisk 139 Aplicaciones de Asterisk 140


ExecIf Ejemplo global: IVR
[from-pstn]
include => internas
Permite ejecutar una aplicacin nica basada en una exten => s,1,Answer(3000)
condicional same => n,Playback(bienvenida)
same => n,Wait(1)
til para hacer variaciones en un solo comando same => n(opciones),Background(digite-opcion)
same => n,WaitExten(4)
same => n,Goto(opciones)
exten => 1,1,Dial(SIP/100)
exten => 2,1,Dial(SIP/201&SIP/202)
Ejemplo: exten => 3,1,Read(password,dame-tu-pass)
same => n,GotoIf($[${password}=1234]?bien:mal)
same => n(mal),Playback(pbx-invalid)
ExecIf($[${var}>1]?Playback(hola):Playback(adios)) same => n,Goto(s,opciones)
same => n(bien),Playback(demo-congrats)
same => n,Goto(s,opciones)
exten => 5,1,Meetme(5000)
same => n,Goto(s,opciones)
exten => i,1,Goto(s,opciones)
Aplicaciones de Asterisk 141 Aplicaciones de Asterisk 142

Prctica 4.3 Prctica 4.4 (opcional)

Crear un menu IVR Uso de funciones


Plan de llamadas
contador

Usuarios SIP
saldo
Captulo Bsico #5
llamada
micontexto servicios Conexin con la PSTN
usando DAHDI
menu internas

adicional Ing. Christian Cabrera R.

Aplicaciones de Asterisk 145

Introduccin Fabricantes
Asterisk tiene la posibilidad de interactuar con Al no usar protocolos
propietarios, la libre
la PSTN competencia ha reducido
Se requiere de hardware adicional o rentar un los costos del equipo
servicio de terceros Los 3 principales
fabricantes del mercado:
Digium
Para la interconexin directa pueden usarse Sangoma
Openvox
gateways externos o tarjetas internas
Los gateways se configuran por SIP Cualquiera de sus tarjetas
Nos centraremos en las tarjetas funciona con Asterisk,
solo se configuran un
poco diferente
Interconexin por DAHDI 147 Interconexin por DAHDI 148
Tarjetas analgicas Puertos analgicos
FXO (Foreign Exchange Office) Son los ms comunes
Reciben corriente (de la telefnica) Estos son los puertos que usaramos para poner un PBX en
Aqu conectas una lnea que viene de la calle casa
(Telmex, Axtel, Alestra, etc)
Limitados a una llamada simultnea por canal
FXS (Foreign Exchange Station) El par de cobre est dedicado a un nico circuito
Entregan corriente hacia el telfono
Conectas un telfono convencional (Panasonic, En otros conmutadores se llaman diferente:
Alcatel, Siemens, etc)
FXO = CO
FXS = EXT

Nunca conectar FXS-FXS!


Podras quemar los puertos

Interconexin por DAHDI 149 Interconexin por DAHDI 150

Tarjetas digitales Conexin fsica


Todas soportan tanto E1s como T1s Las tarjetas digitales tienen puertos RJ45 (8 pines),
Configurable por software
pero los enlaces normalmente vienen en G703
T1: Estndar Americano (coaxial)
23 canales de voz + 1 sealizacin
Es necesario un convertidor que adems de adaptar el
E1: Estndar Europeo conector, acople las impedancias correctamente
30 canales de voz + 1 de sealizacin + 1 de
sincrona Para estos propsitos se usa un balun

Interconexin por DAHDI 151 Interconexin por DAHDI 152


Puertos digitales Sincrona
Son troncales de mltiples canales digitales (DS-0) Dado que los enlaces digitales estn multiplexados en
Usando TDM (Time Division Multiplexing) es posible agrupar tiempo, requieren de una fuente de sincrona
muchos canales en un solo enlace

Usados en entornos de grandes oficinas o corporativos Las tarjetas digitales tienen 2 opciones:
Hasta 30 canales de voz con muchos DIDs diferentes Tomar la sincrona que proviene del enlace (recomendado si es
que estamos conectados con la telefnica)
Son tecnolgicamente superiores que los anlogos: Generar la sincrona propia (cuando Asterisk es el equipo
Mayor calidad maestro)
No son susceptibles al ruido
Confiabilidad Sin una fuente de sincrona precisa, tendremos problemas
Ruidos en la lnea
Las tarjetas son ms caras Puede ocasionar que las llamadas se desconecten
Aunque la renta del servicio digital suele ser mas cara
El costo puerto por puerto es ms barato Deberemos configurar este parmetro en el system.conf

Interconexin por DAHDI 153 Interconexin por DAHDI 154

Comparacin ISDN vs
Framing
R2MFC
Segn el tipo de enlace, hay diferentes tipos: E1s con ISDN PRI E1s Canalizados (R2 MFC)
30 canales de voz 30 canales de voz
T1s (EUA y CAN) E1s (resto del mundo) Usa CCS Usa CAS
D4 Super Frame CAS Channel Associated Canal 1 se usa para framing. Canal 1 se usa para framing.
(obsoleto) Signaling (obsoleto) Canal 16 se usa para sealizacin Canal 16 se usa para sealizacin
CCS Common Channel Soporta Euro ISDN, tanto en modo
ESF Extended Super Frame Soporta FXS, FXO, E&M
Signaling de CPE como red (esclavo / maestro)
Comnmente usa CRC para Obsoleto en Europa
corroborar errores en transmisin Comn en Amrica Latina
Tanto D4 como CAS son tecnologas viejas y no Ms caro, por ser tecnologa nueva
deberan usarse Ofrece mucho ms informacin por
Desafortunadamente, en Latinoamrica usamos llamada
principalmente R2 modificado, el cual usa CAS

Interconexin por DAHDI 155 Interconexin por DAHDI 156


Interconexin con
Qu es un DID?
otros PBX
Es posible interconectar Asterisk con otros sistemas Direct Inward Dialing
Es el nmero telefnico al cual marcamos
no IP
FXS-FXO o FXO-FXS es lo ms comn, pero te limita a una Un DID debe estar asociado con un canal para poder
sola llamada por puerto recibir las llamadas
Tambin es posible usar E1s con cable cruzado No confundir el DID con la lnea/canal para recibir (similar a
usuarios SIP y extensiones)

Asterisk puede actuar como maestro (simular ser la Es posible comprar DIDs virtuales que lleguen por SIP
telefnica) o actuar como esclavo (dejando al otro Esto evita tener que comprar tarjetas
PBX ser el maestro) Un enlace digital puede tener mltiples DIDs
Puede adaptarse fcilmente a las necesidades del otro Al recibir la llamada, la telefnica indica a que DID marc el
conmutador cliente
Una lnea anloga tiene un DID nico asignado

Interconexin por DAHDI 157 Interconexin por DAHDI 158

Interaccin en software /etc/dahdi/system.conf


Asterisk
/etc/asterisk/chan_dahdi.conf Archivo base de configuracin de las tarjetas
OpenR2 Liga los mdulos de DAHDI con los puertos de las tarjetas
Solo en caso que
usemos R2 MFC Por cada puerto digital, declaramos un span
DAHDI Se configura el framing y el coding que el enlace use (segn sean
/etc/dahdi/system.conf
ISDN PRI, R2 MFC, etc)
Adicionalmente, deben declararse los canales de cada span

Wanpipe Los puertos anlogos de declaran cruzados


/etc/wanpipe/wanpipe1.conf FXO se declaran como FXS y viceversa

Los canales deben ser consecutivos de acuerdo al orden


Tarjetas Tarjetas en que se cargan los mdulos
/etc/dahdi/modules
Digium Sangoma
Interconexin por DAHDI 159 Interconexin por DAHDI 160
system.conf system.conf (2)
Los spans se declaran con la sintaxis: Ejemplo para 1 E1 ISDN + 4 FXO + 1 FXS
span=<nmero>,<sincrona>,<atenuacin>,<framing>,<coding>
# R2 MFC
# Configuracin para E1 ISDN span=1,1,0,cas,hdb3
La sincrona se configura como span=1,1,0,ccs,hdb3 cas=1-15:1101
0 para maestro (usamos nuestra propia sincrona) bchan=1-15,17-31 cas=17-31:1101
1 para esclavo (tomamos la sincrona que recibimos en el dchan=16 dchan=16
enlace)
2 en adelante para definir los enlaces secundarios, # Configuracin para 4 puertos FXO
terciarios, etc fxsks=32-35 # Sealizacin inversa

La atenuacin normalmente va en 0 (cero) # Configuracin para 1 puerto FXS


Solo sera necesario hacer cambios si estamos fsicamente fxoks=36 # Inversa
distantes (> 40 m) del mdem que trae el enlace

Interconexin por DAHDI 161 Interconexin por DAHDI 162

system.conf (3) /etc/asterisk/ chan_dahdi.conf

Tras modificar el archivo, es necesario aplicar los Aqu hacemos que Asterisk trabaje con los
cambios desde el CLI canales de DAHDI instalados
dahdi_cfg vv
Configuramos la sealizacin, las funciones
Si declaramos los canales con errores, los cambios no
se aplicarn
del canal, los grupos y los contextos a los que
pertenecen
Tomar nota del orden de los canales, ya que los
ocuparemos en el siguiente archivo Prestar atencin a la sintaxis

Interconexin por DAHDI 163 Interconexin por DAHDI 164


chan_dahdi.conf chan_dahdi.conf (2)
; ISDN PRI
signalling = pri_cpe ; R2 modificado Para aplicar los cambios (se caern las llamadas):
pridialplan=unknown signalling=mfcr2 *CLI> dahdi restart
switchtype = euroisdn mfcr2_variant=mx
context=from-pstn mfcr2__ani_first=no Consultamos el estado de los canales:
group=0 mfcr2_max_ani=10 *CLI> dahdi show channels
channel => 1-15,17-31 mfcr2_max_dnis=4
mfcr2_category=national_subscriber O si tenemos un enlace con R2MFC:
signalling=fxs_ks mfcr2_mfback_timeout=-1 *CLI> mfcr2 show channels
context=from-pstn mfcr2_metering_pulse_timeout=-1
group=8 mfcr2_forced_release=no ltimo paso es configurar el extensions.conf para enviar las
channel => 32-35 mfcr2_logdir=log
llamadas mediante DAHDI
Podemos enviar llamadas por canal o por grupo
mfcr2_logging=all
signalling=fxo_ks
context=from-internal exten => _ZXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
context=from-pstn exten => _01ZXXXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
group=9 group=0 exten => _04455ZXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
channel => 36 channel => 1-15,17-31 exten => _045ZXXXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
exten => _01900.,1,Congestion

Interconexin por DAHDI 165 Interconexin por DAHDI 166

Plan de llamadas
contador

Usuarios SIP
saldo

Prctica 5.1 llamada


micontexto

menu internas salida

Instalacin de una tarjeta DAHDI adicional

entrada
PSTN

Interconexin por DAHDI 168


Recapitulando
IAX es un protocolo de comunicacin
Captulo Intermedio #1
Se define en el archivo /etc/asterisk/iax.conf
Enlaces IAX y
El protocolo SIP se ocupa principalmente para
troncales SIP extensiones
Pero tambin podemos tener troncales en SIP
Ing. Christian Cabrera R.

Enlaces IAX y troncales SIP 2

Introduccin Comparativa SIP vs IAX


IAX = Inter Asterisk eXchange SIP IAX2
Ahorro de ancho de banda
Desarrollado por Mark Spencer reutilizando encabezados
Creado especficamente como un protocolo de telefona Amplio soporte en hardware Encabezados en binario (menor
Cientos de implementaciones en ancho de banda)
Pros
Usa un solo puerto UDP, el 4569 software (propietarias y Facilidad de configuracin a travs
gratuitas) de firewalls
Mismo puerto para sealizacin y envo de la voz Estandarizado Ms seguro (al ser menos conocido)
Amigable con NAT Diseado a partir de requerimientos
en el mundo real
Ofrece posibilidad de trunking, permitiendo agrupar Dbil soporte en hardware
Contras

Problemas con NAT


mltiples llamadas en un solo enlace Muy conocido, y por lo tanto,
Limitada cantidad de software que
lo utiliza
atacado
No es un estndar

Enlaces IAX y troncales SIP 3 Enlaces IAX y troncales SIP 4


Trunking IAX desactivado Trunking IAX activado
En SIP, cada paquete tiene Si los paquetes son Con IAX podemos La relacin
su propio encabezado siempre entre el punto A habilitar el trunking y encabezados/cuerpo es
y B, se repite mucha compartir los mucho menor
En ocasiones, el tamao de encabezados
los encabezados supera al informacin El ancho de banda se
Solo cambia el cuerpo de aprovecha mejor
del mensaje los mensajes

5 5
4 4
3 3

5 4 3 2 2 2 1 1 1 5 4 3 2 2 2 1 1 1

3 3
4 4
5 5

Enlaces IAX y troncales SIP 5 Enlaces IAX y troncales SIP 6

Alta de usuarios IAX Conectando los equipos


Igual que en SIP Hay 3 escenarios para interconectar equipos:
Campos context, type y host
1. Ambos equipos cuentan con IP fija
Seccin general y seccin de mltiples usuarios
El ms sencillo de implementar
Si no se especifica secret, cualquier usuario sin Cada host siempre conoce la ubicacin del otro
contrasea podr llamar
Esto se usa para poder recibir llamadas annimas
2. Uno tiene IP fija y el otro dinmica
Equipo dinmico debe registrarse con equipo fijo para
Es preferible declarar una cuenta iax sin contrasea con
darse a conocer
accesos muy restringidos
3. Ambos equipos tienen IP dinmica
Es necesario convertirlo en uno de los otros escenarios (al
menos uno de los dos debe simular ser fijo)

Enlaces IAX y troncales SIP 7 Enlaces IAX y troncales SIP 8


Creando el enlace Proceso de registro
Esto es necesario cuando queremos interconectar 2
; Host A ; Host B equipos y uno de ellos tiene una IP dinmica
; sip.conf/iax.conf ; sip.con/iax.conf El equipo dinmico se reporta con el fijo de manera
peridica
[usuario B] [usuario A]
username=<usuario A> username=<usuario B> Tambin es posible que Asterisk se registre hacia otro
host=<ip B> host=<ip A>
Asterisk (o cualquier otro101
Soy el usuario proxy)
y estoy en la
IP 192.168.1.145.
Mi Registrame por
contrasea es ******
secret=<elmismo> secret=<elmismo> favor
context=entrada context=entrada
type=friend type=friend
deny=0.0.0.0/0 deny=0.0.0.0/0 Correcto!
Si en Quedas
verdad eres registrado
el usuario 101,
permit=<ip B>/32 permit=<ip A>/32 desde
CullaesIPtu
192.168.1.145
contrasea?
101 @ 192.168.1.145 192.168.1.200
(IP dinmica) (IP fija)
Enlaces IAX y troncales SIP 9 Enlaces IAX y troncales SIP 10

Proceso de registro (2) Creando el enlace (2)


Los registros se hacen en la seccin [general] del ; Host A (dinmico) ; Host B (fijo)
iax.conf/sip.conf y tienen el siguiente formato: ; sip.con/iax.conf ; sip.con/iax.conf
register => <usuario>:<password>@<dominio>
[general]
register => usuarioA:elmismo@<ip B>
Ejemplos:
register => 10025:3nl4z4@enlaza.mx [usuario B] [usuario A]
register => 5550181181:abcde12345@mi.proveedor.com username=<usuario A> username=<usuario B>
host=<ip B> host=dynamic
Al registrarse, el equipo que recibe (el fijo) ya conoce secret=<elmismo> secret=<elmismo>
la direccin del dispositivo dinmico context=entrada context=entrada
Ya sabe a donde enviar las llamadas type=friend type=friend
deny=0.0.0.0/0
permit=<ip B>/32

Enlaces IAX y troncales SIP 11 Enlaces IAX y troncales SIP 12


Envo de llamadas Ejemplos de llamadas
Existen varios formatos para mandar las llamadas:
[micontexto]
IAX2/usuario_iax/extension include => salida
include => sucursales
IAX2/proveedor/0140
[salida]
IAX2/username:password@dominio/extension ; Llamadas locales en DF y LDN
exten => _ZXXXXXXX,1,Dial(SIP/micarrier/${EXTEN})
IAX2/10999:abcde@asteriskmx.com/525512345678 exten => _01ZXXXXXXXXX,1,Dial(SIP/micarrier/52${EXTEN:2})
; Pido prestadas las lineas de mis otros conmutadores
IAX2/dominio/extension exten => _0133ZXXXXXXX,1,Dial(IAX2/pbxGDL/${EXTEN:4})
exten => _0181ZXXXXXXX,1,Dial(IAX2/pbxMTY/${EXTEN:4})
IAX2/asteriskmx.com/101
[sucursales]
Todos estos formatos aplican para SIP e IAX ; Llamadas internas entre conmutadores. El primer dgito
; identifica a que conmutador van
Algunos pueden simplificarse creando previamente una exten => _3XXX,1,Dial(IAX2/pbxGDL/${EXTEN})
entrada en el archivo de configuracin exten => _4XXX,1,Dial(IAX2/pbxMTY/${EXTEN})

Enlaces IAX y troncales SIP 13 Enlaces IAX y troncales SIP 14

Prctica 6.1 Prctica 6.2

Crear un enlace IAX entre


Recibir llamadas IAX annimas
2 servidores Asterisk
Plan de llamadas
contador

Usuarios SIP
saldo

Prctica 6.3 llamada


micontexto servicios

menu internas
salida

Conexin con un carrier IAX/SIP adicional

entrada sucursal
PSTN/
Vecinos IAX
IAX autenticados
IAX annimos

Recapitulando
Extensiones se asignan a usuarios SIP/IAX/DAHDI
Captulo Intermedio #2 Comnmente en relacin 1:1
Distribucin automtica Pueden asignarse mltiples dispositivos a una sola
extensin
de llamadas (ACD) Aunque timbrar varios telfonos a la vez no siempre es
buena opcin

Ing. Christian Cabrera R. El plan de llamadas no permite controlar de manera


especfica a quienes se les enviarn las llamadas en
base a su ocupacin

Distribucin automtica de llamadas (ACD) 20


Asterisk como CallCenter Componentes
Qu puede ofrecernos la plataforma? Hay 2 partes importantes en todo esquema de atencin
Distribucin automtica de llamadas (ACD) al usuario: miembros y colas
Agentes remotos Una cola es una fila donde entran aquellos que desean
Monitoreo y grabacin de llamadas comunicarse a un rea especfica (soporte, ventas, etc)
Msica en espera Un callcenter puede tener N colas
Enrutamiento basado en habilidades (skills)
Distribucin y enrutamiento geogrfico Un miembro es el dispositivo que se registrar a una cola
para empezar a recibir llamadas
Soluciones de contingencia
Los miembros pueden estar suscritos a mltiples colas

Estos conceptos se usan para recibir llamadas de inbound


Sin embargo, pueden aprovecharse para conectar llamadas de
outbound que sean traidas por un proceso externo
Distribucin automtica de llamadas (ACD) 21 Distribucin automtica de llamadas (ACD) 22

Caractersticas Colas: queues.conf


Si una cola no tiene miembros asignados, no podr Archivo donde se configuran todas las colas del sistema
atender llamadas Existe la seccin de [general] y mltiples [colas]
Si no ha nadie al telfono, quin contesta? Podemos agregar miembros estticos a cada cola usando
el campo de member:
Los miembros pueden ser estticos o dinmicos member => <Tech>/<usuario>, [penalizacin],[nombre
Los estticos se configuran en el queues.conf miembro]
Los dinmicos se dan de alta por CLI o por el dialplan Ejemplo:
[soporte] ; Agrego 2 miembros a soporte
En versiones anteriores de Asterisk exista el member => SIP/100,0,Christian Cabrera
concepto de agente member => IAX2/vecino/200,1,Juan Lopez
Este concepto ha sido depreciado, por lo que ya no se Los miembros estticos siempre se consideran en lnea
estudiar Para tener el concepto de login/logout, debemos usar miembros
Debe reemplazarse por el uso de miembros dinmicos dinmicos

Distribucin automtica de llamadas (ACD) 23 Distribucin automtica de llamadas (ACD) 24


Colas: queues.conf (2) Ejemplo de queues.conf
Campo Valores posibles Funcin [general]
persistentmembers=yes
Especificar la clase de la msica en espera. monitor-type=MixMonitor ; Activar la grabacin general
musicclass <clase de MOH>
Se define en el archivo musiconhold.conf
[ventas]
Reproducir un anuncio para el agente al announce=sales
<archivo de sonido
announce momento de contestar una llamada. Util para musicclass=nuevosproductos
del anuncio>
miembros registrados en ms de una cola strategy=lineal
weight=5
linear, leastrecent,
Define la estrategia de timbrado a seguir member => SIP/ventas1 ; Miembros estticos
ringall, fewestcalls, member => SIP/ventas2
strategy (random, rrordered y rrmemory son los ms
random, rrordered,
justos)
rrmemory,wrandom [soporte] Esto crea las colas del sistema, ahora es
timeout=10 necesario dejar que los clientes lleguen
Tiempo mximo que se le timbrar a un strategy=rrmemory
timeout <segundos> a ella
miembro antes de considerarlo no disponible member => SIP/soporte1
member => SIP/soporte2
Importancia de la cola con respecto a otras. Una
weight <peso>
cola ms importante ser atendida antes

Distribucin automtica de llamadas (ACD) 25 Distribucin automtica de llamadas (ACD) 26

Aplicacin: Queue Pausas


Permite a los clientes formarse en una cola Permiten al miembro dejar de tomar llamadas
Pueden introducirse posiciones en la cola para tomar temporalmente
preferencias Se especifican con las aplicaciones PauseQueueMember() y
UnpauseQueueMember()
[from-pstn]
exten => s,1,Answer(3000)
Ejemplo:
same => n(opciones),Background(digite-opcion) ; Pausar solamente la cola de ventas
same => n,WaitExten(4) exten => *60,1,PauseQueueMember(ventas,SIP/${CALLERID(num)})
exten => *61,1,UnpauseQueueMember(ventas,SIP/${CALLERID(num)})
same => n,Goto(opciones)
; Pausar todas las colas
exten => 1,1,Queue(ventas) exten => *70,1,PauseQueueMember(,SIP/${CALLERID(num)})
exten => 2,1,Queue(soporte) exten => *71,1,UnpauseQueueMember(,SIP/${CALLERID(num)})

Tambin podemos pausar desde el *CLI


En este ejemplo, ventas y soporte deben existir en el *CLI> queue pause member SIP/101 ; Para todas
queues.conf *CLI> queue unpause member SIP/101 queue ventas ; Para ventas

Distribucin automtica de llamadas (ACD) 27 Distribucin automtica de llamadas (ACD) 28


Miembros dinmicos
Permiten simular el uso de agentes
Tenemos que crear nuestras propias rutinas de login/logout
Opcional pedir usuario/contrasea
Prctica 7.1 Se agregan desde el dialplan (extensions.conf) usando
AddQueueMember() y RemoveQueueMember()
Si no se especifica la interfaz, agregar el canal desde el que
estemos marcando en este momento
; Login/logout a la cola de ventas
Crear un centro de exten => *80,1,AddQueueMember(ventas)
atencin a clientes exten => *81,1,RemoveQueueMember(ventas)

Tambin podemos agregar miembros desde el *CLI


*CLI> queue add member SIP/101 to ventas
*CLI> queue remove member SIP/101 from ventas

Distribucin automtica de llamadas (ACD) 30

Captulo Intermedio #3
Prctica 7.2
Asterisk DB
Agregar miembros
Ing. Christian Cabrera R.
dinmicos a una cola
Recapitulando Introduccin
Las variables solo existen mientras dura la llamada Asterisk posee su propio manejador de base de datos
Al terminar la llamada, se destruyen las variables sencillo
relacionadas Asterisk DB
Podemos guardar informacin como constantes en el Desde Asterisk 10, el AstDB est basado en SQLite
plan de llamadas En versiones inferiores se usaba la Berkeley DB
Algunas funciones requieren un medio de Se puede utilizar mediante funciones de Asterisk:
almacenamiento permanente para pasar datos entre DB()
sesiones DB_EXISTS()
DB_DELETE()

Asterisk Database 33 Asterisk Database 34

Asterisk DB Estructura jerrquica


DB() permite modificar y obtener valores contenidos Cada familia puede descomponerse en subniveles
en la base de datos de Asterisk Familias dentro de familias dentro de familias
DB(<familia>/<llave>) Cualquier nivel se crea automticamente al declararlo la
primera vez
Los valores se leen y escriben como si fueran Llave1 Valor1
variables
Set(DB(sigueme/100)=5546144330) Familia1 Llave2 Valor2
Noop(${DB(sigueme/100)})
Es posible especificar ms de una familia/llave SubFamilia1 Llave3 Valor3
DB(usuario/100/fwd)
Llave5
Familia2
(vaca)
Asterisk Database 35 Enlaces IAX y troncales SIP 36
DB_DELETE y DB_EXISTS Usos prcticos del AstDB
DB_DELETE() elimina la llave especificada Funciones que deban recordar el status de los
telfonos
DB_EXISTS() determina si la llave especificada DND (no molestar)
existe Redireccionamiento
Regresa un 1/0 segn si la llave existe o no Contraseas
Es indiferente a valores vacios *69 (ltimo nmero marcado)

Ambas funciones crean la variable Cualquier dato pequeo y nico que no tenga que ser
consultado para razones histricas
${DB_RESULT}
No recomendable para informacin que deba ser
Contiene el valor que exista en la BD modificada desde fuera de Asterisk
til para evitar reconsultarla
Asterisk Database 37 Enlaces IAX y troncales SIP 38

Caractersticas de
Ejemplo de DND
AstDB
[servicios]
exten => *31,1,Set(DB(dnd/${CALLERID(num):-1}00)=${destino})
Sencilla y fcil de usar en el dialplan
same => n,Playback(do-not-disturb&enabled)
same => n,Hangup No requiere controladores externos
exten => *22,1,Noop(${DB_DELETE(dnd/${CALLERID(num):-1}00)})
same => n,Playback(do-not-disturb&disabled)
Toda la informacin almacenada en un solo archivo
same => n,Hangup /var/lib/asterisk/astdb
[sub-llamada]
exten => s,1,Noop(Llamando a ${ARG1})
Permanece aunque Asterisk se reinicie
same => n,GotoIf(${DB_EXISTS(dnd/${ARG2})}?dnd)
same => n,Dial(${ARG1},10) Solo pueden extraerse datos nicos en base a una
same => n(dnd),Voicemail(${ARG2})
same => n,Hangup
familia y una llave
No pueden hacerse querys
[internas]
exten => _[12]00,1,Gosub(sub-llamada,s,1(SIP/usuario${EXTEN:0:1},100)) No son tablas, sino listas ordenadas

Enlaces IAX y troncales SIP 39 Asterisk Database 40


Caractersticas de
AstDB (2)
Rpida
Asterisk la utiliza para guardar informacin
Ej. Registro de usuarios SIP Prctica 8.1
Puede verse el contenido completo usando
*CLI> database show

Usar Asterisk DB para crear un redireccionamiento


de llamada

Asterisk Database 41

Plan de llamadas
contador

Usuarios SIP
saldo

Prctica 8.2 (opcional) llamada


micontexto servicios

menu permitidos
internas
salida
Usar Asterisk DB para bloquear extensiones al final permitir
del da adicional

entrada sucursal
PSTN/
Vecinos IAX
IAX autenticados
IAX annimos
Asterisk Database 44
Recapitulando
Todos los datos que Asterisk posee son estticos
Captulo Intermedio #4 Tenemos que recargar tras actualizarlos
Integracin con
bases de datos Podemos almacenar datos dinmicos en el AstDB
Pero el AstDB nunca se pens para datos grandes (como
CDRs)
Ing. Christian Cabrera R. No podemos hacer consultas estructuradas

45 Integracin con bases de datos 46

Introduccin Escogiendo el manejador


Asterisk puede integrarse con diferentes manejadores Asterisk soporta varias opciones de BD
de bases de datos MySQL
Leer configuracin PostgreSQL
Almacenar el detalle de llamadas LDAP
Consultar informacin externa (contraseas, tipo de cambio, SQLite
saldos, etc)
Tambin existe el estndar ODBC (Open Database
Facilita la integracin con interfases y scripts Connectivity)
externos Abre el acceso a manejadores como MSSQL Server, Oracle,
Usamos la BD como un medio alternativo donde guardar la Access, Informix y otros ms que no estn disponibles en
informacin Linux
Asterisk puede consultarla en paralelo que otros procesos
Puede escribir en BD y dejar que otro proceso la lea Nos enfocaremos en ODBC para tener un abanico de
opciones ms completo
Integracin con bases de datos 47 Integracin con bases de datos 48
Asterisk y ODBC unixODBC
Asterisk soporta ODBC a travs de 3 mdulos Nos permite conectarnos por ODBC con cualquier
res_odbc manejador
res_config_odbc Punto nico de interaccin con mltiples manejadores
cdr_odbc
Debemos conseguir la librera necesaria para el
manejador deseado
Puede tener costo
Linux ofrece conectividad con ODBC mediante el
paquete unixODBC

unixODBC

Integracin con bases de datos 49 Integracin con bases de datos 50

unixODBC (2) odbcinst.ini


ODBC -> MySQL requiere la librera libmyodbc Configura los controladores necesarios para
apt-get install unixodbc libmyodbc que ODBC interactue con la base de datos
Es necesario modificar 2 archivos: requerida
/etc/odbc.ini
Ejemplo para MySQL:
/etc/odbcinst.ini
Notar que estos archivos NO estn en la carpeta de Asterisk [MySQL]
odbc.ini configura los data sources (DSNs) de ODBC Description =MySQL driver
Driver =/usr/lib/odbc/libmyodbc.so
odbcinst.ini especifica que libreras usaremos Setup =/usr/lib/odbc/libodbcmyS.so
cuando nos conectemos con cada manejador

Integracin con bases de datos 51 Integracin con bases de datos 52


odbc.ini Instalando un CDR
Configura los data sources de ODBC Call Detail Recording
Detalle de llamadas
Ejemplo para MySQL: Por default, los CDRs se escriben en un archivo CSV
/var/log/asterisk/cdr-csv/Master.csv
[MySQL-asterisk]
Es ms til que los registros se guarden en una BD
Description=MySQL ODBC Driver Testing Podemos hacer queries y formular los reportes segn nos
Driver=MySQL convenga
Socket=/var/run/mysqld/mysqld.sock Asterisk requiere de tablas con un formato especfico
Server=localhost Si usamos ODBC, es necesario configurar 2 archivos
Database=asterisk dentro de Asterisk:
res_odbc.conf
cdr_odbc.conf
Integracin con bases de datos 53 Integracin con bases de datos 54

ODBC en Asterisk Todo relacionado


res_odbc.conf cdr_odbc.conf ; /etc/asterisk/res_odbc.conf ; /etc/asterisk/cdr_odbc.conf
[cdr-asterisk] [general]
Creamos los perfiles de Especificamos que tablas y dsn => MySQL-asterisk dsn => cdr-asterisk
conexin para Asterisk que perfil usar para
El usuario y contrasea guardar el CDR
debe haberse creado
previamente ; /etc/odbc.ini
[MySQL-asterisk]
[cdr-asterisk] [global] Driver=MySQL
enabled => yes dsn=cdr-asterisk
dsn => MySQL-asterisk loguniqueid=yes
; /etc/odbcinst.ini
username => cdruser dispositionstring=yes [MySQL]
password => cdrpass table=cdr Driver=/usr/lib/odbc/libmyodbc.so libmyodbc
pre-connect => yes Setup=/usr/lib/odbc/libodbcmyS.so

Integracin con bases de datos 55 Integracin con bases de datos 56


Realtime
Asterisk Realtime Architecture (ARA)
Capa intermedia que abstrae el cdigo de BD

Prctica 9.1 No es necesario hacer queries


Reemplaza archivos de texto por tablas
Convertimos los archivos de texto a formato tabular
Permite actualizar datos sin recargar el sistema

Configurar el CDR por ODBC (MySQL)

57 Integracin con bases de datos 58

Comparacin entre
mecanismos de configuracin
Dos versiones de Realtime
Diferentes mecanismos para diferentes propsitos: Esttico
Los archivos de texto se guardan en BD
Archivos de
CLI AMI Realtime
Es necesario hacer un reload tras cada cambio
texto
La nica diferencia es la ubicacin (BD vs. archivos)
Setup Inicial Bajo Alto Alto Medio
Mantenimiento Medio Medio Medio Bajo Dinmico
Escalabilidad Media Baja Media Alta Los valores se leen solo cuando se necesitan
Flexibilidad Baja Baja Baja Alta No se guardan en memoria
Los archivos de texto son excelentes para iniciar, Permite actualizar sin recargar
pero no son tan flexibles ni escalan tan bien como Solo algunos archivos lo soportan (extensions, sip, iax,
Realtime voicemail y queues)

Integracin con bases de datos 59 Integracin con bases de datos 60


Requerimientos Configurando Realtime
1. Escoger el manejador de base de datos: Creamos un nuevo perfil en res_odbc.conf para la
MySQL, PostgreSQL, SQLite3, LDAP, ODBC conexin con Realtime
En este ejemplo, usamos el mismo DSN que el que definimos
2. Configurar el archivo del modulo que le permita a para nuestra conexin del CDR
Asterisk interactuar con el manejador escogido [realtime-asterisk]
enabled => yes
res_config_mysql.conf, res_odbc.conf, etc dsn => MySQL-asterisk
username => realtimeuser
3. Crear la familia necesaria en extconfig.conf password => realtimepass
pre-connect => yes
Con esto le indicamos a Asterisk que futuras conexiones
En los ejemplos siguientes veremos la configuracin utilizarn estas credenciales
con ODBC Darle los privilegios necesarios al usuario realtimeuser en MySQL

Integracin con bases de datos 61 Integracin con bases de datos 62

Configurando Realtime (2) Ejemplo: extconfig.conf


Por cada tabla a consultar por Realtime, necesitamos Segn el manejador que elijamos (ODBC,MySQL, etc)
debemos crear el conector en el archivo adecuado
crear una familia en el archivo extconfig.conf (res_odbc.onf, res_config_mysql.conf, etc)
[settings] [settings]
<familia> => <controlador>,<conector>,<tabla> sippeers => odbc,realtime-asterisk,rt_sipfriends
sipusers => odbc,realtime-asterisk,rt_sipfriends
Donde: extensions => odbc,realtime-asterisk,rt_extensions
<familia> es una referencia a Realtime ; Tambin podemos mezclar diferentes conectores/manejadores
<controlador> es el tipo de BD a usar (ODBC, MySQL,, etc) saldos => mysql,crmdb,clientes
<conector> es el nombre del perfil creado para esta
conexin (res_config_mysql.conf, res_odbc.conf, etc) Se puede escoger cualquier nombre para los [conectores]
<tabla> es la tabla para esta familia de Realtime y para las tablas
Solo hay que recordar hacer referencia al nombre correcto

Integracin con bases de datos 63 Integracin con bases de datos 64


Configurando Realtime (3) Realtime SIP
Por default, el nombre de la familia se usa como tabla Almacena la configuracin de usuarios SIP
sipusers => mysql,asterisk Configuracin general permanece en sip.conf
es igual a
sipusers => mysql,asterisk,sipusers La tabla puede tener cualquier campo para SIP,
Debemos ocupar una tabla diferente para cada familia aunque no se usen todos
Los campos que cada familia requiere son nicos Si no se llenan, Asterisk usar los default
Comnmente, solo se comparten tablas para users/peers Podemos crear una tabla bsica, con solo 4 campos

El formato de la tabla est regido por el nombre de los Asterisk automticamente empieza a leer las tablas
campos requeridos en cuanto encuentra las familias:
La tabla extensions requiere de campos context, exten y priority sippeers
La tabla de sippeers requiere de host, type, username y context sipusers

Integracin con bases de datos 65 Integracin con bases de datos 66

Realtime SIP (2) Realtime extensions


Recordar que al usar Realtime no se guardan en Se puede usar para casi cualquier tipo de extensin
memoria los peers registrados (ej. no macros)
El sip show peers regresar vacio El resto debe existir en extensions.conf
Si queremos habilitar que se guarden en memoria, es En extensions.conf es necesario usar:
necesario activar el cache: switch => Realtime/[contexto]@[familia]
rtcachefriends=yes Para poder invocar Realtime correctamente
Tras activar el cache, re-registramos los telfonos Si [contexto] no se especifica, se usar el actual
para que se muestren
A partir de este momento comienzan a almacenarse en
Si [familia] no se especifica, se toma la palabra
memoria extensions

Integracin con bases de datos 67 Integracin con bases de datos 68


Realtime extensions (2) Todo relacionado
No hay que olvidar de utilizar switch ; /etc/asterisk/extensions.conf
[internas]
switch => Realtime/internas@extensions
[micontexto]
switch => Realtime/@
; /etc/asterisk/extconfig.conf
es lo mismo que usar sipusers => odbc,realtime-asterisk,rt_sipfriends
extensions=> odbc,realtime-asterisk,rt_extensions
[micontexto]
switch => Realtime/micontexto@extensions ; /etc/asterisk/res_odbc.conf
[realtime-asterisk] ; /etc/asterisk/cdr_odbc.conf
dsn => MySQL-asterisk [general]
Siempre es necesario utilizar switch, o nunca se [cdr-asterisk] dsn => cdr-asterisk
buscarn extensiones en la BD dsn => MySQL-asterisk

Integracin con bases de datos 69 Integracin con bases de datos 70

Funcin REALTIME
Una funcin muy poderosa que nos permite consultar
o cambiar valores de una tabla
Prctica 9.2 Se requiere de una familia para poder usarse
Sintaxis para lectura
Set(Fila=${REALTIME(familia,columna,valor,sep1)})
Sintaxis para escritura
Realtime SIP y Set(REALTIME(familia,columna,valor,campo)=nuevo)
Realtime extensions

71 Integracin con bases de datos 72


Leer valores Escribir valores
REALTIME nos regresa una cadena de texto Ejemplo:
Set(REALTIME(saldos,usuario,100,saldo)=302)
Ejemplo:
Set(Fila=${REALTIME(saldos,usuario,100,&)}) Es equivalente a
Nos arroja: UPDATE saldos
Set(Fila=usuario=100&saldo=123.45) SET saldo='302'
WHERE usuario=100
Es equivalente a
SELECT * FROM saldos WHERE usuario=100 Esto modificara la base de datos y guardara 302 en
el campo saldo
De ah podemos usar CUT para quedarnos con los
valores que queremos

Integracin con bases de datos 73 Integracin con bases de datos 74

Cmo funciona el CUT?


Tenemos esta lnea:
Set(Fila=${REALTIME(saldos,usuario,${CALLERID(num)},&)})
Prctica 9.3 Es equivalente a:
Set(Fila=usuario=100&saldo=1234.56)

Entonces:
Uso de Realtime Set(${CUT(Fila,&,2)})
personalizado
Es igual a:
Set(saldo=1234.56)

75 Integracin con bases de datos 76


Plan de llamadas Funciones personalizadas
contador
El mdulo func_odbc permite la posibilidad de crear
Usuarios SIP
saldo funciones personalizadas
llamada
micontexto servicios Podemos hacer cualquier consulta SQL
No estamos limitados a consultas de Realtime

menu permitidos Se configura desde el func_odbc.conf


internas
salida
permitir
La sintaxis es como sigue:
adicional
[FUNCION]
entrada sucursal dsn=<nombre del DSN en Asterisk>
PSTN/ readsql=<query de lectura>
Vecinos IAX
IAX autenticados writesql=<query de escritura>
IAX annimos
Integracin con bases de datos 77 Integracin con bases de datos 78

func_odbc Ejemplo 2:
[menu] ; extensions.conf
Ejemplo de funcin que consulte/actualice un saldo exten => s,1,Playback(welcome)
(func_odbc.conf): same => n,GotoIf($[${ODBC_PASS(${CALLERID(num)})}=""]?:YaTiene)
same => n,Playback(no-tiene-pass)
[SALDO] same => n(Regresa),Read(pass1,ingrese-pass)
dsn=realtime-asterisk same => n,Read(pass2,confirme-pass)
readsql=SELECT saldo FROM saldos WHERE usuario=${ARG1} same => n,GotoIf($[${pass1}=${pass2}]?:Regresa)
writesql=UPDATE saldos SET saldo=${VAL1} WHERE usuario=${ARG1} same => n,Set(ODBC_PASS(${CALLERID(num)})=${pass1})
same => n,Goto(continua)
Se invoca como una funcin simple same => n(YaTiene),Read(pass,please-enter-your)
same => n,GotoIf($[${pass}=${ODBC_PASS(${CALLERID(num)})}]?:YaTiene)
(extensions.conf) same => n(continua),Playback(demo-congrats)
same => n,Hangup
[micontexto]
exten => *333,1,Set(saldo=${ODBC_SALDO(${CALLERID(num)})}) [PASS] ; func_odbc.conf
same => n,Set(ODBC_SALDO(${CALLERID(num)})=$[${saldo}/2]) dsn=realtime-asterisk
same => n,Macro(saldo,${saldo}) readsql=SELECT pass FROM usuarios WHERE usuario = '${ARG1}'
writesql=UPDATE usuarios SEt pass = '${VAL1}' WHERE usuario = '${ARG1}'
Integracin con bases de datos 79 Integracin con bases de datos 80
Prctica 9.4 (opcional)

Crear una funcin personalizada


ODBC

81
Recapitulando

Captulo Avanzado #1 El dialplan se define en extensions.conf


Pueden incluirse contextos dentro de otros
Asterisk Extensions Para todo movimiento en el dialplan, tiene que existir
Language (AEL) una extensin y prioridad asignada
La sintaxis base es:
exten => <extensin>,<prioridad>,<aplicacin>
Ing. Christian Cabrera R.
Ejemplo
exten =>_ZXXXXXXX,1,Dial(SIP/amx/${EXTEN})

Asterisk Extensions Language 2

Introduccin AEL 2.0


Algunas funciones (ej. ciclos) son difciles de Sintaxis ms similar a un lenguaje de programacin
programar en el dialplan bsico Programadores preferirn esta sintaxis

Analizar un dialplan puede resultar complicado tras Permite crear estructuras ms uniformes para el
seguir instrucciones como goto y gosub manejo de extensiones
Menos cdigo intil, ms trabajo con menos

Se decide crear un lenguaje de programacin de


extensiones, conocido como Asterisk Extension Se configura en el archivo extensions.ael
Language (AEL)

Asterisk Extensions Language 3 Asterisk Extensions Language 4


Sintaxis general Contextos
Saltos de lnea Se definen con context. Un contexto va delimitado
context largadistancia { indiferentes
_01XXX. => { por sus llaves respectivas
Answer();
Dial(SIP/user/${EXTEN});
Bloques contenidos entre
{ y }; context default {
};
// Las extensiones van aqu
// Esto es un comentario Fin de comando con ; };
_00XXX. => {
NoOp(No permitido); Asignacin de variables
Hangup; natural Hay que cuidar no dejar extensiones fuera del
/* Tambien es contexto
un comentario */ Comentarios con //
}; (monolnea) y /* */ Siempre terminar la ltima } con ;
};
(multilnea)
Asterisk Extensions Language 5 Asterisk Extensions Language 6

Extensiones Inclusiones de contextos


Sintaxis: Todos los includes deben estar contenidos en el mismo
bloque:
<extensin> => <aplicacin>; context default {
1234 => Playback(tt-monkeys); context default {
includes {
8000 => { longdistance,16:00-23:59,mon-fri,*,*;
NoOp(uno); local;
<extensin> => { etiqueta:
<aplicacin 1>; NoOp(dos); };
<aplicacin 2>; NoOp(tres); };
}; }; Tambin pueden incluirse archivos enteros usando #include
Las prioridades ya no se _5XXX => goto 8000,etiqueta; #include more_extensions.ael
numeran, pero deben ser };
No olvidar que al dejar {} abiertos en un archivo, continan
escritas en orden abiertos en los que siguen
Asterisk Extensions Language 7 Asterisk Extensions Language 8
Variables Ciclos
Las variables y funciones se asignan directamente sobre el dialplan:
Soporte para for y while
context default { El valor intermedio tambin es evaluado ( $[] )
100 => { context ciclos {
CALLERID(num)=1234567890; 1 => {
NoOp(Mi CID es ${CALLERID(num)}); for (x=0; ${x}<3; x=${x}+1) {
}; Verbose(x vale ${x});
}; };
};
El lado derecho de la asignacin es evaluado, de manera que estas 2 => {
expresiones son equivalentes: y=10;
MIVAR=10/2; while (${y} >= 0) {
Set(MIVAR=$[10/2])
Verbose(y vale ${y});
Cuidado con lneas como y=${y}-1;
Fila=${REALTIME(saldos,usuario,100,&)}; };
Fila=usuario=100&saldo=1234.56;
};
};
Asterisk Extensions Language 9 Asterisk Extensions Language 10

Condicionales: ifTime,
Condicionales: if, else
random
_8XXX => {
Dial(SIP/${EXTEN},20);
iftime sigue la _8XXX => {
ifTime (9:00-18:00,mon-fri,*,*)
if ("${DIALSTATUS}"="BUSY") { misma sintaxis goto horario-habil,s,1;
NoOp(Linea ${EXTEN} ocupada); que en los else {
NoOp(No hay nadie para atender);
Busy(10); includes Playback(fuera-de-horario);
}
};
else random(51)
Voicemail(${EXTEN},u); NoOp(Esto aparecer el 51% de las veces); );
Hangup; random es til random(60)
}; NoOp(Este aparecer el 60% de las veces); );
para tareas else {
Tener cuidado de no cerrar el if antes del else aleatorias random(75)
Hacer esto: if {} else {}; NoOp(Esto aparecer un 30%);
Pero no esto: if {}; else {}; else
NoOp(Esto aparecer el otro 10%);
Lo mismo aplica para el resto de los condicionales };
};
Asterisk Extensions Language 11 Asterisk Extensions Language 12
Condicionales (switch) Macros
Equivalente a un if anidado Se definen e invocan como si fueran funciones de un
lenguaje de programacin
_888Z => {
switch(${EXTEN}) { Reciben variables en vez de argumentos
case 8881: macro llamada(exten,voicemail) {
NoOp(Marcaste 8881!);
break;
Dial(Local/${exten}@default);
pattern 888[3-9]: if (${DIALSTATUS} = BUSY)
NoOp(Marcaste 888 algo!); Voicemail(${voicemail},b);
break; else
default: Voicemail(${voicemail},u);
NoOp(Esta es la clausula default);
};
};
}; Para invocar un macro, se hace con un & al inicio
&llamada(0140,0120);
Qu nmero nunca se activa en el ejemplo?
Asterisk Extensions Language 13 Asterisk Extensions Language 14

context menu { ; extensions.ael


s => {
Playback(welcome);
if (${ODBC_PASS(${CALLERID(num)})}="") {
Playback(no-tiene-pass);
Cuenta=0;
Regresa:
Cuenta=${Cuenta}+1;
Read(pass1,ingrese-pass);
Read(pass2,confirme-pass);
if (${pass1}!=${pass2}) {
if (${Cuenta}>=3)
goto Fin;
Prctica 10.1
goto Regresa;
};
Set(ODBC_PASS(${CALLERID(num)})=${pass1});
}
else {
PidePass: Crear un pseudo marcador predictivo
Read(pass,please-enter-your);
if (${pass}!=${ODBC_PASS(${CALLERID(num)})}) usando Realtime y ciclos
goto PidePass;
};
Playback(demo-congrats);
Fin:
Hangup;
}; // Cierre de s
}; // Cierre de contexto
Asterisk Extensions Language 15
Plan de llamadas
contador

Usuarios SIP
saldo
Captulo Avanzado #2
llamada
micontexto servicios Asterisk Gateway
permitidos
micontexto-ael Interface (AGI)
menu internas
salida
permitir Ing. Christian Cabrera R.
adicional

entrada sucursal
PSTN/
Vecinos IAX
IAX autenticados
IAX annimos
Asterisk Extensions Language 17

Recapitulando Introduccin
Tenemos control del dialplan a partir del AGI no es un lenguaje: es una interfaz para controlar
extensions.conf Asterisk
No est ligado a ningn lenguaje en especfico
Podemos usar Perl, PHP, Python, C, Java, Bash, etc
Existe una lgica de programacin ms avanzada
utilizando extensions.ael Los scripts se colocan en la carpeta
/var/lib/asterisk/agi-bin
Similar al CGI de Apache
An con estas caractersticas ms avanzadas, algunas
funciones resultaran muy complejas de programar Se interactua con Asterisk a traves de flujos de datos:
utilizando el plan de llamadas STDIN, STDOUT y STDERR

Asterisk Gateway Interface 19 Asterisk Gateway Interface 20


Flujos Flujos (2)
AGI(script.agi) Ext. 777
Por cada escritura que se haga al STDOUT, existe una
lectura en el STDIN
get data "please-enter-your" "Por favor ingrese su"

Script
data=12345, result=200 Ingresa "12345"
Escribimos en el STDOUT para enviar comandos AGI
stream file "usuario-valido"
Procesamiento "Su usuario es vlido"
interno en BD
Leemos del STDIN para obtener respuestas
Y el proceso puede repetirse indefinidamente
AGI enva comandos a Asterisk
Escribimos en el STDERR para hacer notificaciones de El AGI toma todas las decisiones
sistema Asterisk enva respuestas al AGI
Hacia Linux, no hacia Asterisk Asterisk solo es un intermediario entre usuario <-> AGI
Asterisk Gateway Interface 21 Asterisk Gateway Interface 22

PHPAGI Ejemplo de AGI


Es una clase para PHP que nos permite ahorrar Reproducir los nmeros del 1 al 10:
cdigo
#!/usr/bin/php q
Permite concentrarnos en la aplicacin
<?php
Maneja automticamente el flujo de datos include phpagi.php;
Solo invocamos mtodos de la clase y se nos entrega el $agi = new AGI();
resultado, sin preocupaciones de formato
foreach (range(1,10) as $x) {
Creamos una instancia de la clase para despues $agi->say_number($x);
enviar/leer comandos desde all }
$var = $agi->get_variable(CALLERID(num)); $agi->hangup();
?>

Asterisk Gateway Interface 23 Asterisk Gateway Interface 24


Comandos Comandos (2)
answer get variable send image
AGI tiene su propia serie de comandos hangup send text
channel status
Estn ligados a aplicaciones bsicas de Asterisk control stream file noop set autohangup
database del receive char set callerid
An cuando la lista es reducida, cualquier aplicacin receive text set context
database deltree
de Asterisk est disponible para su uso con AGIs record file set extension
database get say alpha set music
Usar comando Exec
database put say date set priority
exec say datetime set variable
get data say digits stream file
get full variable say number tdd mode
get option say phonetic verbose
say time wait for digit

Asterisk Gateway Interface 25 Asterisk Gateway Interface 26

Captulo Avanzado #3
Asterisk Manager
Prctica 11.1 Interface (AMI) y archivos
de llamadas
Crear un juego interactivo
Ing. Christian Cabrera R.
usando AGIs
Recapitulando Asterisk Manager Interface
Nuestro conocimiento del plan de llamadas es El AMI es una interfaz computadora-PBX
reactivo Fue pensado para permitir el control de Asterisk desde
Creamos extensiones esperando que alguien las marque y software ajeno al PBX
actuamos acorde Poco amigable para un humano, pero fcil de procesar por
un sistema
En ocasiones, tenemos necesidad de que Asterisk
haga llamadas sin nadie que las origine Su puerto default es el TCP 5038
Marcadores predictivos, sistemas automticos, etc
Comunicacin en texto plano
Existen 2 maneras de instruir a Asterisk a que haga Se recomienda un tnel SSH para resolver esto
llamadas Asterisk 1.6+ soporta uso de TLS

Asterisk Manager Interface 29 Asterisk Manager Interface 30

Funciones principales Envo de comandos


Solicitar nuevas llamadas Los datos que se envan al AMI tienen la sintaxis:
Grabar bajo demanda Campo: valor
Transferir/colgar llamadas Segn la accin que se enve (Login, Originate,
Command, etc) son los campos a enviar.
Ejecutar comandos del CLI
Para ver la lista completa de acciones, usar
Acceso remoto al AstDB
Obtener el estado de las extensiones *CLI> manager show commands

Editar archivos de configuracin Un doble salto de lnea significa que el grupo de


valores termino y que el AMI debe procesar la
Recibir informacin de eventos del sistema solicitud
Asterisk Manager Interface 31 Asterisk Manager Interface 32
Ejemplo de autenticacin Archivo: manager.conf
Conexin por telnet al puerto TCP 5038 Aqu se activa el AMI y conceden los permisos
amx:~# telnet 127.0.0.1 5038
Siempre restringir a 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1. [general]
Escape character is '^]'. enabled = yes
Asterisk Call Manager/1.1 port = 5038
Action: login bindaddr = 0.0.0.0
Username: admin
Secret: mysecret [admin]
secret = mysecret
deny=0.0.0.0/0.0.0.0
Response: Success
permit=127.0.0.1/255.255.255.0
Message: Authentication accepted
read = system,call,log,verbose,agent,user,config,dtmf,
Para que el login sea vlido, debe existir un usuario creado en reporting,cdr,dialplan
el manager.conf write = system,call,agent,user,config,command,reporting,
originate
Asterisk Manager Interface 33 Asterisk Manager Interface 34

Usos del AMI Solicitando llamadas


Ventanas emergentes para agentes Tras hacer login, ejecutamos un comando como el
Sistemas de callcenter que le dan al agente informacin que sigue
sobre quien le llama Tener cuidado con la escritura, ya que el AMI no se lleva
bien con los errores
Aplicaciones de marcado automtico Action: Originate
Click 2 dial Channel: SIP/100
Context: micontexto
Llamadas via web Exten: 200
Marcadores automticos/predictivos Priority: 1
Timeout: 10000
Monitoreo del sistema ActionId: ABCDE12345

Consolas de operadora (Flash Operator Panel) Esto es equivalente a hacer un


*CLI> originate SIP/100 extension 200@micontexto

Asterisk Manager Interface 35 Asterisk Manager Interface 36


Interactuando con el AMI Call files
El AMI es la manera ms poderosa de controlar Los archivos de llamada son comandas de llamadas
Asterisk Instrucciones en texto que le dicen a Asterisk a quien, como
Por obvias razones, el AMI no es user-friendly y cuando llamar
El AMI nunca se pens para que un humano lo usara Se colocan en la carpeta
Existen clases en diferentes lenguajes que nos /var/spool/asterisk/outgoing
permiten conectarnos fcilmente al AMI
Sintaxis muy similar al Originate de AMI
Ej. AGI_AsteriskManager() de PHPAGI
Nota: los archivos deben ser movidos, no copiados
Si un archivo se copia al momento que se est creando,
puede dar problemas
Existe algo ms sencillo para hacer que Asterisk
solicite llamadas?

Asterisk Manager Interface 37 Asterisk Manager Interface 38

Ejemplo de call file Controlando los tiempos


Creamos un archivo Los archivos de llamada nos permiten especificar la
nano /root/test.call hora en que se ejecutarn
Channel: SIP/usuario2 Si cambiamos la fecha de modificacin al futuro, Asterisk
Application: Playback leer los archivos solo si la hora ocurre
Data: demo-congrats Esto se logra con el comando touch
Movmoslo a la carpeta adecuada
mv /root/test.call /var/spool/asterisk/outgoing
Qu ocurre? Es posible programar cientos de archivos para que
sean leidos al futuro
Podemos consultar todos los campos igual que con el Esto facilita hacer campaas de marcacin que no pasen de
comando Originate del AMI X llamadas por minuto
*CLI> manager show command originate
Asterisk Manager Interface 39 Asterisk Manager Interface 40
Captulo Avanzado #4
Prctica 12.1 Cifrado de llamadas en
SIP
Crear un verdadero marcador predictivo que lea un
Ing. Christian Cabrera R.
saldo adeudado

Recapitulando Antecedentes
Asterisk usa SIP como su principal protocolo de Asterisk 1.4
comunicacin No exista mecanismo de seguridad para SIP
Una llamada SIP viaja en 2 flujos diferentes: Asterisk 1.6
La sealizacin (5060 UDP) Se soporta SIP sobre TCP
La voz (RTP aleatorio) Se agrega soporte experimental para TLS (solo se encripta
la sealizacin)
Por default, ninguno de los dos va cifrado
Cualquiera que intercepte los paquetes puede reconstruir la Asterisk 1.8
conversacin Se soporta TLS completamente
Se agrega soporte para Secure RTP (SRTP). La voz viaja
cifrada

Cifrado de llamadas en SIP 43 Cifrado de llamadas en SIP 44


Transport Layer Security
Flujo del handshake
(TLS)
Es un protocolo criptogrfico extensible para
intercambio seguro de datos
Continuacin/evolucin de SSL (Secure Sockets
Layer)
Versin actual: TLS 1.2
TLS 1.2 > TLS 1.1 > TLS 1.0 > SSL 3.0

Cifrado de llamadas en SIP 45 Cifrado de llamadas en SIP 46

TLS Handshake TLS Handshake (2)


Cliente Servidor Resultado Cliente Servidor Resultado
ClientHello Cliente enva el # de la ms alta versin de TLS ChangeCipherSpec Todo lo que venga a continuacin viene
soportada, un nmero aleatorio, algoritmos de autenticado/cifrado
cifrado y compresin posibles Finished Se enva un hash del condensado de todos los
ServerHello Servidor escoge la versin de TLS ms alta mensajes anteriores
posible y los algoritmos a usar. Enva un nmero ChangeCipherSpec Todo lo que venga a continuacin viene
aleatorio autenticado/cifrado
Certificate Servidor enva su certificado para que cliente Finished Se enva un hash del condensado de todos los
pueda autenticarlo mensajes anteriores
ServerHelloDone Servidor finaliza handshake A partir de aqu, todo viaja encriptado
ClientKeyExchange Cliente enva PreMasterSecret, llave pblica o
nada (segn algoritmo elegido)
MasterSecret Se calcula el MasterSecret

Cifrado de llamadas en SIP 47 Cifrado de llamadas en SIP 48


Configurando Asterisk Creando la llave y
para TLS certificado
Se necesita lo siguiente: Ya existe un script proporcionado dentro del cdigo
Un certificado digital (para el servidor) fuente de Asterisk:
Preparar el certificado para Asterisk <astsrcdir>/contrib/scripts/ast_tls_cert
Configurar Asterisk Lo invocamos dando los siguientes argumentos:
Opcional: Instalar el certificado de CA en el cliente IP de Asterisk
Nombre de la empresa
Directorio que almacenar la llave y certificado
OpenSSL nos da herramientas para crear certificados
./ast_tls_cert -C <IP> -O "<Empresa>" -d <Directorio>
Podemos usar certificados autofirmados, pero eso permitira
que cualquiera nos reemplace El sistema nos pedir una contrasea que deberemos
confirmar para firmar nuestros certificados

Cifrado de llamadas en SIP 49 Cifrado de llamadas en SIP 50

Configurando Asterisk Configurando Asterisk (2)


Editamos sip.conf bajo [general] Qu significa cada opcin en [general]?
tlsenable=yes Campo Significado
tlsbindaddr=192.168.1.x Habilita el uso de TLS en todo el equipo (requiere
tlsenable
tlscertfile=/etc/asterisk/certs/asterisk.pem reiniciar Asterisk)
tlscafile=/etc/asterisk/certs/ca.crt Direccin IP donde escucharemos por nuevas peticiones
tlsbindaddr
TLS (debe coincidir con la IP del certificado)
tlsdontverifyserver=yes
tlscertfile Ubicacin del certificado para TLS
tlscipher=ALL
Ubicacin del certificado para la entidad certificadora
tlsclientmethod=tlsv1 tlscafile
(CA)
Activar/Desactivar la verificacin del servidor (solo se usa
Por ltimo, habilitamos TLS al cliente SIP (tambin tlsdontverifyserver
cuando Asterisk trabaja como cliente)
podemos bajo [general]) tlscipher Mtodos de cifrado permitidos (DES, 3DES, AES, etc)
transport=tls tlsclientmethod Versin de TLS mnima a permitir en el cliente

Cifrado de llamadas en SIP 51 Cifrado de llamadas en SIP 52


Transporte seguro,
Requisitos para usar SRTP
carga no
Con TLS, los encabezados SIP ya no pueden ser Conseguir, compilar e instalar la librera libSRTP
descifrados http://srtp.sourceforge.net/srtp.html
Sin embargo, es posible interceptar la voz, aunque no
conozcamos los datos de la llamada Recompilar Asterisk para agregar el soporte para el
mdulo res_srtp.so
Para hacer que la voz viaje cifrada, requerimos hacer
uso de Secure RTP (sRTP) Editar el archivo sip.conf para habilitar la
Se soporta desde Asterisk 1.8 encriptacin (encryption=yes) para cada usuario SIP
En versiones previas, solo era posible lograr el cifrado que queramos que la use.
completo del medio (ej. VPN), y no todos los telfonos son
capaces de soportar esto.

Cifrado de llamadas en SIP 53 Cifrado de llamadas en SIP 54

Ejemplo de usuarios
Llamada con UDP
SIP seguros
[usuario1] Con Wireshark se observan estos paquetes:
type=friend
host=dynamic
context=micontexto
transport=tls
encryption=yes
secret=aYtK4I1!

Asterisk Manager Interface 55 Cifrado de llamadas en SIP 56


Llamada con UDP (2) Llamada con UDP (3)
El anlisis de VoIP detecta fcilmente la llamada: Es posible graficarla:

Cifrado de llamadas en SIP 57 Cifrado de llamadas en SIP 58

Llamada con UDP (4) Llamada con TLS/sRTP


E inclusive, guardar el audio: No es posible ver el contenido SIP

Cifrado de llamadas en SIP 59 Cifrado de llamadas en SIP 60


Llamada con TLS/sRTP (2)
El stream de la llamada no es detectado

Prctica 13.1

Configurar SIP mediante TLS y sRTP

Obviamente, no es posible graficarla ni reproducir el


audio
Cifrado de llamadas en SIP 61

Recapitulando
Podemos cifrar nuestras llamadas para impedir que
Captulo Avanzado #5 sean escuchadas por alguien ms
Sistemas malintencionados pasan llamadas a travs
Seguridad en Asterisk de nuestro PBX, con costo para nosotros
Errores comunes en administracin pueden ocasionar
grandes costos (miles de dlares en una noche)
Ing. Christian Cabrera R. Contraseas inseguras
Puertos abiertos
Validar al telfono, no al usuario

Seguridad en Asterisk
Introduccin 1) Contraseas inseguras
Instalar Asterisk es muy rpido No usemos secret=100 si nuestro username=100
Es ms rpido an si usamos distribuciones todo en uno (ej.
Elastix o Trixbox) Preferible usar contraseas aleatorias, difciles de
recordar
Por la urgencia de levantar un sistema, podemos MD5(RAND())
descuidar algunos puntos de seguridad clave openssl rand -base64 12
Existen sistemas cuya nica intencin es ganar Si usamos distribuciones como Elastix, siempre
acceso a nuestro equipo para poder cursar llamadas cambiar las contraseas default
Es conveniente tomar muy en cuenta las siguientes Si mas gente la conoce, es ms fcil de atacar
recomendaciones de seguridad

Seguridad en Asterisk Seguridad en Asterisk

2) Limitar el acceso a
1) Contraseas inseguras
ciertas IPs
En FreePBX/Elastix/Asterisk, cambiar: Si no tenemos agentes externos, Por qu permitir
root de ssh que las extensiones se registren desde cualquier IP?
root de MySQL
Usar permit y deny segn convenga en sip.conf y
Asterisk Manager Ingerface (manager.conf)
manager.conf
admin de FreePBX
Tabla MySQL asterisk.ampusers
deny=0.0.0.0/0.0.0.0
asteriskuser en /etc/amportal.conf permit=192.168.1.1/255.255.255.0
admin de Elastix Mejor an, cerrar los puertos a nivel de firewall
Tabla SQLite3 /var/www/db/acl.db Usar iptables
Todos los usuarios SIP/IAX

Seguridad en Asterisk Seguridad en Asterisk


3) Rechazar sin dar 4) Limitar llamadas
informacin simultneas
Si hemos de recibir conexiones desde afuera, Si un atacante ganara acceso a nuestro sistema,
entregar siempre el mismo mensaje de error limitar la cantidad de llamadas simultneas posibles
Usar alwaysauthreject=yes en sip.conf No evita el dao, pero lo reduce
Usar un [macro-contador] para estos casos
Esto impedir que los atacantes conozcan si el
usuario es vlido o no
Esto ayuda en casos que a usuarios legtimos les fue
robada su contrasea

Seguridad en Asterisk Seguridad en Asterisk

6) Negar llamadas
5) Autenticar al usuario
annimas
Hay llamadas muy caras que son espordicas (ej. Definir adecuadamente el context default dentro de
Internacionales) [general] en sip.conf
Podemos pedir contrasea via DTMFs Cualquier usuario NO autenticado puede marcar a travs de
l

Si la extensin ya se registro, pedir autenticacin al


usuario al momento de hacer llamadas Nuestro contexto default siempre debe ser limitado
Un PIN con Authenticate es muy sencillo de implementar
Nunca permitir llamadas que puedan tener costo

Seguridad en Asterisk Seguridad en Asterisk


8) Patrones de marcado
7) Bloquear fuerza bruta
claros
Herramientas como fail2ban pueden analizar logs y No utilizar patrones como
bloquear mltiples intentos de registro _9.,1,Dial(DAHDI/g0/${EXTEN:1})
Inclusive enviar correos de la notificacin mejor usar
_9ZXXXXXXX,1,Dial(DAHDI/g0/${EXTEN:1})
Posibilidad de ataques de inyeccin
Aplicable a cualquier log (SSH, HTTP, etc)
[incoming]
exten => _X.,1,Dial(SIP/${EXTEN})
exten => _X.,n,Hangup()
Qu ocurre si el atacante enva llamada hacia
9100&DAHDI/g0/0033123456789?
Recordar que el punto (.) coincide con TODO
Seguridad en Asterisk Seguridad en Asterisk

9) Confianza
Cuidar a que dispositivos les permitimos la
autenticacin sin contrasea
insecure=invite
Siempre usar permit/deny en conjuncin con insecure
Prctica 14.1
No usar el parmetro de host como una restriccin de
IP
Para eso existe permit/deny
Aseguramiento del conmutador

Seguridad en Asterisk 76
Asterisk Manager Interface
Qu les pareci el curso? Contacto
Queremos que la siguiente experiencia sea an
mejor, as que pedimos su muy valioso apoyo para Christian Cabrera R.
contestar una encuesta sobre el curso christian@enlaza.mx
enlaza.mx/encuesta (55) 50 181 181
Es annima SIP/enlaza.mx
No tienen que proporcionar su nombre si no lo desean
Twitter y Facebook:
@AsteriskMX
@EnlazaMX
Asterisk Manager Interface 77 Asterisk Manager Interface 78

You might also like