Está en la página 1de 108

Sistemas de VoIP con Asterisk

Modulo III

Que es Asterisk?

Asterisk es una central telefnica IP (IPBX) de cdigo abierto que corre sobre linux y que es compatible con la mayora de tecnologas de VoIP (SiP, H323, MGCP, IAX, ) y de telefona tradicional Anloga y Digital (TDM, ISDN, BRI, PRI)

Brinda todos los servicios de una PBX propietaria tradicional

Preparando un Sistema para Asterisk


Seleccin de Hardware para el Servidor

En trminos de requerimientos asterisk es similar a aquellas aplicaciones embebidas y de tiempo real

En diseos de grandes aplicaciones es comn observar una distribucin de de funcionalidades entre mltiples servidores
La flexibilidad es una de las razones de peso por las cuales los negocios de rpido crecimiento toman la decisin de implementarlo

Preparando un Sistema para Asterisk


Seleccin de Hardware para el Servidor

Preparando un Sistema para Asterisk


Seleccin de Hardware para el Servidor

La seleccin 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 diseo, pero si se trata de una solucin corporativa es importante tener en cuenta las siguientes diapositivas

Preparando un Sistema para Asterisk


Consideraciones respecto a rendimiento

El mximo numero de conexiones simultaneas:

Cada conexin incrementa carga al sistema

El porcentaje del trafico que requiere un intensivo procesamiento DSP cuando se usa cdecs de compresin

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

Preparando un Sistema para Asterisk


Consideraciones respecto a rendimiento

Cancelacin de Eco :

Se utiliza cuando se utilizan redes PSTN, es una funcin matemtica por lo tanto aumenta los recursos de procesamiento Como alternativa existen las tarjetas para cancelacin de ECO y traduccin de cdecs que ofrece digium

Preparando un Sistema para Asterisk


Consideraciones respecto a rendimiento

Observar los puertos PCI

Preparando un Sistema para Asterisk


Consideraciones adicionales:

Fuentes de poder Switch PoE Medio Ambiente

Humedad

Temperatura

Puesta a Tierra Seguridad

Requerimientos de Hardware

No indispensable:
Tarjeta de telefona Analoga TDM400p (4 FXS & FXO), TDM2400p (24 FXS & FXO) Tarjeta de telefona Digital TE205p (2 E1

En un ambiente netamente IP solo se necesita cargar el modulo ztdummy (USB timing)

Requerimientos de software

Primero debemos averiguar la versin exacta de nuestro kernel con el comando: uname -a deberamos ver algo como:

[root@asterisk ~]# uname -a Linux 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

Requerimientos de software

Luego deberamos 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-devel kernel-devel-2.6.18-8.el5

Si no estn instaladas podemos hacerlo con yum de la siguiente forma: yum install kernel-devel

Requerimientos de software

Ahora si, debemos ejecutar los siguientes comandos para verificar si tenemos instalados los paquetes: rpm -q bison rpm -q bison-devel rpm -q ncurses rpm -q ncurses-devel rpm -q zlib rpm -q zlib-devel rpm -q openssl rpm -q openssl-devel rpm -q gnutls-devel rpm -q gcc rpm -q gcc-c++

Requerimientos de software

Si alguno de estos paquetes falta, lo instalamos con yum install nombre-del-paquete por ejemplo: [root@asterisk ~]# rpm -q gnutls-devel package gnutls-devel is not installed [root@asterisk ~]# yum install gnutls-devel

Requerimientos de software

5.- Un paso ms antes de empezar con la instalacin, 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 informacin 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/ [root@asterisk src]# ll total 28

linux

drwxr-xr-x 2 root root 4096 jun 13 08:43 asterisk drwxr-xr-x 3 root root 4096 jun 12 13:17 kernels lrwxrwxrwx 1 root root 26 jun 13 09:12 linux -> kernels/2.6.18-8.el5-i686/

Asterisk add-ons

cd /usr/src/asterisk-addons

./configure
make make install

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

Directorios usados por asterisk


/etc/asterisk/

Contiene los archivos de configuracin 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

Directorios usados por asterisk


/usr/lib/asterisk/modules/

Este directorio contiene todos los mdulos 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 mdulos al inicio. (modules.conf).

/var/lib/asterisk/

Este directorio contiene el archivo astdb y una serie de subdirectorios. astdb contiene la informacin de la base de datos local de Asterisk, una especie de Registro de Win

Directorios usados por asterisk


Los subdirectorios dentro de /var/lib/asterisk son: agi-bin/

Contiene scripts personales

firmware/

Contiene imgenes binarias de firmware de varios dispositivos compatibles con asterisk

images/

Las aplicaciones que se comunican con canales que soportar imagenes, buscan en este directorio

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 bsicos de asterisk reproducios por playback( ) y background( )

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 informacin respecto a requerimiento de llamadas.

Configuracin 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 configuracin de bajo nivel para la interfaz de hardware. Vamos a configurar un canal FXS y FXO. #ztcfg -vv

Configuracin 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 analgicos. 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

Configuracin 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

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 cp /etc/asterisk/iax.conf sip.sample iax.sample

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 estacin que hay una llamada entrante. Los puerto son definidos en los archivos de configuracin de acuerdo a la sealizacin que usan y en sentido contrario al tipo de puerto que fsicamente son. Es decir un puerto FXS se define en la configuracin como FXO y viceversa.

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

TDM400P
FXS Ports
FXO Ports

Fuente de Voltaje

Entradas RJ-11

PCI 2.2

Configuracin de un canal FXO


Configuracin del hardware en zaptel La siguiente configuracin mnima define un canal fxo con sealizacin fxs:

editamos /etc/zaptel.conf

fxsks=4
loadzone=us defaultzone=us

La primera lnea define el tipo de sealizacin y el protocolo para el canal 4: Loopstart (ls) Groundstart (gs) Kewlstart (ks)

Configuracin de un canal FXO

La diferencia esta en la forma como el equipo remoto solicita el tono de marcado, en groundstart lo hace mandando momentneamente a tierra la lnea, loopstart lo hace en cambio usando un corto momentneo 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 lneas de nuestra localidad.

Configuracin de un canal FXO

loadzone configura un grupo de indicaciones (determinadas en zonedata.c) relativas a los sonidos de la lnea en determinada regin o pas, 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

Configuracin de un canal FXO


Configuracin del hardware en zapata

Asterisk usa la informacin en /etc/asterisk/zapata.conf para determinar las configuraciones del hardware de telefona instalado en el sistema.

El archivo zapata.conf tambin controla las caractersticas y funcionalidades asociadas con los canales fsicos: caller id, llamada en espera, cancelacin de eco y muchas mas.

Configuracin de un canal FXO


Configuracin del hardware en zapata: /etc/asterisk/zapata.conf [channels] ; canales fsicos: ; 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 sealizacion FXS para un canal FXO channel => 4 ; PSTN se conecta al puerto 4

Configuracin de un canal FXO


Configuracin del hardware en zapata

La seccin [channels] determina el mtodo de sealizacin para los canales fsicos y sus opciones.

Cuando una opcin es definida esta es heredada hacia abajo al resto del archivo.
Un canal se define usando channel => , y cada definicin del canal hereda todas las opciones definidas por encima de esa lnea. usecallerid=yes habilita el caller ID hidecallerid=no No se ocultar el caller ID para las llamadas salientes.

Configuracin de un canal FXO


Configuracin 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 conversacin con otro hook flash.
transfer=yes Permite transferir llamadas con un hook flash; requiere que three-way calling este activada

Configuracin de un canal FXO


Configuracin del hardware en zapata

echocancel=yes Habilita la cancelacin de eco, se requiere especialmente en lneas anlogas. echotraining=yes Le indica a asterisk que enve un tono a travs de la lnea al inicio de la llamada para medir el eco y luego aprender de el mas rpidamente. Cuando una llamada ingresa a una interfaz FXO, Usted deseara que se realice alguna accin verdad ?

Configuracin de un canal FXO


Configuracin del hardware en zapata

La accin 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 lnea context=incoming. Finalmente como un canal FXO usa sealizacin FXS, la definimos en la linea signalling=fxs_ks

Configuracin 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()

Configuracin de un canal FXS

La configuracin en muy similar a un canal FXO

Configuracin 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.

Configuracin de un canal FXS


Configuracin del hardware en zapata.conf

La configuracin viene prcticamente a ser la misma con la adicin de la lnea inmediate=no y las lneas referentes al puerto fxs: [channels] ; canales fsicos: ; opciones por defecto para todos los canales usecallerid=yes hidecallerid=no callwaiting=no threewaycalling=yes transfer=yes echocancel=yes echotraining=yes inmediate=no

Configuracin de un canal FXS


; definicin de canales: context=internal ; Usaremos el contexto [internal] para las extensiones en el extensions.conf signalling=fxo_ks ; Use sealizacin FXO para un canal FXS channel => 1 ; telfono conectado al puerto 1

context=incoming signalling=fxs_ks channel => 4

; Las llamadas entrantes se dirigen hacia [incoming] en el extensions.conf ; Use sealizacin FXS para un canal FXO ; PSTN se conecta al puerto 4

Configuracin de un canal FXS


CONFIGURACION DEL DIALPLAN

Para probar la configuracin que hemos realizado vamos a agregar las siguientes lneas a nuestro dial plan:

[internal] exten => 611,1,Answer( ) exten => 611,2,Echo( )

Configuracin de un canal SIP

El archivo /etc/asterisk/sip.conf empieza con la seccin [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 configuracin de cada usuario/peer

Configuracin de un canal SIP


[general] context=default srvlookup=yes [201] type=friend secret=201 qualify=yes nat=no host=dynamic canreinvite=no context=internal

; Qualify peer is no more than 2000 ms away ; este usuario no esta a travez de nat ; este usuario se registrara con nosotros ; por defecto asterisk intentara hacer el reenvio ; el contexto internal controla el comportamiento de este canal

Configuracin 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 combinacin 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 autenticacin qualify=yes Esta linea le permite a asterisk monitorear la latencia entre el usuario y el servidor por defecto hasta 2000 ms

Configuracin de un canal SIP

nat=no Si una extensin se encuentra a travs de un dispositivo que realiza NAT se debe configurar nat=yes para forzar a Asterisk a ignorar la informacin de contacto de la extensin y usar la direccin desde la cual los paquetes son enviados. host=dynamic Requerir que la extensin se registre para que asterisk sepa como alcanzar el telfono. Para limitar el registro desde una sola direccin 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

Configuracin 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 configuracin del audio

Configuracin del Cliente SIP

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.

El plan de marcado: contexto

Son secciones del plan de marcado Son grupos de extensiones nombradas Permite la interaccin de diferentes partes del plan de marcado Una extensin definida en un contexto esta totalmente aislada de otra en otro contexto. En programacin subrutinas Se definen as: [contexto] [general] [globals]

[general ] y [globals]

[general] autofallthrough=no clearglobalvars=no

El plan de marcado: extensiones

Es una instruccin que asterisk seguir como consecuencia de una llamada entrante o por dgitos marcados en un canal activo

exten => nombre, prioridad, aplicacin(p,q,r)


exten => 101,1, Answer( )

El nombre puede ser cualquier combinacin alfanumrica: Juan, 101Juan, 282

El plan de marcado: extensiones

Cada extensin tiene un nombre, puede tener algunos pasos, cada paso es una prioridad, la aplicacin es el comando que ejecuta, una accin en la llamada. exten => 101,1, Answer( ) exten => 101,2, Playback(hello-world) exten => 101,3, Hangup( )

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

Plan de marcado simple:


[incoming] exten => s,1,aplicacion( ) exten => s,2,aplicacion( ) exten => s,3,aplicacion( ) La extensin s

Cuando una llamad entra a un contexto sin una extensin especifica de destino (por ejemplo una llamada a un puerto fxo) son recibidas automticamente por la extensin s start

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 atencin ni ejecuta accin alguna a los ingresos hachos por el dialpad, por defecto busca en /var/lib/asterisk/sounds/

Voces en Espaol

www.voipnovatos.es/voces/

Descomprimir y copiar en /var/lib/asterisk/sounds

Agregar la siguiente lnea en las configuraciones globales de zapata.conf y sip.conf:

language = es

Agregando lgica 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)

Agregando lgica 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 telfono, este interrumpe la reproduccin de audio y lo enva a la extensin 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 extensin 5 dentro del mismo contexto en que fue llamado

Agregando lgica al Dialplan


Goto(context, extension, prioridad)

Esta aplicacin hace fcil mover una llamada entre las distintas partes del dialplan. La sintaxis de la aplicacin Goto() nos solicita que pasemos como argumentos: el contexto, extensin y prioridad del destino. En conjunto con background permiten la interaccin con el usuario, su uso mas comn es el los llamados mens de voz, auto atendedores o arboles telefnicos

Validando entradas y tiempos de espera

Para no permitir el ingreso de extensiones invalidas(3 en nuestro ejemplo), usamos una extensin especial ( i )

En cambio para el caso en que el usuario no ingrese una extensin despus de un tiempo determinado (10 seg.) usamos la extensin t.
Las llamadas sern enviadas a la extensin t si el llamante toma mucho tiempo en ingresar una extensin despus que Backgrund() ha terminado de reproducir el archivo de audio

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( )

Creacin de 2 usuarios SIP

De ahora en adelante vamos a trabajar en grupos de 3 personas: 1 IPBX, 2 Usuarios Definir: Usuarios y passwords Direccion IP del Servidor Llenar el Reporte de instalacin

Uso de la aplicacion Dial


Dial(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)

Uso de la aplicacion Dial


Dial(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

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( )

Uso de la aplicacion Dial( )


Dial(tech/user, timeout, opcion)
El tercer argumento en un carcter de opcin, puede contener mas de uno y su funcin es modificar el comportamiento de la funcin Dial ( ) la opcin 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. Ntese que cualquiera de estos argumentos puede ser dejado en blanco. Por ejemplo si queremos especificar una opcin pero no un timeout, simplemente dejamos el argumento en blanco as: exten => 123,1,Dial(Zap/1, ,r)

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( )

Vision de los Contextos

Vision de los Contextos

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( )

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

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

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

Variables de Canal
Son variables que estn asociadas nicamente a una llamada en particular. A diferencia de las variables globales solo se definen durante la duracin 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

Agregando Variables al dial plan


[globals] GABRIEL=SIP/201 JOHN=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( )

Agregando Variables al dial plan


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

Coincidencia de Patrones

Es til para tener que evitar escribir una extensin

para cada uno de los nmeros a los que tenemos que marcar(sobretodo los nmeros externos a la

organizacin)
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

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

Coincidencia de Patrones
Sintaxis Si un usuario digita una extensin de 3 digitos desde el 200 hasta el 999 escuchara el audio auththankyou

exten => _555XXXX,1,Playback(digits/1) exten => _55512XX,1,Playback(digits/2) Pacifictel: exten => _2XXXXXX,1, Accin Nacional: exten => _0NXXXXXXX,1, Accin Movistar: exten => _08[45]XXXXXX,1,Accion

Coincidencia de Patrones
Sintaxis Porta: exten => _09[732]XXXXXX,1, Accin

exten => _08[567]XXXXXX,1, Accin

Internacional: exten => _001. ,1, Accin

La pregunta es como asterisk se entera de cual es el nmero que he marcado y que deber pasar a la funcin dial ?

Uso de la varible ${EXTEN}


Siempre que digitemos una extensin, Asterisk guardara en la variable de canal EXTEN los dgitos que hemos marcado

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

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

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

Contextos para llamadas salientes


[globals] GABRIEL=SIP/201 JOHY=SIP/202 PACIFICTEL=Zap/4 [salida-local] ignorepat => 9 exten => _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)

Contextos para llamadas salientes


[globals] GABRIEL=SIP/201 JOHY=SIP/202 PACIFICTEL=Zap/4 PORTA=Zap/3 [salida-porta] ignorepat => 9 exten => _9097XXXXXX,1,Dial(${PORTA}/${EXTEN:1},10,r) exten => _9097XXXXXX,2,Congestion( ) exten => _9097XXXXXX,102,Congestion( )

Contextos para llamadas salientes


include => context [internal] include => salida-local include => salida-porta exten => 201,1,Dial(${GABRIEL},,r) exten => 202,1,Dial(${JOHY},,r) [salida-local] ignorepat => 9 exten => _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)

Contextos para llamadas salientes


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

Voicemail
Es una de las caractersticas mas populares de los sistemas de telefona actual. En este sentido Asterisk es muy flexible por: (/etc/asterisk/voicemail.conf) Voicemail ilimitados con proteccin 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 telfono con mas de un voicemail y voicemalis con mas de un usuario Notificacin al correo electrnico 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

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

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


options Este campo permite ingresar opciones que se sobreponen a las configuraciones globales del mailbox Se escriben de la forma option=value separados por el carcter pipe (|). [default] language=es 201 => 201,Gabriel Astudillo,gastudillo@gmail.com,84 519925@im.movistar.com.ec,tz=central|attach=yes

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( )

Directorio Telefnico
Directory( ) necesita de 3 argumentos: el contexto del voicemail desde donde se leern los nombres, el contexto del dialplan (extensions.conf) donde se puede ubicar al usuario y un carcter de opcin. Por defecto Directory() busca en el directorio por el apellido , pero si le pasamos la opcin 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

Conferencias con MeetMe( )


Ventajas: Posibilidad de crear conferencias con proteccin de password. Administracin de conferencias (silenciar, bloquear, kick) La opcin de silenciar a todos los participantes, menos a uno. Creacin esttica o dinmica de conferencias

En /etc/asterisk/meetme.conf editar:

[rooms] conf => 600

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.conf una o mas opciones el password para acceder a la conferencia

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


i informacin de quien entra y quien sale M msica en espera si solo hay una persona en la conferencia p opcin de presionar # para salir de la conferencia

Macros
Las Macros son construcciones muy tiles, diseadas para evitar repeticiones en el plan de marcado. Tambin permiten hacer cambios a grandes grupos de extensiones en una manera, rpida, 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 organizacin de 100 usuarios !!!!! O tener que agregar una nueva caracteristica a todos los usuarios

Como definir una Macro


La definicin 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 definicin aun no es practica pues solo define al usuario GABRIEL y nos direccionara a todos los usuario a su voicemail La nica limitante es que para definir un macro siempre debemos utilizar la extensin especial s

Como llamar a una Macro


Macro(nombre,arg1,arg2...)

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


Al momento de llamar a la funcin Macro se definen 4 variables de canal que nos van a permitir generalizar su uso: ${MACRO_CONTEXT} ${MACRO_EXTEN} ${MACRO_PRIORITY} ${ARGn}

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 comunicacin. Alguna idea ?

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})

Expresiones y Manejo de Variables


Expresiones Se 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

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 travs de la funcin Set( ) Ojo: exten => 123,1,Set(TEST=$[2+1]) No es lo mismo que : exten => 234,1,Set(TEST=$[2 + 1])

Expresiones y Manejo de Variables


Operadores Boleanos

Evalan la verdad de una sentencia


or expr1 | expr2

and expr1 & expr2


Comparacin expr1 {=, >, >=, <, <=, !=} expr2

Matemticos:
expr1 {+, -} expr2

expr1 {*, /, %} expr2

Ramificacin Condicional
Aplicacin GotoIf() Esta aplicacin es la calve para la ramificacin 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 carcter en blanco o el numero cero (0) significan falso, cualquier otra cosa es verdadero El destino puede ser:
Una prioridad dentro de la misma extensin Ej: 3 Una extensin y prioridad dentro del mismo contexto (123,10) Un contexto, extensin y prioridad Ej: incoming,123,10 Una prioridad nombrada dentro de la misma extensin

Ramificacin Condicional
Aplicacin 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)

Ramificacin Condicional
Aplicacin 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( )

Ramificacin Condicional basada en fechas


Aplicacin GotoIfTime()

Similar a GotoIf() pero se diferencian en que GotoIfTime() toma la decisin 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 da en formato 24h, el da comienza a las 00:00 y termina a las 23:59. Ej: 09:00-17:59 days_of_week: das de la semana mon, tus, thu Ej: mon-fri days_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.

Ramificacin Condicional basada en fechas


Aplicacin 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 extensin Ej: 3


Una extensin y prioridad dentro del mismo contexto (123,10) Un contexto, extensin y prioridad Ej: incoming,123,10 Una prioridad nombrada dentro de la misma extensin

Ramificacin Condicional basada en fechas


Aplicacin 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 cerrados exten => s,4,Goto(cerrado,s,1)

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( )

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

También podría gustarte