• No se han encontrado resultados

Curso Asterisk Enlaza

N/A
N/A
Protected

Academic year: 2021

Share "Curso Asterisk Enlaza"

Copied!
83
0
0

Texto completo

(1)

Capítulo Básico #1

Introducción a Asterisk

Ing. Christian Cabrera R.

¿Qué es Asterisk?

Introducción a Asterisk 2

Es software open source

•Creado por Mark Spencer

•Creado como una alternativa a PBX propietarios •Convierte una PC ordinaria en un servidor de

comunicaciones

Es un proyecto, no un modelo ni fabricante

•Ante el crecimiento de Asterisk, se funda Digium, que es la

empresa que patrocina el desarrollo de Asterisk

Permite enlazar diferentes medios de comunicación, no solamente voz

Uso actual

Introducción a Asterisk 3 Más de 1 millón de servidores Asterisk en

producción hoy en día

• 1000+ descargas diarias en código fuente

Múltiples comunidades activas de usuarios

• http://voip-info.org

• http://asteriskmx.com

Varias distros listas para usarse

•Elastix, Trixbox, AsteriskNow, PBX in a Flash Muchos entornos de uso

• Oficinas, callcenters, corporativos, carriers, aplicaciones remotas

Versiones de Asterisk

Introducción a Asterisk 4

Versiones inferiores a 1.8 se consideran obsoletas

•Sin soporte oficial. Se recomienda actualizar.

Asterisk 11 es lo recomendado hoy en día

Versión Tipo Fecha de lanzamiento

Actualizaciones de

seguridad Fin de vida

1.4.X LTS Dic 2006 Abr 2011 Abr 2013

1.6.2.X Estándar Dic 2009 Abr 2011 Abr 2012

1.8.X LTS Oct 2010 Oct 2014 Oct 2015

10.X Estándar Dic 2011 Dic 2012 Dic 2013

11.X LTS Oct 2012 Oct 2016 Oct 2017

(2)

Dos tipos de versiones

Introducción a Asterisk 5

LTS (Long Term Support)

•Permanencia mínima de 5 años en el mercado •Orientado a estabilidad

•Mejor opción para empresas

Estándares

•Dos años de vida

•Orientado a impulsar nuevas funcionalidades •Apta para entusiastas y desarrolladores de nuevas

tecnologías

Diferencias con un PBX

convencional

Introducción a Asterisk 6

No se requiere hardware propietario

•Muchos fabricantes ofrecen productos similares •Hardware “genérico” intercambiable

•Diferentes soluciones de diferentes fabricantes •Libre competencia = mejores precios y productos

Sigue una arquitectura universal de PC

•Procesador, memoria, motherboard y almacenamiento •Es posible instalar Asterisk en una µPC (ej. Raspberry Pi)

Free software: tanto libre como gratis

•Sin pago de licencias

Diferencias (2)

Introducción a Asterisk 7 Totalmente programable y configurable

•No es necesario solicitar servicios especiales ni

comprar módulos extras

•Todo se hace a través de software

Ofrece servicios adicionales de datos

•Puede integrarse con cualquier sistema que pueda

correr en una PC con Linux

Bases de datos, consultas web, lectura de archivos, etc. Puede interactuar con conmutadores existentes

•Interconexión a través de puertos análogos/digitales

Escenarios de uso

Introducción a Asterisk 8

Hay muchas maneras en las que podemos aprovechar las características de Asterisk, entre ellas:

•PBX tradicional

•PBX IP •PBX híbrido

•Pasarela (Gateway) VoIP •Aumento de funcionalidades •Call center

(3)

PBX tradicional

Introducción a Asterisk 9

PBX VoIP

Introducción a Asterisk 10

PBX híbrido

Introducción a Asterisk 11

Pasarela VoIP

Introducción a Asterisk 12

(4)

Aumento de

funcionalidades

Introducción a Asterisk 13

¿Qué es lo que SI es

Asterisk?

Introducción a Asterisk 14

Es un SIP registrar

•Entidad SIP que mantiene el registro de diferentes usuarios y de su ubicación

Es un back-to-back user agent (B2BUA)

•Se comporta como un servidor y un teléfono de manera simultánea

•Controla una llamada estableciendo comunicación individual con cada parte (y luego puentea la

llamada)

•Es un cliente multi-sesión, multi-usuario •Convierte la comunicación entre canales

B2BUA vs Proxy

Introducción a Asterisk 15

Proxy

Llamada 1 Llamada 2 Llamada

¿Qué es lo que NO es

Asterisk?

Introducción a Asterisk 16 No es un SIP proxy

•Por definición, un proxy nunca es parte del fin de la

llamada (ej. Voicemail, IVRs, etc)

•Un proxy solo hace reenvío de paquetes, manejando las

llamadas en nombre de otros usuarios (Asterisk las procesa completamente en señalización y RTP)

No es un sistema plug-and-play

•Podemos crear complejas aplicaciones con él, pero es necesario configurarlo primero

(5)

Requisitos de hardware

Introducción a Asterisk 17

Lo más importante es la estabilidad

• Siempre usar hardware de marca (HP, IBM, Dell).

Evitar equipos armados con componentes de dudosa procedencia.

• Procurar siempre ofrecer soluciones de redundancia en los componentes de fallas más comunes:

Discos duros Fuentes de poder

El procesamiento necesario se mide según los requerimientos

No existe una regla fija de cuanto se necesita.

• Lo más importante es la cantidad de llamadas concurrentes.

• Soluciones basadas en ARM son aptas para pequeños entornos.

Pueden usarse entornos virtualizados

• Limitados a hardware PSTN externo conectado por IP

Requisitos de hardware (2)

Introducción a Asterisk 18

Si nuestro sistema es 100% IP, no necesitamos tarjetas

•El hardware adicional se usa solamente cuando queremos

conectarnos directamente a la PSTN.

El CPU depende de las tareas a realizar

•Adicional a las llamadas, cada nueva acción (grabar, consultar BD, reproducir audios, etc) reducen la capacidad del sistema

Cualquier PC es buena para pruebas

•Asterisk 1.2 en Celeron 333 Mhz con 32 MB RAM

•Es posible usar µPCs (ej. Raspberry Pi)

Espacio en disco dependiente de grabaciones

•Códec * horas de llamada * llamadas simultáneas * dias a

permanecer

Requisitos de software

Introducción a Asterisk 19

Preferentemente, Linux nativo

•FreeBSD y Mac OS tienen soporte parcial

Asterisk requiere de paquetería adicional:

Recuerda instalar las versiones -devel

GCC Ncurses Termcap Newt OpenSSL LibUUID

En CentOS instalamos estas dependencias con: yum install -y gcc gcc-c++

ncurses-devel libtermcap-ncurses-devel openssl-devel newt-openssl-devel libuuid-openssl-devel En Debian instalamos todas con

apt-get build-dep asterisk

DAHDI

Introducción a Asterisk 20

Para la interacción con tarjetas (Digium, Sangoma,

Openvox, etc), Asterisk requiere de las librerías de DAHDI

Digium Asterisk Hardware Device Interface

DAHDI son un conjunto de controladores que le permiten a Asterisk entenderse con las tarjetas

•Esto solo aplica para dispositivos USB y PCI/PCI-e

•Para conectar hardware externo se hace a través de protocolos como SIP o IAX

En si, DAHDI no es un requisito obligado para Asterisk

•Pero se recomienda instalar siempre para tener disponible el

módulo dahdi_dummy que se usa al crear conferencias con Meetme y troncales IAX.

(6)

DAHDI (2)

Introducción a Asterisk 21

DAHDI tiene su propia lista de dependencias

• Principalmente, necesitamos los encabezados de la misma

versión del kernel de Linux que estamos usando

• Los headers podemos conseguirlos fácilmente:

En CentOS:yum install kernel-devel

En Debian:apt-get install linux-headers-<versión>

Si queremos usar enlaces digitales (E1s), necesitamos más librerías:

libopenr2 si usaremos enlaces con R2 modificado

libpri si usaremos enlaces con ISDN PRI

En nuestra práctica de DAHDI aprenderemos como compilar estas librerías para su uso

Librerías extras para

Asterisk

Introducción a Asterisk 22

Cualquier librería que agregue funcionalidades a Asterisk (ej. openr2 o libsrtp) debe ser instalada antes de compilar Asterisk.

En caso de que Asterisk ya esté instalado, tendremos que repetir el proceso de instalación para que use las nuevas librerías.

•Siempre es posible agregar funcionalidades sobre la marcha.

•Durante el curso tendremos que recompilar Asterisk en

varias ocasiones para aprender a agregar librerías.

Instalando Asterisk

Introducción a Asterisk 23

Tenemos 2 alternativas:

• Instalar desde RPMs o DEBs (fácil) • Compilar desde código fuente (difícil)

Los RPMs nos permiten instalar paquetes de manera fácil y rápida, así como cumplir sus dependencias

• Sin embargo, son paquetes pre-hechos, lo que quiere decir que no es tan fácil personalizarlos

Compilar el código fuente nos da máximo control

• Toma más tiempo, es más trabajo, más cosas pueden salir mal,

pero creamos un sistema a la medida

Obviamente, nos iremos por el camino difícil ;-)

Compilando Asterisk

Introducción a Asterisk 24

La última versión de Asterisk está disponible desde

http://asterisk.org

•El histórico de versiones, parches y otros componentes, se

consigue desde http://downloads.digium.com

El proceso para compilar es muy parecido al de otros paquetes de software:

•Descargar el paquete (normalmente, con wget, o también podemos copiarlo desde nuestro equipo por SFTP).

•Desempaquetar el código fuente (usando tar). •Entrar al directorio ya desempaquetado.

•Compilar (normalmente con make) •Instalar

(7)

Compilando Asterisk

Introducción a Asterisk 25

Dentro del proceso de compilación hay varios comandos:

./configure : Revisar dependencias

make menuselect : Escoger las opciones a compilar make : Compilar código fuente

make install : Copiar a las carpetas necesarias make config : Crear scripts de autoarranque make samples : Crear ejemplos de configuración

Al terminar estos comandos habremos dejado Asterisk instalado

•El siguiente paso sería arrancarlo y configurarlo.

Algunas notas precautorias

Introducción a Asterisk 26

En caso de que ./configure nos arroje errores, quiere decir que nos faltan dependencias

En caso de que make nos arroje errores, probablemente

tengamos dependencias incompatibles

Nunca debemos ejecutar make samples en un sistema que ya fue configurado

•De lo contrario sobreescribiremos nuestra configuración

con los archivos de ejemplo

make y make install pueden ejecutarse cuantas veces necesitemos para compilar nuevas funcionalidades

•Estos pasos serán repetidos constantemente durante el

curso.

Iniciando Asterisk

Introducción a Asterisk 27

Hay 2 maneras en las que podemos ejecutar Asterisk:

• Como un comando en primer plano • Como un servicio

Al ejecutar Asterisk como un comando, la consola se queda pegada a la sesión del usuario que estemos ocupando (normalmente root)

• Si cerramos nuestra sesión de usuario, Asterisk se cerrará

también.

• Por esta razón, este método se ocupa solamente cuando

queremos hacer pruebas y debug de nuestro sistema.

Al ejecutarlo como servicio, permanece activo aunque nuestra sesión se cierre

• Asterisk sigue corriendo en segundo plano.

Iniciando Asterisk (2)

Introducción a Asterisk 28

Para arrancar Asterisk en primer plano:

asterisk –vvvc

La v significa ‘verbosidad’ (más detalle)

Para arrancarlo como servicio

/etc/init.d/asterisk start

Una vez que Asterisk ya está ejecutándose:

•Para acceder a la consola lo hacemos con:

asterisk –r

•Si nos da un error de conexión, arranquémoslo primero como servicio y reintentemos

(8)

Deteniendo Asterisk

Introducción a Asterisk 29

Para detener el servicio completo (desde el CLI):

/etc/init.d/asterisk stop

Desde adentro del CLI de Asterisk

*CLI> core stop now

Matando el proceso (desde el CLI)

•Usar como último recurso:

ps –eF | grep asterisk kill -9 <PID de Asterisk>

Reiniciando Asterisk

Introducción a Asterisk 30

Solo hay que cambiar stop/start por restart:

/etc/init.d/asterisk restart *CLI> core restart now

En varias ocasiones se nos pedirá reiniciar el servicio de Asterisk

•Es conveniente familiarizarse con los comandos.

Práctica 1.1

Instalación de Asterisk

Configurando Asterisk

Introducción a Asterisk 32

La manera más simple de configurar Asterisk es a través de archivos de texto

•En modalidades más avanzadas podemos usar el CLI, el AMI o bases de datos

•Veremos todo eso más adelante

Los archivos se ubican en /etc/asterisk

Tienen extensión *.conf

(9)

Archivos de configuración

Introducción a Asterisk 33

Hay muchos, pero estos son los más importantes:

Archivo Función

asterisk.conf Especifica las rutas default y ajusta opciones generales de todo el conmutador

extensions.conf Controla las reglas del plan de llamadas sip.conf Todo lo relacionado al protocolo SIP iax.conf Igual que el anterior, pero para IAX2 chan_dahdi.conf Configura las tarjetas DAHDI

asterisk.conf

Introducción a Asterisk 34

Archivo maestro de configuración

•Le indica a Asterisk donde buscar o crear otros archivos

Configuraciones que afectan a todo el sistema:

•Límite de llamadas en general •Estructura de archivos de sonido

•Nombre de este equipo (en caso de tener más de uno)

Raramente necesita ser editado

Se recomienda mucho colocar verbose=3 para subir la

verbosidad del sistema por default

sip.conf

Introducción a Asterisk 35

Configuración del canal SIP

•El archivo de muestra viene lleno de ejemplos

2 tipos de configuraciones

•Campos que afectan a todos los usuarios

•Campos que afectan de manera individual a cada usuario

Aquí se configuran tanto teléfonos SIP como proveedores (troncales) SIP

•No confundir usuarios SIP con extensiones

•Las extensiones se declaran en el extensions.conf

iax.conf

Introducción a Asterisk 36

Configura lo relacionado al canal IAX2

•Igual que con SIP, configura valores generales e

individuales para usuarios

Se definen conexiones con dispositivos IAX así como con troncales IAX

(10)

chan_dahdi.conf

Introducción a Asterisk 37

Toda la tarjetería se configura aquí:

•Enlaces digitales (E1s) •Troncales análogas (FXO) •Extensiones análogas (FXS)

Requiere de la configuración equivalente dentro del /etc/dahdi/system.conf

•Dedicaremos un capítulo a explicar esto

Se verá más a detalle adelante

extensions.conf

Introducción a Asterisk 38

Aquí se define el plan de llamadas

•Los permisos a los que cada usuario tiene derecho para

marcar (clases de servicio)

•Se construye por contextos, extensiones, prioridades y

aplicaciones

Los archivos de SIP e IAX controlan quien puede acceder a él

El archivo de extensiones controla que es lo que ese

alguien puede hacer

Similar a un archivo de programación

La mayoría del curso se centra en este archivo

En resumen

Introducción a Asterisk 39

Asterisk fue escrito por Mark Spencer

• Una alternativa open source a conmutadores cerrados.

Corre en cualquier distro de Linux

• Siempre y cuando, cumplamos sus dependencias

No es un proxy, es un B2BUA

• Actúa como un teléfono y un servidor al mismo tiempo

Necesitamos cumplir dependencias para instalar Asterisk

• Muy recomendado instalar DAHDI

• Los archivos de configuración se guardan en /etc/asterisk

Capítulo Básico #2

Configuración de Asterisk

(11)

Introducción

Configuración de Asterisk 41

La configuración inicial de Asterisk es a través de archivos de texto

•Conforme avancemos en el curso veremos métodos más

complejos

Todos los archivos pueden ser modificados directamente desde la consola

•nano, pico, emacs, vi, vim, cualquier editor nos sirve

Sintaxis de archivos *.conf

Configuración de Asterisk 42

Son similares a un archivo *.ini

•Se contruye a partir de un encabezado y varios campos

El contexto determina el nombre de la sección en la que estamos trabajando

•Los campos especifican los detalles de configuración

Estructura base:

[contexto] ; <-- Este es el contexto

campo1=valor1

campo2=valor2 ; <-- Estos son los campos

Comentarios

Configuración de Asterisk 43

Los archivos de configuración en Linux tienen comenarios que se especifican con el símbolo #

Sin embargo, los de Asterisk reciben comentarios con el ; (punto y coma)

• Todo lo que esté a la derecha del ; será ignorado

También podemos declarar comentarios multilínea:

• Usamos los tags de ;-- y --;

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

Ejemplo de sintaxis

Configuración de Asterisk 44 Archivo res_mysql.conf

(12)

Inclusión de archivos

Configuración de Asterisk 45

Si un archivo es muy grande, puede resultar difícil de administrar

•Podemos separar el contenido en archivos más pequeños •Esta idea es muy usada por interfases como FreePBX

Sintaxis: #include “mi_otro_archivo.conf” Ejemplo: sip.conf [general] #include “sip_general_custom.conf” #include “sip_general_additional.conf” ; Aquí comienza la configuración de usuarios #include “sip_custom.conf”

#include “sip_additional.conf”

Inclusión de archivos (2)

Configuración de Asterisk 46

También es posible incluir configuración a partir de la ejecución de scripts usando #exec.

•Todo lo que el comando imprimiría a pantalla, es

interpretado como código de configuración por Asterisk

Ejemplo:

#exec “/bin/database_config.sh”

Esto puede usarse para generar la configuración desde un sistema externo (ej. base de datos)

•Considerar que esto puede afectar el rendimiento •Sin embargo, nos da mucha flexibilidad

Contextos

Configuración de Asterisk 47

Son secciones que identifican un grupo de campos

•Se les identifica por escribirse entre [ ]

•Según el archivo en que se ocupe, el [contexto] puede

significar algo diferente

sip.conf: Un usuario SIP

extensions.conf: Un grupo de extensiones voicemail.conf: Un conjunto de buzones de voz

Un [contexto] permanece abierto hasta que se encuentre con otro [contexto]

•Al abrir un nuevo contexto hay que cuidar no romper los ya

existentes

Usuarios SIP/IAX <>

extensiones

Configuración de Asterisk 48

Usuario SIP/IAX no es igual a extensión

•Confusión creada por distribuciones como Elastix/Trixbox. •Un usuario se refiere al dispositivo que se conectará con

Asterisk (archivo sip.conf/iax.conf).

•Las extensiones representan lo que se puede marcar

(archivo extensions.conf).

El campo context define los derechos de marcación de un usuario SIP

(13)

Dejando en claro la

diferencia

Configuración de Asterisk 49

El teléfono requiere del sip.conf para autenticarse El usuario requiere de las reglas del extensions.conf para poder marcar

Empezaremos por la configuración del sip.conf

Fuente: Asterisk The Definitive Guide Fuente: Asterisk The Definitive Guide Fuente: Asterisk The Definitive Guide

sip.conf

Configuración de Asterisk 50

Aquí se define todo lo relacionado con SIP

•Configuración de usuarios y troncales

Tiene 2 secciones: [general] y área de usuarios

•[general]contiene valores que afectan a todos los usuarios, así como al canal SIP mismo. Es la configuración

default.

•El área de usuarios define la configuración específica de

cada usuario.

En caso de que el mismo campo esté configurado en ambas secciones, la individual gana

Cualquier dato que no exista, se tomará su valor default.

sip.conf (2)

Configuración de Asterisk 51

Hay muchos campos diferentes que podemos configurar para cada usuario SIP

• Hay más de 30, y la lista crece en cada versión nueva de Asterisk.

Para dar de alta un usuario SIP existen 3 campos obligatorios:

• type

• host

• context

• El nombre del usuario es lo que aparece como el [encabezado]

Cualquier campo no especificado se usará su valor default

Campos básicos

Configuración de Asterisk 52 Campo Valores posibles Función type user, peer o friend

Controla las llamadas que hace/recibe, así como interpretar la autenticación del dispositivo

user: Se autentica por username. Solo puede

hacer llamadas hacia Asterisk

peer: Se autentica por dirección IP y puerto. friend: Combinación de ambas

host <dirección IP>o dynamic

Especifica si el equipo (el teléfono) tiene una IP fija o si puede tomar cualquiera (dinámica). También indica si el teléfono tiene que registrarse hacia Asterisk o no.

context <nombre del contexto> Determina el contexto (el conjunto de reglas de marcación) al que podrá acceder el usuario. secret <contraseña> Especifica la contraseña para el usuario

(14)

Algunos campos

adicionales

Configuración de Asterisk 53

Algunos campos adicionales por usuario:

Para conocer todos los campos, consultar los comentarios del archivo muestra sip.conf

Campo Valores posibles Función

allow /

disallow <códec>

Habilita o deshabilita el uso de ciertos códecs

language <código de idioma> Permite cambiar el lenguaje default de este

usuario

dtmfmode auto, inband, rfc2833 Determina como se enviarán los códigosDTMF

mailbox <buzón>@<contexto> Hace que el teléfono consulte el buzón de voz por nuevos mensajes permit

/deny

<Dirección IP> /<Máscara>

Limita el registro a dispositivos cuya IP coincida con la indicada aquí.

El orden de deny/permit es importante.

Básico [usuario1] context=agentes type=friend host=dynamic Avanzado [usuario2] context=supervisor type=peer host=192.168.1.34 secret=abcde12345 dtmfmode=auto disallow=all allow=g729 language=es mailbox=200@default

Ejemplos de usuarios SIP

Configuración de Asterisk 54

Esto permite que un teléfono se registre hacia Asterisk sin contraseña Seguro [usuario2] context=supervisor type=friend host=dynamic secret=JuK!23+c9 deny=0.0.0.0/0 permit=192.168.1.0/24 El usuario tiene más argumentos configurados

Esto limita a una contraseña más segura y obliga a que tenga que tener una IP local

Control de nombres

Configuración de Asterisk 55

Debemos llevar un control de nombre de los dispositivos

•Evitar que se repitan

•Dar seguridad

•Facilitar la administración

Diferentes esquemas de nombrado de dispositivos tiene sus propias ventajas y desventajas

•Debemos decidir cual se adapta mejor a nuestras

necesidades

Control de nombres (2)

Configuración de Asterisk 56 Método Ejemplo Seguridad Crear/cambiarusuarios recordarFácil de

Extensiones 101 201 320 Baja fáciles de adivinar Difícil Cambiar equipos sin cambiar

extensión Muy Fácil Dígitos simples Personas/ Ubicaciones jortiz sala_juntas Media Difícil Imaginar casos donde el

mismo usuario tiene 2 dispositivos, o 2 personas se llaman igual en la compañía

Muy Fácil Nombres sencillos

Direcciones

MAC 00121419AEFF Difícil de adivinarAlta

Sencillo Nuevos dispositivos tienen

nuevas MAC Difícil Contraseñas tel-aJ13K74 Máxima Virtualmente imposible de adivinar Sencillo Es muy simple crear nuevas

(15)

Un poco más de seguridad

Configuración de Asterisk 57

Adicional al campo secret, siempre que sea posible debemos utilizar el permit y deny.

•Solo en aquellos usuarios

externos dinámicos no será posible aplicarlo

El orden es importante

•Lo común es negar todo y luego permitir lo que queremos Podemos usar nomenclatura estándar (/255.255.255.0) o abreviada (/24) [juan] type=friend context=agentes host=dynamic deny=0.0.0.0/0 permit=192.168.5.1/24 [carrier] type=peer contect=from-trunk host=201.194.200.9 deny=0.0.0.0/0.0.0.0 permit=201.194.200.9/255.255.255.255

Es posible crear plantillas de usuarios

• Los campos comunes se aplican una única vez y de ahí se reutilizan las veces que sean necesarias

• Ahorro de código al no tener

que redeclarar valores

Se declaran con (!)

Es posible aplicar múltiples plantillas al mismo tiempo

[usuario](!) type=friend context=micontexto host=dynamic [local](usuario,!) nat=no deny=0.0.0.0/0 permit=10.1.1.2/24 [100](usuario) secret=55tDyXID [200](local) secret=32nAc5Tt

Plantillas

Configuración de Asterisk 58

Ejemplo general sip.conf

Configuración de Asterisk 59

[general]

disallow=all ; Negamos todos los codecs a todos

allow=alaw ; y solo permitimos alaw

[usuarios](!) ; Creamos una plantilla para

host=dynamic ; homologar nuestros usuarios

type=friend context=micontexto deny=0.0.0.0/0 permit=192.168.1.0/24

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

secret=abcde12345 ; declaramos la contraseña

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

secret=fghij9876 ; veces queramos

[micarrier] ; Una troncal SIP para enviar llamadas

username=ccabrera ; No podemos reaprovechar la plantilla

secret=$uYjOpa2! ; porque los campos son muy diferentes

context=from-trunk type=peer

#include “sip_extra.conf” ; Podemos tener la configuración en más ; distribuida en varios archivos

Práctica 2.1

Creación de usuarios SIP y configuración de softphone

(16)

Práctica 2.2

Configurar un teléfono IP

Plan de marcación

Configuración de Asterisk 62

Se define en el archivo extensions.conf Contiene 3 secciones:

•[general]

•[globals]

•Área de contextos

[general] configura el manejo del archivo de

extensiones (comúnmente no se altera)

[globals] define constantes que pueden ser

referenciadas desde cualquier parte del dialplan

El área de contextos declara los diferentes contextos que definen el plan de llamadas

Sintaxis

Configuración de Asterisk 63

La sintaxis general del plan de llamadas es:

<extensión> es cualquier valor alfanumérico

<prioridad> es el orden con el que se ejecutarán las

diversas aplicaciones

<aplicación> es el comando a ejecutar

[contexto]

exten => <extensión>,<prioridad>,<aplicación>

Ejemplo de extensiones

válidas

Configuración de Asterisk 64 exten => 123,1,Answer exten => 123,2,Wait(5) exten => 123,3,Hangup exten => hola,1,Noop(nada) exten => hola,2,Playback(welcome) exten => hola,3,Dial(SIP/100) exten => 5546144330,1,Wait(3) same => 2,Dial(DAHDI/g0/${EXTEN}) same => 3,Hangup *1.6.2+ Notar el uso de same =>para abreviar extensiones

(17)

Extensiones especiales

Configuración de Asterisk

Extensión Significado Función

t timeout Extensión que llega al no ingresar dígitos dentro

del tiempo establecido

T absolutetimeout

Se activa automáticamente cuando la llamada cumple con la duración especificada por ${TIMEOUT(absolute)}

h hangup Activada al colgar un canal

i invalid Activada al teclear una extensión que no existe

en el contexto

a,o operator

Utilizadas para escapar de un Voicemail al presionar * o cero al momento de escuchar la bienvenida

s start Extensión default de entrada

65

Extensión “s” (start)

Configuración de Asterisk 101 101 MEX GDL ¿ Llamada hacia SIP/GDL ? Llamada hacia SIP/GDL/101 s 66

Prioridades

Configuración de Asterisk 67

Determinan el orden de ejecución de los comandos de una extension

•Siempre deben comenzar con 1, de lo contrario Asterisk

invalidará toda la extensión

•El orden debe ser consecutivo

Al numerarlas, pueden ser escritas en cualquier orden

•Asterisk las ordenará en memoria

El uso de la prioridad ‘n’ (next) facilita la escritura

•Facilita hacer inserciones o cambios

Ejemplos de prioridades

Configuración de Asterisk 68

Extensión escrita en desorden pero numerada

exten => 100,3,Hangup exten => 100,1,Noop exten => 100,2,Answer

La misma extensión escrita con prioridad ‘n’

exten => 100,1,Noop exten => 100,n,Answer exten => 100,n,Hangup O bien: exten => 100,1,Noop same => n,Answer same => n,Hangup

(18)

Prioridades (2)

Configuración de Asterisk 69

Para diferenciar una prioridad de otra, la prioridad ‘n’ puede contener etiquetas:

[default]

exten => 100,1,Answer same => n,Wait(2)

same => n(bienvenida),Playback(welcome) same => n,Hangup

La referencia a estas etiquetas se puede hacer mediante un Goto

exten => 100,n,Goto(default,100,bienvenida)

Esto nos permite controlar el flujo de nuestro plan de marcación

Práctica 2.3

Plan de llamadas sencillo

Plan de llamadas

Configuración de Asterisk 71 Usuarios SIP micontexto

Patrones

Configuración de Asterisk 72

No es posible definir todas las posibles extensiones

Los patrones son caracteres especiales que reemplazan un rango de dígitos:

Todos los patrones deben ser precedidos por “_” para no ser descartados al momento de marcarlos

Patrón Dígitos que reemplaza

X Dígitos entre 0 y 9

Z Dígitos entre 1 y 9

N Dígitos entre 2 y 9

[x-y] Cualquier dígito comprendido en el rango

(19)

Ejemplos

Configuración de Asterisk 73

Patrón Dígitos que reemplaza

_0133ZXXXXXXX _0181ZXXXXXXX _0155ZXXXXXXX Llamadas de LDN hacia MGM _01NXXZXXXXXX Llamadas de LDN a provincia _01900XXXXXXX Llamadas a 01900 _ZXXXXXXX Llamadas locales

_ZXXXXX00 Llamadas locales que terminen en 00

_0[347]0 Servicios 030, 040 y 070

_9. Todo lo prefijado por 9

_1XZ Extensiones 101-199, excepto 100, 110, 120, etc.

Patrones (3)

Configuración de Asterisk 74

En caso de que más de un patrón coincida, Asterisk los ordena del más específico al más general:

1. Números/letras (1 única coincidencia) 2. Rangos [ ] (coincidencias de 1 a 7 dígitos) 3. N (8 coincidencias)

4. Z (9 coincidencias) 5. X (10 coincidencias) 6. . (infinitas coincidencias)

Por lo que si marcamos un número 019001234567:

•_01NXXXXXXXXX

•_01900XXXXXXX

Siempre coincide primero el 01900 por ser el más específico

Considerar esto al momento de permitir/negar patrones

Atención especial a los

patrones

Configuración de Asterisk 75

Si marcáramos hacia 019001234567, ¿la llamada pasaría o se colgaría?

R: La llamada pasaría

Si bien no hay un Dial explícito que la deje salir, al no colgarse la llamada coincide con el patrón _01ZXXXXXXXXX prioridad 2.

Siempre colgar la llamada cuando no deba continuar.

[largadistancia]

exten => _01ZXXXXXXXXX,1,Noop(Llamada de LD) same => n,Dial(SIP/carrier/${EXTEN})

exten => _01900ZXXXXXX,1,Noop(No permitir llamada)

Variables

Configuración de Asterisk 76

Mismo concepto que en un lenguaje de programación

•Son etiquetas que hacen referencia a un valor •Podemos extraer el valor en cualquier momento

Hay 4 tipos de variables

•Globales

•De canal (definidas por el usuario o pre-definidas)

•De entorno •Heredadas

Se declaran conforme al tipo de variable Se identifican por los símbolos ${ }

(20)

Variables globales

Configuración de Asterisk 77

Se declaran en la sección [globals] del archivo extensions.conf

Si se actualiza el archivo, todas las referencias a la variable cambian

Disponibles desde todos los canales

• Es global porque puede accederse desde cualquier lado

[globals] celular=0445512345678 [micontexto] exten => 911,1,Dial(DAHDI/g0/${celular})

Variables de canal

Configuración de Asterisk 78

Asociadas con una única instancia (copia) del canal

•Diferentes copias del canal no cruzan sus variables

•Al colgar un canal, se destruyen las variables asociadas con él

Se declaran con la aplicación Set

exten => s,1,Set(MIVAR=hola)

Hay algunas variables pre-definidas por el sistema:

•${CONTEXT}: el contexto actual

•${EXTEN}: la extensión actual (marcada)

•${PRIORITY}: la prioridad de procesamiento actual

•${DIALSTATUS}: el estado del último comando Dial ejecutado

Variables de entorno

Configuración de Asterisk 79

Variables de Linux que se pueden acceder desde Asterisk

Se acceden con la función ${ENV(variable)}

Ejemplo:

exten => 123,1,Noop(El path de Linux es ${ENV(PATH)})

Variables heredadas

Configuración de Asterisk 80 Heredadas

•Llevan un guión bajo _

•Solo están disponibles para el primer canal creado por el canal padre

Heredadas indefinidamente

•Llevan dos guiones bajos __

•Disponibles para todos los canales generados por el padre

[micontexto]

exten => 100,1,Set(VAR1=1) same => n,Set(_VAR2=2) same => n,Set(__VAR3=3)

same => n,Noop(Var1 es ${VAR1}, Var2 es ${VAR2}, Var3 es ${VAR3}) same => n,Dial(Local/nivel1@micontexto)

exten => nivel1,1,Noop(Var1 es ${VAR1}, Var2 es ${VAR2}, Var3 es ${VAR3}) ; Var1 dará vacío, Var2 dará 2y Var3 dará 3

same => n,Dial(Local/nivel2@micontexto)

exten => nivel2,1,Noop(Var1 es ${VAR1}, Var2 es ${VAR2}, Var3 es ${VAR3}) ; Var1 dará vacío, Var2 dará vacíoy Var3 dará 3

(21)

Manipulando variables

Configuración de Asterisk 81

Se usa la sintaxis:

${<nombre variable>[:<offset>:[<cantidad>]]}

•Ejemplo

${MIVAR} = holamundo

${MIVAR:3} = amundo ${MIVAR:-5} = mundo ${MIVAR:3:2} = am

¿Cómo nos quedaríamos solo con 'hola'?

Útil para reformatear números:

Noop(${EXTEN}) ;015546144330

Set(EXTEN=52${EXTEN:2})

Noop(${EXTEN}) ;525546144330

Práctica 2.4

Uso de patrones y variables

Considerar cada contexto como un grupo de

permisos único

Reutilizar contextos declarados previamente

•Pueden incluirse contextos dentro de otros

Contextos de extensión

Configuración de Asterisk 83

[nivel3]

Celulares

[nivel2]

LDN

[nivel1]

Locales

Contextos de extensión (2)

Configuración de Asterisk 84 Notar lo siguiente:

Al marcar 50181181 dentro de [largadistancia] obtendremos

siempre un hangup, a pesar que en [locales] se permite

Contexto principal siempre tiene preferencia sobre contextos incluidos [internas] exten => _ZXXX,1,Dial(SIP/${EXTEN}) [locales] include => internas exten => _ZXXXXXXX,1,Dial(DAHDI/g0/${EXTEN}) [largadistancia] include => locales exten => _01ZXXXXXXXXX,1,Dial(DAHDI/g0/${EXTEN}) exten => _ZXXXXXXX,1,Hangup

(22)

Contextos de extensión (3)

Configuración de Asterisk 85

Pueden incluirse contextos basados en tiempo Sintaxis:

include => contexto,<hora>,<dia>,<dia mes>,<mes>

Ejemplo:

Es recomendable incluir primero lo más específico y al último lo más general [micontexto] include => gratis,21:00-23:59,mon-fri,*,* include => gratis,*,sat-sun,*,*

Prioridades de ejecución

Configuración de Asterisk 86 Exten vs. Exten

•Gana el que tenga el patrón de marcación más específico

Exten vs. Include

•Siempre gana el exten

Include vs. Include

•Gana el que esté declarado primero

Evaluador

Configuración de Asterisk 87

Podemos evaluar una operación lógica o aritmética

usando $[ ]

Ejemplo:

Esto puede usarse para hacer reemplazos o evaluar condicionales

• Asterisk no evalúa operaciones por default

Operadores válidos +, -, *, /, %, >, >=, <, <=, =, !=, &, |, ~ exten => s,1,Set(MiValor=$[10/2]) same => n,Noop(${MiValor}) ; 5

Funciones

Configuración de Asterisk 88

Permiten procesar valores o datos que normalmente no estarían accesibles:

Se despliegan con el comando core show functions desde el *CLI

Se escriben completamente en mayúsculas

Se acceden como si fueran variables ${FUNC()}

•No perder de vista el orden de los { ( ) }

(23)

Funciones (2)

Configuración de Asterisk 89

Algunas funciones guardan valores, otras sólo los

despliegan

Ejemplo: LEN() regresa la longitud de una cadena

Set(MIVAR=“hola mundo”)

Noop(${LEN(${MIVAR})}) ; 10

Ejemplo: CALLERID(num) permite cambiar o mostrar el caller id

Set(CALLERID(num)=5544332211) Noop(El valor es ${CALLERID(num)})

Subrutinas

Configuración de Asterisk 90

Conjuntos de acciones agrupadas que reciben parámetros

•Hechas por el usuario

•Útiles para procesos repetitivos con cambios entre invocaciones

Reemplazan el concepto de macros de versiones anteriores de Asterisk

•Las subrutinas no tienen límite de anidamiento

Al ejecutar una subrutina, se brinca hacia el contexto-extensión-prioridad que la subrutina indique

•Es necesario agretar un Return() para regresar al punto desde el que se invocó a la subrutina.

Subrutinas (2)

Configuración de Asterisk 91

Cuando se invoca una subrutina, se pueden proporcionar argumentos

•Se usan para personalizar la subrutina •Se crean automáticamente en las variables

${ARG1}, ${ARG2}, ${ARG3}, etc

Cada subrutina tiene variables individuales

•Los argumentos no se mezclan entre si

Se invocan con la aplicación Gosub

•Gosub(<contexto>,<extensión>,<prioridad>([argumentos]) )

Cualquier extensión puede convertirse en subrutina

Ejemplo de una subrutina

Configuración de Asterisk 92

De esta manera, pueden alterarse todas las acciones modificando solamente la subrutina

• En este ejemplo el Return sobra porque de cualquier manera, la llamada se cuelga antes de llegar a él.

[sub-llamada]

exten => s,1,Answer ; Este es el código que

same => n,Dial(${ARG1},20) ; declara la subrutina.

same => n,Voicemail(${ARG2}) ; No sirve de nada hasta

same => n,Hangup ; que no la invoquemos

same => n,Return [default]

exten => 100,1,Gosub(sub-llamada,s,1(SIP/chris,${EXTEN}) ) exten => 110,1,Gosub(sub-llamada,s,1(SIP/juan,${EXTEN}) ) exten => 120,1,Gosub(sub-llamada,s,1(SIP/carlos,${EXTEN}))

(24)

En resumen

Configuración de Asterisk 93 Cada archivo en Asterisk tiene una labor específica

• Usuarios SIP en sip.conf

• Plan de llamadas en extensions.conf

Cada extensión debe tener una prioridad y aplicación para ejecutarse

• No repetir extensiones/prioridades

Los patrones nos ahorran extensiones

• Muchas extensiones coinciden con una sola línea

Las variables almacenan valores que podemos reutilizar Podemos agrupar tareas usando subrutinas

• E invocarlas las veces que sean necesarias cambiando solo los argumentos

Práctica 2.5

Subrutinas e inclusiones

Plan de llamadas

Configuración de Asterisk 95 Usuarios SIP micontexto internas adicional llamada

Capítulo Básico #3

Arquitectura de Asterisk

(25)

Antecedentes

Arquitectura de Asterisk 97 Los módulos de Asterisk se configuran de manera independiente •Alto nivel de control En el núcleo, Asterisk solo es un conmutador •Ajeno a cualquier tecnología Fuente: wiki.asterisk.org

Sistema de archivos

Arquitectura de Asterisk 98

Asterisk coloca sus archivos en diferentes carpetas:

Tipo de archivo Ubicación

Configuración /etc/asterisk Módulos /usr/lib/asterisk/modules Logs /var/log/asterisk AGIs /var/lib/asterisk/agi-bin Sonidos /var/lib/asterisk/sounds Voicemail /var/spool/asterisk/voicemail Grabaciones /var/spool/asterisk/monitor

Salida de llamadas /var/spool/asterisk/outgoing

Ajeno a cualquier tecnología

•Podemos hacer crecer a Asterisk agregando el módulo que le brinde las nuevas

funcionalidades

Provee las interfaces de configuración y control del sistema

•AMI, AGI, CLI

Responsable de

•Administrar módulos •Carga de configuración •Sincronía del sistema •Manejo de canales •Control del plan de

llamadas

Núcleo de Asterisk

Arquitectura de Asterisk 99

Haciendo crecer a Asterisk

Arquitectura de Asterisk 100

Para agregar/quitar funcionalidades, controlamos los módulos que Asterisk carga

•Editando /etc/asterisk/modules.conf limitamos cuales

módulos serán cargados

Tenemos 4 clases principales de módulos:

•Canales •Códecs

•Aplicaciones/funciones •Recursos adicionales

(26)

Lista de módulos

Arquitectura de Asterisk 101 app_originate.so app_page.so app_parkandannounce.so app_playback.so app_playtones.so app_privacy.so app_queue.so app_readexten.so app_read.so app_record.so app_sayunixtime.so app_senddtmf.so app_sendtext.so app_sms.so app_softhangup.so app_speech_utils.so app_stack.so app_system.so app_talkdetect.so app_test.so app_transfer.so app_url.so app_userevent.so app_verbose.so app_voicemail.so app_waitforring.so app_waitforsilence.so app_waituntil.so app_while.so app_zapateller.so bridge_builtin_features.so bridge_multiplexed.so bridge_simple.so bridge_softmix.so cdr_custom.so cdr_manager.so cdr_syslog.so chan_agent.so chan_bridge.so chan_dahdi.so chan_iax2.so chan_local.so chan_multicast_rtp.so chan_sip.so codec_adpcm.so codec_alaw.so codec_a_mu.so codec_dahdi.so codec_g722.so codec_g726.so codec_g729.so codec_gsm.so codec_ilbc.so codec_lpc10.so codec_resample.so codec_ulaw.so format_g719.so format_g723.so format_g726.so format_g729.so format_gsm.so format_h263.so format_h264.so format_ilbc.so format_jpeg.so format_pcm.so format_siren14.so format_siren7.so format_sln.so format_vox.so format_wav_gsm.so format_wav.so func_aes.so func_audiohookinherit.so func_base64.so func_blacklist.so func_callcompletion.so func_callerid.so func_cdr.so func_channel.so func_config.so func_cut.so func_db.so func_devstate.so func_dialgroup.so func_dialplan.so func_enum.so func_env.so func_extstate.so func_frame_trace.so func_global.so func_groupcount.so func_hangupcause.so func_iconv.so func_jitterbuffer.so func_lock.so func_logic.so func_math.so func_md5.so func_module.so func_pitchshift.so func_presencestate.so func_rand.so func_realtime.so func_sha1.so func_shell.so func_sprintf.so func_srv.so func_strings.so func_sysinfo.so func_timeout.so func_uri.so func_version.so func_vmcount.so func_volume.so pbx_ael.so pbx_config.so pbx_loopback.so pbx_realtime.so pbx_spool.so res_adsi.so res_ael_share.so res_agi.so res_calendar.so res_clialiases.so res_clioriginate.so res_config_sqlite3.so res_convert.so res_crypto.so res_fax.so res_format_attr_celt.so res_format_attr_h263.so res_format_attr_h264.so res_format_attr_silk.so res_limit.so res_monitor.so res_musiconhold.so res_mutestream.so res_realtime.so res_rtp_multicast.so res_security_log.so res_smdi.so res_speech.so res_stun_monitor.so app_adsiprog.so app_alarmreceiver.so app_amd.so app_authenticate.so app_cdr.so app_celgenuserevent.so app_chanisavail.so app_channelredirect.so app_chanspy.so app_confbridge.so app_controlplayback.so app_dahdiras.so app_db.so app_dial.so app_dictate.so app_directed_pickup.so app_directory.so app_disa.so app_dumpchan.so app_echo.so app_exec.so app_externalivr.so app_festival.so app_flash.so app_followme.so app_forkcdr.so app_getcpeid.so app_ices.so app_image.so app_macro.so app_milliwatt.so app_minivm.so app_mixmonitor.so app_morsecode.so app_mp3.so app_nbscat.so

Módulos: Canales

Arquitectura de Asterisk 102

Asterisk puede interactuar con cualquier medio para el cual tenga un canal para comunicarse

•SIP, IAX2, H323, DAHDI, Local, Unicall, etc

Cada canal es responsable de manejar su propia lógica y memoria

•El funcionamiento de un canal no afecta a los demás

Algunos canales representan un protocolo (ej. SIP), mientras que otros solo siguen argumentos lógicos (ej. Local)

Módulos: Aplicaciones

Arquitectura de Asterisk 103

Ejecutan acciones durante una llamada

Se cargan dinámicamente conforme se necesitan Ejecutadas síncronamente

• Se invoca la aplicación al momento en que se le manda llamar,

sin que previamente esté corriendo

Podemos aumentar la serie de comandos que Asterisk puede ejecutar en cada llamada

• Asterisk carga 180+ aplicaciones al momento de arrancar el

sistema

Pueden consultarlas usando

*CLI> core show applications

Módulos: Aplicaciones (2)

Arquitectura de Asterisk 104

Algunas aplicaciones:

Aplicación Acción

Dial Marca hacia la tecnología/canal especificado Wait Espera ‘x’ segundos

Goto Brinca hacia la prioridad especificada GotoIf Brinca condicionalmente

Macro Permite agrupar más aplicaciones y repetirlas AGI Invoca un AGI script externo

Playback Reproduce un archivo de sonido

Background Igual que Playback, pero permite ingresar DTMFs Read Pide dígitos al usuario y los almacena en una variable Hangup Cuelga la llamada

(27)

Módulos: Recursos

Arquitectura de Asterisk 105

Integran a Asterisk con recursos externos

•Bases de datos •Calendarios •Música en espera •Monitoreo (grabación)

Se cargan de manera estática

•Requieren una recarga de módulo al modificarse

Pueden operar simultáneamente en varios canales

•Cada canal recibe lo mismo que los otros

Asterisk CLI

Arquitectura de Asterisk 106

La interfaz humano-Asterisk

•Nuestra principal herramienta de control en el curso

Le permite al administrador:

•Consultar el estado del sistema •Recargar o reiniciar el sistema •Actualizar valores en tiempo real •Desplegar ayuda

•Hacer debug

Módulos pueden agregar comandos al *CLI

•Ej. sip show peers depende del módulo chan_sip.so

AGI: Asterisk Gateway

Interface

Arquitectura de Asterisk 107

Ejecuta scripts externos a Asterisk Escritos en diferentes lenguajes

•Perl, PHP, Python, Bash, etc

Permite que Asterisk sea una puerta de enlace (gateway) entre un teléfono y una aplicación

no-telefonica

•Encuestas, IVRs, juegos, etc

Se verá más a detalle en un capítulo propio

AMI: Asterisk Manager

Interface

Arquitectura de Asterisk 108

A diferencia del CLI, esta es una interfaz

computadora-Asterisk

Permite ejecutar comandos o monitorear al sistema Al igual que el CLI, algunos módulos agregan

comandos

Usada por aplicaciones como el FOP, popups de agente para callcenter, sistemas de click-to-call, etc Se verá más a detalle al final del curso

(28)

Práctica 3.1

Instalando un módulo desde source: format_mp3 para música en espera

Práctica 3.2

Instalando un módulo precompilado: Códec G729

Práctica 3.3

(opcional)

Cambiando el idioma de Asterisk

Capítulo Básico #4

Aplicaciones

(29)

Introducción

Aplicaciones de Asterisk 113

Existen muchas aplicaciones en Asterisk

•Más de 150+

Cada aplicación tiene su propia sintaxis

•No es necesario aprenderlas todas, pero si las más importantes

Todas son consultables desde el *CLI

core show applications

core show application <aplicación>

Buzones de voz

Aplicaciones de Asterisk 114

Ofrecer funcionalidad de dejar mensaje a un usuario. Los buzones se crean en archivo voicemail.conf

•Allí se definen los usuarios, sus nombres, contraseñas y

correos para envio de mensajes

Se usa a través de 2 aplicaciones:

•Dejar el mensaje: Voicemail

•Recuperar los mensajes: VoicemailMain

Es necesario programar estas aplicaciones en el extensions.conf

voicemail.conf

Aplicaciones de Asterisk 115

Aquí configuramos los buzones y sus contraseñas Configuración general y múltiples contextos de buzones de voz

Si queremos tener activo el envío de correos debemos instalar un MTA (Mail Transfer Agent) en Linux

[general]

; Aquí va la configuración general de los buzones de voz

[default]

101 => 1234,Juan Pérez,[email protected],,attach=yes 102 => 1234,Jorge López,[email protected],,attach=yes

Voicemail

Aplicaciones de Asterisk 116

Permite dejar un mensaje de voz al buzón especificado

•El buzón/contexto deben existir en el voicemail.conf •Podemos dejar un mensaje en más de un buzón a la vez

Sintaxis:

Voicemail(<buzón>[@<contexto>],<opciones>)

Ejemplos:

Voicemail(100,b) Voicemail(201&202,u)

(30)

VoicemailMain

Aplicaciones de Asterisk 117

Desde aquí escuchamos nuestros mensajes

• Permite también configurar las opciones del buzón, tales como

las bienvenidas

• Es importante vaciar el buzón para evitar que se llene

Podemos saltar la autenticación

• Hacer que no se le pida contraseña al usuario y pasar directo a

los mensajes Sintaxis: VoicemailMain([buzón],[opciones]) Ejemplos: VoicemailMain(100,s)

VMAuthenticate

Aplicaciones de Asterisk 118

Autentica al usuario a partir de la contraseña de su buzón

•Las contraseñas están definidas en el voicemail.conf

Usando VoiceMailMain, el usuario final puede actualizar sus contraseñas sin intervención del administrador

•El usuario se debe hacer responsable de su contraseña y su uso

•Permite personalizar contraseñas a nivel individual

3 intentos fallidos y la llamada es colgada Sintaxis: VMAuthenticate([buzón][@contexto],[opciones]) Ejemplos: VMAuthenticate(101@default)

Ejemplos de uso

Aplicaciones de Asterisk 119 ; voicemail.conf [default] 101 => 1234,Juan Pérez,[email protected],,attach=yes ; extensions.conf [sub-llamar] exten => s,1,Dial(${ARG1},20)

same => s,n,Voicemail(${ARG2}@default) same => s,n,Hangup

same => s,n,Return [internas]

include => larga-distancia exten => _*86,1,VoicemailMain()

exten => _1XX,1,Gosub(sub-llamar,s,1(SIP/${EXTEN},${EXTEN})) [larga-distancia]

exten => _01ZXXXXXXXXX,1,VMAuthenticate(${CALLERID(num)}@default) same => n,Dial(SIP/carrier/${EXTEN})

Práctica 4.1

Agregar servicio de voicemail para nuestras extensiones

(31)

Interacción con el usuario

Aplicaciones de Asterisk 121

En ocasiones tenemos necesidades como:

•Repetir alguna grabación (bienvenidas) •Dar opciones de menu

•Capturar dígitos ingresados en el teléfono •Reproducir números

Asterisk permite reproducir archivos de audio

•Se soportan diferentes códecs, además de diferentes

idiomas para los archivos de sonido

•Los sonidos se buscan por default en

/var/lib/asterisk/sounds

Playback

Aplicaciones de Asterisk 122

Reproduce el sonido especificado

•Obliga al usuario a escucharlo (no puede saltarse) •No pueden recibirse tonos mientras se reproduce

La extensión del archivo se omite

•Asterisk escogerá el mejor códec disponible

•Lo mismo aplica para el resto de las aplicaciones de sonidos

Sintaxis: Playback(<archivo>,[opciones]) Ejemplo: Playback(bienvenida)

Background

Aplicaciones de Asterisk 123

Muy parecida a Playback, salvo que al usuario se le permiten ingresar dígitos

•Asterisk transferirá al usuario a la extensión marcada

Si el número marcado no existe, transferirá a la extensión i

(inválida) Sintaxis: Background(<archivo>) Ejemplo: Background(digite-opciones)

Read

Aplicaciones de Asterisk 124

Pide dígitos al usuario

•No se hace nada con ellos, solo se almacenan en una

variable para uso posterior

Sintaxis:

Read(<var>,[archivo],[maxdigitos],[opciones], [intentos],[timeout])

Ejemplo:

(32)

Entendiendo la diferencia

Aplicaciones de Asterisk 125

Read pide datos para almacenar o procesar

•Ej. Contraseñas o números de cuenta

Background transfiere hacia la ext. marcada

•Ej. «Para ventas, digite 1. Soporte digite 2»

Playback solo reproduce archivos

•Obligamos al usuario a que escuche la grabación

SayDigits

Aplicaciones de Asterisk 126

Reproduce un número dígito por dígito

•12345 = Uno dos tres cuatro cinco

Se usa para reproducir números que no correspondan a una cantidad •Números de contrato •Números de cuenta •Contraseñas Ejemplo: SayDigits(123192)

SayNumber

Aplicaciones de Asterisk 127

Lee un número como una cantidad

•12345 = Docemil trescientos cuarenta y cinco

Debe recibir solamente números enteros

•No hace distinción de números o cadenas

Ejemplo:

Saynumber(123192)

Sobre las aplicaciones

de audio

Aplicaciones de Asterisk 128

Todos los sonidos se buscan por default en

/var/lib/asterisk/sounds

Para cambiar el idioma de los sonidos, hay 2 maneras:

•Cambiar el campo language=XX dentro del sip.conf, iax.conf o chan_dahdi.conf

•Hacer un Set(CHANNEL(language)=XX) en el plan de llamadas •XXes el código de idioma deseado (es, fr, it, en, etc)

Si algún archivo de sonido no existe en el idioma deseado, se usará el mismo archivo en inglés

(33)

Ejemplo

Aplicaciones de Asterisk 129 [from-pstn] include => horario-habil,9:00-18:00,mon-fri,*,* include => fuera-de-horario [horario-habil] include => internas

exten => s,1,Background(bienvenida)

same => n(opciones),Background(digite-opcion)

same => n,Goto(opciones) [fuera-de-horario]

exten => s,1,Playback(recordamos-horarios-operacion)

same => n,Hangup

Práctica 4.2

Rutinas con reproducción de audio

Control de llamadas

Aplicaciones de Asterisk 131

Para asegurar que el audio fluya a través del canal, es recomendable contestarlo primero

•Algunas aplicaciones lo hacen automáticamente

Es ocasiones es necesario insertar silencios antes o después del audio

•Dar mejor espacio entre llamadas o dar oportunidad al

usuario a que ingrese dígitos

Answer

Aplicaciones de Asterisk 132

Contesta un canal y comienza la tarificación

Puede especificarse un tiempo de espera antes de continuar

con la siguiente prioridad

Procurar no usar Answer sino dejar que otra aplicación haga un contestado implícito Sintaxis:

Answer([milisegundos])

Ejemplo:

(34)

Wait

Aplicaciones de Asterisk 133

Hace al usuario esperar un tiempo obligatorio

•No se pueden ingresar dígitos mientras se espera •Puede especificarse el tiempo que dure el silencio en

decimales

•Es equivalente a un Playback en silencio

Sintaxis: Wait(<segundos>) Ejemplo: Wait(10)

WaitExten

Aplicaciones de Asterisk 134

Funciona igual que Wait, pero el usuario puede ingresar dígitos

•Asterisk intentará comunicar al usuario a la extensión

marcada

•Útil para dar tiempos adicionales en IVRs

Es equivalente a un Background en silencio

Sintaxis: WaitExten(<segundos>,[opciones]) Ejemplo: WaitExten(3.5)

Comunicación entre

usuarios

Aplicaciones de Asterisk 135

La tarea más importante en un conmutador es

comunicar extensiones

Asterisk ofrece la posibilidad de comunicar

varios usuarios en una misma llamada

Dial

Aplicaciones de Asterisk 136

Permite enlazar usuario con usuario

Siempre debe contener una tecnología y un usuario •Asterisk puede convertir entre los protocolos

Podemos marcar a más de un usuario a la vez Sintaxis:

Dial(<tech/user>,[timeout],[opciones])

Ejemplo:

Dial(SIP/100,30,tT)

(35)

Meetme

Aplicaciones de Asterisk 137 Establece cuartos de conferencia

Une a ‘n’ personas en una sola llamada

Tiene muchas opciones disponibles:

• Solo hablar, solo escuchar, grabar conferencia, ejecutar AGI en el fondo, usar contraseña, etc

Si no se proporciona el número de la conferencia, se le pedirá uno al usuario

• Al colgar el último usuario, la conferencia se cierra

Sintaxis: MeetMe([conferencia][,opciones[,nip]]) Ejemplo: Meetme(8500,d) Meetme(8501,D,2198)

Controles de flujo

Aplicaciones de Asterisk 138

El dialplan sigue una programación secuencial

•Cada evento que ocurre va después de otro •Es posible alterar el flujo haciendo saltos

Podemos evaluar condiciones para saber si es necesario saltar o no

También es posible evaluar acciones directamente

Goto

Aplicaciones de Asterisk 139

Hace saltos incondicionales hacia cualquier contexto-extensión-prioridad

Puede recibir 1, 2 o 3 parámetros

• 1: Solo prioridad (misma ext. y contexto) • 2: Extensión y prioridad (mismo contexto)

• 3: Contexto, extensión y prioridad

Sintaxis:

Goto([contexto],[extensión],<prioridad>)

Ejemplos: Goto(opciones) Goto(s,continua) Goto(default,s,1)

GotoIf

Aplicaciones de Asterisk 140

Igual que Goto, pero solo brinca si la condición se cumple

•Dos posibles destinos

Es importante evaluar la condicional

Sintaxis:

GotoIf(<condición>?<verdadero>:[falso])

Ejemplos:

(36)

ExecIf

Aplicaciones de Asterisk 141

Permite ejecutar una aplicación única basada en una condicional

•Útil para hacer variaciones en un solo comando

Ejemplo:

ExecIf($[${var}>1]?Playback(hola):Playback(adios))

Ejemplo global: IVR

Aplicaciones de Asterisk 142 [from-pstn] include => internas exten => s,1,Answer(3000) same => n,Playback(bienvenida) same => n,Wait(1) same => n(opciones),Background(digite-opcion) same => n,WaitExten(4) same => n,Goto(opciones) exten => 1,1,Dial(SIP/100) exten => 2,1,Dial(SIP/201&SIP/202) exten => 3,1,Read(password,dame-tu-pass) same => n,GotoIf($[${password}=“1234”]?bien:mal) same => n(mal),Playback(pbx-invalid) same => n,Goto(s,opciones) same => n(bien),Playback(demo-congrats) same => n,Goto(s,opciones) exten => 5,1,Meetme(5000) same => n,Goto(s,opciones) exten => i,1,Goto(s,opciones)

Práctica 4.3

Crear un menu IVR

Práctica 4.4 (opcional)

(37)

Plan de llamadas

Aplicaciones de Asterisk Usuarios SIP micontexto internas adicional saldo llamada contador menu servicios 145

Capítulo Básico #5

Conexión con la PSTN

usando DAHDI

Ing. Christian Cabrera R.

Introducción

Interconexión por DAHDI 147

Asterisk tiene la posibilidad de interactuar con

la PSTN

•Se requiere de hardware adicional o rentar un servicio de terceros

Para la interconexión directa pueden usarse

gateways externos o tarjetas internas

•Los gateways se configuran por SIP •Nos centraremos en las tarjetas

Al no usar protocolos propietarios, la libre competencia ha reducido los costos del equipo Los 3 principales

fabricantes del mercado:

•Digium •Sangoma •Openvox

Cualquiera de sus tarjetas funciona con Asterisk, solo se configuran un poco diferente

Fabricantes

(38)

Tarjetas analógicas

Interconexión por DAHDI 149 FXO (Foreign Exchange Office)

• Reciben corriente (de la telefónica)

• Aquí conectas una línea que viene de la calle (Telmex, Axtel, Alestra, etc)

FXS (Foreign Exchange Station) • Entregan corriente hacia el teléfono

• Conectas un teléfono convencional (Panasonic, Alcatel, Siemens, etc)

Puertos analógicos

Interconexión por DAHDI 150

Son los más comunes

•Estos son los puertos que usaríamos para poner un PBX en

casa

Limitados a una llamada simultánea por canal

•El par de cobre está dedicado a un único circuito

En otros conmutadores se llaman diferente:

•FXO = CO •FXS = EXT

¡Nunca conectar FXS-FXS!

•Podrías quemar los puertos

Tarjetas digitales

Interconexión por DAHDI 151 Todas soportan tanto E1s como T1s

• Configurable por software

T1: Estándar Americano

• 23 canales de voz + 1 señalización

E1: Estándar Europeo

• 30 canales de voz + 1 de señalización + 1 de sincronía

Conexión física

Interconexión por DAHDI 152

Las tarjetas digitales tienen puertos RJ45 (8 pines), pero los enlaces normalmente vienen en G703 (coaxial)

•Es necesario un convertidor que además de adaptar el conector, acople las impedancias correctamente

(39)

Puertos digitales

Interconexión por DAHDI 153

Son troncales de múltiples canales digitales (DS-0)

• Usando TDM (Time Division Multiplexing) es posible agrupar

muchos canales en un solo enlace

Usados en entornos de grandes oficinas o corporativos

• Hasta 30 canales de voz con muchos DIDs diferentes

Son tecnológicamente superiores que los análogos:

• Mayor calidad

• No son susceptibles al ruido

• Confiabilidad

Las tarjetas son más caras

• Aunque la renta del servicio digital suele ser mas cara • El costo puerto por puerto es más barato

Sincronía

Interconexión por DAHDI 154

Dado que los enlaces digitales están multiplexados en tiempo, requieren de una fuente de sincronía

Las tarjetas digitales tienen 2 opciones:

•Tomar la sincronía que proviene del enlace (recomendado si es

que estamos conectados con la telefónica)

•Generar la sincronía propia (cuando Asterisk es el equipo maestro)

Sin una fuente de sincronía precisa, tendremos problemas

•Ruidos en la línea

•Puede ocasionar que las llamadas se desconecten

Deberemos configurar este parámetro en el system.conf

Framing

Interconexión por DAHDI 155

Según el tipo de enlace, hay diferentes tipos:

Tanto D4 como CAS son tecnologías viejas y no deberían usarse

•Desafortunadamente, en Latinoamérica usamos principalmente R2 modificado, el cual usa CAS

T1s (EUA y CAN) E1s (resto del mundo)

D4 – Super Frame

(obsoleto)

CAS – Channel Associated Signaling(obsoleto)

ESF – Extended Super Frame CCS – Common Channel Signaling

Comparación ISDN vs

R2MFC

Interconexión por DAHDI 156 E1s con ISDN PRI E1s Canalizados (R2 MFC)

30 canales de voz 30 canales de voz

Usa CCS Usa CAS

Canal 1 se usa para framing. Canal 16 se usa para señalización

Canal 1 se usa para framing. Canal 16 se usa para señalización Soporta Euro ISDN, tanto en modo

de CPE como red (esclavo / maestro) Soporta FXS, FXO, E&M Comúnmente usa CRC para

corroborar errores en transmisión

Obsoleto en Europa Común en América Latina Más caro, por ser tecnología nueva

Ofrece mucho más información por llamada

(40)

Interconexión con

otros PBX

Interconexión por DAHDI 157

Es posible interconectar Asterisk con otros sistemas no IP

•FXS-FXO o FXO-FXS es lo más común, pero te limita a una

sola llamada por puerto

•También es posible usar E1s con cable cruzado

Asterisk puede actuar como maestro (simular ser la telefónica) o actuar como esclavo (dejando al otro PBX ser el maestro)

•Puede adaptarse fácilmente a las necesidades del otro

conmutador

¿Qué es un DID?

Interconexión por DAHDI 158

Direct Inward Dialing

•Es el número telefónico al cual marcamos

Un DID debe estar asociado con un canal para poder recibir las llamadas

•No confundir el DID con la línea/canal para recibir (similar a usuarios SIP y extensiones)

Es posible comprar DIDs virtuales que lleguen por SIP

•Esto evita tener que comprar tarjetas

Un enlace digital puede tener múltiples DIDs

•Al recibir la llamada, la telefónica indica a que DID marcó el

cliente

•Una línea análoga tiene un DID único asignado

Interacción en software

Interconexión por DAHDI 159

Asterisk /etc/asterisk/chan_dahdi.conf DAHDI /etc/dahdi/system.conf Tarjetas Digium Wanpipe /etc/wanpipe/wanpipe1.conf Tarjetas Sangoma OpenR2

Solo en caso que usemos R2 MFC

/etc/dahdi/system.conf

Interconexión por DAHDI 160

Archivo base de configuración de las tarjetas

•Liga los módulos de DAHDI con los puertos de las tarjetas

Por cada puerto digital, declaramos un span

Se configura el framing y el coding que el enlace use (según sean

ISDN PRI, R2 MFC, etc)

•Adicionalmente, deben declararse los canales de cada span

Los puertos análogos de declaran cruzados

•FXO se declaran como FXS y viceversa

Los canales deben ser consecutivos de acuerdo al orden en que se cargan los módulos

Referencias

Documento similar