Programa Integral: Telefonía IP con Asterisk Departamento de Informática
Copyright © 2008 por TECSUP
Módulos del Programa Integral 1. 2. 3.
Instalación y Configuración de Asterisk Administración de Asterisk Tópicos Avanzados con Asterisk
(30 horas) (30 horas) (36 horas)
Módulo 1: (30 hrs.) Instalación y Configuración de Asterisk
Unidad 01 Introducción a Asterisk
Introducción • En esta unidad conoceremos los principios básicos de la telefonía tradicional y la telefonía IP, como la señalización, los protocolos y los CODECs. • Veremos la arquitectura de asterisk para entender como su estructura modular lo hace flexible y rápido de desplegar en diferentes entornos. • Instalaremos el servidor asterisk sobre linux y reconoceremos los principales archivos de configuración.
Objetivos • Definir los conceptos básicos de telefonía tradicional y telefonía IP. • Entender la arquitectura de Asterisk. • Conocer el hardware disponible para Asterisk. • Instalar Asterisk en un entorno Linux.
Tema 01 Conceptos Analógica
de
Telefonía
Conceptos Básicos de Telefonía • La telefonía tradicional provee servicios de voz basados en la conmutación de circuitos. • Consiste en convertir la voz a formato electrónico (analógico o digital) y transportarla a través de una red para comunicar a dos o más personas.
La PSTN
Red de Enlaces Central Telefónica
PSTN
Bucle de Abonado
PBX
La PSTN • Los COs (Central Office) son centrales de conmutación locales que interconectan los teléfonos en un área específica.
Troncales • Las troncales permiten interconectar las centrales telefónicas. Y transportan las llamadas de voz de los abonados de central a central. • Las troncales pueden ser: – Analógicas – Digitales
Bucle de Abonado
Abonados Telefónicos Central Telefónica
Interfaces Analógicas • Las interfases analógicas proveen la señalización en ambos extremos del bucle de abonado. Estas interfases son FXS y FXO.
FXS / FXO Gateway de voz
FXS / FXO Gateway de voz
PBX – Private Box eXchange Una PBX se conecta a la PSTN y administra las llamadas locales (entre extensiones de la PBX) y las llamadas con el exterior.
PBX
Central Telefónica (CO) Soportan interfases como: FXS, FXO, E&M, E1, T1, IP, etc.
Funcionalidad de una PBX • • • • • • •
Transferencia de Llamadas Conferencia Captura de llamadas Llamada en espera Servicio diurno y nocturno Clases de Servicio IVR
Tema 02 Conceptos de Telefonía IP
Telefonía IP • La telefonía IP da servicios de voz y otros de valor agregado a través de una red de conmutación de paquetes sobre TCP/IP. • Permite por lo tanto implementar estos servicios a través de la red Pública de Internet.
Telefonía IP FXS
Gateway de Voz
INTERNET
FXO
PBX
ATA
Teléfonos IP
Protocolos Los protocolos de señalización son utilizados para establecer la conexión, ubicar al destino, identificar la llamada, desconexión, etc. Protocolos utilizados en Telefonía IP: SIP, H.323, MGCP
CODECs • Los CODECS nos dan la posibilidad de utilizar menos ancho de banda por canal de voz. Permitiéndonos pasar más canales de voz (llamadas) por la red. -
G.711 (ulaw / alaw) -> 64 Kbps G.726 -> 32 Kbps G.729 -> 8 Kbps (Necesita adquisición de licencia) GSM -> 13 Kbps
MOS Main Opinion Score MOS
Calidad
Deficiencia
5
Excelente
Imperceptible
4
Buena
Perceptible pero no incomoda
3
Pasable
Incomoda mínimamente
2
Pobre
Incomoda
1
Mala
Incomoda bastante
Multiconferencia, IVR, Buzón de Voz, Directorio, aplicaciones personalizadas, ...
Tema 03
Traductor de Codecs Lanzador de Aplicaciones
Núcleo de Centralita
Temporizador y Gestor de Entradas/Salidas
Cargador de Módulos
API de Canales Asterisk
SIP, H323, BRI, PRI, Bancos de Canales, HW específico, ...
API de Formatos de Ficheros Asterisk
GSM G723 G711 MP3 ADPCMA LINEAR
API de Traducción de Codecs
API de Aplicaciones Asterisk
GSMsf G723sf WAV MP3
Arquitectura de Asterisk
Historia • Mark Spencer creo en 1999 la empresa “Linux Support Services” con el objetivo de dar soporte a usuarios de Linux. • Al tener dificultad en adquirir una central telefónica para su empresa por los altos costos, decidió construir su propia Centralita en Linux utilizando lenguaje C.
Historia • Jim Dixon escribe un driver para una tarjeta Mitel89000C sobre FreeBSD que corría en una Pentium III de 600Mhz. • Jim Dixon crea su propia tarjeta con el nombre “Tormenta” y llama a su revolucionaria tecnología ZAPATA (Zapata Telephony Project). • Jim Dixon intenta migrar su driver a Linux (Red Hat 6.0) no tiene éxito y libera el código en la red. A las 48 hrs. recibe un correo de Mark Spencer.
Historia • Mark Spencer y Jim Dixon unen esfuerzos en un nuevo modelo de negocio. • Mark Spencer funda Digium proveedor de servicios y productos de hardware y software para Asterisk.
Asterisk • Asterisk es una central telefónica (PBX) en software bajo licencia GPL, creada por Mark Spencer. • Asterisk es un sistema telefónico de código abierto (Open Source), que ofrece funcionalidad, flexibilidad y características avanzadas.
Asterisk Telefonía IP: Telefonía Tradicional:
- SIP, IAX, H323
- Telefonía Analógica
- Codecs: G711, G729, GSM
- Redes RDSI
- Codec G711
- Codec G711
Hardware para Asterisk TDM400P
B410P
4 interfases FXS/FXO
Interfase BRI
TDM2400P
TE420
24 interfases FXS/FXO
120 canales E1
Arquitectura Multiconferencia, IVR, Buzón de Voz, Directorio, aplicaciones personalizadas, ...
Traductor de Codecs Lanzador de Aplicaciones
Núcleo de Centralita
Temporizador y Gestor de Entradas/Salidas
Cargador de Módulos
API de Canales Asterisk
SIP, H323, BRI, PRI, Bancos de Canales, HW específico, ...
API de Formatos de Ficheros Asterisk
GSM G723 G711 MP3 ADPCMA LINEAR
API de Traducción de Codecs
API de Aplicaciones Asterisk
GSMsf G723sf WAV MP3
Arquitectura Canales.Un canal equivale a una línea telefónica, como un circuito de voz digital. Puede ser una línea analógica o un circuito digital. (CODEC / Protocolo de señalización
Ejm: GSM / SIP).
API de canales: Sirve para controlar todas las llamadas del sistema, sean Voz IP, analógicas, cualquier otra tecnología; pudiendo desarrollar nuevos canales.
Arquitectura API de Traducción de Codec: Controla la traducción de CODECs entre participantes en una comunicación. -
G.711 (u-law / a-law) -> 64 Kbps G.726 -> 32 Kbps G.729 -> 8 Kbps (Necesita adquisición de licencia) GSM -> 12 – 13 Kbps
Arquitectura Aplicaciones.Para que Asterisk pueda conectar llamadas de entrada o salida, utilizar el buzón de voz, conferencia, etc. necesita ejecutar aplicaciones.
API de Aplicaciones: Se han desarrollado muchas aplicaciones de IVR, MultiConferencia, etc, etc. Teniendo la posibilidad de desarrollar nuevas mediante AGI (Asterisk Gateway Interface) utilizando lenguajes como C, C++, perl, php, java, etc.
Arquitectura Archivos.Asterisk soporta algunos tipos de archivos que utiliza para tocar audio como: mp3, wav, GSM, etc. API de Formato de Ficheros: Sirve para controlar el formato de archivos que pueden ser controlados por el sistema.
Tema 04 Escenarios de Implementación
Implementaciones
Telefonía IP
Internet
Telefonía Analógica
PSTN
Implementaciones
SIP
Internet
Telefonía IP
PSTN
Telefonía Analógica
Implementaciones
IAX IAX
Internet SIP
SIP
Telefonía IP
Telefonía IP
Implementaciones Aplicaciones :
-Click and Dial - Marcador predictivo - CRM
Internet
BD
PSTN
Servidor de aplicaciones
Implementaciones
Tema 05 Instalación de Asterisk
Requisitos de Software Asterisk Funciona sobre Linux y requiere los siguientes paquetes instalados: -
Kernel (fuentes y cabeceras) gcc (versión 3.x o superior) ncurses (para el CLI) bison (para los archivos de configuración) - openssl - libnewt
Preparando la instalación http://www.asterisk.org/downloads De aquí descargamos los paquetes básicos para instalar asterisk en formato tar.gz: -
asterisk asterisk-addons asterisk-sounds zaptel libpri
Instalando ZAPTEL Ingresamos a la carpeta de zaptel y ejecutamos los siguientes comandos: #make clean #./configure #make #make install #make config
Instalando libpri Ingresamos a la carpeta de libpri y ejecutamos los siguientes comandos: #make clean #make #make install
Instalando asterisk Ingresamos a la carpeta de asterisk y ejecutamos los siguientes comandos: #make clean #./configure #make #make install #make samples #make config
Iniciando asterisk Asterisk se puede iniciar de diferentes formas, si hemos ejecutado make config, la forma más sencilla es utilizando: #service asterisk start O de otra manera podemos iniciarlo como: #asterisk –vvvvvc Inicia el servidor asterisk e inicia el modo de comandos.
Directorios de Instalación Los directorios de instalación de asterisk se encuentran configurados en el archivo /etc/asterisk/asterisk.conf [directories] astetcdir => /etc/asterisk astmoddir => /usr/lib/asterisk/modules astvarlibdir => /var/lib/asterisk astdatadir => /var/lib/asterisk astagidir => /var/lib/asterisk/agi-bin astspooldir => /var/spool/asterisk astrundir => /var/run astlogdir => /var/log/asterisk
Resumen de la Unidad Asterisk como servidor de comunicaciones permite la convergencia de la telefonía tradicional y la telefonía __ en un entorno flexible, económico y consistente. Asterisk se puede desplegar en diversos escenarios de implementación aumentando las posibilidades de comunicación de las compañías. Incluyendo la posibilidad de agregar aplicaciones o hacer interfaces con aplicaciones existentes.
Asterisk se instala sobre ____ incluyendo 3 paquetes básicos asterisk, zaptel, libpri. Los drivers zaptel, y las librerías libpri nos permiten utilizar hardware para conectarnos a la teléfonos analógicos y troncales analógicas y digitales (PSTN).
Unidad 02 Configurando Teléfonos IP
Introducción • Completando los pasos de la unidad anterior tenemos un servidor Asterisk funcionando, pero para que podamos realizar llamadas es necesario configurar los dispositivos que manejará asterisk. • En esta unidad veremos como configurar dispositivos SIP, configurar extensiones en el Plan de Discado, e interconectar 2 servidores asterisk utilizando el protocolo IAX2.
Objetivos • Aprender el concepto de canal y troncal en asterisk. • Configurar dispositivos SIP utilizando el archivo sip.conf. • Conocer el protocolo IAX2. • Interconectar 2 servidores asterisk utilizando IAX2.
Tema 01 Principios Básicos
Funciones de PBX Una PBX es una central privada en una compañía u oficina que se encarga de administrar las llamadas entre las extensiones conectadas a ella, así como las líneas telefónicas de entrada y de salida. Cumple generalmente 3 funciones principales: Establecer llamadas entre dos o más usuarios. (Llamadas internas o externas) Mantener la comunicación durante el tiempo solicitado.. Proveer información para contabilidad y/o facturación de llamadas.
Concepto de Canal Un canal para asterisk es una conexión producto de una llamada en la central Asterisk. Representa la conexión de dos entidades dentro del sistema y pueden ser de los siguientes tipos: – ZAP – SIP – IAX – H323 – skinny
Nomenclatura de Canales Entender la nomenclatura que utiliza asterisk para nombrar canales es crítico para hacer un buen uso de ellos. El formato utilizado es el siguiente:
/
Ejm: ZAP/2 SIP/5001 IAX/[email protected]
Protocolo SIP SIP es un protocolo punto a punto, implementado como cliente-servidor. Su diseño se basa en los protocolos HTTP y SMTP. Fue usado originalmente para establecer, modificar y terminar sesiones multimedia en Internet . Estas sesiones pueden ser de voz, vídeo, chat, juegos interactivos, etc.
Registro SIP Cliente SIP
Register sip: rgonzales.com
From sip: [email protected] ….. Expires : 3600
Base de datos de ubicaciones
Tema 02 Configurando Teléfonos SIP
Módulo SIP El módulo de asterisk para canales SIP permite a asterisk a comunicarse vía VoIP con otros dispositivos SIP. Asterisk puede actuar como: Cliente SIP Servidor SIP Gateway SIP
Módulo SIP La configuración del modulo SIP de asterisk se lleva a cabo configurando el archivo sip.conf, que se encuentra en /etc/asterisk. Este archivo está dividido en secciones primero tenemos una sección general donde aplicaremos las configuraciones que serán tomadas por defecto en caso no se especifiquen en las secciones individuales.
Configurando cuentas SIP SIP.CONF : /etc/asterisk/sip.conf [general] bindport=5060 bindaddr=0.0.0.0 context=Internal language=es disallow=all allow=all
Configurando cuentas SIP
peer
[3001] type=friend secret=123456 nat=no host=dynamic disalow=all allow=ulaw allow=gsm context=Internal
Configurando cuentas SIP Podemos ver otros parámetros adicionales para la configuración SIP: canreinvite = yes Permite que asterisk pase directamente los paquetes RTP entre los puntos de comunicación.
dtmfmode = info Permite detectar los tonos DTMF en la línea de comunicación.
Instalando el softphone SIP X-Lite: -
2 Líneas Mute Redial Videoconferencia G.711, GSM
Instalando el softphone SIP La configuración de x-lite es simple basta con llenar el siguiente formulario con la información que se configuró en sip.conf
Probando la configuración • Una vez configurado el teléfono IP este intentará registrarse al servidor asterisk. • Para probar si está registrado correctamente en la línea de comandos de asterisk escribimos el comando: sip show peers.
Probando la configuración
Tema 03 El Plan de Discado
Plan de Discado El plan de discado de Asterisk (Dial Plan) es el corazón del sistema, aquí se define como se manejarán las llamadas entrantes, salientes y locales. Consiste en un conjunto de instrucciones que Asterisk ejecutará siguiendo un orden determinado.
Plan de Discado
-
El plan de discado se configura principalmente en el archivo extensions.conf y está dividido en 4 partes: Contextos Extensiones Prioridades Aplicaciones
Plan de Discado Contextos: el plan de discado está dividido en secciones llamadas contextos. Un contexto actúan como una colección de extensiones. De esta manera un grupo de extensiones que pertenecen a un contexto estarán completamente aisladas de las extensiones en otro contexto.
Plan de Discado El nombre del contexto se coloca entre [ ] todo lo que vaya debajo será parte del contexto hasta el llegar al siguiente [ ]. Por ejemplo para determinar el contexto salida: [salida] Es posible incluir un contexto dentro de otro para esto utilizamos include. [salida] [local] include => salida
Plan de Discado Extensiones: una extensión es una lista de instrucciones que Asterisk ejecutará disparadas por una llamada entrante o por dígitos marcados en un canal. Prioridades: cada extensión ejecuta múltiples pasos las prioridades indican el orden en que se ejecutarán.
Plan de Discado Aplicaciones: las aplicaciones ejecutan acciones especificas en un canal, tales como: contestar un canal, tocar un sonido, espiar un canal, colgar un canal. Ejm: - Answer() - Hangup()
Aplicaciones Dial – Intenta establecer una nueva conexión con un canal y lo enlaza con el canal que está iniciando la llamada. Presenta la siguiente sintaxis: • Dial(type/identifier, timeout, options, URL) • Dial(type1/identifier1[&type2/identifier2[&type3/ide ntifier3... ] ], timeout, options, URL) Para timbrar varios canales al mismo tiempo se colocan varias líneas del tipo type/identifier separadas por ´&´.
Aplicaciones Answer – Responde un canal que está timbrando. La sintaxis es la siguiente: answer([delay]) Hangup – cuelga incondicionalmente un canal. La sintaxis es la siguiente: hangup()
Aplicaciones Playback – toca el archivo especificado (se debe omitir la extensión del archivo). Playback terminará de tocar el archivo de sonido y luego devolverá el control al plan de discado. La sintaxis es la siguiente: Playback(filename,options...)
Plan de Discado Ejemplo de un Plan de Discado: [incoming] exten => 1001,1,Answer() exten => 1001,2,Playback(bienvenida.wav) exten => 1001,3,Hangup() exten => 1002,1,Dial(SIP/1002,10) exten => 1002,3,Hangup()
Tema 04 Interconexión de Servidores Asterisk
Concepto de Troncal Una troncal es una línea que puede ser utilizada para hacer una llamada hacia fuera o para recibir llamadas desde fuera del servidor Asterisk. Ejm: - La línea telefónica que viene de la PSTN podemos usarla como troncal. - Una cuenta SIP con un proveedor de telefonía IP.
Protocolo IAX2 El protocolo IAX2 fue creado por Mark Spencer para la señalización de VoIP en Asterisk. El protocolo crea sesiones internas y dichas sesiones pueden utilizar cualquier CODEC que pueda transmitir voz o vídeo.
Protocolo IAX2 Operación de IAX2 IAX es un protocolo para medios y señalización “peer to peer”, su señalización es parecida a la de SIP.
Nomenclatura de canales IAX2 La sintaxis para nombrar canales IAX2 es la siguiente. Canales de salida: IAX/[[:]@][:][/[@][/]]
Ejm: IAX/mark:asdf@myserver/6275@default
Nomenclatura de canales IAX2 Canales de entrada: IAX[[@]]/
Ejm: IAX[[email protected]]/14
Interconectando 2 Asterisk • La conexión de 2 servidores asterisk puede ser hecha utilizando SIP o IAX2. • La ventaja de usar IAX2 radica en que utilizando el modo “trunking” es posible enviar varias conversaciones de voz utilizando una sola cabecera.
Interconectando 2 Asterisk El archivo iax2.conf está formado por secciones empezaremos por la configuración de las opciones globales. [general] bindport=4569 bindaddr=192.168.0.1 bandwidth=low jitterbuffer=yes register => rgonzales:[email protected]
Interconectando 2 Asterisk Configurando las entidades [trujillo] type=friend host=dynamic trunk=yes secret=welcome context=incoming deny=0.0.0.0/0.0.0.0 permit=192.168.1.107/255.255.255.2
Configurando el Plan de discado En el plan de discado podemos ingresar una extensión como sigue: [toTrujillo] exten=>9001,1,Dial(iax2/trujillo/${exten})
Probando la configuración Una vez configurado debemos recargar la configuración de asterisk. • CLI>reload Para comprobar los canales IAX: • iax show peers. • iax show channels.
Resumen de la Unidad Asterisk actúa como un ____ to Back User Agent SIP, de tal forma que es posible que detecte el envío de tonos durante la conversación para realizar acciones. La configuración de dispositivos ___ la hacemos a través del archivo /etc/asterisk/sip.conf, mientras que la configuración de las extensiones se realiza en el archivo /etc/asterisk/extensions.conf. El protocolo IAX2 puede funcionar en modo trunking y permitir el transporte de _______ de varias comunicaciones de voz utilizando una única cabecera. la interconexión de servidores asterisk se hace de preferencia utilizando el protocolo IAX2 y se configura en /etc/asterisk/iax2.conf
Unidad 03 Configurando Teléfonos Analógicos
Introducción • Aunque la telefonía IP nos ofrece grandes ventajas, todavía no se ha dejado de lado a la telefonía tradicional. • En esta unidad veremos como configurar tarjetas digium para agregar teléfonos analógicos a nuestra red IP, y como integrarlos en el Plan de Discado.
Objetivos • Configurar interfases FXS en tarjetas Digium TDM. • Configurar teléfonos analógicos en el servidor Asterisk. • Implementar una red hibrida con teléfonos analogías y teléfonos SIP.
Tema 01 Interfases FXS / FXO
FXS / FXO • Las interfases analógicas FXS y FXO proveen señalización en el bucle de abonado. Entre los teléfonos y la central telefónica. • En telefonía IP es importante reconocer la diferencia de estas interfases para poder conectar los dispositivos a los puertos correctos.
Procedimiento de llamada • FXO
Descuelga el teléfono Envía los números DTMF
Descuelga el teléfono para atender la llamada Detecta el voltaje de timbrado.
Procedimiento de llamada Descuelga el teléfono
Detecta la corriente de descolgado. Recibe los dígitos DTMF.
FXS
Señalización de Abonado La señalización entre le abonado y la central permite reconocer cuando se ha descolgado el teléfono para hacer una llamada y recibamos tono de línea. Entre las principales tenemos: • Loop start. • Ground Start. • Kewl Start.
Tema 02 Configurando Tarjetas Digium TDM
Tarjeta TDM400P Es una tarjeta Digium que soporta hasta 4 módulos donde podemos colocar interfase FXS y/o FXO.
Módulos FXS / FXO El módulo s110m de color verde provee un puerto con señalización FXS. El módulo x100m de color rojo provee un puerto con señalización FXO.
Zaptel.conf Zaptel.conf se ubica en la carpeta /etc/ a diferencia del resto de archivos de configuración. Aquí se configura el hardware zaptel como son las tarjetas TDM400P. Este archivo es leído por el programa ztcfg para la configuración de los drivers.
Zaptel.conf La señalización FXS / FXO en el zaptel.conf está dada por las siguientes opciones. • fxols – indica señalización FXO loop-start • fxogs – indica señalización FXO ground-start • fxoks – indica señalización FXO kewl-start • fxsls – indica señalización FXS loop-start • fxsgs – indica señalización FXS ground-start • fxsks – indica señalización FXS kewl-start
Zaptel.conf Asumimos que tenemos una tarjeta TDM400P con 2 módulos FXS en los canales 1 y 2; y 2 módulos FXO en los canales 3 y 4. El archivo de configuración /etc/zaptel.conf quedaría de la siguiente manera: fxoks=1,2 fxsks=3,4 loadzone = fr defaultzone = fr
Cargando los módulos Para cargar los módulos se deben ejecutar los siguientes comandos en el shell de Linux: #modprobe wctdm #ztcfg -vv
Zapata.conf Configurando y cargando el módulo zaptel lo tenemos disponible para que cualquier aplicación haga uso de él. Para que Asterisk pueda utilizarlo es necesario que configuremos el archivo /etc/asterisk/zapata.conf. Aquí se configuran que canales de la tarjeta digium y como serán utilizados por asterisk por el módulo zap_channel.
Ejemplo de Zapata.conf [channels] usecallerid=yes hidecallerid=yes callwaiting=yes threewaycalling=yes transfer=yes echocancel=yes echocancelwhenbridged=yes rxgain=0.0 txgain=0.0
Zapata.conf Un ejemplo de la configuración de los canales es el siguiente: group 1 signalling=fxo_ks language=en context=reception channel => 1 signalling=fxo_ks language=fr context=sales channel => 2
Tema 03 Implementando el plan de Discado
Nomenclatura de canales ZAP La sintaxis para nombrar canales ZAP es la siguiente. Canales de salida: Zap/[g][c][r]
Ejm: Zap/1 Zap/g1
Nomenclatura de canales ZAP La sintaxis para nombrar canales ZAP es la siguiente. Canales de entrada: Zap/-
Ejm: Zap/1-1 Zap/3-2
Plan de Discado La configuración del plan de discado para los canal es ZAP FXS 1 y 2 es la siguiente: [local] exten => exten => exten => exten =>
2001,1,Dial(ZAP/1,20,trT) 2001,2,Hangup() 2002,1,Dial(ZAP/2,20,trT) 2002,2,Hangup()
Aplicaciones Record – Graba la voz que ingresa a un canal. La sintaxis es la siguiente: Record(filename.format[|silence][|mxduration][|option])
Aplicaciones Background – tocara la lista de archivos especificada mientras espera que se ingrese un número de extensión. La sintaxis es la siguiente: Background(filename1[&filename2...][|options[|langover ride][|context]])
Aplicaciones Wait – espera el número especificados. La sintaxis es la siguiente: wait(seconds)
de
segundos
Aplicaciones WaitExten – espera a que se ingrese una nueva extensión, dándole la oportunidad al que llama de marcar una nueva extensión. La sintaxis es la siguiente: WaitExten(seconds) WaitExten([seconds][|options])
Aplicaciones Echo – Devuelve el audio de regreso al mismo canal que lo ha generado. La ejecución de esta aplicación termina cuando el usuario presiona la tecla # o cuelga el teléfono. La sintaxis es la siguiente: Echo()
Resumen • La configuración del hardware Digium se hace en el archivo /etc/zaptel.conf, aquí se definen principalmente los ______ configurados y la señalización. • La configuración de los canales analógicos del módulo ZAP_Channel en asterisk se hace en el archivo /etc/asterisk/zapata.conf aquí se definen la señalización y los parámetros que utilizará asterisk para administrar dichos canales. • En el plan de discado se agregan los canales analógicos utilizando el formato _____, que indica el tipo de canal y el número de canal que estamos utilizando.
Unidad 04 Configurando Troncales Analógicas/Digitales
Introducción • Nuestro servidor de comunicaciones ya está funcionando con teléfonos SIP y teléfonos analógicos. Pero solo nos permite llamadas entre los teléfonos locales y los teléfonos de otro servidor asterisk. • Ahora necesitamos comunicarnos con el exterior para eso deberemos conectarnos a la PSTN, para esto utilizaremos hardware Digium y configuraremos asterisk para que utilice líneas analógicas y digitales.
Objetivos • Configurar líneas analogías FXO para comunicarnos con la PSTN. • Aprender el concepto de E1. • Configurar líneas digitales E1 para comunicarnos con la PSTN. • Configurar el plan de discado para atender llamadas de la PSTN.
Tema 01 Troncales Analógicas
Líneas Analógicas • Nuestro proveedor de telefonía tradicional generalmente nos da un acceso a la PSTN a través del bucle de abonado utilizando líneas analógicas que van a nuestros teléfonos (POTS). • Para conectarnos a estas líneas utilizamos interfases FXO.
Zaptel.conf Asumimos que tenemos una tarjeta TDM400P con 2 módulos FXS en los canales 1 y 2; y 2 módulos FXO en los canales 3 y 4. El archivo de configuración /etc/zaptel.conf quedaría de la siguiente manera: fxoks=1,2 fxsks=3,4 loadzone = fr defaultzone = fr
Cargando los módulos Para cargar los módulos se deben ejecutar los siguientes comandos en el shell de Linux: #modprobe wctdm #ztcfg -vv
Ejemplo de Zapata.conf [channels] usecallerid=yes hidecallerid=yes callwaiting=yes threewaycalling=yes transfer=yes echocancel=yes echocancelwhenbridged=yes rxgain=0.0 txgain=0.0
Zapata.conf Un ejemplo de la configuración de los canales FXO es el siguiente: group=2 echocancel=yes signalling=fxs_ks context=entrante busydetect=yes busycount=6 answeronpolarityswitch=yes hanguponpolarityswitch=yes callprogress=yes progzone= fr channel=3-4
Tema 02 Troncales Digitales
Líneas Digitales E1 • Cuando necesitamos un número mayor de líneas telefónicas, el proveedor de telefonía puede entregar canales digitales, en nuestro caso E1´s. • EL E1 entrega 2Mbps con señalización CAS o puede utilizar señalización CCS del estándar ISDN PRI.
Líneas Digitales E1 • Una trama E1 tiene 32 canales de 64 Kbps cada uno, en telefonía utilizamos el canal „0‟ (cero) para sincronía y el canal ‟16‟ para señalización. Quedando ‟30‟ canales disponibles para transmitir voz. 8 Bits CANAL
00
Sincronía y control
8 Bits 1
1
8 Bits ---
Información
15 15
8 Bits 16 16
Señalización
8 Bits 17 17
---
8 Bits
8 Bits
30 30
31 31
Información
Canales ISDN PRI • Conocidos comúnmente como primarios, están formados por un E1. Utilizan una configuración 30B + D, es decir 30 canales de información 1 canal de señalización. 30 canales B
PRI
B D
1 canal D
Zaptel.conf Asumimos que tenemos una tarjeta TE110 con un canal E1. El archivo de configuración /etc/zaptel.conf quedaría de la siguiente manera:
span=1,1,0,ccs,hdb3 bchan=1-15 bchan=17-31 dchan=16
Cargando los módulos Para cargar los módulos se deben ejecutar los siguientes comandos en el shell de Linux: #modprobe wctlxxp #ztcfg -vv
Zapata.conf Un ejemplo de la configuración de los canales E1 es el siguiente: group=3 switchtype=euroisdn signalling=pri_cpe channel=>1-15;17-31
Probando la configuración Después de hacer un reload en la Línea de Comandos de Asterisk. Utilizamos estos comandos: zap show status – muestra el estatus de las placas zaptel. zap show channels – muestra los canales ZAP configurados. pri show span – verifica los datos del enlace PRI.
Tema 03 Plan de Discado
Extensiones Especiales Asterisk utiliza algunos nombres para extensiones que cumplen propósitos especiales. i : Invalid s : Start h : Hangup t : Timeout T : AbsoluteTimeout
Patrones de Extensiones Para mejorar las características del plan de discado es posible utilizar patrones de extensiones, todos los patrones deben empezar con “_”, aquí ponemos algunos ejemplos: _9xxxxx -> cualquier extensión de 6 dígitos que empiece con el número 9. _7. -> cualquier extensión que empiece con 7. _56xxx5 -> extensiones de 5 dígitos que comiencen con 56 y terminen en 5.
Plan de Discado Cuando utilizamos los canales FXO para recibir llamadas desde el exterior, en el plan de discado utilizamos la siguiente configuración: [entrante] exten => s,1,Answer exten => s,2,Dial(SIP/5001,20,trT) exten => s,3,Hangup
Plan de Discado Cuando utilizamos los canales FXO para iniciar llamadas al exterior, en el plan de discado utilizamos la siguiente configuración: [salidas] exten => _9xxxxxxx,1,Dial(ZAP/3/${EXTEN:1}),20,trT) exten => _9xxxxxxx,2,Hangup
Plan de Discado Adicionalmente si deseamos que al hacer una llamada al exterior y que ésta sea tomada por cualquiera de las líneas disponibles, entonces debemos utilizar el concepto de grupo: [salidas] exten => _9xxxxxxx,1,Dial(ZAP/g2/${EXTEN:1}),20,trT) exten => _9xxxxxxx,2,Hangup
Resumen • Las líneas analógicas FXO se configuran en los archivos /etc/zaptel.conf y /etc/asterisk/zapata.conf • Asterisk puede utilizar líneas digitales con canales ___ para manejar números grandes de líneas telefónicas. • Las líneas digitales E1 se configuran en los archivos /etc/zaptel.conf y /etc/asterisk/zapata.conf • El plan de discado utiliza extensiones especiales para cubrir características especiales en el plan de _______.
Unidad 05 Variables y Macros en el Plan de Discado
Introducción • En esta unidad explotaremos mucho más las capacidades del plan de discado, aprovechando las aplicaciones incluidas en asterisk. • Utilizaremos variables y macros para realizar tareas repetitivas en el plan de discado, además de incluir la ejecución de comandos del shell de linux desde el plan de discado, que nos da una poderosa herramienta de programación.
Objetivos • Utilizar aplicaciones internas de asterisk en el plan de discado. • Aplicar el uso de variables dentro del plan de discado. • Programar macros en el plan de discado. • Utilizar comandos del shell de Linux.
Tema 01 Uso de Variables y Expresiones
Variables en asterisk • Asterisk puede hacer uso de variables globales y variables específicas por cada canal para ser utilizadas como argumentos en las aplicaciones que ejecutamos en el plan de discado. • Para expresar una variable en el plan de discado utilizamos la siguiente notación: ${nombre_variable}
Variables en asterisk Existen 3 tipos de variables: - Variables globales - Variables de canal - Variables de entorno
[globals] • Esta sección del plan de discado es utilizada para definir las variables globales y sus valores iniciales. • Ejm: [globals] OPERADORA=sip/2001 SALIDAS=zap/g3 IVRMSG=mensaje-ivr1
Variables de Entorno • El acceso a las variables de entorno se realiza con la siguiente sintaxis: ${ENV(nombre_variable)} • Ejm: ${ENV(ASTERISK_PROMPT)} – indica el prompt actual en al CLI de asterisk. ${ENV(RECORDED_FILE)} – el nombre del archivo grabado por última vez con el comando record.
Variables Pre-Definidas • Asterisk define variables predefinidas que podemos utilizar en el plan de discado. Estas pueden ser: – Variables de canal predefinidas. – Variables específicas para aplicaciones. – Variables específicas para macros.
Variables Pre-Definidas Variables de Canal: ${CDR(accountcode)}: Código de cuenta especificado. ${CALLERID(all)}:El CallerID name / utilizado actualmente. ${CALLERID(name)}: El nombre para el utilizado actualmente. ${CALLERID(num)}: El número para el utilizado actualmente.
si está number
callerID callerID
Variables Pre-Definidas Variables específicas de Aplicaciones: ChanIsAvail – devuelve ${AVAILCHAN}: el primer canal disponible. Dial – devuelve ${DIALSTATUS}: el estatus del último intento de discado. Dial – toma la entrada de ${TRANSFER_CONTEXT}: si esta variable existe, cuando una trasferencia(#) es ejecutada ésta va a la extensión escogida en ese contexto.
Variables Pre-Definidas Variables específicas de Macros: ${ARG1}: El primer argumento pasado a la macro. ${ARG2}: El segundo argumento pasado a la macro (y así sucesivamente). ${MACRO_CONTEXT}: El contexto de la extensión que inició esta macro. ${MACRO_EXTEN}: la extensión que inició esta macro.
Aplicación: Set( ) • Asigna un valor a una variable. • Sintaxis: Set(variablename=value[|variable2=value2][|options])
• Esta función puede utilizarse para signar valores a las variables de canal o a las variables globales desde el plan de discado.
Expresiones • Las expresiones combinan variables, valores y operadores para entregar un resultado que puede ser evaluado por otra aplicación. • Sintaxis: $[expresión]
Expresiones Operadores Booleanos: expr1 | expr2 : el operador OR. expr1 & expr2 : el operador AND.
Expresiones Operadores Matemáticos: expr1 expr1 expr1 expr1 expr1
+ expr2 : el operador suma. - expr2 : el operador resta. * expr2 : el operador multiplicación. / expr2 : el operador división. % expr2 : el operador residuo.
Expresiones Ejemplo: $[${valor1}+500] ; suma 500 a la variable valor1. exten => 1001,1,Set(TEST=$[${valor1}-10]) Le asigna el valor de la expresión a la variable TEST.
Tema 02 Uso de Aplicaciones Condicionales
[general] • El plan de discado inicia con esta sección aquí colocamos opciones de configuración general. • Ejm: [general] static=yes writeprotect=yes autofallthrough=yes clearglobalvars=no priorityjumping=no
Aplicación Goto • Salta a un contexto, extensión y/o prioridad en particular. • Sintaxis: Goto([[context,]extension,]priority) • No deben insertarse espacios en blanco entre las comas.
Aplicación Goto Ejemplos: exten => 1,1,Goto(submenu,s,1) Salta al contexto “submenu”, extensión “s” y prioridad “1”. exten => 600,4,Goto(s,6) Salta a la extensión “s”, prioridad “6”.
Aplicación GotoIf • Implementa un goto pero condicional. • Sintaxis: GotoIf(condition?label1[:label2])
• Salta a label1 si la condición es verdadera o a label2 si la condición es falsa.
Aplicación GotoIf [testing] exten exten exten exten exten exten exten
=> => => => => => =>
2001,1,GotoIf($["${CALLERID(num)}" = “3001"]?3) 2001,2,GotoIf($["${CALLERID(num)}" != "3002"]?7:5) 2001,3,Dial(SIP/4001,15,Trt) 2001,4,Hangup 2001,5,Dial(SIP/4002,15,Trt) 2001,6,Hangup 2001,7,MusicOnHold(default)
Tema 03 Creación de Macros
Macros • Las macros son un conjunto de aplicaciones que serán ejecutadas en secuencia; siempre deben iniciarse en la extensión s y la prioridad 1. • Las macros son muy utilizadas para evitar repetición de código en la construcción de un plan de discado, facilitando el mantenimiento y la creación de nuevas extensiones que realicen pasos comunes.
Aplicación: macro • Permite la ejecución de una macro, utiliza el contexto macro-, y salta a la extensión s de dicho contexto ejecutando paso a paso las prioridades indicadas, luego regresará a la siguiente prioridad de donde fue llamado. • Sintaxis: Macro(macroname,arg1,arg2,…)
Ejemplo • Desde el plan de discado llamamos a la macro test: exten => 1001,1,Macro(test,1001,SIP/2001) • Donde los argumentos son: ${ARG1} = 1001 ${ARG2} = SIP/2001
Ejemplo [macro-test] exten => s,1,Dial(${ARG2},20) exten => s,2,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Voicemail(u${ARG1}) exten => s-NOANSWER,2,Goto(default,s,1) exten => s-BUSY,1,Voicemail(b${ARG1}) exten => s-BUSY,2,Goto(default,s,1) exten => _s-.,1,Goto(s-NOANSWER,1) exten => a,1,VoicemailMain(${ARG1})
Tema 04 Ejecutando Comandos del Shell de Linux
EL Shell de Linux • El interprete de comandos o shell de Linux es una poderosa herramienta para ejecutar tareas en el servidor. • Asterisk nos permite aprovechar esta herramienta para poder lanzar la ejecución de comandos del shell desde el plan de discado.
Aplicación System() • Ejecuta un comando del sistema Linux. • Sintaxis: System(comando arg1 arg2 )
Ejemplo Haciendo un log de extensiones marcadas: exten => s,1,system(echo ${EXTEN} >> /var/log/calls.log) Reiniciando asterisk: exten => 2001,1,Playback(asterisk-restart-msg) exten => 2001,2,Wait(1) exten => 2001,3,System(“service asterisk restart”) exten => 2001,4,Hangup
Resumen de la Unidad • Desde el plan de discado es posible utilizar variables y macros que faciliten la creación de extensión, reduciendo el tiempo de administración y la cantidad de líneas de programación. • Además de aumentar la posibilidades de configuración lo que nos permite planes de discado más complejos y con características potentes y variadas.