140
ASTERISK: INSTALACIÓN Y CONCEPTOS BÁSICOS Ing. Gabriel Astudillo FIEC-ESPOL 2011

Svoip Asterisk 2011 P1

Embed Size (px)

Citation preview

Page 1: Svoip Asterisk 2011 P1

ASTERISK: INSTALACIÓN Y

CONCEPTOS BÁSICOS

Ing. Gabriel Astudillo FIEC-ESPOL 2011

Page 2: Svoip Asterisk 2011 P1

Qué 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 tales como: llamadas en espera, transferencia de llamadas, buzones de voz, directorio, conferencias, grabación de llamada, etc.

Page 3: Svoip Asterisk 2011 P1

Qué es asterisk?

Mark Spencer, de Digium, inicialmente creó Asterisk y actualmente es su principal desarrollador, junto con otros programadores que han contribuido.

Originalmente desarrollado para el sistema operativo GNU/Linux, actualmente: BSD, Mac OS X, Solaris y Microsoft Windows.

Para conectar teléfonos estándar analógicos son necesarias tarjetas electrónicas telefónicas FXS o FXO fabricadas por Digium u otros proveedores.

Page 4: Svoip Asterisk 2011 P1

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 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 5: Svoip Asterisk 2011 P1

Preparando un sistema para asterisk

Selección de Hardware para el Servidor

Page 6: Svoip Asterisk 2011 P1

Preparando un sistema para asteriskSelección de Hardware para el Servidor La selección del hardware puede ser muy

sencilla, como muy complicada: 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 sistema 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 7: Svoip Asterisk 2011 P1

Preparando un sistema para asteriskConsideraciones 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. Ejemplo: 50 G.711 vs. 10 G.729.

Que nivel de conferencia va a brindar el sistema y con que frecuencia se hará.

Page 8: Svoip Asterisk 2011 P1

Preparando un sistema para asteriskConsideraciones 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.

Uso de scripts en el plan de marcado: Cada vez que se pasa el control de una llamada a

un script externo hay un penalización en el rendimiento.

http://www.voip-info.org/wiki/view/Asterisk+dimensioning

Page 9: Svoip Asterisk 2011 P1

Preparando un sistema para asteriskSelección de la tarjeta madre: Considerar: numero de procesadores, slots

de memoria y slots PCI:

Se debe procurar un BIOS que permita administrar los IRQs

Page 10: Svoip Asterisk 2011 P1

Preparando un sistema para asteriskConsideraciones adicionales: Fuentes de poder Switches PoE (teléfonos IP) Medio Ambiente:

Humedad Temperatura

Puesta a Tierra Seguridad:

Física Lógica

Page 11: Svoip Asterisk 2011 P1

Requerimientos de HardwareNo indispensable: Tarjeta de telefonía analógica TDM400p (4

FXS & FXO), TDM2400p (24 FXS & FXO) Tarjeta de telefonía Digital TE205p (2 E1) Rhino http://www.channelbanks.com Sangoma http://www.sangoma.com Voicetronix http://www.voicetronix.com Pika Technologies

http://www.pikatechnologies.comEn un ambiente IP solo se necesita cargar el

modulo ztdummy (USB timing)

Page 12: Svoip Asterisk 2011 P1

Requerimientos de Hardware

Page 13: Svoip Asterisk 2011 P1

Requerimientos de software Primero debemos averiguar la versión

exacta de nuestro kernel con el comando: uname –a:[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

[root@asterisk ~]# rpm – q kernel

[root@asterisk ~]# rpm – q kernel-devel

Es importante verificar que tenemos instalada la misma versión de kernel y de las fuentes del kernel, sin ellas no se podrá compilar el código fuente.

Page 14: Svoip Asterisk 2011 P1

Requerimientos de software Luego debemos asegurarnos que tenemos

instalados los siguientes paquetes: bison bison-devel ncurses ncurses-devel libtermcap libtermcap-devel zlib zlib-devel openssl openssl-devel gnutls-devel gcc gcc-c++ newtnewt-devel libtool

Para verificar que tenemos el paquete e instalar:#rpm –q “paquete” # yum install – y “paquete”

Es posible verificar e instalar todos en una sola línea

Page 15: Svoip Asterisk 2011 P1

Requerimientos de software

Page 16: Svoip Asterisk 2011 P1

Requerimientos de software Servidor de tiempo: Debido a que

asterisk graba un CDR (call detail report) es importante que nuestro reloj este sincronizado con un servidor externo de tiempo para asegurar uniformidad.

#yum install -y ntp && ntpdate br.pool.ntp.org && chkconfig ntpd on && service ntpd start

Page 17: Svoip Asterisk 2011 P1

Versiones: Release vs Trunk

Los desarrolladores utilizan el software subversion (SVN) para administrar el código fuente.

Asterisk es desarrollado en 2 aéreas: trunk y branches

En el trunk se desarrollan y prueban nuevas características y cambios en la arquitectura, orientado para beta testers y desarrolladores.

Los branches son versiones estables donde no se hacen cambios mayores y solo se corrigen errores y huecos de seguridad, recomendado para ambientes en producción.

Aproximadamente cada 14 meses se lanza una nueva rama (1.2, 1.4, 1.6, 1.8…)

https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions

Page 18: Svoip Asterisk 2011 P1

Obtener el código fuente

Siguiendo el Linux Standar Base(LSB) todos los paquetes requeridos para la instalación de asterisk deben ser descargados y desempaquetados en el directorio /usr/src/

Durante el curso debemos mantener este estándar pues asumiremos de ahora en adelante que todos los comandos en el proceso de instalación son ejecutados desde este directorio.

Page 19: Svoip Asterisk 2011 P1

Obtener el código fuente

Dos formas de obtener el código: SVN o wget SVN:#cd /usr/src/

#svn co http://svn.asterisk.org/svn/asterisk/branches/1.8

wget: (asterisk, asterisk-addons, dahdi complete, libpri)

#cd /usr/src/

#wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8.3.2.tar.gz

#wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-addons-1.6.2.3.tar.gz

#wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-complete-2.4.1.2+2.4.1.tar.gz

#wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.11.5.tar.gz

Otra forma de obtenerlos es navegando en la página web:

http://www.asterisk.org/downloads

Page 20: Svoip Asterisk 2011 P1

Obtener el código fuente

Desempaquetamos:#cd /usr/src/

#tar zxvf asterisk-1.8.3.2.tar.gz

#tar zxvf asterisk-addons-1.6.2.3.tar.gz

#tar zxvf dahdi-linux-complete-2.4.1.2+2.4.1.tar.gz

#tar zxvf libpri-1.4.11.5.tar.gz

Las versiones de cada uno de los paquetes no necesariamente tienen que ser las mismas, pues cada uno de ellas se manejan como un proyecto diferente.

Page 21: Svoip Asterisk 2011 P1

Proceso de Instalación

Desempaquetamos:#cd /usr/src/

#tar zxvf asterisk-1.8.3.2.tar.gz

#tar zxvf asterisk-addons-1.6.2.3.tar.gz

#tar zxvf dahdi-linux-complete-2.4.1.2+2.4.1.tar.gz

#tar zxvf libpri-1.4.11.5.tar.gz

Las versiones de cada uno de los paquetes no necesariamente tienen que ser las mismas, pues cada uno de ellas se manejan como un proyecto diferente.

Page 22: Svoip Asterisk 2011 P1

Proceso de Instalación

Desinstalamos cualquier versión previa de asterisk:

# cd /usr/src/asterisk-1.”version anterior”

# make uninstall

# make uninstall-all

Desinstalamos cualquier versión previa de dahdi:

# cd /usr/src/dahdi-linux-1.”version anterior”

# make uninstall

Finalmente borramos los directorios de las versiones anteriores.

Page 23: Svoip Asterisk 2011 P1

Proceso de Instalación: orden El orden de instalación es el siguiente:

1. libpri2. dadhi3. asterisk4. asterisk-addons

Este orden asegura que cualquier dependencia para libpri, dadhi o asterisk fueron instaladas antes de correr los scripts de configuración

Page 24: Svoip Asterisk 2011 P1

Proceso de Instalación: libpri LibPRI es una librería que agrega soporte

para ISDN (PRI y BRI), su uso es opcional.

# cd /usr/src/libpri-version

# make clean

# make

# make install

Page 25: Svoip Asterisk 2011 P1

Proceso de Instalación: dahdi Digium Asterisk Hardware Device Interface, o DAHDI

(anteriormente Zaptel), es el software que Asterisk usa para interactuar con hardware de telefonía(A & D).

Se recomienda su instalación así no se tenga instalada tarjetas telefónicas porque DAHDI es una dependencia requerida para construir el modulo de tiempo res_timing_dahdi  y es usado por aplicaciones del plan de marcado como MeetMe().

DAHDI actualmente es una combinación de 2 componentes: DAHDI-tools, que provee herramientas de administración

como: dahdi_cfg, dahdi_scan, etc.; y  DAHDI-linux, que provee los driver para el kernel.

DAHDI-linux-complete contiene los 2 componentes

Page 26: Svoip Asterisk 2011 P1

Proceso de Instalación: dahdicd /usr/src/dahdi-linux-complete-version

# make clean

# make

# make install

# make config

Page 27: Svoip Asterisk 2011 P1

Proceso de Instalación: Asterisk Asterisk es compilado con gcc a través del uso

del programa GNU “make”:

# cd /usr/src/asterisk-version

# make clean

# ./configure

# make menuselect

# make install

# make samples

# make config

Page 28: Svoip Asterisk 2011 P1

Proceso de Instalación: asterisk-addons# cd /usr/src/asterisk-addons-version

# make clean

# ./configure

# make menuselect

# make install

# make samples

Page 29: Svoip Asterisk 2011 P1

Directorios usados por Asterisk/etc/asterisk/ Contiene los archivos de configuración de

Asterisk archivos.conf Sin embargo el archivo system.conf se

encuentra ubicado en el directorio /etc/dahdi/

Cualquier otro software puede usar el hardware y el driver de dahdi, por lo tanto el archivo system.conf no esta ubicado directamente en el directorio /etc/asterisk

Page 30: Svoip Asterisk 2011 P1

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

Page 31: Svoip Asterisk 2011 P1

Directorios usados por AsteriskLos subdirectorios dentro de /var/lib/asterisk

son:agi-bin/ Contiene scripts personalesfirmware/ Contiene imágenes binarias de firmware de

varios dispositivos compatibles con asteriskimages/ Las aplicaciones que se comunican con

canales que soportar imágenes, buscan en este directorio

Page 32: Svoip Asterisk 2011 P1

Directorios usados por AsteriskLos subdirectorios dentro de /var/lib/asterisk son: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 33: Svoip Asterisk 2011 P1

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-csv Este directorio es usado para guardar los CDRs

en un formato CSV 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 34: Svoip Asterisk 2011 P1

Opciones de inicio en asterisk -c nos permite conectarnos a la consola de asterisk o

CLI. -v Verbosity. Es usada para indicar el numero de líneas

que queremos mostrar en el debug . -g Core dump. Si asterisk termina inesperadamente,

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 anterioridad

-h Help. Muestra la ayuda. Verificamos si asterisk esta corriendo con: # asterisk –r

Si no esta corriendo entonces ejecutamos:# asterisk -cgvvv

Page 35: Svoip Asterisk 2011 P1

Configuración de canales

Asterisk y el protocolo SIP El protocolo SIP es nativamente peer-to-peer por lo

tanto un teléfono IP espera comunicarse con otro directamente sin una PBX en medio del camino.

Cuando una llamada SIP se realiza a través de asterisk en realidad hay 2 llamadas una del origen hacia asterisk y otra desde asterisk al destino.

Internamente asterisk “puentea” estas llamadas. Asterisk implementa un back-to-back user agent.

Page 36: Svoip Asterisk 2011 P1

Configuración de canales

Extensiones en asterisk El concepto de extensión en asterisk es crucial En las demás PBXs una extensión es un numero

que se marca para que un teléfono timbre o para acceder a un servicio.

En asterisk, una extensión es el nombre de una agrupación de instrucciones en el plan de marcado.

En asterisk una extensión es el nombre de un script (formado por letras, números o combinado)

Page 37: Svoip Asterisk 2011 P1

Configuración de canales

En asterisk, un canal es una conexión que conduce una llamada entrante o saliente al sistema (PBX)

Esta conexión puede venir de ó salir hacia la red de telefonía tradicional (analógica o digital) o un dispositivo de voz sobre IP.

Por defecto asterisk soporta una serie de canales: VoIP: SIP, IAX, H.323, MGCP… PSTN: Analógico o digital a través de DAHDI

Page 38: Svoip Asterisk 2011 P1

Configuración de canales

IMPORTANTE: Al momento de instalar asterisk

ejecutamos make samples con la finalidad de generar archivos de ejemplo que nos sirvan como referencia, por lo tanto vamos a respaldarlos:# cd /etc/asterisk/

# cp extensions.conf extensions.bkp

# cp sip.conf sip.bkp

# cp iax.conf iax.bkp

Page 39: Svoip Asterisk 2011 P1

Configuración de dispositivosImportante: Asterisk aplica las configuraciones

especificadas en los archivos de configuración en el siguiente orden:

1) Las especificadas en una seccion que define un canal.

2) Las especificadas en un template.3) Las especificadas en la sección general4) Las definidas por defecto

Page 40: Svoip Asterisk 2011 P1

Configuración de canales

ALGO MAS… Los archivos de configuración están divididos en

secciones de código llamados “contextos” Los nombres de los contextos se escriben entre [ ]

y pueden ser definidos a gusto, exceptuando ciertos nombres reservados como: [general], [globals], entre otros.

Cada contexto tiene uno o mas parámetros. Los parámetros se escriben de la siguiente manera:

parámetro=valor Los comentarios inician con ;

Page 41: Svoip Asterisk 2011 P1

Configuración de canales: SIP Editaremos el archivo /etc/asterisk/sip.conf El archivo sip.conf empieza con la sección

[general] que contiene las opciones por defecto y configuraciones de canal para todos usuario/peers definidos dentro del archivo.

Podemos sobrescribir estas configuraciones para un usuario/peer especifico haciendo los cambios en la configuración de cada usuario/peer.

Page 42: Svoip Asterisk 2011 P1

Configuración de canales: SIP

[general]context=noautenticadasallowguest=nosrvlookup=yesudpbindaddr=0.0.0.0tcpenable=noqualify=yeslanguage=es

[gastudillo]type=friend context=internoshost=dynamicnat=yessecret=ClAvEsEgUrAdtmfmode=autodisallow=allallow=ulaw

Page 43: Svoip Asterisk 2011 P1

Configuración de canales: SIP Hemos definido dos secciones, la primera

llamada [general] contiene las configuraciones generales inherentes al protocolo y también se la usa para definir parámetros por defecto.

context=noautenticadas contexto por defecto que se aplicará a todos los canales que no logren autenticarse. Implica que debe definirse el contexto [noautenticadas] en el plan de marcado donde se definirá el procedimiento a seguir para estos canales.

Page 44: Svoip Asterisk 2011 P1

Configuración de canales: SIP allowguest=no Hemos deshabilitado las llamadas no

auntenticadas, si queremos permitir este tipo de llamadas deberiamos habilitarla y manejarlas a traves del contexto noautenticadas definido en el paso anterior.

srvlookup=yes Permite que asterisk use los registro DNS SRV para reenviar llamadas usando nombres de dominio

udpbindaddr=0.0.0.0 Indica la direccion IP de la interface a traves de la cual asterisk escuchara peticiones udp (señalizacion y trafico) la direcion 0.0.0.0 implica todas las interfaces disponibles.

Page 45: Svoip Asterisk 2011 P1

Configuración de canales: SIP qualify=yes Esta línea le permite a asterisk

monitorear la latencia entre el terminal y el servidor por defecto hasta 2000 ms

[gastudillo] Los usuarios se definen entre [ ] y puede ser cualquier combinación alfanumérica.

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.

context=internos Cuando un requerimiento originado por un teléfono es recibido y autenticado por asterisk, el numero de extensión marcado es manejado por el plan de marcado en el contexto definido en la configuración del terminal, en este caso “internos”.

Page 46: Svoip Asterisk 2011 P1

Configuración de canales: SIP host=dynamic Requerirá que el terminal 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.

nat=yes La opción de nat es usada para indicarle a asterisk que habilite ciertos “trucos” que permitan que las llamadas SIP puedan llevarse a cabo a traves de NAT.

secret=clavesegura Secret es el password usado para la autenticación.

Page 47: Svoip Asterisk 2011 P1

Configuración de canales: SIPIPv6 en sip.conf Desde la version 1.8, Asterisk soporta IPv6 para

trafico SIP y RTP:

udpbindaddr value Description

192.168.100.50 Bind to a specific IPv4 address.

2001:db8::1Bind to a specific IPv6 address

0.0.0.0 Bind to all IPv4 addresses on the system.

: : Bind to all IPv4 and IPv6 addresses.

Page 48: Svoip Asterisk 2011 P1

Configuración de canales: SIP Para aplicar todos estos cambios debemos guardar

y cerrar el archivo sip.conf y luego ingresar a la consola:

# asterisk -r Para verificar que no se han cargado las

configuraciones aun:

CLI>sip show peers Para cargar los cambios:

CLI>module reload chan_sip.so Para verificar que los cambios se aplicaron

CLI>sip show peers

Page 49: Svoip Asterisk 2011 P1

Configuración de canales: SIP Configuración de los teléfonos GXP-2000: Laboratorio en clases Una vez que los teléfonos estén configurados

corremos el comando: CLI>sip show peers

Que cambios nota? Para hacer una prueba de eco ejecute: CLI>channel originate SIP/gastudillo application echo

Page 50: Svoip Asterisk 2011 P1

Configuración de canales: SIP

Page 51: Svoip Asterisk 2011 P1

Configuración de canales: SIP En este curso utilizaremos como softphone SIP

e IAX a Zoiper, que podemos descargar de: http://www.zoiper.com/download.php?os=Win

dows&ap=zc&location=zoiper_communicator_free_installer_exe_win

Verificar que no exista una version previa, caso contrario desinstalamos la versión antigua.

Realizar una instalación en windows con todos los parámetros por defecto.

Page 52: Svoip Asterisk 2011 P1

Configuración de canales: SIP

Page 53: Svoip Asterisk 2011 P1

Configuración de canales: SIP

Page 54: Svoip Asterisk 2011 P1

Configuración de canales: SIP

Page 55: Svoip Asterisk 2011 P1

Configuración de canales: IAX IAX2 (Inter-Asterisk eXchange protocol,

versión 2) Fue originalmente diseñado para

conectar PBX Asterisk a través de diferentes redes físicas y especialmente para sobrellevar el problema de NAT observado en SIP.

Fue estandarizado con un RFC en 2009,[50

] pero no se ha popularizado entre los fabricantes de hardware aun.

Page 56: Svoip Asterisk 2011 P1

Configuración de canales: IAX Principal ventaja: uso de un solo puerto para

transmision de voz y señalizacion: UDP 4569 Otra ventaja: IAX2 trunking: encapsula los

packetes de varias tramas de voz en el mismo datagrama usando un solo header IAX2

Beneficio: reduccion de la sobrecarga. Para un par de llamadas no es muy notorio

pero cuando transportamos mas de una docena de ellas la reduccion es significativa.

Page 57: Svoip Asterisk 2011 P1

Configuración de canales: IAX

[general]autokill=yessrvlookup=yescalltokenoptional = 0.0.0.0/0.0.0.0 requirecalltoken = auto maxcallnumbers = 512 ; http://tinyurl.com/iax2seg

[gastudillo]type=friendhost=dynamicsecret=my5UP3rp@s5!context=internosdisallow=allallow=ulawallow=alaw

Page 58: Svoip Asterisk 2011 P1

Configuración de canales: IAX Para aplicar todos estos cambios debemos guardar

y cerrar el archivo iax.conf y luego ingresar a la consola:

# asterisk -r Para verificar que no se han cargado las

configuraciones aun:

CLI>iax2 show peers Para cargar los cambios:

CLI>module reload chan_iax2.so Para verificar que los cambios se aplicaron

CLI>iax2 show peers

Page 59: Svoip Asterisk 2011 P1

Configuración de canales: IAX Configuración del softphone Zopier para IAX: Laboratorio en clases Una vez que los softphones estén configurados

corremos el comando:CLI>iax2 show peers

Que cambios nota? Para hacer una prueba de eco ejecute:CLI>channel originate IAX2/gastudillo application echo

Page 60: Svoip Asterisk 2011 P1

Acerca del registro

Es un error común suponer que el registro es la forma en la que un dispositivo se autentica con el fin de obtener permiso para hace una llamada.

El propósito del registro es que el dispositivo notifique de su ubicación en la red, de tal forma que asterisk sepa donde enviar las llamadas dirigidas a él.

La autenticación para llamadas salientes es un proceso totalmente separado y siempre ocurre en base a cada llamada.

Por esto es posible que el peer pueda hacer llamadas pero no pueda recibirlas (porque falló el registro).

Page 61: Svoip Asterisk 2011 P1

Dialplan básico para probar disp. En el archivo /etc/asterisk/extensions.conf

incluir:[internos]exten => 100,1,Dial(SIP/gastudillo)

exten => 101,1,Dial(SIP/usuario2)

exten => 200,1,Answer() exten => 200,2,Playback(hello-world) exten => 200,3,Hangup()

Para aplicar los cambios ejecutamos en la CLI:

CLI> dialplan reload

Page 62: Svoip Asterisk 2011 P1

El plan de marcado (dialplan) Es el corazón de un sistema asterisk donde

reside la lógica (comportamiento) de la central telefónica.

El plan de marcado es único y se configura en /etc/asterisk/extensions.conf

Es una lista de instrucciones que asterisk debe seguir como respuesta estímulos externos.

El plan de marcado tiene 4 definiciones fundamentales: contexto, extensiones, prioridades y aplicaciones.

Page 63: Svoip Asterisk 2011 P1

El plan de marcado: contextos Son secciones del plan de marcado,

también se suele decir que 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, a menos que se especifique explícitamente la interacción.

Page 64: Svoip Asterisk 2011 P1

El plan de marcado: contextos En programación es lo que se llaman

“subrutinas”. Se definen así: [micontexto001] [general]

[globals] Podemos usar: 0-9, A-Z, - , _ máximo 79

caracteres. “El contexto es el punto en el plan de

marcado donde las conexiones de un canal comenzarán”

La definición del contexto en el canal es como se conectará el canal al plan de marcado.

Page 65: Svoip Asterisk 2011 P1

El plan de marcado: contextos

Page 66: Svoip Asterisk 2011 P1

El plan de marcado: extensiones Es una instrucción o grupo de ellas y que

asterisk seguirá como consecuencia de una llamada entrante o por dígitos marcados en un canal activo(estímulo ext.)

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

exten => 101,1, Answer( )

En el ejemplo el nombre(numero) es 101, la prioridad es 1 y la aplicación es Answer.

El nombre puede ser cualquier combinación alfanumérica: Juan, 101Juan, 101.

Page 67: Svoip Asterisk 2011 P1

El plan de marcado: extensiones Cada extensión tiene un nombre, puede

tener uno o más pasos, cada paso es una prioridad.

La aplicación es el comando que ejecuta una acción en la llamada.

Cada uno de estos componentes van separados por comas:

exten => 101,1,Answer( )exten => 101,2,Playback(hello-world)exten => 101,3,Hangup( )

Page 68: Svoip Asterisk 2011 P1

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

Page 69: Svoip Asterisk 2011 P1

El plan de marcado: prioridades El operador “same” o “lo mismo”:

exten => 123,1,Answer() same => n,do somethingsame => n,do something else

same => n,do one last thingsame => n,Hangup()

Uso de etiquetas (labels):

exten => 101,1(contestar),Answer()

Page 70: Svoip Asterisk 2011 P1

El plan de marcado: aplicaciones Cada aplicación realiza una acción especifica en

el canal activo: reproducir un sonido, aceptar una entrada desde el teclado , buscar algo en una DB, colgar una llamada, marcar un canal, etc.

Algunas aplicaciones como: Answer() y Hangup(), no requieren instrucciones para hacer su trabajo, sin embargo la mayoría si lo requieren.

Estos elementos adicionales llamados argumentos son pasado a la aplicación para afectar como estas ejecutan la acción.

aplicación(arg1,arg2,arg3,…)

Page 71: Svoip Asterisk 2011 P1

Answer(), Playback() y Hangup()

La aplicación Answer() es usada para contestar una canal que esta “timbrando”

Esta aplicación realiza la configuración inicial para el canal que recibe una llamada entrante.

No requiere argumentos No siempre es necesario su uso, sin

embargo es una forma efectiva de asegurar que una canal esta conectado antes de realizar cualquier acción posteriorr.

Page 72: Svoip Asterisk 2011 P1

Answer(), Playback() y Hangup() La aplicacion Playback() es unsada para

reproducir un archivo de sonido previamente grabado sobre una canal.

Los ingresos por teclado efectuados por el usario son ignorados.

Ruta por defecto: /var/lib/asterisk/sounds/ Para usar Playback() hay que especificar el

nombre de un archivo(sin la extension) como argumento.

Ej: Playback(filename) reproduce filename.wav

Page 73: Svoip Asterisk 2011 P1

[general ] y [globals]

[general]

autofallthrough=yes

clearglobalvars=no

El parámetro autofallthrough es útil en los

casos en los que durante la ejecución del

dialplan no hay nada más que hacer, entonces

asterisk terminará la llamada de la mejor

manera posible

http://tinyurl.com/autofall

Page 74: Svoip Asterisk 2011 P1

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

[internos]

exten => 123,1,SetGlobalVar(JOHN=SIP/john)

Page 75: Svoip Asterisk 2011 P1

Variables de canal

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

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

Para definirlas se hace uso de la aplicación Set()exten => 123,1,Set(CONTADOR=4)

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

Un ejemplo de una variable de canal es el callerID

Page 76: Svoip Asterisk 2011 P1

Apps: Goto(), Background, WaitExten()

Como su nombre lo implica la aplicación Goto() se usa para enviar una llamada a otra parte del plan de marcado

La sintaxis de la aplicación requiere que pasemos como parámetros el contexto, extensión y prioridad destino. Ej:

exten => 400,1,Goto(context,extension,priority)

Page 77: Svoip Asterisk 2011 P1

Apps: Goto(), Background, WaitExten()

Ejemplo: Agreguemos la siguiente línea al final del contexto internos:exten => 777,1,Goto(MenuPrueba,start,1)

Y luego agregamos el contexto MenuPrueba:[MenuPrueba]exten => start,1,Answer()exten => start,n,Playback(hello-world)

Entonces, cada vez que un dispositivo ingrese al contexto internos y marque 777, asterisk pasará al control de la llamada a la “primera” prioridad de la extensión “start” del contexto “MenuPrueba”

Page 78: Svoip Asterisk 2011 P1

Apps: Goto(), Background, WaitExten()

La aplicación Background al igual que Playback(), reproduce un archivo de audio pre-grabado, pero a diferencia de Playback() cuando el llamante presiona una tecla o serie de teclas en el teclado telefónico, esta función interrumpe la reproducción del archivo y pasa la llamada a la primera prioridad de la extensión que corresponda al digito(s) presionado(s) dentro del mismo contexto.

Background() tiene la misma sintaxis de Playback():

[MenuPrueba] exten => start,1,Answer()

same => n,Background(welcome)

Page 79: Svoip Asterisk 2011 P1

Apps: Goto(), Background, WaitExten()

Si queremos que asterisk espere por una entrada luego de que la reproducción del archivo ha finalizado podemos usar WaitExten().

Esta aplicación espera que el llamante ingrese dígitos DTMF y siempre se usa a continuación de la aplicación Background()

[MenuPrueba] exten => start,1,Answer()

same => n,Background(main-menu) same => n,WaitExten()

Page 80: Svoip Asterisk 2011 P1

Apps: Goto(), Background, WaitExten()

Si queremos que WaitExten() espere por una respuesta durante un numero especifico de segundos simplemente debemos pasar como parámetro el numero de segundos:

same => n,WaitExten(5)

Amabas funciones Background() y WaitExten() permiten al usuario ingresar tonos DTMF, luego asterisk intentará encontrar una extensión en el mismo contexto que coincida con los dígitos que el llamante ingreso

Page 81: Svoip Asterisk 2011 P1

Apps: Goto(), Background, WaitExten()

Ejemplo:

[MenuPrueba] exten => start,1,Answer()

same => n,Background(main-menu) same => n,WaitExten(5)

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

same => n,Goto(MenuPrueba,start,1) exten => 2,1,Playback(digits/2)

same => n,Goto(MenuPrueba,start,1)

Luego de hacer los cambios, guardamos y recargamos el plan de marcado.

Page 82: Svoip Asterisk 2011 P1

Validando opciones invalidas y timeout

[MenuPrueba] exten => start,1,Answer()

same => n,Background(main-menu) same => n,WaitExten(5)

exten => 1,1,Playback(digits/1) same => n,Goto(MenuPrueba,start,1)

exten => 2,1,Playback(digits/2) same => n,Goto(MenuPrueba,start,1)

exten => i,1,Playback(pbx-invalid) same => n,Goto(MenuPrueba,start,1)

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

same => n,Hangup()

Page 83: Svoip Asterisk 2011 P1

La aplicación Dial()

Sintaxis: Dial(tech/user, timeout, option, uri) El primer parámetro es el destino al cual

queremos llamar conformado por la tecnología (SIP,DAHDI,IAX), un slash (/) y la fuente remota (típicamente un numero o un usuario)

exten => 123,1,Dial(DAHDI/1)exten => 123,1,Dial(SIP/201)exten => 123,1,Dial(SIP/gastudil&SIP/anyuser)

Page 84: Svoip Asterisk 2011 P1

La aplicación Dial()

Sintaxis: Dial(tech/user, timeout, option, uri) El segundo parámetro es el timeout especificado en

segundos y es el tiempo que asterisk intentara establecer una conexión con el canal definido.

exten => 101,1,Dial(SIP/gastudillo,10)

Si el canal es contestado antes del timeout asterisk puentea ambos canales y el plan de marcado termina.

Si el destino no contesta, está ocupado o no está disponible, asterisk setea un variable llamada DIALSTATUS y continua con la siguiente prioridad en la extensión.

Page 85: Svoip Asterisk 2011 P1

La aplicación Dial()

Sintaxis: Dial(tech/user, timeout, option, uri) 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 ( ). Ej: rm (concatenar si es mas de una).

La letra r hará que el llamante escuche un tono de timbrado mientras el canal de destino es notificado de una llamada entrante, m en cambio reproducirá música en espera al llamante en lugar del típico timbre.

Page 86: Svoip Asterisk 2011 P1

La aplicación Dial()

Sintaxis: Dial(tech/user, timeout, option, uri) Si el canal de destino soporta la recepción de una uri al

momento de la llamada, la uri especificada es enviada. Por ejemplo si el teléfono ip soporta esta característica,

la uri aparecerá en el display del teléfono, si usamos un softphone en cambio probablemente se abrirá un pop-up con la uri. Esta opción es raramente usada.

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

exten => 123,1,Dial(SIP/101, ,r)

Page 87: Svoip Asterisk 2011 P1

La aplicación Dial()

[MenuPrueba] exten => start,1,Answer()

same => n,Background(main-menu) same => n,WaitExten(5)

exten => 1,1,Dial(SIP/gastudillo,20,m) same => n,Goto(MenuPrueba,start,1)

exten => 2,1,Dial(SIP/anyuser,20,m) same => n,Goto(MenuPrueba,start,1)

exten => i,1,Playback(pbx-invalid) same => n,Goto(MenuPrueba,start,1)

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

same => n,Hangup()

Page 88: Svoip Asterisk 2011 P1

Grabación de audio con Record()Record(filename.format, silence, maxduration, options)

Dentro de [internos] :

exten => 401,1,Playback(vm-intro)

exten => 401,n,Record(intro.gsm)

exten => 401,n,Wait(5)

exten => 401,n,Playback(intro)

exten => 401,n,Hangup

Page 89: Svoip Asterisk 2011 P1

Grabación de audio con Record()

http://tinyurl.com/asteriskREC

“Usted se ha comunicado con la

compañía “ ”, si conoce el numero de la

extensión digítelo ahora, caso contrario

presione 1 para comunicarse con

ventas, 2 para soporte técnico, 3 para

contabilidad; o manténgase en la línea

que una operadora le atenderá”

Page 90: Svoip Asterisk 2011 P1

Agregando variables al dialplan Revisemos el archivo de ejemplo que se

encuentra disponible en:

http://tinyurl.com/dialplan1

Page 91: Svoip Asterisk 2011 P1

Expresiones y manejo de variables Se definen como un conjunto de variables,

operadores y valores que se colocan juntas para obtener un resultado.

$[expresion]

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

Cuando Asterisk encuentra una expresión, reemplaza toda la expresión por el valor resultante.

Es importante notar que antes de hacer esto primero evalúa el valor de las variables .

Page 92: Svoip Asterisk 2011 P1

Expresiones y manejo de variablesexten => 321,1,Set(CONT=3)

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

exten => 321,3,SayNumber(${NEWCONT})

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

Page 93: Svoip Asterisk 2011 P1

Expresiones y manejo de variables Es importante resaltar que para indicar

que queremos realizar una operación es necesario dejar un espacio en blanco entre operador y los operandos.

exten => 123,1,Set(TEST=$[2+1])

No es lo mismo que :

exten => 234,1,Set(TEST=$[2 + 1])

Page 94: Svoip Asterisk 2011 P1

Expresiones y manejo de variablesOperadores Boleanos.- Evalúan la verdad de una

sentencia or : expr1 | expr2

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

Matemáticos: expr1 {+, -} expr2 expr1 {*, /, %} expr2

Page 95: Svoip Asterisk 2011 P1

Ramificación condicional

Aplicación GotoIf() Esta aplicación es la clave para la ramificación

condicional, tiene una sintaxis especial llamada la sintaxis condicional:GotoIf(expression?destination1:destination2)

Si la expresión 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 verdadero.

Page 96: Svoip Asterisk 2011 P1

Ramificación condicional

El destino puede ser: Una prioridad dentro de la misma

extensión. Ej: 3 Una extensión y prioridad dentro del

mismo contexto. Ej: 123,10. Un contexto, extensión y prioridad Ej:

internos,123,10. Una prioridad nombrada dentro de la

misma extensión.

Page 97: Svoip Asterisk 2011 P1

Ramificación condicional

Ejemplos:

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)

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

Page 98: Svoip Asterisk 2011 P1

Ramificación condicional

La variable CALLERID Es una variable de canal que como su nombre lo

indica contiene información que identifica al llamante.

Es una variable especial que esta compuesta por sub-variables:

name: o nombre del llamante “Gabriel Astudillo” num: o numero del llamante <084519952> all: Ambos, el numero del llamante y su nombre:

“Gabriel Astudillo” <084519952>

Page 99: Svoip Asterisk 2011 P1

Ramificación condicional

El caso de la Ex-enamorada

exten => 202,1,GotoIf($[${CALLERID(num)} = 201]?20:10)

exten => 202,10,Dial(SIP/gastudillo,30,r)

exten => 202,20,Playback(olvidame)

exten => 202,21,Hangup( )

Agregar en la definición de cada peer sip en sip.conf la linea: callerid="Tuomas Tammisalo" <1000>

Page 100: Svoip Asterisk 2011 P1

Buzones de voz (voicemail)

Es una de las características mas populares de los sistemas de telefonía actual. En este sentido asterisk es muy flexible, para ello se edita el archivo: /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.

Page 101: Svoip Asterisk 2011 P1

Buzones de voz (voicemail)

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. Creación de Directorio de la empresa

basado en la información de los voicemail.

Page 102: Svoip Asterisk 2011 P1

Buzones de voz (voicemail)

Contexto [general][general] format=wav49|wav|gsm ;ahorro transcoding [email protected]=yesskipms=3000 ; fwd o rew n milisegundosmaxsilence=10 ; silencio para cortarsilencethreshold=128 ; silence sensitivitymaxlogins=3 emaildateformat=%A, %B %d, %Y at %r pagerdateformat=%A, %B %d, %Y at %r;en el formato de la funcion STRFTIME de C

Page 103: Svoip Asterisk 2011 P1

Buzones de voz (voicemail)

Contexto [zonemessages] El propósito de esta sección es permitir

el manejo de zona horaria específica para los mensajes con el fin de entregar los mensajes de los usuarios con las marcas de tiempo correcto:

[zonemessages]eastern=America/New_York|'vm-received' Q 'digits/at' IMp central=America/Chicago|'vm-received' Q 'digits/at' Imp ecuador=America/Guayaquil|'vm-received' Q 'digits/at' IMp

Page 104: Svoip Asterisk 2011 P1

Buzones de voz (voicemail)

Sintaxis: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 carácter pipe (|).

[default]

201 => 201,Gabriel Astudillo, [email protected],

[email protected], tz=central|attach=yes

Page 105: Svoip Asterisk 2011 P1

Buzones de voz (voicemail)

Dentro de [internos]:

exten => 101,1,Dial(${USER1},30,m)

same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)

same => n(unavail),VoiceMail(101@default,u)

same => n,Hangup()

same => n(busy),VoiceMail(101@default,b)

same => n,Hangup()

;Acceso al voicemail:

exten => *282,1,VoiceMailMain()

Page 106: Svoip Asterisk 2011 P1

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,internos,f)

exten => 9,1,Directory(default,internos)

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

Page 107: Svoip Asterisk 2011 P1

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 de la llamada 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:59 days_of_week: días 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 parámetro.

Page 108: Svoip Asterisk 2011 P1

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:

internos,123,10 Una prioridad nombrada dentro de la misma

extensión

Page 109: Svoip Asterisk 2011 P1

Ramificación condicional basada en fechas

Aplicación GotoIfTime(); 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 => 777,1,GotoIfTime(*,*,9,oct?cerrado,start,1)

; durante las horas de trabajo envie las llamadas al contexto MenuPrueba

exten => 777,2,GotoIfTime(09:00-17:59|mon-fri|*|*?MenuPrueba,start,1)

exten => 777,3,GotoIfTime(09:00-11:59|sat|*|*?MenuPrueba,start,1)

; en cualquier otro caso estamos cerrados

exten => 777,4,Goto(cerrado,start,1)

Page 110: Svoip Asterisk 2011 P1

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 => 101,1,Dial(${USER1},30,m)same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)same => n(unavail),VoiceMail(101@default,u)same => n,Hangup() same => n(busy),VoiceMail(101@default,b)

same => n,Hangup()

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

Page 111: Svoip Asterisk 2011 P1

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(${USER1},30,m)same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)same => n(unavail),VoiceMail(101@default,u)same => n,Hangup() same => n(busy),VoiceMail(101@default,b)same => n,Hangup()

Noten que esta definición aun no es practica pues solo define al usuario 1 y nos direccionaría a todos los usuario a su voicemail

En la definición de una macro siempre debemos utilizar la extensión especial s

Page 112: Svoip Asterisk 2011 P1

Como llamar a una macro

Macro(nombre,arg1,arg2...)

[internos]

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

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

${MACRO_CONTEXT} (internos) ${MACRO_EXTEN} (201) ${MACRO_PRIORITY} (1) ${ARGn} (arg1,arg2)

Page 113: Svoip Asterisk 2011 P1

Como llamar a una macro

[macro-extensiones]

exten => s,1,Dial(${USER1},30,m)same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)same => n(unavail),VoiceMail(${MACRO_EXTEN}@default,u)same => n,Hangup() same => n(busy),VoiceMail(${MACRO_EXTEN}@default,b)same => n,Hangup()

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

Nótese 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 114: Svoip Asterisk 2011 P1

Como llamar a una macro

[macro-extensiones]

exten => s,1,Dial(${ARG1},30,m)same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)same => n(unavail),VoiceMail(${MACRO_EXTEN}@default,u)same => n,Hangup() same => n(busy),VoiceMail(${MACRO_EXTEN}@default,b)same => n,Hangup()

[internos]exten => 201,1,Macro(extensiones,SIP/gastudillo)

exten => 202,1,Macro(extensiones,SIP/anyuser)

exten => 203,1,Macro(extensiones,${USER1})

Page 115: Svoip Asterisk 2011 P1

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 116: Svoip Asterisk 2011 P1

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

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 117: Svoip Asterisk 2011 P1

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:

Page 118: Svoip Asterisk 2011 P1

Coincidencia de patrones

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.

El punto (.) representa uno o mas caracteres,

es conocido como el wilcard.

Page 119: Svoip Asterisk 2011 P1

Coincidencia de patrones

• Para hacer uso del pattern matching

simplemente lo colocamos en el lugar del

nombre de una extensión. Ejemplo:

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

Page 120: Svoip Asterisk 2011 P1

Coincidencia de patrones

Sintaxis

Si asterisk encuentra que los digitos coiciden con mas de un

patron dentro del contexto, seleccionará al mas especifico:

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

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

Local:

exten => _NXXXXXX,1, AcciónNacional:

exten => _0[2-7]XXXXXXX,1, AcciónMovistar:

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

Page 121: Svoip Asterisk 2011 P1

Coincidencia de patrones

Porta:

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

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

Internacional:

exten => _00. ,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 122: Svoip Asterisk 2011 P1

Uso de la variable ${EXTEN} Siempre que digitemos una extensión, Asterisk guardará

en la variable de canal EXTEN los dígitos que hemos

marcado.

exten => _7XX,1,Playback(digits/${EXTEN})

exten => _8XX,1,Playback(digits/${EXTEN:1})

exten => _9XX,1,Playback(digits/${EXTEN:-1})

Presionemos en el teclado: 723, 823, 923 y notemos la

diferencia.

Page 123: Svoip Asterisk 2011 P1

Telefonía Analógica: FXS & FXO Para los circuitos de telefonía analógica existen

2 tipos de terminales: La oficina(la central telefónica de la PSTN) y la estación (típicamente un teléfono, modem o una tarjeta en la PBX).

La oficina central es responsable de: Suministrar energía a la línea (48 VDC) Proveer voltaje para timbrar (90 VAC) Proveer tono de marcado Detectar el estado del colgado (off-hook and on-

hook) Enviar señalización complementaria (caller ID)

Page 124: Svoip Asterisk 2011 P1

Telefonía Analógica: FXS & FXO La estación es responsable de: Proveer timbrado o al menos tener la

capacidad de recibir el voltaje de timbrado de alguna manera.

Proveer un teclado numérico o alguna manera de enviar tonos DTMF

Proveer un hook switch para indicar el estado de la línea.

Page 125: Svoip Asterisk 2011 P1

Telefonía Analógica: FXS & FXO A un puerto FX (Foreign eXchange) se lo

nombra por la entidad que a la que se conecta, no por lo que hace el puerto.

Un puerto FXO (Foreign eXchange Office) actua como una estacion pero se lo conecta a la oficina central de la PSTN.

Un puerto FXS(Foreign eXchange Station) actua como un puerto que provve servicios de oficina central pero se conecta una estacion (se le conecta un telefono).

Page 126: Svoip Asterisk 2011 P1

Telefonía Analógica: FXS & FXO Es por esta razon que las configuraciones

de señalizacion en los archivos de asterisk aparentemente se hacen “al reves”:

Los puertos FXO usan señalizacion FXS y Los puertos FXS usan señalizacion FXO. Si un puerto FXO se conecta a una oficina

central necesita comportarse como una estacion por lo tanto necesita señalizacion FXS.

Page 127: Svoip Asterisk 2011 P1

Telefonía Analógica: FXS & FXO 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 128: Svoip Asterisk 2011 P1

TDM410P

PCI 2.2

Fuente de Voltaje

FXO PortsFXS Ports

Entradas RJ-11

Page 129: Svoip Asterisk 2011 P1

Configuración de un canal FXO Configuración del hardware en

/etc/dahdi/system.conf La siguiente configuración mínima define un canal

fxo con señalización fxs:

fxsks=4echocanceller=mg2,4loadzone=usdefaultzone=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 130: Svoip Asterisk 2011 P1

Configuración de un canal FXO La diferencia está 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 131: Svoip Asterisk 2011 P1

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 cargar los cambios ejecutamos en el shell

# dahdi_cfg -vvv

Page 132: Svoip Asterisk 2011 P1

Configuración automática

A partir de la implementación de dahdi no es necesario escribir en el archivo system.conf podemos hacer uso de tools de deteccion y configuracion automatica (si la tarjeta esta certificada)

Deteccion:# lsdahdi

# dahdi_scan

# dahdi_hardware Auto configuración:# dahdi_genconf & dahdi_genconf modules

Page 133: Svoip Asterisk 2011 P1

Configuración de un canal FXOConfiguración del hardware en chan_dahdi Asterisk usa la información en

/etc/asterisk/chan_dahdi.conf para determinar las configuraciones del hardware de telefonía instalado en el sistema.

El archivo chan_dahdi.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 134: Svoip Asterisk 2011 P1

Configuración de un canal FXO[channels]

; canales físicos:; opciones por defecto para todos los canalesusecallerid=yeshidecallerid=nocallwaiting=nothreewaycalling=yestransfer=yesechocancel=yesechotraining=yes; definicion de canales:context=entrantes signalling=fxs_ks ; señalizacion FXS para canal FXOchannel => 4 ; PSTN se conecta al puerto 4

Page 135: Svoip Asterisk 2011 P1

Configuración de un canal FXO 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 136: Svoip Asterisk 2011 P1

Configuración de un canal FXO callwaiting=no

La llamada en espera es desactivada para una linea FXO

threewaycalling=yesPermite 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=yesPermite transferir llamadas con un hook flash; requiere que three-way calling este activada

Page 137: Svoip Asterisk 2011 P1

Configuración de un canal FXO echocancel=yes

Habilita la cancelación de eco, se requiere siempre que usemos líneas análogas.

echotraining=yesLe 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 la llamada apunte a un contexto en el plan de marcado verdad ?

Page 138: Svoip Asterisk 2011 P1

Configuración de un canal FXO 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 entrantes con la línea context=entrantes.

Finalmente como un canal FXO usa señalización FXS, la definimos en la linea signalling=fxs_ks

module reload chan_dahdi.so

dahdi show channels

Page 139: Svoip Asterisk 2011 P1

Configuración de un canal FXO[entrantes]exten => s,1,aplicacion( )exten => s,2,aplicacion( )exten => s,3,aplicacion( )

La extensión s Cuando una llamada entra a un contexto

sin una extensión especifica de destino (por ejemplo una llamada a un puerto fxo) deben ser recibidas por la extensión s “start”

Page 140: Svoip Asterisk 2011 P1

Configuración de un canal FXO CONFIGURACION DEL DIALPLAN

[entrantes];las llamadas que provienen del puerto FXO son ;direccionadas a este contexto en chan_dahdi.confexten => s,1,Answer()exten => s,2,Echo()

Lab: Probar que al llamar al 2269261 contesta la PBX y se reproduce tu propia voz