sistemas de voip con asterisk

108
Sistemas de VoIP con Asterisk Modulo III

Upload: gabriel-astudillo

Post on 14-Dec-2014

17.131 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Sistemas de VoIP con Asterisk

Sistemas de VoIP con Asterisk

Modulo III

Page 2: Sistemas de VoIP con Asterisk

¿ Que es Asterisk?

Asterisk es una central telefónica IP (IPBX)

de código abierto que corre sobre linux y que

es compatible con la mayoría de tecnologías

de VoIP (SiP, H323, MGCP, IAX, ) y de

telefonía tradicional Análoga y Digital (TDM,

ISDN, BRI, PRI)

Brinda todos los servicios de una PBX

propietaria tradicional

Page 3: Sistemas de VoIP con Asterisk

Preparando un Sistema para Asterisk

Selección de Hardware para el Servidor

En términos de requerimientos asterisk es similar a aquellas

aplicaciones embebidas y de tiempo real

En diseños de grandes aplicaciones es común observar una

distribución de de funcionalidades entre múltiples servidores

La flexibilidad es una de las razones de peso por las cuales

los negocios de rápido crecimiento toman la decisión de

implementarlo

Page 4: Sistemas de VoIP con Asterisk

Preparando un Sistema para Asterisk

Selección de Hardware para el Servidor

Page 5: Sistemas de VoIP con Asterisk

Preparando un Sistema para Asterisk

Selección de Hardware para el Servidor

La selección del hardware puede ser muy sencilla, como

muy complicada al mismo tiempo:

Sencilla porque cualquier plataforma x86 puede servir

Complicada porque el rendimiento del sistema dependerá del

cuidado que se tenga al momento de seleccionar el hardware

Si estamos implementando un sistemas de hobbie o de

aprendizaje podemos obviar este diseño, pero si se trata de

una solución corporativa es importante tener en cuenta las

siguientes diapositivas

Page 6: Sistemas de VoIP con Asterisk

Preparando un Sistema para Asterisk

Consideraciones respecto a rendimiento

El máximo numero de conexiones simultaneas:

Cada conexión incrementa carga al sistema

El porcentaje del trafico que requiere un intensivo

procesamiento DSP cuando se usa códecs de compresión

El procesamiento DSP que asterisk hace por software tiene un

impacto directo en el numero de llamadas concurrentes que se

pueden soportar. Ejem: 50 G.711 vs. 10 G.729

Que nivel de conferencia va a brindar el sistema y con que

frecuencia se hará

Page 7: Sistemas de VoIP con Asterisk

Preparando un Sistema para Asterisk

Consideraciones respecto a rendimiento

Cancelación de Eco :

Se utiliza cuando se utilizan redes PSTN, es una función matemática

por lo tanto aumenta los recursos de procesamiento

Como alternativa existen las tarjetas para cancelación de ECO y

traducción de códecs que ofrece digium

Page 8: Sistemas de VoIP con Asterisk

Preparando un Sistema para Asterisk

Consideraciones respecto a rendimiento

Observar los puertos PCI

Page 9: Sistemas de VoIP con Asterisk

Preparando un Sistema para Asterisk

Consideraciones adicionales:

Fuentes de poder

Switch PoE

Medio Ambiente

Humedad

Temperatura

Puesta a Tierra

Seguridad

Page 10: Sistemas de VoIP con Asterisk

Requerimientos de Hardware

No indispensable:

Tarjeta de telefonía Analoga TDM400p (4

FXS & FXO), TDM2400p (24 FXS & FXO)

Tarjeta de telefonía Digital TE205p (2 E1

En un ambiente netamente IP solo se necesita cargar

el modulo ztdummy (USB timing)

Page 11: Sistemas de VoIP con Asterisk

Requerimientos de software

Primero debemos averiguar la versión exacta de nuestro kernel con el comando: uname -adeberíamos ver algo como:

[root@asterisk ~]# uname -aLinux asterisk.fiec.espol.edu.ec 2.6.18-8.el5 #1 SMP Thu Mar 15 19:57:35 EDT 2007 i686 i686 i386 GNU/Linux

Page 12: Sistemas de VoIP con Asterisk

Requerimientos de software

Luego deberíamos verificar si tenemos instaladas las fuentes del kernel, para ello utilizamos el comando rpm -q kernel-devel, deberiamos ver algo como esto:

[root@asterisk ~]# rpm -q kernel-develkernel-devel-2.6.18-8.el5

Si no están instaladas podemos hacerlo con yum de la siguiente forma:

yum install kernel-devel

Page 13: Sistemas de VoIP con Asterisk

Requerimientos de software

Ahora si, debemos ejecutar los siguientes comandos para verificar si tenemos instalados los paquetes:

rpm -q bisonrpm -q bison-develrpm -q ncursesrpm -q ncurses-develrpm -q zlibrpm -q zlib-develrpm -q opensslrpm -q openssl-develrpm -q gnutls-develrpm -q gccrpm -q gcc-c++

Page 14: Sistemas de VoIP con Asterisk

Requerimientos de software

Si alguno de estos paquetes falta, lo instalamos con yum install nombre-del-paquete

por ejemplo:

[root@asterisk ~]# rpm -q gnutls-develpackage gnutls-devel is not installed[root@asterisk ~]# yum install gnutls-devel

Page 15: Sistemas de VoIP con Asterisk

Requerimientos de software

5.- Un paso más antes de empezar con la instalación, CentOS no instala las fuentes del kernel en el directorio /usr/src/linux como esta escrito en los Makefile de Zaptel y Asterisk, para ello nos vamos a /usr/src/ y creamos un link llamado linux hacia el directorio con las fuentes del kernel el cual esta ubicado en /usr/src/kernels/mi_version_del_kernel (aqui utilizamos la información obtenida del paso 2) estos son los resultados que esperamos:

[root@asterisk ~]# cd /usr/src/[root@asterisk src]# ln -s kernels/2.6.18-8.el5-i686/ linux[root@asterisk src]# lltotal 28drwxr-xr-x 2 root root 4096 jun 13 08:43 asteriskdrwxr-xr-x 3 root root 4096 jun 12 13:17 kernelslrwxrwxrwx 1 root root 26 jun 13 09:12 linux -> kernels/2.6.18-8.el5-i686/

Page 16: Sistemas de VoIP con Asterisk

Asterisk add-ons

cd /usr/src/asterisk-addons

./configure

make

make install

Page 17: Sistemas de VoIP con Asterisk

Opciones del inicio de asterisk

asterisk –h muestra la ayuda

Esta es una lista de las opciones mas usadas:

-c Console, nos permite conectarnos a la consola de asterisk o CLI.

-v Verbosity. Es usada para indicar el numero de lineas que queremos

mostrar en el debug .

-g Core dump. Si asterisk termina inesperdamente, crea un archivo de

core en el que se puede determinar las causas de la falla

-r Remote. Esto es usado para reconectarnos remotamente a un

proceso de Asterisk que este corriendo con aterioridad

Page 18: Sistemas de VoIP con Asterisk

Directorios usados por asterisk

/etc/asterisk/

Contiene los archivos de configuración de Asterisk

(.conf). Sin embargo el archivo zaptel.conf se

encuentra ubicado en el directorio /etc/.

Cualquier otro software puede usar el hardware y el

driver de zaptel, por lo tanto el archivo zaptel.conf

no esta ubicado directamente en el directorio

/etc/asterisk

Page 19: Sistemas de VoIP con Asterisk

Directorios usados por asterisk

/usr/lib/asterisk/modules/

Este directorio contiene todos los módulos que asterisk

puede llegar a cargar , dentro de este directorio se

encuentran varias aplicaciones, codecs, formatos y canales

usados por Asterisk. Por defecto Asterisk carga todos estos

módulos al inicio. (modules.conf).

/var/lib/asterisk/

Este directorio contiene el archivo astdb y una serie de

subdirectorios. astdb contiene la información de la base de

datos local de Asterisk, una especie de Registro de Win

Page 20: Sistemas de VoIP con Asterisk

Directorios usados por asterisk

Los subdirectorios dentro de /var/lib/asterisk son:

agi-bin/

Contiene scripts personales

firmware/

Contiene imágenes binarias de firmware de varios

dispositivos compatibles con asterisk

images/

Las aplicaciones que se comunican con canales que

soportar imagenes, buscan en este directorio

Page 21: Sistemas de VoIP con Asterisk

Directorios usados por asterisk

keys/

Aquí se guardan las llaves RSA que se utilizaran en las

comunicaciones peer to peer (IAX2)

mohmp3/

Las aplicaciones que usan music on hold buscaran por

defecto los archivos de audio en este directorio

sounds/

Aquí se buscan por defecto los sonidos básicos de asterisk

reproducios por playback( ) y background( )

Page 22: Sistemas de VoIP con Asterisk

Directorios usados por asterisk

/var/log/asterisk

Como el nombre lo indica en esta carpeta asterisk

guarda los logs o archivos de eventos

/var/log/asterisk/cdr-cvs

Este directorio es usado para guardar los CDRs en

un formato CVS o comma-separated value

/var/spool/asterisk/ Este directorio contiene algunos subdirectorios, incluyendo outgoing/, qcall/,

tmp/, y voicemail/. Asterisk monitorea estos directorios en busca de archivos de

texto que contienen información respecto a requerimiento de llamadas.

Page 23: Sistemas de VoIP con Asterisk

Configuración inicial de Asterisk

En esta primera parte vamos a asumir que

tenemos una tarjeta Digium TDM11B es decir con 1

puerto FXS y un puerto FXO. Los archivos que

vamos a modificar son:

/etc/zaptel.conf

En este archivo se hace la configuración de “bajo

nivel” para la interfaz de hardware. Vamos a

configurar un canal FXS y FXO. #ztcfg -vv

Page 24: Sistemas de VoIP con Asterisk

Configuración inicial de Asterisk

/etc/asterisk/zapata.conf

En este archivo, vamos a configurar para Asterisk

la interfaz de hardware, en otras palabras aquí

configuraremos los canales analógicos.

CLI>module reload chan_zap.so

/etc/asterisk/extensions.conf

En este archivo se creara el plan de marcado, el

primero que haremos será muy primitivo pero

permitirá comprobar que el sistema funciona.

CLI>module reload pbx_config.so

Page 25: Sistemas de VoIP con Asterisk

Configuración inicial de Asterisk

/etc/asterisk/sip.conf

En este archivo configuraremos los canales SIP

CLI>module reload chan_sip.so

/etc/asterisk/iax.conf

En este archivo configuraremos los canales IAX

CLI>module reload chan_iax2.so

Page 26: Sistemas de VoIP con Asterisk

Antes de empezar…

Vamos a hacer un respaldo de nuestros archivos

para ello en el terminal ejecutamos:

cp /etc/zaptel.conf zaptel.sample

cp /etc/asterisk/zapata.conf zapata.sample

cp /etc/asterisk/extensions.conf

extensions.sample

cp /etc/asterisk/sip.conf sip.sample

cp /etc/asterisk/iax.conf iax.sample

Page 27: Sistemas de VoIP con Asterisk

FXS y FXO para Asterisk

Mas simple:

Un puerto FXO no genera tonos de marcado, por el

contrario los recibe.

Un puerto FXS genera un tono de marcado y el voltaje

necesario para hacer indicar a la estación que hay una

llamada entrante.

Los puerto son definidos en los archivos de configuración de

acuerdo a la señalización que usan y en sentido contrario al

tipo de puerto que físicamente son.

Es decir un puerto FXS se define en la configuración como

FXO y viceversa.

Page 28: Sistemas de VoIP con Asterisk

FXS y FXO para Asterisk

En tarjetas Digium y en general el modulo FXS es

verde, el FXO es rojo

IMPORTANTE: Conectar la PSTN en un modulo

verde puede destruir el modulo y hasta la tarjeta !!

Page 29: Sistemas de VoIP con Asterisk

TDM400P

PCI 2.2

Fuente de Voltaje

FXO PortsFXS Ports

Entradas RJ-11

Page 30: Sistemas de VoIP con Asterisk

Configuración de un canal FXO

Configuración del hardware en zaptel

La siguiente configuración mínima define un canal fxo con

señalización fxs:

editamos /etc/zaptel.conf

fxsks=4

loadzone=us

defaultzone=us

 La primera línea define el tipo de señalización y el protocolo

para el canal 4:

Loopstart (ls) Groundstart (gs) Kewlstart (ks)

Page 31: Sistemas de VoIP con Asterisk

Configuración de un canal FXO

La diferencia esta en la forma como el equipo remoto

solicita el tono de marcado, en groundstart lo hace

mandando momentáneamente a tierra la línea, loopstart lo

hace en cambio usando un corto momentáneo para pedir

tono de marcado. Kewlstart es lo mismo que loopstart pero

es un poco mas eficiente en cuanto permite detectar

desconexiones remotas.

Kewlstart es el mas usado en las implementaciones de

asterisk y  funciona bien con las líneas de nuestra localidad.

Page 32: Sistemas de VoIP con Asterisk

Configuración de un canal FXO

loadzone configura un grupo de indicaciones (determinadas

en zonedata.c) relativas a los sonidos de la línea en

determinada región o país, tales como tono de marcado,

ciclos de timbrado, tono de ocupado, etc.

defaultzone es usada si ninguna zona se ha especificado

para un canal en particular

 Para comprobar los cambios hacemos ztcfg -vvv

Page 33: Sistemas de VoIP con Asterisk

Configuración de un canal FXO

Configuración del hardware en zapata

Asterisk usa la información en /etc/asterisk/zapata.conf para

determinar las configuraciones del hardware de telefonía

instalado en el sistema.

El archivo zapata.conf también controla las características y

funcionalidades asociadas con los canales físicos: caller id,

llamada en espera, cancelación de eco y muchas mas.

Page 34: Sistemas de VoIP con Asterisk

Configuración de un canal FXOConfiguración del hardware en zapata: /etc/asterisk/zapata.conf

[channels]

; canales físicos:

; opciones por defecto para todos los canales

usecallerid=yes

hidecallerid=no

callwaiting=no

threewaycalling=yes

transfer=yes

echocancel=yes

echotraining=yes

 ; definicion de canales:

context=incoming ; llamadas entrantes se dirigen a [incoming] en extensions.conf

signalling=fxs_ks ; Use señalizacion FXS para un canal FXO

channel => 4 ; PSTN se conecta al puerto 4

Page 35: Sistemas de VoIP con Asterisk

Configuración de un canal FXO

Configuración del hardware en zapata

La sección [channels] determina el método de señalización

para los canales físicos y sus opciones.

Cuando una opción es definida esta es heredada hacia

abajo al resto del archivo.

Un canal se define usando channel => , y cada definición

del canal hereda todas las opciones definidas por encima de

esa línea.

usecallerid=yes habilita el caller ID

hidecallerid=no

No se ocultará el caller ID para las llamadas salientes.

Page 36: Sistemas de VoIP con Asterisk

Configuración de un canal FXO

Configuración del hardware en zapata

callwaiting=no

La llamada en espera es desactivada para una linea FXO

threewaycalling=yes

Permite que una llamada activa pueda ser puesta en espera

con un hook flash luego podemos llamar a un tercero e

invitarlo a la conversación con otro hook flash.

transfer=yes

Permite transferir llamadas con un hook flash; requiere que

three-way calling este activada

Page 37: Sistemas de VoIP con Asterisk

Configuración de un canal FXO

Configuración del hardware en zapata

echocancel=yes

Habilita la cancelación de eco, se requiere especialmente

en líneas análogas.

echotraining=yes

Le indica a asterisk que envíe un tono a través de la

línea al inicio de la llamada para medir el eco y luego

aprender de el mas rápidamente.

 Cuando una llamada ingresa a una interfaz FXO, Usted

desearía que se realice alguna acción verdad ?

Page 38: Sistemas de VoIP con Asterisk

Configuración de un canal FXO

Configuración del hardware en zapata

La acción a realizar es configurada dentro de un bloque de

instrucciones llamado contexto el mismo que se configura

en el extensions.conf.

Las llamadas entrantes en la interfaz FXO son

direccionadas al contexto incoming con la línea

context=incoming.

Finalmente como un canal FXO usa señalización FXS, la

definimos en la linea signalling=fxs_ks

Page 39: Sistemas de VoIP con Asterisk

Configuración de un canal FXO

CONFIGURACION DEL DIALPLAN

[incoming]

;las llamadas que provienen del puerto FXO son

direccionadas a este contexto desde zapata.conf

exten => s,1,Answer()

exten => s,2,Echo()

Page 40: Sistemas de VoIP con Asterisk

Configuración de un canal FXS

La configuración en muy similar a un canal FXO

Configuración del Hardware en zaptel.conf

fxoks=1

fxsks=4

loadzone=us

defaultzone=us

ztcfg –vv:Zaptel Configuration

======================

Channel map:

Channel 01: FXO Kewlstart (Default) (Slaves: 01)

Channel 02: FXS Kewlstart (Default) (Slaves: 02)

2 channels configured.

Page 41: Sistemas de VoIP con Asterisk

Configuración de un canal FXS

Configuración del hardware en zapata.conf

La configuración viene prácticamente a ser la misma con la adición de

la línea inmediate=no y las líneas referentes al puerto fxs:

 [channels]

; canales físicos:

; opciones por defecto para todos los canales

usecallerid=yes

hidecallerid=no

callwaiting=no

threewaycalling=yes

transfer=yes

echocancel=yes

echotraining=yes

inmediate=no

Page 42: Sistemas de VoIP con Asterisk

Configuración de un canal FXS

; definición de canales:

context=internal ; Usaremos el contexto [internal] para las

extensiones en el extensions.conf

signalling=fxo_ks ; Use señalización FXO para un canal FXS

channel => 1 ; teléfono conectado al puerto 1

context=incoming ; Las llamadas entrantes se dirigen hacia

[incoming] en elextensions.conf

signalling=fxs_ks ; Use señalización FXS para un canal FXO

channel => 4 ; PSTN se conecta al puerto 4

 

Page 43: Sistemas de VoIP con Asterisk

Configuración de un canal FXS

CONFIGURACION DEL DIALPLAN

Para probar la configuración que hemos realizado vamos a

agregar las siguientes líneas a nuestro dial plan:

[internal]

exten => 611,1,Answer( )

exten => 611,2,Echo( )

 

 

Page 44: Sistemas de VoIP con Asterisk

Configuración de un canal SIP

El archivo /etc/asterisk/sip.conf empieza con la sección

[general] que contiene las opciones por defecto y

configuraciones de canal para todos los usuarios y peers

definidos dentro del sip.conf.

Podemos sobrescribir estas configuraciones para un

usuario/peer especifico haciendo los cambios en la

configuración de cada usuario/peer

 

 

Page 45: Sistemas de VoIP con Asterisk

Configuración de un canal SIP

[general]

context=default

srvlookup=yes

[201]

type=friend

secret=201

qualify=yes ; Qualify peer is no more than 2000 ms away

nat=no ; este usuario no esta a travez de nat

host=dynamic ; este usuario se registrara con nosotros

canreinvite=no ; por defecto asterisk intentara hacer el reenvio

context=internal ; el contexto internal controla el comportamiento de

este canal

 

 

Page 46: Sistemas de VoIP con Asterisk

Configuración de un canal SIP

srvlookup=yes

Permite que asterisk use los registro DNS SRV para reenviar llamadas usando

nombres de dominio

[201]

Los usuarios se definen entre [] y puede ser cualquier combinación

alfanumerica

type=friend

Los usuarios pueden ser tipo user, peer o friend, user se utiliza para permitir que

el usuario solo pueda recibir llamadas, peer para hacer llamadas salientes y

friend ambas.

secret=201

Secret es el password usado para la autenticación

qualify=yes

Esta linea le permite a asterisk monitorear la latencia entre el usuario y el

servidor por defecto hasta 2000 ms

 

 

Page 47: Sistemas de VoIP con Asterisk

Configuración de un canal SIP

nat=no

Si una extensión se encuentra a través de un dispositivo que realiza

NAT se debe configurar nat=yes para forzar a Asterisk a ignorar la

información de contacto de la extensión y usar la dirección desde la cual

los paquetes son enviados.

host=dynamic

Requerirá que la extensión se registre para que asterisk sepa como

alcanzar el teléfono. Para limitar el registro desde una sola dirección

IP , colocamos esta en lugar de dynamic, en cambio si se setea

host=static, no se requiere que el dispositivo se registre

canreinvite=no

Asterisk forza a los usuarios a mantenerse en el flujo de media, no

permitiendo que los usuarios intercambien mensajes RTP directamente

 

Page 48: Sistemas de VoIP con Asterisk

Configuración del Cliente SIP

En este curso utilizaremos como cliente SIP a X-lite, que

podemos descargar de www.counterpath.com

Una vez descargado debemos copiar el instalador a

/usr/src/ y lo descomprimimos

Abrimos un terminal, ingresamos a la carpeta que contiene

el instalador con cd /usr/src/x-lite y cambiamos los permisos

para el archivo con :

chmod +x xtensoftphone

./xtensoftphone

Realizamos el wizard de configuración del audio

 

Page 49: Sistemas de VoIP con Asterisk

Configuración del Cliente SIP

Page 50: Sistemas de VoIP con Asterisk

El plan de marcado

El plan de marcado es único y se configura

en /etc/asterisk/extensions.conf

Es una lista de instrucciones que asterisk

debe seguir

El plan de marcado tiene 4 definiciones

fundamentales: contexto, extensiones,

prioridades y aplicaciones.

Page 51: Sistemas de VoIP con Asterisk

El plan de marcado: contexto

Son secciones del plan de marcado

Son grupos de extensiones “nombradas”

Permite la interacción de diferentes partes

del plan de marcado

Una extensión definida en un contexto esta

totalmente aislada de otra en otro contexto.

En programación “subrutinas”

Se definen así: [contexto] [general] [globals]

Page 52: Sistemas de VoIP con Asterisk

[general ] y [globals]

[general]

autofallthrough=no

clearglobalvars=no

Page 53: Sistemas de VoIP con Asterisk

El plan de marcado: extensiones

Es una instrucción que asterisk seguirá como

consecuencia de una llamada entrante o por

dígitos marcados en un canal activo

exten => nombre, prioridad, aplicación(p,q,r)

exten => 101,1, Answer( )

El nombre puede ser cualquier combinación

alfanumérica: Juan, 101Juan, 282

Page 54: Sistemas de VoIP con Asterisk

El plan de marcado: extensiones

Cada extensión tiene un nombre, puede

tener algunos pasos, cada paso es una

prioridad, la aplicación es el comando que

ejecuta, una acción en la llamada.

exten => 101,1, Answer( )

exten => 101,2, Playback(hello-world)

exten => 101,3, Hangup( )

Page 55: Sistemas de VoIP con Asterisk

El plan de marcado: prioridades

Cada prioridad esta numerada secuencialmente

empezando en 1, si se salta una prioridad asterisk

no continuará.

Prioridades no numeradas:

exten => 101,1, Answer()

exten => 101,n, Hacer_algo()

exten => 101,n, Hacer_algo_mas()

exten => 101,n, Hacer_ultimo_paso()

exten => 101,n, Hangup()

exten => 123,n(label),hacer_algo

Page 56: Sistemas de VoIP con Asterisk

Plan de marcado simple:

[incoming]

exten => s,1,aplicacion( )

exten => s,2,aplicacion( )

exten => s,3,aplicacion( )

La extensión s

Cuando una llamad entra a un contexto sin una

extensión especifica de destino (por ejemplo una

llamada a un puerto fxo) son recibidas

automáticamente por la extensión s “start”

Page 57: Sistemas de VoIP con Asterisk

Las funciones Answer( ), Playback( ) y Hangup( )

[internal]

exten => 555,1,Answer( )

exten => 555,2,Playback(hello-world)

exten => 555,3,Hangup( )

Playback(ruta_al_archivo/archivo)

Solo reproduce el archivo de audio, no presta

atención ni ejecuta acción alguna a los ingresos

hachos por el dialpad, por defecto busca en

/var/lib/asterisk/sounds/

Page 58: Sistemas de VoIP con Asterisk

Voces en Español

www.voipnovatos.es/voces/ Descomprimir y copiar en

/var/lib/asterisk/sounds

Agregar la siguiente línea en las configuraciones

globales de zapata.conf y sip.conf:

language = es

Page 59: Sistemas de VoIP con Asterisk

Agregando lógica al Dialplan

[internal]

exten => 555,1,Answer( )

exten => 555,2,Background(enter-ext-of-person)

exten => 1,1,Playback(digits/1)

exten => 1,2,Goto(internal,555,1)

exten => 2,1,Playback(digits/2)

exten => 2,2,Goto(internal,555,1)

Page 60: Sistemas de VoIP con Asterisk

Agregando lógica al Dialplan

Background(ruta_al_archivo/archivo)

A diferencia de Playback( ), cuando el llamante

presiona una tecla (o serie de teclas) en el pad del

teléfono, este interrumpe la reproducción de audio

y lo envía a la extensión que corresponda de

acuerdo al digito(s) presionados.

Por ejemplo si el llamante presiona 5 asterisk deja

de reproducir el audio y le pasa el control de la

llamada a la primera prioridad de la extensión 5

dentro del mismo contexto en que fue llamado

Page 61: Sistemas de VoIP con Asterisk

Agregando lógica al Dialplan

Goto(context, extension, prioridad)

Esta aplicación hace fácil mover una llamada entre

las distintas partes del dialplan.

La sintaxis de la aplicación Goto() nos solicita que

pasemos como argumentos: el contexto, extensión

y prioridad del destino.

En conjunto con background permiten la

interacción con el usuario, su uso mas común es el

los llamados menús de voz, auto atendedores o

arboles telefónicos

Page 62: Sistemas de VoIP con Asterisk

Validando entradas y tiempos de espera

Para no permitir el ingreso de extensiones

invalidas(3 en nuestro ejemplo), usamos una

extensión especial ( i )

En cambio para el caso en que el usuario no

ingrese una extensión después de un tiempo

determinado (10 seg.) usamos la extensión t.

Las llamadas serán enviadas a la extensión t si el

llamante toma mucho tiempo en ingresar una

extensión después que Backgrund() ha terminado

de reproducir el archivo de audio

Page 63: Sistemas de VoIP con Asterisk

Validando entradas y tiempos de espera

[internal]

exten => 555,1,Answer( )

exten => 555,2,Background(enter-ext-of-person)

exten => 1,1,Playback(digits/1)

exten => 1,2,Goto(internal,555,1)

exten => 2,1,Playback(digits/2)

exten => 2,2,Goto(internal,555,1)

exten => i,1,Playback(pbx-invalid)

exten => i,2,Goto(internal,555,1)

exten => t,1,Playback(vm-goodbye)

exten => t,2,Hangup( )

Page 64: Sistemas de VoIP con Asterisk

Creación de 2 usuarios SIP

De ahora en adelante vamos a trabajar en grupos de 3 personas: 1 IPBX, 2 Usuarios

Definir:Usuarios y passwordsDireccion IP del Servidor

Llenar el Reporte de instalación

Page 65: Sistemas de VoIP con Asterisk

Uso de la aplicacion DialDial(tech/user, timeout, opcion)

El primer parametro es el destino al cual queremos

llamar conformado por la tecnologia (SIP,Zap,IAX)

un slash (/) y la fuente remota(tipicamente un

numero o un usuario)

exten => 123,1,Dial(Zap/1)

exten => 123,1,Dial(SIP/201)

exten => 123,1,Dial(Zap/1&Zap/2&Zap/3)

Page 66: Sistemas de VoIP con Asterisk

Uso de la aplicacion DialDial(tech/user, timeout, opcion)

El segundo parametro es el timeout especificado

en segundos y es el tiempo que asterisk intentara

llamar a esa extension, sino lo haria

indefinidamente.

exten => 123,1,Dial(Zap/1,10)

Si el canal es contestado antes del timeout asterisk

puentea ambos canales para permitir la

comunicacion

Page 67: Sistemas de VoIP con Asterisk

Uso de la aplicacion Dial

Dial(tech/user, timeout, opcion)

Si el destino no contesta, vencido el timeout,

asterisk pasa a la siguiente prioridad

Si el destino se encuentra ocupado, asterisk pasa a

la extension n+101, si existe

exten => 123,1,Dial(SIP/201,10)

exten => 123,2,Playback(vm-nobodyavail)

exten => 123,3,Hangup( )

exten => 123,102,Playback(tt-allbusy)

exten => 123,103,Hangup( )

Page 68: Sistemas de VoIP con Asterisk

Uso de la aplicacion Dial( )

Dial(tech/user, timeout, opcion)

El tercer argumento en un carácter de opción, puede contener mas de uno y su función es modificar el comportamiento de la función Dial ( ) la opción mas popular es ( r ).

La letra r hará que el llamante escuche un tono de timbrado mientras el canal de destino es notificado de una llamada entrante.

Nótese que cualquiera de estos argumentos puede ser dejado en blanco. Por ejemplo si queremos especificar una opción pero no un timeout, simplemente dejamos el argumento en blanco así:

exten => 123,1,Dial(Zap/1, ,r)

Page 69: Sistemas de VoIP con Asterisk

Uso de la aplicacion Dial[incoming]exten => 555,1,Answer( )exten => 555,2,Background(enter-ext-of-person)exten => 201,1,Dial(SIP/201,10,r)exten => 201,2,Playback(vm-nobodyavail)exten => 201,3,Hangup( )exten => 201,102,Playback(tt-allbusy)exten => 201,103,Hangup( )exten => 202,1,Dial(SIP/johy,10,r)exten => 202,2,Playback(vm-nobodyavail)exten => 202,3,Hangup( )exten => 202,102,Playback(tt-allbusy)exten => 202,103,Hangup( )exten => i,1,Playback(pbx-invalid)exten => i,2,Goto(internal,555,1)exten => t,1,Playback(vm-goodbye)exten => t,2,Hangup( )

Page 70: Sistemas de VoIP con Asterisk

Vision de los Contextos

Page 71: Sistemas de VoIP con Asterisk

Vision de los Contextos

Page 72: Sistemas de VoIP con Asterisk

Contexto [incoming][incoming]exten => s,1,Answer( )exten => s,2,Background(enter-ext-of-person)

exten => 201,1,Dial(SIP/201,10)exten => 201,2,Playback(vm-nobodyavail)exten => 201,3,Hangup( )exten => 201,102,Playback(tt-allbusy)exten => 201,103,Hangup( )

exten => 202,1,Dial(SIP/202,10)exten => 202,2,Playback(vm-nobodyavail)exten => 202,3,Hangup( )exten => 202,102,Playback(tt-allbusy)exten => 202,103,Hangup( )

exten => i,1,Playback(pbx-invalid)exten => i,2,Goto(incoming,s,1)exten => t,1,Playback(vm-goodbye)exten => t,2,Hangup( )

Page 73: Sistemas de VoIP con Asterisk

Contexto [internal]

[internal]exten => 201,1,Dial(SIP/201,20,r)exten => 202,1,Dial(SIP/202,20,r)

Uso de variables

GABRIEL=SIP/201exten => 201,1,Dial(${GABRIEL},10,r)

Page 74: Sistemas de VoIP con Asterisk

Variables Globales

Como su nombre lo indica son variables que se aplican a todos las extensiones y en todos los contextos.

Pueden ser definidas de 2 formas:

[globals]GABRIEL=SIP/201

[internal]exten => 123,1,SetGlobalVar(JOHN=Zap/1))

Page 75: Sistemas de VoIP con Asterisk

Variables de Canal

Son variables que están asociadas únicamente a una llamada en particular.

A diferencia de las variables globales solo se definen durante la duración de la llamada y en el canal activo únicamente

exten => 123,1,Set(CONTADOR=4)exten => 123,2,Playback(digits/${CONTADOR})

Un claro ejemplo de una variable de canal es el callerid

Page 76: Sistemas de VoIP con Asterisk

Agregando Variables al dial plan[globals]GABRIEL=SIP/201JOHN=SIP/202

[incoming]exten => s,1,Answer( )exten => s,2,Background(enter-ext-of-person)exten => 201,1,Dial(${GABRIEL},10,r)exten => 201,2,Playback(vm-nobodyavail)exten => 201,3,Hangup( )exten => 201,102,Playback(tt-allbusy)exten => 201,103,Hangup( )exten => 202,1,Dial(${JOHN},10,r)exten => 202,2,Playback(vm-nobodyavail)exten => 202,3,Hangup( )exten => 202,102,Playback(tt-allbusy)exten => 202,103,Hangup( )

Page 77: Sistemas de VoIP con Asterisk

Agregando Variables al dial planexten => i,1,Playback(pbx-invalid)exten => i,2,Goto(incoming,s,1)exten => t,1,Playback(vm-goodbye)exten => t,2,Hangup( )

[internal]exten => 201,1,Dial(${GABRIEL},20,r)exten => 202,1,Dial(${JHON},20,r)

Page 78: Sistemas de VoIP con Asterisk

Coincidencia de Patrones

•Es útil para tener que evitar escribir una extensión

para cada uno de los números a los que tenemos

que marcar(sobretodo los números externos a la

organización)

Sintaxis

•Siempre empiezan con el underscore _

•Luego podemos usar uno o varios de los siguientes

caracteres:

• X Representa cualquier digito del 0 al 9• Z Representa cualquier digito del 1 al 9• N Representa cualquier digito del 2 al 9• [15-7] Representa cualquier digito o rango de

digitos en este caso representa al 1,5,6 o 7

Page 79: Sistemas de VoIP con Asterisk

Coincidencia de Patrones

Sintaxis

•El punto (.) representa uno o mas caracteres es

conocido como el wilcard.

•Para hacer uso del pattern matching simplemente

lo colocamos en el lugar del nombre de una

extension. Ejemplo:

exten => _NXX,1,Playback(auth-thankyou))

Page 80: Sistemas de VoIP con Asterisk

Coincidencia de Patrones

SintaxisSi un usuario digita una extensión de 3 digitos desde el 200 hasta el 999 escuchara el audio auth-thankyou

exten => _555XXXX,1,Playback(digits/1)exten => _55512XX,1,Playback(digits/2)

Pacifictel:exten => _2XXXXXX,1, Acción

Nacional:exten => _0NXXXXXXX,1, Acción

Movistar:exten => _08[45]XXXXXX,1,Accion

Page 81: Sistemas de VoIP con Asterisk

Coincidencia de Patrones

Sintaxis

Porta:

exten => _09[732]XXXXXX,1, Acción

exten => _08[567]XXXXXX,1, Acción

Internacional:

exten => _001. ,1, Acción

La pregunta es como asterisk se entera de cual es

el número que he marcado y que deberá pasar a la

función dial ?

Page 82: Sistemas de VoIP con Asterisk

Uso de la varible ${EXTEN}

Siempre que digitemos una extensión, Asterisk

guardara en la variable de canal EXTEN los dígitos

que hemos marcado

exten => _8XX,1,SayDigits(${EXTEN})

exten => _8XX,1,SayDigits(${EXTEN:1})

exten => _8XX,1,SayDigits(${EXTEN:-1))

Page 83: Sistemas de VoIP con Asterisk

Contextos para llamadas salientes[globals]GABRIEL=SIP/201JOHY=SIP/202PACIFICTEL=Zap/4

[salida-local]ignorepat => 9exten => _92XXXXXX,1,Dial(${PACIFTEL}/${EXTEN:1},10,r)exten => _92XXXXXX,2,Congestion( )exten => _92XXXXXX,102,Congestion( )exten => 911,1,Dial(${PACIFICTEL}/911)exten => 9911,1,Dial(${PACIFICTEL}/911)

Page 84: Sistemas de VoIP con Asterisk

Contextos para llamadas salientes[globals]GABRIEL=SIP/201JOHY=SIP/202PACIFICTEL=Zap/4PORTA=Zap/3

[salida-porta]ignorepat => 9exten => _9097XXXXXX,1,Dial(${PORTA}/${EXTEN:1},10,r)exten => _9097XXXXXX,2,Congestion( )exten => _9097XXXXXX,102,Congestion( )

Page 85: Sistemas de VoIP con Asterisk

Contextos para llamadas salientesinclude => context

[internal]include => salida-localinclude => salida-portaexten => 201,1,Dial(${GABRIEL},,r)exten => 202,1,Dial(${JOHY},,r)

[salida-local]ignorepat => 9exten => _92XXXXXX,1,Dial(${PACIFTEL}/${EXTEN:1},10,r)exten => _92XXXXXX,2,Congestion( )exten => _92XXXXXX,102,Congestion( )exten => 911,1,Dial(${PACIFICTEL}/911)exten => 9911,1,Dial(${PACIFICTEL}/911)

Page 86: Sistemas de VoIP con Asterisk

Contextos para llamadas salientesinclude => context

[salida-porta]ignorepat => 9exten => _9097XXXXXX,1,Dial(${PORTA}/${EXTEN:1},10,r)exten => _9097XXXXXX,2,Congestion( )exten => _9097XXXXXX,102,Congestion( )

Page 87: Sistemas de VoIP con Asterisk

Voicemail

Es una de las características mas populares de los sistemas de telefonía actual. En este sentido Asterisk es muy flexible por: (/etc/asterisk/voicemail.conf)

• Voicemail ilimitados con protección de password y con carpetas para organizar los voicemail.• Saludos diferentes para estados “ocupado” y “no disponible”• Saludos por defecto y personalizados• Habilidad para relacionar un teléfono con mas de un voicemail y voicemalis con mas de un usuario• Notificación al correo electrónico de la llegada de un voicemail y posibilidad de adjuntar el archivo de audio• Voicemail forwarding y broadcasts• Creacion de Directorio de la empresa basado en la informacion de los voicemail

Page 88: Sistemas de VoIP con Asterisk

Voicemail

Las configuraciones para el voicemail se hacen en el archivo /etc/asterisk/voicemail.conf

mailbox => password,name,email,pager_email,options

optionsEste campo permite ingresar opciones que se sobreponen a las configuraciones globales del mailbox

Se escriben de la forma option=value separados por el carácter pipe (|).

[default]language=es201 => 201,Gabriel Astudillo,[email protected],[email protected],tz=central|attach=yes

Page 89: Sistemas de VoIP con Asterisk

Voicemail

Dentro de [internals]

exten => 201,1,Dial(${GABRIEL},10,r)exten => 201,2,VoiceMail(u201@default)exten => 201,102,VoiceMail(b201@default)

Acceso al voicemail:

exten => 500,1,VoiceMailMain( )

Page 90: Sistemas de VoIP con Asterisk

Directorio Telefónico

Directory( ) necesita de 3 argumentos: el contexto del voicemail desde donde se leerán los nombres, el contexto del dialplan (extensions.conf) donde se puede ubicar al usuario y un carácter de opción.Por defecto Directory() busca en el directorio por el apellido , pero si le pasamos la opción f, buscará por nombres. Por ejemplo:

exten => 8,1,Directory(default,incoming,f)exten => 9,1,Directory(default,incoming)

Si el llamante presiona 8 obtendrá un directorio ordenado por nombres y si presiona 9 el llamante obtendrá un directorio ordenado por apellidos

Page 91: Sistemas de VoIP con Asterisk

Conferencias con MeetMe( )

Ventajas:•Posibilidad de crear conferencias con protección de password.•Administración de conferencias (silenciar, bloquear, kick)•La opción de silenciar a todos los participantes, menos a uno.•Creación estática o dinámica de conferencias

•En /etc/asterisk/meetme.conf editar:

[rooms]conf => 600

Page 92: Sistemas de VoIP con Asterisk

Conferencias con MeetMe( )

Para hacerlo disponible desde el dialplan usamos la funcion MeetMe( ), la cual recibe 3 parametros: el nombre del cuarto de conferencias tal como fue definido en meetme.confuna o mas opcionesel password para acceder a la conferencia

exten => 600,1,MeetMe(600,iMp,54321)

•i información de quien entra y quien sale•M música en espera si solo hay una persona en la

conferencia•p opción de presionar # para salir de la conferencia

Page 93: Sistemas de VoIP con Asterisk

Macros

Las Macros son construcciones muy útiles, diseñadas para evitar repeticiones en el plan de marcado. También permiten hacer cambios a grandes grupos de extensiones en una manera, rápida, ágil y ordenada.

Recordemos:

exten => 201,1,Dial(${GABRIEL},10,r)exten => 201,2,VoiceMail(u101@default)exten => 201,102,VoiceMail(b101@default)

Imaginen tener que hacer esto para una organización de 100 usuarios !!!!! O tener que agregar una nueva caracteristica a todos los usuarios

Page 94: Sistemas de VoIP con Asterisk

Como definir una Macro

La definición de una macro es similar a la de un contexto (de hecho es un contexto “limitado")

[macro-extensiones]exten => s,1,Dial(${GABRIEL},10,r)exten => s,2,VoiceMail(u201@default)exten => s,102,VoiceMail(b201@default)

Noten que esta definición aun no es practica pues solo define al usuario GABRIEL y nos direccionaría a todos los usuario a su voicemailLa única limitante es que para definir un macro siempre debemos utilizar la extensión especial s

Page 95: Sistemas de VoIP con Asterisk

Como llamar a una Macro

Macro(nombre,arg1,arg2...)

[internals]exten => 201,1,Macro(extensiones,arg1, arg2)

Al momento de llamar a la función Macro se definen 4 variables de canal que nos van a permitir generalizar su uso:

${MACRO_CONTEXT}${MACRO_EXTEN}${MACRO_PRIORITY}${ARGn}

Page 96: Sistemas de VoIP con Asterisk

Como llamar a una Macro

[macro-extensiones]exten => s,1,Dial(${GABRIEL},10,r)exten => s,2,VoiceMail(u${MACRO_EXTEN}@default)exten => s,102,VoiceMail(b${MACRO_EXTEN}@default)

[internals]exten => 201,1,Macro(extensiones,arg1)

Noten que ahora ya podemos pasar al voicemail de cada una de las extensiones, pero aun esta fijo el canal con el cual se establecerá la comunicación. Alguna idea ?

Page 97: Sistemas de VoIP con Asterisk

Aplicando la macro al dialplan

[macro-extensiones]exten => s,1,Dial(${ARG1},10,r)exten => s,2,VoiceMail(u${MACRO_EXTEN}@default)exten => s,102,VoiceMail(b${MACRO_EXTEN}@default)

[internal]exten => 101,1,Macro(extensiones,${GABRIEL})exten => 102,1,Macro(extensiones,${MARIA})exten => 103,1,Macro(extensiones,${JOSE})

Page 98: Sistemas de VoIP con Asterisk

Expresiones y Manejo de Variables

ExpresionesSe definen como un conjuto de varibales, operadores y valores que se colocan juntas para obtener un resultado.

$[expresion]

Ejemplos:

$[${CONT} + 1]$[${CONT} / 2]

Cuando Asterisk encuentra una expresion, reemplaza toda la expresion por el valor resultante. Es importante notar que antes de hacer esto primero evalua el valor de las varibles

Page 99: Sistemas de VoIP con Asterisk

Expresiones y Manejo de Variables

exten => 321,1,Set(CONT=3)exten => 321,2,Set(NEWCONT=$[${CONT} + 1])exten => 321,3,SayNumber(${NEWCONT})

exten => 321,2,Set(NEWCONT=$[3 + 1])exten => 321,2,Set(NEWCONT=4)

Finalmente el valor de 4 es asignado a la variables NEWCONT a través de la función Set( )

Ojo:exten => 123,1,Set(TEST=$[2+1])No es lo mismo que :exten => 234,1,Set(TEST=$[2 + 1])

Page 100: Sistemas de VoIP con Asterisk

Expresiones y Manejo de Variables

OperadoresBoleanos

Evalúan la verdad de una sentencia

or expr1 | expr2

and expr1 & expr2

Comparación expr1 {=, >, >=, <, <=, !=} expr2

Matemáticos:

expr1 {+, -} expr2

expr1 {*, /, %} expr2

Page 101: Sistemas de VoIP con Asterisk

Ramificación Condicional

Aplicación GotoIf()Esta aplicación es la calve para la ramificación condicional, tiene una sintaxis especial llamada la sintaxis condicional:

GotoIf(expression?destination1:destination2)

Si la expresion es verdadera salta al destino uno, si es falsa salta al destino 2 pero…Que es verdadero y que es falso ?•Un carácter en blanco o el numero cero (0) significan falso, cualquier otra cosa es verdaderoEl destino puede ser:•Una prioridad dentro de la misma extensión Ej: 3•Una extensión y prioridad dentro del mismo contexto (123,10)•Un contexto, extensión y prioridad Ej: incoming,123,10•Una prioridad nombrada dentro de la misma extensión

Page 102: Sistemas de VoIP con Asterisk

Ramificación Condicional

Aplicación GotoIf()

exten => 345,1,Set(TEST=1)

exten => 345,2,GotoIf($[${TEST} = 1]?10:20)

exten => 345,10,Playback(weasels-eaten-phonesys)

exten => 345,20,Playback(office-iguanas)

Page 103: Sistemas de VoIP con Asterisk

Ramificación Condicional

Aplicación GotoIf()

exten => 123,1,Set(COUNT=10)exten => 123,2,GotoIf($[${COUNT} > 0]?:10)exten => 123,3,SayNumber(${COUNT})exten => 123,4,Set(COUNT=$[${COUNT} - 1])exten => 123,5,Goto(2)exten => 123,10,Hangup( )

El caso de la Ex-enamorada

exten => 123,1,GotoIf($[${CALLERID(num)} = 2397815]?20:10)exten => 123,10,Dial(Zap/4)exten => 123,20,Playback(abandon-all-hope)exten => 123,21,Hangup( )

Page 104: Sistemas de VoIP con Asterisk

Ramificación Condicional basada en fechas

Aplicación GotoIfTime()

Similar a GotoIf() pero se diferencian en que GotoIfTime() toma la decisión de pasarle el control basado en la consulta al reloj del sistema )

GotoIfTime(times,days_of_week,days_of_month,months?label)

times: rangos de horas del día en formato 24h, el día comienza a las 00:00 y termina a las 23:59. Ej: 09:00-17:59days_of_week: días de la semana mon, tus, thu… Ej: mon-fridays_of_month: 7-12 (del 7 al 12) o 15,30 (15 y 30)months: jan, feb, mar, apr…

Para hacer coincidir todos los valores hay que poner un * en el lugar del parametro.

Page 105: Sistemas de VoIP con Asterisk

Ramificación Condicional basada en fechas

Aplicación GotoIfTime()

GotoIfTime(times,days_of_week,days_of_month,months?label)

El argumento label puede ser cualquiera de los siguientes:

•Una prioridad dentro de la misma extensión Ej: 3

•Una extensión y prioridad dentro del mismo contexto (123,10)

•Un contexto, extensión y prioridad Ej: incoming,123,10

•Una prioridad nombrada dentro de la misma extensión

Page 106: Sistemas de VoIP con Asterisk

Ramificación Condicional basada en fechas

Aplicación GotoIfTime()

GotoIfTime(times,days_of_week,days_of_month,months?label)[incoming]

; Si es cualquier hora del dia, en cualquier dia de la semana, ; durante el noveno dia del mes de octubre nuestra empresa esta ;cerrada exten => s,1,GotoIfTime(*,*,10,oct?cerrado,s,1); durante las horas de trabajo envie las llamadas al contexto ;abierto exten => s,2,GotoIfTime(09:00-17:59|mon-fri|*|*?abierto,s,1)exten => s,3,GotoIfTime(09:00-11:59|sat|*|*?abierto,s,1); en cualquier otro caso estamos cerradosexten => s,4,Goto(cerrado,s,1)

Page 107: Sistemas de VoIP con Asterisk

IAX Trunking

En el Servidor A configuramos:modificamos en el archivo iax.conf  [general]  register => amigo:hola@<dir IP del serverB>

 [serverB]  type=friend  user=amigo  secret=hola  host=<dir IP del serverB > qualify=yes trunk=yes

extensions.conf  exten => _7XXX,1,Dial(IAX2/serverB/${EXTEN:1},30,r) exten => _7XXX,2,Congestion( )

Page 108: Sistemas de VoIP con Asterisk

IAX Trunking

En el servidor B configuramos: modificamos en iax.conf

 [serverA]  type=friend  user=amigo  secret=hola  host=direccion IP del serverA qualify=yes trunk=yes

extensions.conf exten => _8XXX,1,Dial(IAX2/serverA/${EXTEN:1},30,r) exten => _8XXX,2,Congestion