Вы находитесь на странице: 1из 119

Redes de Voz

(Laboratorio)
2

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 3

INDICE
Presentación 5
Red de Contenidos 7
UNIDAD 1: Introducción a Asterisk 9
1.1. Introducción a Asterisk 10
1.1.1. Origen y Evolución de Asterisk. 12
1.1.2. Capacidades 15
1.1.3. Instalación Pre compilada de Asterisk 20
1.2. Instalación Manual de Asterisk 36
1.2.1. Librerías Necesarias 37
1.2.2. Configuración y Compilación del Código Fuente. 38
1.2.3. Instalación y arranque de Asterisk 49
1.3. Arquitectura de Asterisk 55
1.3.1. Arquitectura de Funcionamiento. 56
1.3.2. Sistema Operativo 56
1.3.3. Interfaces de Comunicación 57
1.3.4. Directorios y Archivos de Configuración. 63
1.3.5. Comandos y Control de Procesos 64

UNIDAD 2: Configuración Básica de Asterisk 69


2.1. Configuración de entidades SIP 70
2.1.1. Estructura del Archivo sip.conf 70
2.1.2. Comandos de SIP 74
2.2. Configuración del Plan de Marcación 76
2.2.1. Estructura del Archivo extensions.conf 76
2.2.2. Reglas de Contextos 80
2.2.3. Configuración en asterisk modo SIP Proxy 86
2.2.4. Comandos de plan de marcación 93

UNIDAD 3: Configuración de Aplicaciones Telefónicas en Asterisk 97


3.1. Diseño e implementación de un IVR 98
3.1.1. Diseño de Flujo de atención de un IVR 98
3.1.2. Aplicaciones de Ejecución de Audio: 99
3.1.3. Aplicaciones de Grabación de Audio 100
3.1.4. Implementación del IVR 101

CIBERTEC CARRERAS PROFESIONALES


4

3.2. Aplicaciones de control de flujo 102


3.2.1. Uso de Expresiones Regulares 102
3.2.2. Variables 102
3.2.3. Aplicaciones control 103
3.2.4. Aplicaciones Aritméticas 105
3.3. Implementación de un ACD Inbound 106
3.3.1. Estructura del Archivo queues.conf 106
3.3.2. Estructura del Archivo agents.conf 112
3.3.3. Configuración de Cola de atención 113
3.3.4. Configuración de firma de agentes 113

UNIDAD 4: Interconexión de Asterisk 115


4.1. Interconexión a SIP 116
4.1.1. Configuración de destinos SIP 116
4.1.2. Configuración de plan de marcación 118

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 5

PRESENTACIÓN

Redes de Voz, pertenece a la línea de administración de sistemas, el cual es un


curso de especialidad dictado sólo en la carrera de Redes y Comunicaciones.
Permite al estudiante adquirir los fundamentos teóricos de la telefonía convencional
y su evolución de Redes de voz.

El manual para el curso ha sido diseñado bajo la modalidad de unidades de


aprendizaje, las que se disgregan en temas. En cada una de ellas, hallará los logros,
que debe alcanzar al final de la unidad; el tema tratado, el cual será ampliamente
desarrollado; y los contenidos, que debe desarrollar, es decir, los subtemas. Por
último, encontrará un resumen con la información más relevante y recomendación
bibliográfica que le permitirán reforzar lo aprendido en la clase.

El curso está elaborado para proporcionar al alumno una base general en las clases
teóricas, y casos prácticos e implementaciones que se desarrollarán en las clases de
laboratorio, cuyos temas tratan sobre los fundamentos y las buenas prácticas en las
Redes de Voz. El curso da inicio con una introducción general sobre telefonía
convencional, posteriormente se aborda la teoría necesaria sobre arquitectura y
protocolos para dar soporte a la implementación de casos prácticos sobre VoIP,
requisitos de red para la calidad de voz y finalmente, recomendaciones de seguridad
en las redes de voz

CIBERTEC CARRERAS PROFESIONALES


6

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 7

RED DE CONTENIDOS

Redes de Voz

Unidad 1: Unidad 2: Unidad 3: Unidad 4:

Introducción a Configuración Configuración de Interconexión de


Asterisk Básica de Asterisk Aplicaciones Asterisk
Telefónicas en
Asterisk

Tema 1 Tema 2 Tema 3


Introducción Instalación Arquitectura
a Asterisk Manual de de Asterisk
Asterisk

Tema 4 Tema 5
Configuración Configuración
de entidades del Plan de
SIP Marcación

Tema 6 Tema 7 Tema 8 Tema 9


Diseño e Aplicaciones Aplicaciones Implementación
implementación de control de de control de de un ACD
de un IVR flujo flujo Inbound

Tema 10
Interconexión
SIP

CIBERTEC CARRERAS PROFESIONALES


8

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 9

Unidad de
Aprendizaje

INTRODUCCIÓN A ASTERISK

LOGRO DE LA UNIDAD DE APRENDIZAJE

• Al término de la unidad, el alumno, identifica las características


principales de Asterisk, así como los factores que impulsan su desarrollo.
• Al término de la unidad, el alumno, es capaz de Instarlar asterisk de
compilando el código fuente

TEMARIO

• Introducción a Asterisk
• Instalación Manual de Asterisk
• Arquitectura de Asterisk

ACTIVIDADES PROPUESTAS

• Realizar comparativas acerca de los beneficios de la instalación de


asterisk
• Ejecutar primeros pasos de comunicación en VoIP

CIBERTEC CARRERAS PROFESIONALES


10

1.1. INTRODUCCIÓN A ASTERISK

En la actualidad, cada vez más están apareciendo necesidades de control y


optimización de las comunicaciones por parte de los usuarios y empresas. Frente a
esto el uso de las centrales de conmutación privadas han sido una respuesta eficiente
para personalizar y optimizar el manejo de la comunicación.

Asterisk es una PBX (Private Branch Exchange) de código abierto, creado por Digium,
Inc. y posee un número de usuarios y desarrolladores que crece constantemente.
Digium invierte en el desarrollo del código fuente de Asterisk así como hardware de
telefonía de bajo costo que funciona con Asterisk.

Dentro de la amplia gama de implementaciones que se han dado utilizando asterisk


tenemos las siguientes:

• Controlador para varios protocolos de VoIP.


• Controlador para tarjetas de interfaz PSTN y dispositivos.
• Enrutamiento y gestión de llamadas para las llamadas entrantes.
• Generación de llamadas salientes y de enrutamiento.
• Medios de gestión de las funciones (grabar, reproducir, generar el tono, etc.)
• Grabación de llamadas de detalle de la contabilidad y facturación.
• Transcodificación (conversión de un formato a otro los medios de comunicación).
• Protocolo de conversión (la conversión de un protocolo a otro). .

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 11

• Base de datos de integración para acceder a la información en bases de datos


relacionales.
• Web de servicios de integración para acceder a los datos mediante protocolos
estándar de Internet.
• Integración LDAP para acceder a los sistemas corporativos de directorio.
• Intermediario para llamadas individuales y multiples
• Llamar a las funciones de registro y seguimiento.
• "Dialplan" Integrado, dado que posee un lenguaje de programación para el
procesamiento de llamadas.
• Gestión de llamadas externas en cualquier programación o lenguaje de scripting a
través de Asterisk Gateway Interface (AGI)
• De notificación de eventos e integración de CTI a través de la interfaz de Asterisk
Manager (IAM).
• La síntesis de voz (también conocido como "text-to-speech") en varios idiomas y
dialectos utilizando motores de terceros.
• De reconocimiento de voz en varios idiomas utilizando los motores de
reconocimiento de terceros.

Asterisk funciona en Linux y otras plataformas Unix con o sin hardware que se conecta
el servidor a la red PSTN. Asterisk representa una pieza muy valiosa de software por
una serie de razones:

a) Gran Reducción de costos

En combinación con hardware de bajo costo de telefonía, Asterisk puede ser utiliza
para crear un PBX a una fracción del precio de PBX tradicionales, mientras que
proporciona un nivel de funcionalidad superior a la de muchos de los sistemas más
caros disponibles.

b) Control

Asterisk permite al usuario tomar el control de su sistema telefónico. Una vez que una
llamada está en una Máquina Linux con Asterisk, se puede hacer cualquier cosa con
ella. De la misma manera que Apache ofrece al usuario un control más preciso sobre
prácticamente todos los aspectos de su operación (la naturaleza de su código abierto
le da una flexibilidad aún mayor), lo mismo ocurre con Asterisk

CIBERTEC CARRERAS PROFESIONALES


12

c) Rápido desarrollo y despliegue

Asterisk PBX permite a las aplicaciones de IVR y de ser crear y desplegar


rápidamente. Su potente CLI y archivos de texto de configuración permiten al mismo
tiempo rápido configuración y diagnóstico en tiempo real. Rica base, cuentan con
amplia - Debido a que Asterisk es Open Source y se implementa en software, no sólo
proporcionar características tales como correo de voz, menús de voz, IVR y
conferencias que son muy costosas para los sistemas de propiedad, sino que también
permite nuevas características que se añadió rápidamente y con el mínimo esfuerzo.

d) Personalización

A través de su apoyo a la internacionalización, los archivos de configuración, y el


código fuente, todos los aspectos de Asterisk puede ser ajustado. Por ejemplo, los
códigos de Asterisk para las funciones de llamadas podría ser cambiado para que
coincida con un sistema existente.

e) Distribución de contenido dinámico

De la misma manera que los servidores web como Apache permite que un usuario
desplegar contenido dinámico, como la información de la cuenta, horarios de películas,
etc, en la web, Asterisk le permite desplegar contenido dinámico a través del teléfono,
con la misma facilidad como CGI.

f) Plan de Marcación extremadamente flexible

Asterisk dialplan extraordinariamente flexible permite una integración perfecta de IVR y


la funcionalidad PBX. Muchas de las funciones de Asterisks las características
existentes (y deseado de el futuro) puede ser implementado usando nada más que la
lógica de extensión. Asterisk soporta una mezcla de longitudes de extensión.

1.1.1. Origen y Evolución de Asterisk

Mark Spencer empezó en el mundo Linux con Slackware en 1994 (kernel versión
1.09). Uno de los pocos en Auburn, Alabama por aquellos tiempos que conocía
cualquier cosa sobre Linux. Después de una temporada con Adtran (un proveedor
global de equipos de telecomunicaciones) creó su propia compañía.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 13

Asterisk, la aplicación de centralita telefónica PBX bajo licencia GPL, fue desarrollada
por Mark Spencer, entonces estudiante de ingeniería informática en la Universidad de
Auburn, Alabama. Mark había creado en 1999 la empresa "Linux Support Services"
con el objetivo de dar soporte a usuarios de Linux. Para ello necesitaba una centralita
telefónica, pero ante la imposibilidad de adquirirla dados sus elevados precios, decidió
construir una con un PC bajo Linux, utilizando lenguaje C.

Este fue el principio del fenómeno mundialmente conocido como Asterisk®, la


centralita telefónica construida por Mark después de su experiencia desarrollando
GAIM (ahora llamado Pidgin) entre otros proyectos de software libre.

Después de explicarles sus necesidades de capital a sus amigos en Adtran ellos se


ofrecieron a invertir en su compañía. Se dio cuenta que recibía más interés en el PBX
Asterisk que por sus servicios generales de consultoría Linux. Entonces Mark se
reunió con Jim Dixon que estaba construyendo hardware open source. Su primer
proyecto fue construir una tarjeta T1 open source. Estos ingresos les mantenían a flote
pero no recibían contribuciones de nadie y el resto tan solo cogían sus diseños y
manufacturaban tarjetas que competían con las suyas.

Posteriormente "Linux Support Services" se convertiría en el año 2002 en "Digium",


redirigiendo sus objetivos al desarrollo y soporte de Asterisk.

El dinero era escaso en Digium hasta que un día un vendedor de DeltaCom (una
competitiva compañía de comercio local) entró para venderles a Mark y a Jim una T1.
Después de entender lo que Mark y Jim habían hecho el vendedor se ofreció a

CIBERTEC CARRERAS PROFESIONALES


14

ayudarles. A partir de este punto empezaron a ver un incremento en las ventas, y


acabaron el año con beneficios. Después de grandes ingresos durante largo tiempo
Mark fue capaz de hacer crecer el negoció sin recabar mucho en los beneficios.

Cuando Mark empezó con Asterisk hizo una cosa muy inteligente. Se le requería
firmar un acuerdo a cada desarrollador que contribuía en el código para que el
copyright se asignara a Asterisk y el compromiso que no hay encumbramientos en el
código contribuido. Esto le permitió sentirse confortable con su proyecto que era
completamente open source y que su compañía podría relicenciar el código a
vendedores OEM como 3COM y NTT. Digium también ha hecho las cosas bien al
mantener la versión de la comunidad con la funcionalidad completa y no crear una
escisión entre ellos y los que los apoyan.

The Asterisk Open Source PBX


by Mark Spencer <markster@linux-supp***.***>
Copyright (C) 1999, Linux Support Services, LLC and Adtran, Inc.
================================================================
* WHAT IS ASTERISK
Asterisk is an Open Source PBX and telephony toolkit. It is, in a
sense, middleware between Internet and telephony channels on the bottom,
and Internet and telephony applications at the top. For more information
on the project itself, please visit the Asterisk home page at:
http://www.asteriskpbx.com
* REQUIRED COMPONENTS
== Linux ==
Currently, the Asterisk Open Source PBX is only known to run on the
Linux OS, although it may be portable to other UNIX-like operating systems
as well.
== libaudiofile ==
If you want to use format_wav module, then you need a very recent
version of libaudiofile (at least version 0.2.0, or you can apply the
following patch to version 0.1.9):
</markster@linux-supp***.***></markster@linux-supp***.***>

La primera entrega fue Asterisk 0.1 (Diciembre de 1999), y el tarball ocupaba tan sólo
124.3K que una vez descomprimido venían a ser unos 506 KB en 96 archivos. Para
correr Asterisk necesitábamos básicamente Linux y libaudiofile:

Esta primera entrega fue liberada en 1999 bajo licencia GPL2 pero tenía clausulas
adicionales que indicaban que en todos los productos derivados debía constar el
nombre de Linux Support Services, LLC o Adtran Inc., también advertían sobre códecs
cubiertos por patentes de software, y la más curiosa es que si emprendíamos acciones

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 15

legales por infringir patentes en referencia a algún software Open Source nuestro
derecho a usar o distribuir el software se terminaba de inmediato:

=================================================================
Please note that Asterisk is distributed under the GNU General
Public License, with the following additional notices (some of
these notices may be revised or relaxed in future releases):
a) All distributions or derivative works MUST not remove
the name of Linux Support Services, LLC or Adtran, Inc. from
the product.
b) Some codecs included in the full Asterisk distribution
*may* be covered by software patents.
c) If You bring legal action against an organization or
individual for patent infringement regarding any Open Source
software (as defined by the Open Source Definition available at
http://www.opensource.org/osd.html) then your right to use and/or
distribute this software is immediately terminated.
=================================================================

De todos modos estas clausulas duraron bien poco, ya que de los primeros cambios
que se hicieron para la release 0.1.1 fue aparte de arreglar numerosos bugs revisar la
licencia que pasó a ser pura GPL, y nada más.

* Asterisk 0.1.1
-- Revised translator, fixed some general race conditions throughout *
-- Made dialer somewhat more aware of incompatible voice channels
-- Added Voice Modem driver and A/Open Modem Driver stub
-- Added MP3 decoder channel
-- Added Microsoft WAV49 support
-- Revised License -- Pure GPL, nothing else
-- Modified Copyright statement since code is still currently owned by author
-- Added RAW GSM headerless data format
-- Innumerable bug fixes

1.1.2. Capacidades

Asterisk por definición es una PBX, por lo que en general su definición indica que es
una rama privada de conmutación, por lo que se supone que esta rama habrá de
unirse de alguna manera al tronco principal de conmutación por algún medio.

Asterisk posee una gran variedad de capacidades y cada vez aparecen más, sin
embargo el poseer tantos aportes pueden llegar a desvirtuar su eficiencia dado que
existe más procesos tomando carga del servidor.

CIBERTEC CARRERAS PROFESIONALES


16

Es por esto que es importante el tener clara la funcionalidad que se desea obtener de
asterisk desde un inicio a fin de poder dimensionar sus capacidades y requerimientos
de carga. Desde este punto de vista podemos clasificar a asterisk como 3 tipos de
entidades SIP las cuales se describen a continuación:

1.1.2.1. Aplication Server

Un servidor de aplicaciones es en general una PBX, adicional a esto se le pueden


agregar funcionalidades de telefonía computarizada. Este modo de operación es
probablemente la forma de funcionamiento más conocido de asterisk.

En la actualidad posee gran variedad de servicios y aplicaciones que permiten


optimizar el funcionamiento de una empresa. Entre las funcionalidades que asterisk
ofrece se encuentran:

• Central de telefonía
• Callcenter
• Inbound
• Out Bound
• Blending
• Buzón de voz
• DISA
• CTI
• Tarificador
• Servidor de FAX

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 17

1.1.2.2. Proxy

Asterisk funciona como proxy cuando se encarga de redireccionar las llamadas hacia
distintos puntos, si bien la funcionalidad de redirección está siempre presente, incluso
en el aplicaction server.

Es importante resaltar que este comportamiento no es el comportamiento tradicional


de asterisk, sino que es una característica que se puede obtener configurando Asterisk
para dichos fines,

Se puede diferenciar un proxy de una central común debido a que cumple las
siguientes características:

• Funciones de redirección en gran volumen no solo entre equipos terminales sino


que también entre otros servidores de comunicación.
• Se utiliza un solo proceso de señalización estando Asterisk siempre en medio de
la comunicación.
• Los terminales son consientes de que serán referenciados a otro destino para
ejecutar la comunicación

CIBERTEC CARRERAS PROFESIONALES


18

• Debido a la carga que soportará un SIP proxy no suele estar diseñado para
brindar servicios de valor añadido dado que esto resta calidad al funcionamiento
base de la comunicación.

Es importante resaltar que este comportamiento no es el comportamiento tradicional


de asterisk, sino que es una característica que se se puede obtener configurando
asterisk para dichos fines,

En el gráfico a continuación se puede observar el proceso de señalización de una


llamada con asterisk como SIP – Proxy.

1.1.2.3. Media Gateway

Un Media Gateway se define como un equipo que permite ser la interface entre 2
medios de comunicación implicando siempre que el contenido mismo de la información
transita por dicho equipo.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 19

Las funcionalidades y aplicaciones de un Media Gateway son muchas entre estas:

• Grabación de llamadas
• Trasncoding
• Interfase a la PSTN
• Traduccion de Protocolos
• IVR
• Servidor de conferencias

En el gráfico a continuación se puede obervar el funcionamiento de un media


Gateway. Como se puede ver se tienen tres equipos que funcionan como servidores
de aplicación de callcenter y son conectados a servidores que se encargan de
concentrar el tráfico multimedia, siendo estos los equipos que funcionan como media
Gateways.

CIBERTEC CARRERAS PROFESIONALES


20

Así también podemos notar que todo el flujo de comunicación es controlado desde el
servidor Proxy, siendo este el que hace la redirección del tráfico entrante hacia los
servidores de aplicaciones adecuados.

1.1.3. Instalación Pre compilada de Asterisk

Dado que asterisk ha llegado a ser una aplicación bastante utilizada, existe en la
actualidad varias versiones pre compiladas de asterisk para distintos sistemas
operativos. En general la instalación de asterisk de modo pre compilado es una
decisión de compromiso dado que así como brinda beneficios también trae ciertas
limitaciones brinda ciertos beneficios:

• Rápido despliegue
• Variedad de aplicaciones
• Fácil administración
• Orientado a Servidores de Aplicaciones

Sin embargo la decisión de utilizar esta forma de Asterisk también trae ciertas
desventajas:

• Limitada personalización
• Más carga de lo necesario
• Limitado Soporte
• Pocas opciones de Soporte

Es por esto que la forma de implementar asterisk deberá implicar un proceso de toma
de decisión a fin de poder encontrar la opción más acorde a las solución que
deseemos implementar tomando en cuenta factores como uso, tiempo de
implementación y nivel de personalización.

A continuación se describen los procesos para hacer una instalación rápida de


Asterisk a fin de hacer pruebas iniciales. En nuestro caso utilizaremos Asterisk 1.4
instalado en Ubuntu 11.04:

• Instalación de Sistema Operativo


• Configuración IP del Sistema Operativo

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 21

• Actualización de base de Librerías Disponibles


• Instalación de herramientas
• Instalación de Asterisk Pre compilado

1.1.3.1. Instalación del Sistema Operativo

Se inicia insertando el cd de Ubuntu 11.04:

A fin de hacer más sencillo el proceso de búsqueda de soluciones en internet se debe


indicar como idioma de instalación en inglés

CIBERTEC CARRERAS PROFESIONALES


22

Se verifica que se tiene acceso a internet en caso de estar conectado a la red con un
servidor de DHCP presente.

Se valida que se tiene suficiente espacio disponible y que se

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 23

Se selecciona la partición donde instalar el sistema operativo y se inicia la instalación

Durante el proceso de instalación se selecciona la zona horaria

CIBERTEC CARRERAS PROFESIONALES


24

Se selecciona el tipo de teclado

Se ingresan el nombre de usuario y la contraseña de administración que será utilizada


para cada proceso que requiera autorización en el S.O.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 25

Una vez finalizado el proceso de instalación se retira el cd booteable

Dado que se seleccionó el ingreso automático está será la pantalla que se mostrará
luego del inicio

CIBERTEC CARRERAS PROFESIONALES


26

1.1.3.2. Configuración IP

Se debe acceder al símbolo de red en la parte superior izquierda, haciendo clic (este
símbolo varía de icono según él estado de la red)

Se edita la interface adecuada:

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 27

Se debe seleccionar la opción IPV4 y Manual e ingresar la configuración IP adecuada.

Al dar clic en el botón “Save” se solicitará autenticación y de debe introducir la


contraseña de administrador.

CIBERTEC CARRERAS PROFESIONALES


28

Una vez cerrada la interface puede ser necesario que se reinice la interface para lo
cual es necesario regresar al menú desplegable de la red y hacer clic en la interface
recién configurada

1.1.3.3. Comandos Básicos en Ubuntu

La herramienta que utilizaremos para la actualización de las librerías a usar es el


terminal. La aplicación de terminal es la interface de administración que más se
utilizará durante el curso y es mediante esta aplicación que podremos hacer la mayor
cantidad de actividades,

• Copiar archivos
• Crear directorios
• Probar conectividad IP
• Editar archivos de configuración
• Iniciar procesos
• Detener procesos
• Instalar aplicaciones
• Compilar código fuente

Se puede acceder a este aplicativo desde el submenú de accesorios en menú de


aplicaciones

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 29

El motivo de utilizar la aplicación de terminal es que permite el uso de una interface


estándar a muchas de las funciones de administración que requieren un medio de
autorización para el control de los procesos. El comando utilizado para adquirir
funciones de super-usuario es sudo y se debe anteponer a todo comando que se
quiera ejecutar con ese nivel de autorización

En Ubuntu para el manejo de repositorios es apt-get, siendo con este comando que se
podrá ejecutar:

• La actualización de repositorios
• Actualización de paquetes
• Instalación de paquetes pre-compilados
• Desinstalación de paquetes

CIBERTEC CARRERAS PROFESIONALES


30

Dado que este comando requiere autorización, se deberá anteponer el comando sudo
cada vez que se ejecute, así también es importante recalcar que solo se podrá
ejecutar un proceso de apt-get a la vez. En caso de que el administrador de paquetes
del entorno gráfico se encuentra abierto no se podrá ejecutar el comando apt-get. Por
lo que se deberá cerrar antes de ejecutar un proceso que implique cambios en la lista
de los paquetes instalados.

1.1.3.4. Actualización de librerías

Para ejecutar la actualización de librerías se debe ejecutar el comando $sudo apt-get


update

1.1.3.5. Instalación de herramientas

La instalación de las aplicaciones se hace mediante la aplicación apt-get añadiendo la


opción install y luego el nombre del paquete que se instalará.

Las herramientas que se deben instalar son:

• Ssh: Para el acceso por Shell seguro a la consola de Linux

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 31

• Vim: Para la edición de archivos de texto


• Wireshark: Para la captura de paquetes
• Sip-tester: Para ejecutar pruebas de esfuerzo en VoIP

A continuación se muestra el proceso de instalación de las herramientas de


administración remota, como se muestra en el gráfico se debe indicar la conformidad
de la instalación con la letra Y:

Una vez instalado el paquete, o si se desconoce si el paquete ha sido instalado


previamente se puede utilizar el comando:

$dpkg –s <nombre del paquete>

CIBERTEC CARRERAS PROFESIONALES


32

Instalación del resto de herramientas:

1.1.3.6. Instalación de Asterisk Pre-compilado

El comando para instalar Asterisk pre-compilado es:

$sudo apt-get install Asterisk

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 33

Como se puede ver es una instrucción bastante sencilla, sin embargo el ver la lista de
paquetes adicionales que requiere nos puede hacer comprender la magnitud de lo
amplio que es asterisk.

Durante el proceso de instalación se solicitará que indiquemos el código de área para


nuestro país, siendo este valor 51

En caso de querer desisntalar Asterisk se debe utilizar el comando

$sudo apt-get remove asterisk

CIBERTEC CARRERAS PROFESIONALES


34

1.1.3.7. Configuración de un Softphone

Existen gran variedad de softphones en el mercado, en nuestro caso utilizaremos el


softphone llamado Zoiper para la mayoría de nuestras pruebas. Este softphone
soporta tanto los protocolos SIP como IAX2. En nuestro caso solo utilizaremos el
protocolo SIP dado que es el más usado entre los distintos fabricantes,

Los parámetros principales a configurar en cualquier softphone son los siguientes:

• Nombre de usuario
• Dominio
• Contraseña
• Identificador de llamante

Es importante recalcar que a fin de evitar conflictos por el uso de puertos, no se


debe ejecutar el softphone al mismo tiempo que se ejecuta la aplicación de
asterisk en un servidor.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 35

CIBERTEC CARRERAS PROFESIONALES


36

1.2. INSTALACIÓN MANUAL DE ASTERISK

Como ya sabemos la instalación de asterisk se puede hacer de manera automática


mediante la instalación de paquetes precompilados. Sin embargo la instalación manual
de asterisk trae una serie de ventajas:

• Control sobre la carga de la aplicación


• Libertad de adecuación
• Más fuentes de soporte
• Mayor capacidad de integración

Dado que asterisk será instalado a partir de código fuente es necesario realizar
algunas preparaciones para poder copilar las fuentes a fin de convertirlo en código
binario y finalmente ejecutar la instalación. Los procedimientos a ejecutar para la
instalación de asterisk son los siguientes:

• Instalación de librerías
• Adecuación del código fuente
• Compilación de binarios
• Instalación de binarios
• Instalación de archivos de muestra

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 37

1.2.1. Librerías Necesarias

Las librerías necesarias para la instalación de asterisk son:

• Build-essentials

rvoz@asterisk-rvoz:~$ sudo apt-get install build-essential Reading package


lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libiksemel3 debhelper module-assistant dahdi freetds-common
libradiusclient-ng2 libopenais3 libtonezone2.0 po-debconf libsqlite0
libss7-1 libcorosync4 libresample1 odbcinst libopenr2-3
asterisk-core-sounds-en-gsm libmail-sendmail-perl unixodbc dahdi-dkms
vpb-driver-source libvpb0 libcurl3 odbcinst1debian2 mlock dkms
libspandsp2 dahdi-linux libc-client2007e libgsm1 libsox-fmt-base sox
libsybdb5 libsox-fmt-alsa asterisk-config libpq5 html2text libpri1.4
libopencore-amrnb0 libsox1b fxload libsys-hostname-long-perl
libopencore-amrwb0
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
build-essential
0 upgraded, 1 newly installed, 0 to remove and 214 not upgraded.
Need to get 0 B/5,920 B of archives.
After this operation, 49.2 kB of additional disk space will be used.
Selecting previously deselected package build-essential.
(Reading database ... 133448 files and directories currently installed.)
Unpacking build-essential (from .../build-essential_11.5ubuntu1_i386.deb) ...
Setting up build-essential (11.5ubuntu1) ...
rvoz@asterisk-rvoz:~$

• Libncurses5-dev
rvoz@asterisk-rvoz:~$ sudo apt-get install libncurses5-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libiksemel3 debhelper module-assistant dahdi freetds-common
libradiusclient-ng2 libopenais3 libtonezone2.0 po-debconf libsqlite0
libss7-1 libcorosync4 libresample1 odbcinst libopenr2-3
asterisk-core-sounds-en-gsm libmail-sendmail-perl unixodbc dahdi-dkms
vpb-driver-source libvpb0 libcurl3 odbcinst1debian2 mlock dkms
libspandsp2 dahdi-linux libc-client2007e libgsm1 libsox-fmt-base sox
libsybdb5 libsox-fmt-alsa asterisk-config libpq5 html2text libpri1.4
libopencore-amrnb0 libsox1b fxload libsys-hostname-long-perl
libopencore-amrwb0
Use 'apt-get autoremove' to remove them.
Suggested packages:
ncurses-doc
The following NEW packages will be installed:
libncurses5-dev
0 upgraded, 1 newly installed, 0 to remove and 214 not upgraded.
Need to get 0 B/290 kB of archives.

CIBERTEC CARRERAS PROFESIONALES


38

After this operation, 1,294 kB of additional disk space will be used.


Selecting previously deselected package libncurses5-dev.
(Reading database ... 133419 files and directories currently installed.)
Unpacking libncurses5-dev (from .../libncurses5-dev_5.7+20101128-1_i386.deb)
...
Setting up libncurses5-dev (5.7+20101128-1) ...
rvoz@asterisk-rvoz:~$

1.2.2. Configuración y Compilación del Código Fuente

EL código fuente para la instalación de asterisk se obtiene de la página web del


proyecto. En nuestro caso utilizaremos la versión 1.4 de asterisk, dado que es la
versión más utilizada y estable

Asumiendo que el código fuente ha sido descargado en la carpeta Download se deben


ejecutar los siguientes procedimientos

Copia del archivo comprimido a la carpeta estándar para el código fuente: /usr/src

rvoz@asterisk-rvoz:~$ pwd
/home/rvoz
rvoz@asterisk-rvoz:~$ sudo cp Downloads/asterisk-1.4-current.tar.gz /usr/src/
rvoz@asterisk-rvoz:~$ cd /usr/src/

Una vez copiado el código fuente se debe descomprimir y verificar que se tienen los
archivos necesarios.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 39

rvoz@asterisk-rvoz:/usr/src$ sudo tar -xzf asterisk-1.4-current.tar.gz


rvoz@asterisk-rvoz:/usr/src$ cd asterisk-1.4.36/
rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$ ls -ltr
total 2440
-rw-r--r-- 1 root root 17986 2006-02-14 14:14 COPYING
-rwxr-xr-x 1 root root 724 2006-05-08 11:02 mkinstalldirs
-rwxr-xr-x 1 root root 6480 2006-05-08 11:02 missing
-rwxr-xr-x 1 root root 6406 2006-05-08 11:02 install-sh
-rw-r--r-- 1 root root 8904 2008-06-05 13:03 UPGRADE-1.2.txt
-rw-r--r-- 1 root root 2722 2008-07-31 16:53 sample.call
-rw-r--r-- 1 root root 4373 2008-08-13 21:03 Zaptel-to-DAHDI.txt
-rwxr-xr-x 1 root root 839 2008-10-30 15:58 bootstrap.sh
-rw-r--r-- 1 root root 10370 2009-01-10 15:47 README
-rw-r--r-- 1 root root 20007 2009-01-30 12:47 CHANGES
-rw-r--r-- 1 root root 18 2009-03-17 20:55 default.exports
-rwxr-xr-x 1 root root 34069 2009-07-08 13:19 config.sub
-rw-r--r-- 1 root root 3799 2009-07-21 08:04 Makefile.moddir_rules
-rw-r--r-- 1 root root 8627 2009-08-18 15:26 CREDITS
-rw-r--r-- 1 root root 594 2010-01-28 13:48 BUGS
-rw-r--r-- 1 root root 2982 2010-02-05 13:32 LICENSE
-rw-r--r-- 1 root root 27246 2010-03-23 17:45 UPGRADE.txt
-rwxr-xr-x 1 root root 44973 2010-04-28 16:07 config.guess
-rw-r--r-- 1 root root 12626 2010-05-04 12:40 README-
SERIOUSLY.bestpractices.txt
-rw-r--r-- 1 root root 4338 2010-05-11 12:22 Makefile.rules
-rw-r--r-- 1 root root 3666 2010-06-04 14:38 makeopts.in
-rw-r--r-- 1 root root 31760 2010-06-28 13:34 Makefile
-rw-r--r-- 1 root root 53142 2010-07-24 18:27 configure.ac
-rwxr-xr-x 1 root root 613025 2010-07-24 18:27 configure
-rw-r--r-- 1 root root 1357261 2010-09-13 15:00 ChangeLog
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 build_tools
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 static-http
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 images
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 agi
drwxr-xr-x 4 root root 4096 2010-09-13 15:26 include
drwxr-xr-x 3 root root 4096 2010-09-13 15:26 doc
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 autoconf
drwxr-xr-x 5 root root 4096 2010-09-13 15:26 main
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 utils
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 keys
drwxr-xr-x 7 root root 4096 2010-09-13 15:26 contrib
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 configs
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 sounds
drwxr-xr-x 5 root root 4096 2010-09-13 15:26 menuselect
drwxr-xr-x 2 root root 12288 2010-09-13 15:26 apps
drwxr-xr-x 5 root root 4096 2010-09-13 15:26 codecs
drwxr-xr-x 4 root root 4096 2010-09-13 15:26 channels
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 cdr
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 formats
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 tests
drwxr-xr-x 3 root root 4096 2010-09-13 15:26 res
drwxr-xr-x 3 root root 4096 2010-09-13 15:26 pbx
drwxr-xr-x 2 root root 4096 2010-09-13 15:26 funcs
-rw-r--r-- 1 root root 34820 2010-09-13 15:26 menuselect-tree
-rw-r--r-- 1 root root 11104 2010-09-13 15:28 asterisk-1.4.36-summary.txt
-rw-r--r-- 1 root root 12729 2010-09-13 15:28 asterisk-1.4.36-summary.html

CIBERTEC CARRERAS PROFESIONALES


40

Una vez descompreso el codigo fuente se debe validar que se tienen todas las
librerías necesarias para lo cual se utiliza el aplicativo “configure” el cual debe
ejecutarse como super usuario. Es importante verificar la salida de este comando y
comprobar que no presenta ningún error dado que esto valida que se tienen todas las
librerías necesarias.

NOTA: En caso se querer comenzar desde cero una instalación iniciada


previamente se debe ejecutar el comando

rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$ #sudo makes distclean

rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$
rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$ sudo ./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define __EXTENSIONS__... yes
checking for uname... /bin/uname
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking how to run the C preprocessor... gcc -E
checking how to run the C++ preprocessor... g++ -E
checking for a sed that does not truncate output... /bin/sed
checking for egrep... grep -E

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 41

checking for ld used by gcc... /usr/bin/ld


checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for gawk... gawk
checking for a BSD-compatible install... /usr/bin/install -c
checking whether ln -s works... yes
checking for ranlib... ranlib
checking for GNU make... make
checking for strip... strip
checking for ar... ar
checking for awk... /usr/bin/awk
checking for bison... :
checking for flex... :
checking for grep... (cached) /bin/grep
checking for find... /usr/bin/find
checking for compress... :
checking for basename... /usr/bin/basename
checking for dirname... /usr/bin/dirname
checking for sh... /bin/bash
checking for ln... /bin/ln
checking for dot... :
checking for wget... /usr/bin/wget
checking for bison that supports parse-param...
checking for soxmix... no
checking for the pthreads library -lpthreads... no
checking whether pthreads work without any flags... no
checking whether pthreads work with -Kthread... no
checking whether pthreads work with -kthread... no
checking for the pthreads library -llthread... no
checking whether pthreads work with -pthread... yes
checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE
checking if more special flags are required for pthreads... no
checking for gawk... (cached) gawk
checking for curl-config... no
checking whether libcurl is usable... no
checking for working alloca.h... yes
checking for alloca... yes
checking for dirent.h that defines DIR... yes
checking for library containing opendir... none required
checking for ANSI C header files... (cached) yes
checking for sys/wait.h that is POSIX.1 compatible... yes
checking arpa/inet.h usability... yes
checking arpa/inet.h presence... yes
checking for arpa/inet.h... yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking for inttypes.h... (cached) yes
checking libintl.h usability... yes
checking libintl.h presence... yes
checking for libintl.h... yes
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking malloc.h usability... yes
checking malloc.h presence... yes
checking for malloc.h... yes

CIBERTEC CARRERAS PROFESIONALES


42

checking netdb.h usability... yes


checking netdb.h presence... yes
checking for netdb.h... yes
checking netinet/in.h usability... yes
checking netinet/in.h presence... yes
checking for netinet/in.h... yes
checking stddef.h usability... yes
checking stddef.h presence... yes
checking for stddef.h... yes
checking for stdint.h... (cached) yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking for strings.h... (cached) yes
checking sys/file.h usability... yes
checking sys/file.h presence... yes
checking for sys/file.h... yes
checking sys/ioctl.h usability... yes
checking sys/ioctl.h presence... yes
checking for sys/ioctl.h... yes
checking sys/param.h usability... yes
checking sys/param.h presence... yes
checking for sys/param.h... yes
checking sys/socket.h usability... yes
checking sys/socket.h presence... yes
checking for sys/socket.h... yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking syslog.h usability... yes
checking syslog.h presence... yes
checking for syslog.h... yes
checking termios.h usability... yes
checking termios.h presence... yes
checking for termios.h... yes
checking for unistd.h... (cached) yes
checking utime.h usability... yes
checking utime.h presence... yes
checking for utime.h... yes
checking arpa/nameser.h usability... yes
checking arpa/nameser.h presence... yes
checking for arpa/nameser.h... yes
checking sys/io.h usability... yes
checking sys/io.h presence... yes
checking for sys/io.h... yes
checking sys/poll.h usability... yes
checking sys/poll.h presence... yes
checking for sys/poll.h... yes
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... 64
checking for stdbool.h that conforms to C99... yes
checking for _Bool... yes
checking for an ANSI C-conforming const... yes
checking for uid_t in sys/types.h... yes
checking for inline... inline
checking for mode_t... yes
checking for off_t... yes
checking for pid_t... yes
checking for size_t... yes
checking for struct stat.st_blksize... yes

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 43

checking whether time.h and sys/time.h may both be included... yes


checking whether struct tm is in sys/time.h or time.h... time.h
checking for working volatile... yes
checking for ptrdiff_t... yes
checking for unistd.h... (cached) yes
checking for working chown... yes
checking whether closedir returns void... no
checking for error_at_line... yes
checking vfork.h usability... no
checking vfork.h presence... no
checking for vfork.h... no
checking for fork... yes
checking for vfork... yes
checking for working fork... yes
checking for working vfork... (cached) yes
checking for _LARGEFILE_SOURCE value needed for large files... no
checking whether gcc needs -traditional... no
checking for working memcmp... yes
checking for stdlib.h... (cached) yes
checking for unistd.h... (cached) yes
checking for sys/param.h... (cached) yes
checking for utime.h... (cached) yes
checking for getpagesize... yes
checking for working mmap... yes
checking sys/select.h usability... yes
checking sys/select.h presence... yes
checking for sys/select.h... yes
checking for sys/socket.h... (cached) yes
checking types of arguments for select... int,fd_set *,struct timeval *
checking return type of signal handlers... void
checking whether lstat correctly handles trailing slash... yes
checking whether stat accepts an empty string... no
checking for working strcoll... yes
checking for strftime... yes
checking for working strnlen... yes
checking for working strtod... yes
checking whether utime accepts a null argument... yes
checking for vprintf... yes
checking for _doprnt... no
checking for asprintf... yes
checking for atexit... yes
checking for bzero... yes
checking for dup2... yes
checking for endpwent... yes
checking for floor... no
checking for ftruncate... yes
checking for getcwd... yes
checking for gethostbyname... yes
checking for gethostname... yes
checking for getloadavg... yes
checking for gettimeofday... yes
checking for inet_ntoa... yes
checking for isascii... yes
checking for localtime_r... yes
checking for memchr... yes
checking for memmove... yes
checking for memset... yes
checking for mkdir... yes
checking for munmap... yes

CIBERTEC CARRERAS PROFESIONALES


44

checking for pow... no


checking for putenv... yes
checking for re_comp... yes
checking for regcomp... yes
checking for rint... no
checking for select... yes
checking for setenv... yes
checking for socket... yes
checking for sqrt... no
checking for strcasecmp... yes
checking for strcasestr... yes
checking for strchr... yes
checking for strcspn... yes
checking for strdup... yes
checking for strerror... yes
checking for strlcat... no
checking for strlcpy... no
checking for strncasecmp... yes
checking for strndup... yes
checking for strnlen... yes
checking for strrchr... yes
checking for strsep... yes
checking for strspn... yes
checking for strstr... yes
checking for strtol... yes
checking for strtoq... yes
checking for unsetenv... yes
checking for utime... yes
checking for vasprintf... yes
checking for ioperm... yes
checking for timersub in time.h... yes
checking for library containing gethostbyname_r... none required
checking for gethostbyname_r with 6 arguments... yes
checking for gethostbyname_r with 5 arguments... no
checking for PTHREAD_RWLOCK_INITIALIZER... yes
checking for PTHREAD_RWLOCK_PREFER_WRITER_NP... yes
checking for pthread_rwlock_timedwrlock() in pthread.h... yes
checking if PTHREAD_ONCE_INIT needs braces... no
checking whether we can compare a mutex to its initial value... no
checking for compiler atomic operations... yes
checking for compiler 'attribute pure' support... yes
checking for compiler 'attribute malloc' support... yes
checking for compiler 'attribute const' support... yes
checking for compiler 'attribute unused' support... yes
checking for compiler 'attribute always_inline' support... yes
checking for compiler 'attribute deprecated' support... yes
checking for compiler 'attribute warn_unused_result' support... yes
checking for -ffunction-sections support... yes
checking for --gc-sections support... yes
checking for -Wdeclaration-after-statement support... yes
checking for _FORTIFY_SOURCE support... yes
checking for -fno-strict-overflow... yes
checking for library containing res_9_ninit... no
checking for res_ninit... yes
checking for library containing res_9_ndestroy... no
checking for res_ndestroy... no
checking for GLOB_NOMAGIC... yes
checking for GLOB_BRACE... yes
checking for IP_MTU_DISCOVER... yes

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 45

checking libkern/OSAtomic.h usability... no


checking libkern/OSAtomic.h presence... no
checking for libkern/OSAtomic.h... no
checking size of int... 4
checking for snd_spcm_init in -lasound... no
checking for initscr in -lcurses... yes
checking curses.h usability... yes
checking curses.h presence... yes
checking for curses.h... yes
checking for cap_from_text in -lcap... no
checking for DAHDI_RESET_COUNTERS in dahdi/user.h... no
checking for DAHDI_DEFAULT_MTU_MRU in dahdi/user.h... no
checking for DAHDI_CODE in dahdi/user.h... no
checking for getifaddrs() support... yes
checking for gsm_create in -lgsm... no
checking for iks_start_sasl in -liksemel... no
checking for UW IMAP Toolkit c-client library... no
checking for system c-client library...... no
checking for lt_dlinit in -lltdl... no
checking for crashHandler in -lkdecore... no
checking for mISDN_open in -lmISDN... no
checking for nbs_connect in -lnbs... no
checking for initscr in -lncurses... yes
checking for curses.h... (cached) yes
checking for net-snmp-config... /usr/bin/net-snmp-config
checking for snmp_register_callback in -lnetsnmp... no
checking for newtBell in -lnewt... no
checking for SQLConnect in -lodbc... no
checking for ogg_sync_init in -logg... no
checking linux/soundcard.h usability... yes
checking linux/soundcard.h presence... yes
checking for linux/soundcard.h... yes
checking for pg_config... no
checking for poptStrerror in -lpopt... no
checking for pri_keypad_facility in -lpri... no
checking for pri_get_version in -lpri... no
checking for pri_set_inbanddisconnect in -lpri... no
checking /home/rvoz/pwlib/include/ptlib.h usability... no
checking /home/rvoz/pwlib/include/ptlib.h presence... no
checking for /home/rvoz/pwlib/include/ptlib.h... no
checking /usr/local/include/ptlib.h usability... no
checking /usr/local/include/ptlib.h presence... no
checking for /usr/local/include/ptlib.h... no
checking /usr/include/ptlib.h usability... no
checking /usr/include/ptlib.h presence... no
checking for /usr/include/ptlib.h... no
checking for rc_read_config in -lradiusclient-ng... no
checking for speex_encode in -lspeex... no
checking for speex_preprocess_ctl in -lspeex... no
checking for speex_preprocess_ctl in -lspeexdsp... no
checking for sqlite_exec in -lsqlite... no
checking for ssl2_connect in -lssl... no
checking for tds_version in -ltds... no
checking for tgetent in -ltermcap... yes
checking for tgetent in -ltinfo... no
checking for tone_zone_find in -ltonezone... no
checking for usb_init in -lusb... no
checking for vorbis_info_init in -lvorbis... no
checking for vpb_open in -lvpb... no

CIBERTEC CARRERAS PROFESIONALES


46

checking for compress in -lz... no


checking for ZT_DIAL_OP_CANCEL in zaptel/zaptel.h... no
checking h323.h usability... no
checking h323.h presence... no
checking for h323.h... no
checking linux/compiler.h usability... no
checking linux/compiler.h presence... no
checking for linux/compiler.h... no
checking for linux/ixjuser.h... yes
checking for /sbin/launchd... no
checking for gtk-config... no
checking for pkg-config... pkg-config
Package gtk+-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-2.0' found
configure: creating ./config.status
config.status: creating build_tools/menuselect-deps
config.status: creating makeopts
config.status: creating channels/h323/Makefile
config.status: creating include/asterisk/autoconfig.h
config.status: include/asterisk/autoconfig.h is unchanged

.$$$$$$$$$$$$$$$=..
.$7$7.. .7$$7:.
.$$:. ,$7.7
.$7. 7$$$$ .$$77
..$$. $$$$$ .$$$7
..7$ .?. $$$$$ .?. 7$$$.
$.$. .$$$7. $$$$7 .7$$$. .$$$.
.777. .$$$$$$77$$$77$$$$$7. $$$,
$$$~ .7$$$$$$$$$$$$$7. .$$$.
.$$7 .7$$$$$$$7: ?$$$.
$$$ ?7$$$$$$$$$$I .$$$7
$$$ .7$$$$$$$$$$$$$$$$ :$$$.
$$$ $$$$$$7$$$$$$$$$$$$ .$$$.
$$$ $$$ 7$$$7 .$$$ .$$$.
$$$$ $$$$7 .$$$.
7$$$7 7$$$$ 7$$$
$$$$$ $$$
$$$$7. $$ (TM)
$$$$$$$. .7$$$$$$ $$
$$$$$$$$$$$$7$$$$$$$$$.$$$$$$
$$$$$$$$$$$$$$$$.

configure: Package configured for:


configure: OS type : linux-gnu
configure: Host CPU : i686

NOTA: el símbolo que aparece en la parte superior indica que se han revisado
todas las dependencias y de que se puede continuar con la compilación

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 47

A continuación como función opcional se tiene un menú de configuración del código


fuente, siendo esta una forma de determinar que funciones se desean o no activar
Para acceder a este menú se usa el parámetro menuconfig como entrada al comando
de compilación make

rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$ sudo make menuconfig

**************************************************
Asterisk Module and Build Option Selection
**************************************************

Press 'h' for help.

---> Applications
Call Detail Recording
Channel Drivers
Codec Translators
Format Interpreters
Dialplan Functions
PBX Modules
Resource Modules
Test Modules
Voicemail Build Options
Compiler Flags
Module Embedding
Core Sound Packages
Music On Hold File Packages
Extras Sound Packages

Por ejemplo accediendo al menú de aplicaciones, se puede escoger que apliaciones


del plan de marcación crear, para activar o desactivar una opción se debe presionar la
barra espaciadora y para guardar las opciones se debe marcar la tecla “x”. En caso de
requerir más información se puede presionar la tecla “h”

**************************************************
Asterisk Module and Build Option Selection
**************************************************

Press 'h' for help.

[*] app_directed_pickup
[*] app_directory
[*] app_disa
[*] app_dumpchan
[*] app_echo

CIBERTEC CARRERAS PROFESIONALES


48

[*] app_exec
[*] app_externalivr
[*] app_festival
XXX app_flash
[*] app_followme
[*] app_forkcdr
[*] app_getcpeid
[*] app_hasnewvoicemail
[*] app_ices
[*] app_image
[ ] app_ivrdemo
[*] app_lookupblacklist
[*] app_lookupcidname
[*] app_macro
XXX app_meetme
[*] app_milliwatt
[*] app_mixmonitor
[*] app_morsecode
[*] app_mp3
[*] app_nbscat
XXX app_osplookup
XXX app_page
[*] app_parkandannounce
[*] app_playback
... More ...

Simple Echo Application

Es importante que se exploren todas las opciones que se pueden utilizar entre las más
importantes se encuentran la elección de que codecs podrán ser utilizados asi como
de que tipos de audios se utilizarán para los mensajes de ivr.

**************************************************
Asterisk Module and Build Option Selection
**************************************************

Press 'h' for help.

Applications
Call Detail Recording
Channel Drivers
Codec Translators
Format Interpreters
Dialplan Functions
PBX Modules
Resource Modules
Test Modules
Voicemail Build Options
Compiler Flags
Module Embedding
---> Core Sound Packages
Music On Hold File Packages
Extras Sound Packages

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 49

Para desplazarse de debe presionar las teclas direccionales

**************************************************
Asterisk Module and Build Option Selection
**************************************************

Press 'h' for help.

[ ] CORE-SOUNDS-EN-WAV
[ ] CORE-SOUNDS-EN-ULAW
[ ] CORE-SOUNDS-EN-ALAW
[*] CORE-SOUNDS-EN-GSM
[ ] CORE-SOUNDS-EN-G729
[ ] CORE-SOUNDS-EN-G722
[ ] CORE-SOUNDS-ES-WAV
[ ] CORE-SOUNDS-ES-ULAW
[ ] CORE-SOUNDS-ES-ALAW
[ ] CORE-SOUNDS-ES-GSM
[ ] CORE-SOUNDS-ES-G729
[ ] CORE-SOUNDS-ES-G722
[ ] CORE-SOUNDS-FR-WAV
[ ] CORE-SOUNDS-FR-ULAW
[ ] CORE-SOUNDS-FR-ALAW
[ ] CORE-SOUNDS-FR-GSM
[ ] CORE-SOUNDS-FR-G729
[ ] CORE-SOUNDS-FR-G722

English, WAV format

1.2.3. Instalación y arranque de Asterisk

Una vez configurado el código fuente de debe proceder a compilarlo e instalar los
binarios en las carpetas correspondientes. Salvo que se desee una configuración en
particular para la ubicación de estos binarios se puede realizar ambos procesos con la
información que se recopilo cuando se ejecutó el comando “configure”

La compilación del código fuente se realiza con el comando make sin argumentos:

rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$ sudo make


CC="cc" CXX="" LD="" AR="" RANLIB="" CFLAGS="" make -C menuselect
CONFIGURE_SILENT="--silent" makeopts
make[1]: Entering directory `/usr/src/asterisk-1.4.36/menuselect'
make[1]: `makeopts' is up to date.
make[1]: Leaving directory `/usr/src/asterisk-1.4.36/menuselect'
menuselect/menuselect --check-deps menuselect.makeopts

CIBERTEC CARRERAS PROFESIONALES


50

menuselect/menuselect --check-deps menuselect.makeopts


Generating embedded module rules ...
[CC] stereorize.c -> stereorize.o
[CC] frame.c -> frame.o
[LD] stereorize.o frame.o -> stereorize
[CC] streamplayer.c -> streamplayer.o
[LD] streamplayer.o -> streamplayer
[CC] aelparse.c -> aelparse.o
[CC] aelbison.c -> aelbison.o
[CC] pbx_ael.c -> pbx_ael.o
[CC] ael_main.c -> ael_main.o
[CC] ast_expr2f.c -> ast_expr2f.o
[CC] ast_expr2.c -> ast_expr2.o
[CC] strcompat.c -> strcompat.o
[LD] aelparse.o aelbison.o pbx_ael.o ael_main.o ast_expr2f.o ast_expr2.o
strcompat.o -> aelparse
[CC] muted.c -> muted.o
[LD] muted.o -> muted
[CC] eagi-test.c -> eagi-test.o
[CC] strcompat.c -> strcompat.o
[LD] eagi-test.o strcompat.o -> eagi-test
[CC] eagi-sphinx-test.c -> eagi-sphinx-test.o
[LD] eagi-sphinx-test.o -> eagi-sphinx-test
[CC] res_adsi.c -> res_adsi.o
[LD] res_adsi.o -> res_adsi.so
[CC] res_agi.c -> res_agi.o
[LD] res_agi.o -> res_agi.so
...



checking for tgetent in -ltermcap... yes
checking for termcap.h... yes
checking for sys/cdefs.h... yes
checking for vis.h... no
checking for issetugid... no
checking for strlcat... no
checking for strlcpy... no
checking for fgetln... no
checking for strvis... no
checking for strunvis... no
checking for strlcpy... (cached) no
checking for strlcat... (cached) no
updating cache ./config.cache
creating ./config.status
creating Makefile
creating makelist
creating config.h
[CC] hash/hash.c -> hash/hash.o
[CC] hash/hash_bigkey.c -> hash/hash_bigkey.o
[CC] hash/hash_buf.c -> hash/hash_buf.o
[CC] hash/hash_func.c -> hash/hash_func.o
[CC] hash/hash_log2.c -> hash/hash_log2.o
[CC] hash/hash_page.c -> hash/hash_page.o
[CC] hash/ndbm.c -> hash/ndbm.o
[CC] btree/bt_close.c -> btree/bt_close.o
[CC] btree/bt_conv.c -> btree/bt_conv.o
[CC] btree/bt_debug.c -> btree/bt_debug.o
[CC] btree/bt_delete.c -> btree/bt_delete.o

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 51

[CC] btree/bt_get.c -> btree/bt_get.o


[CC] btree/bt_open.c -> btree/bt_open.o
[CC] btree/bt_overflow.c -> btree/bt_overflow.o
[CC] btree/bt_page.c -> btree/bt_page.o
[CC] btree/bt_put.c -> btree/bt_put.o
[CC] btree/bt_search.c -> btree/bt_search.o
[CC] btree/bt_seq.c -> btree/bt_seq.o
[CC] btree/bt_split.c -> btree/bt_split.o
[CC] btree/bt_utils.c -> btree/bt_utils.o
[CC] db/db.c -> db/db.o
[CC] mpool/mpool.c -> mpool/mpool.o
[CC] recno/rec_close.c -> recno/rec_close.o
[CC] recno/rec_delete.c -> recno/rec_delete.o
[CC] recno/rec_get.c -> recno/rec_get.o
[CC] recno/rec_open.c -> recno/rec_open.o
[CC] recno/rec_put.c -> recno/rec_put.o
[CC] recno/rec_search.c -> recno/rec_search.o
[CC] recno/rec_seq.c -> recno/rec_seq.o
[CC] recno/rec_utils.c -> recno/rec_utils.o
[AR] hash/hash.o hash/hash_bigkey.o hash/hash_buf.o hash/hash_func.o
hash/hash_log2.o hash/hash_page.o hash/ndbm.o btree/bt_close.o
btree/bt_conv.o btree/bt_debug.o btree/bt_delete.o btree/bt_get.o
btree/bt_open.o btree/bt_overflow.o btree/bt_page.o btree/bt_put.o
btree/bt_search.o btree/bt_seq.o btree/bt_split.o btree/bt_utils.o db/db.o
mpool/mpool.o recno/rec_close.o recno/rec_delete.o recno/rec_get.o
recno/rec_open.o recno/rec_put.o recno/rec_search.o recno/rec_seq.o
recno/rec_utils.o -> libdb1.a
[LD] abstract_jb.o acl.o aescrypt.o aeskey.o aestab.o alaw.o app.o
ast_expr2.o ast_expr2f.o asterisk.o astfd.o astmm.o astobj2.o audiohook.o
autoservice.o callerid.o cdr.o channel.o chanvars.o cli.o config.o
cryptostub.o db.o devicestate.o dial.o dns.o dnsmgr.o dsp.o enum.o file.o
fixedjitterbuf.o frame.o fskmodem.o global_datastores.o http.o image.o
indications.o io.o jitterbuf.o loader.o logger.o manager.o md5.o netsock.o
pbx.o plc.o poll.o privacy.o rtp.o say.o sched.o sha1.o slinfactory.o srv.o
stdtime/localtime.o strcompat.o tdd.o term.o test.o threadstorage.o
translate.o udptl.o ulaw.o utils.o editline/libedit.a db1-ast/libdb1.a ->
asterisk
+--------- Asterisk Build Complete ---------+
+ Asterisk has successfully been built, and +
+ can be installed by running: +
+ +
+ make install +
+-------------------------------------------+
rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$.

Una vez compilado asterisk se debe instalar distribuyendo los archivos binarios a los
directorios adecuados, para tal fin se debe utilizar el comando make con el argumento
“install”

rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$ sudo make install


[sudo] password for rvoz:
CC="cc" CXX="" LD="" AR="" RANLIB="" CFLAGS="" make -C menuselect
CONFIGURE_SILENT="--silent" makeopts
make[1]: Entering directory `/usr/src/asterisk-1.4.36/menuselect'
make[1]: `makeopts' is up to date.
make[1]: Leaving directory `/usr/src/asterisk-1.4.36/menuselect'

CIBERTEC CARRERAS PROFESIONALES


52

CFLAGS="-pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-


declarations -g3 -march=i686 " build_tools/mkpkgconfig /usr/lib/pkgconfig;
mkdir -p /var/lib/asterisk/static-http
for x in static-http/*; do \
/usr/bin/install -c -m 644 $x /var/lib/asterisk/static-http ;
\
done
mkdir -p /var/lib/asterisk/images
for x in images/*.jpg; do \
/usr/bin/install -c -m 644 $x /var/lib/asterisk/images ; \
done
mkdir -p /var/lib/asterisk/agi-bin
make -C sounds install
make[1]: Entering directory `/usr/src/asterisk-1.4.36/sounds'
mkdir -p /var/lib/asterisk/sounds
mkdir -p /var/lib/asterisk/sounds/es
mkdir -p /var/lib/asterisk/sounds/fr
mkdir -p /var/lib/asterisk/moh
make[1]: Leaving directory `/usr/src/asterisk-1.4.36/sounds'
mkdir -p /usr/lib/asterisk/modules
mkdir -p /usr/sbin
mkdir -p /etc/asterisk
mkdir -p /usr/bin
mkdir -p /var/run
mkdir -p /var/spool/asterisk/voicemail
mkdir -p /var/spool/asterisk/dictate
mkdir -p /var/spool/asterisk/system
mkdir -p /var/spool/asterisk/tmp
mkdir -p /var/spool/asterisk/meetme
mkdir -p /var/spool/asterisk/monitor
make[1]: Entering directory `/usr/src/asterisk-1.4.36/utils'
for x in stereorize streamplayer aelparse muted; do \
if [ "$x" != "none" ]; then \
/usr/bin/install -c -m 755 $x /usr/sbin/$x; \
fi; \
done




mkdir -p /var/log/asterisk/cdr-csv
mkdir -p /var/log/asterisk/cdr-custom
mkdir -p /var/lib/asterisk/keys
mkdir -p /var/lib/asterisk/firmware
mkdir -p /var/lib/asterisk/firmware/iax
mkdir -p /usr/share/man/man8
/usr/bin/install -c -m 644 keys/iaxtel.pub /var/lib/asterisk/keys
/usr/bin/install -c -m 644 keys/freeworlddialup.pub /var/lib/asterisk/keys
/usr/bin/install -c -m 644 doc/asterisk.8 /usr/share/man/man8
/usr/bin/install -c -m 644 contrib/scripts/astgenkey.8 /usr/share/man/man8
/usr/bin/install -c -m 644 contrib/scripts/autosupport.8 /usr/share/man/man8
/usr/bin/install -c -m 644 contrib/scripts/safe_asterisk.8
/usr/share/man/man8
if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
/usr/bin/install -c -m 644 contrib/firmware/iax/iaxy.bin
/var/lib/asterisk/firmware/iax/iaxy.bin; \
fi
+---- Asterisk Installation Complete -------+
+ +

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 53

+ YOU MUST READ THE SECURITY DOCUMENT +


+ +
+ Asterisk has successfully been installed. +
+ If you would like to install the sample +
+ configuration files (overwriting any +
+ existing config files), run: +
+ +
+ make samples +
+ +
+----------------- or ---------------------+
+ +
+ You can go ahead and install the asterisk +
+ program documentation now or later run: +
+ +
+ make progdocs +
+ +
+ **Note** This requires that you have +
+ doxygen installed on your local system +
+-------------------------------------------+

Una vez instalado asterisk es importante el crear archivos de configuración de muestra


que sirvan como referencia para la configuración de usuarios

rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$ sudo make samples


mkdir -p /etc/asterisk
for x in configs/*.adsi; do \
if [ ! -f /etc/asterisk/$x ]; then \
/usr/bin/install -c -m 644 $x
/etc/asterisk/`/usr/bin/basename $x` ; \
fi ; \
done
mkdir -p /etc/asterisk
for x in configs/*.sample; do \
if [ -f /etc/asterisk/`/usr/bin/basename $x .sample` ]; then
\
if [ "y" = "y" ]; then \
if cmp -s /etc/asterisk/`/usr/bin/basename $x
.sample` $x ; then \
echo "Config file $x is unchanged"; \
continue; \
fi ; \
mv -f /etc/asterisk/`/usr/bin/basename $x
.sample` /etc/asterisk/`/usr/bin/basename $x .sample`.old ; \
else \
echo "Skipping config file $x"; \



echo ";nocolor = yes ; Disable console colors" ; \
echo ";dontwarn = yes ; Disable some warnings" ; \
echo ";dumpcore = yes ; Dump core on crash (same as -g at
startup)" ; \
echo ";internal_timing = yes" ; \

CIBERTEC CARRERAS PROFESIONALES


54

echo ";systemname = my_system_name ; prefix uniqueid with a


system name for global uniqueness issues" ; \
echo ";maxcalls = 10 ; Maximum amount of calls allowed" ; \
echo ";maxload = 0.9 ; Asterisk stops accepting new calls if
the load average exceed this limit" ; \
echo ";cache_record_files = yes ; Cache recorded sound files
to another directory during recording" ; \
echo ";record_cache_dir = /tmp ; Specify cache directory
(used in conjunction with cache_record_files)" ; \
echo ";transmit_silence_during_record = yes ; Transmit
SLINEAR silence while a channel is being recorded" ; \
echo ";transmit_silence = yes ; Transmit silence while a
channel is in a waiting state, a recording only state, or when DTMF is" ; \
echo " ; being generated. Note that
the silence internally is generated in raw signed linear format." ; \
echo " ; This means that it must be
transcoded into the native format of the channel before it can be sent" ; \
echo " ; to the device. It is for
this reason that this is optional, as it may result in requiring a" ; \
echo " ; temporary codec translation
path for a channel that may not otherwise require one." ; \
echo ";transcode_via_sln = yes ; Build transcode paths via
SLINEAR, instead of directly" ; \
echo ";sendfullybooted = yes ; Send the FullyBooted AMI
event on AMI login and when all modules are finished loading" ; \
echo ";runuser = asterisk ; The user to run as" ; \
echo ";rungroup = asterisk ; The group to run as" ; \
echo ";dahdichanname = yes ; Channels created by chan_dahdi
will be called 'DAHDI', otherwise 'Zap'" ; \
echo "" ; \
echo "; Changing the following lines may compromise your
security." ; \
echo ";[files]" ; \
echo ";astctlpermissions = 0660" ; \
echo ";astctlowner = root" ; \
echo ";astctlgroup = apache" ; \
echo ";astctl = asterisk.ctl" ; \
) > /etc/asterisk/asterisk.conf ; \
else \
echo "Skipping asterisk.conf creation"; \
fi
mkdir -p /var/spool/asterisk/voicemail/default/1234/INBOX
build_tools/make_sample_voicemail //var/lib/asterisk //var/spool/asterisk
rvoz@asterisk-rvoz:/usr/src/asterisk-1.4.36$

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 55

Una vez instalado asterisk tenemos que iniciar su ejecución. Dado que asterisk es un
demonio de Linux es necesario primero iniciar el proceso y luego conectarse al mismo

rvoz@asterisk-rvoz:~$ sudo asterisk start


rvoz@asterisk-rvoz:~$ ps aux | grep asterisk
avahi 424 0.0 0.2 3568 1368 ? S 08:38 0:00 avahi-
daemon: running [asterisk-rvoz.local]
root 24897 0.2 1.5 17536 8092 ? Ssl 16:47 0:00 asterisk
start
rvoz 24925 0.0 0.1 4160 868 pts/2 S+ 16:48 0:00 grep --
color=auto asterisk

NOTA: Como vemos a la salida del comando ps, el número 24897 es el PID del
proceso que inició Asterisk

Una vez iniciado asterisk nos podemos conectar al mismo utilizando el comando
asterisk con parámetros –rvvvv siendo la cantidad de “v” el indicador del nivel de
verbosidad que se tendrá en la consola de Asterix.

rvoz@asterisk-rvoz:~$ sudo asterisk -rvvvv


Asterisk 1.4.36, Copyright (C) 1999 - 2010 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for
details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it
under
certain conditions. Type 'core show license' for details.
=========================================================================
== Parsing '/etc/asterisk/asterisk.conf': Found
== Parsing '/etc/asterisk/extconfig.conf': Found
Connected to Asterisk 1.4.36 currently running on asterisk-rvoz (pid = 24897)
Verbosity was 0 and is now 4
asterisk-rvoz*CLI>

Es muy importante notar la diferencia entre la consola de asterisk con la consola de


Linux, dado que poseen funciones comletamente distintas. Una forma sencia de
diferenciarlos es ver el terminado de la consola de asterisk, el cual es el símbolo
“mayor que” “>”.

1.3. ARQUITECTURA DE ASTERISK

Debido a las distintas interfaces que posee asterisk es fácil comprender que esta
solución está integrada por distintos módulos, controlando cada uno de estos módulos
una funcionalidad o interface de comunicación.

CIBERTEC CARRERAS PROFESIONALES


56

1.3.1. Arquitectura de Funcionamiento.

Asterisk es una solución multi procesos, por lo cual su funcionamiento se divide en


distintas entidades y cada una de estas entidades se comunica entre sí utilizando IPC
de Linux

1.3.2. Sistema Operativo

Asterisk ha sido desarrollado para el sistema operativo Linux con kernel 2.4 y 2.6, sin
embargo existen muchos grupos que han transportado esta solución a otros sistemas
operativos como Windows, Solaris y BSD.

Dentro de Linux, asterisk ha sido pre-compilado para las principales distribuciones


existentes de Linux y está disponible como paquete de binarios instalables, lo cual
facilita mucho su instalación para casos en los que es conveniente el utilizar una
compilación estándar.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 57

1.3.3. Interfaces de Comunicación

Asterisk es una aplicación con múltiples elementos en su arquitectura, si a esto le


añadimos el hecho de que es una plataforma de software libre se hace comprensible
el hecho de que existan diversos modos de conectarse hacia el servidor para poder
implementar alguna funcionalidad, cursar tráfico o controlar alguna función del
servidor.

En esta sección nos centraremos en analizar las distintas interfaces de interconexión


de con otros sistemas de comunicación a fin de intercambiar tráfico multimedia

1.3.3.1. Interfaces de Telefonía Analógica

Asterisk posee como solución principal para la conexión a la telefonía analógica el uso
de tarjetas que pueden poseer tanto interfaces para recibir líneas analógicas (FXO)
como interfaces para entregar líneas analógicas (FXS).

CIBERTEC CARRERAS PROFESIONALES


58

El objetivo principal de las tarjetas con interfaces FXO es conectarse a la PSTN


cuando se tienen poca cantidad de líneas de entrada. Mientras que el objetivo de las
tarjetas con interface FXS es el reutilizar equipos analógicos existentes como centrales
antiguas o también el utilizar teléfonos analógicos de bajo costo.

Entre los modelos más conocidos se encuentran AEX2400, AEX800; AEX410, etc.

1.3.3.2. Interfaces de Telefonía Digital

La telefonía Digital fue uno de los primeros intentos para la consolidación de interfaces
de distribución de las líneas analógicas, siendo así que de desarrollaron interfaces que
permitían la entrega de varios canales de voz digitalizados utilizando para este fin un
solo medio full dúplex siendo TDM el método utilizado para compartir este medio entre
varios canales.

Un tipo de canal digital bastante común de canal digital es el llamado primarios, dado
que la interface que llega a cliente no distribuye las llamadas a equipos individuales,
sino que mantiene el comportamiento primario desde que salió del operador. En el
Perú el canal primario utiliza el estándar E1, el cual posee 32 canales de los cuales 2
de ellos son usados para sincronismo y control, quedando 30 canales de voz libres.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 59

Dado que en la actualidad los canales primarios aun son de mucha utilidad para
interconectarse a la red PSTN Asterisk posee interfaces que le permiten conectarse a
redes con señalización Digital. Como es de suponer el principal fabricante de estas
interfaces es Digium siendo sus modelos principales los siguientes:

• TE120
• TE200
• TE400
• B410

CIBERTEC CARRERAS PROFESIONALES


60

Es interesante mencionar que si bien cada uno de estas conexiones tiene un par de
canales para el control y sincronismo, cada canal de voz posee un control
independiente uno del otro.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 61

1.3.3.3. Interfaces de VoIP

Asterisk es conocido principalmente por sus capacidades de central de voz sobre IP,
entre los principales protocolos que maneja están:

• SIP
• H323
• H248
• IAX2
• SIGTRAN

1.3.3.4. Elementos

Asterisk está formado por varias unidades funcionales que se comunican entre sí para
hacer la entrega de los servicios que presta. En el gráfico a continuación se muestra la
organización de los elementos de la arquitectura de asterisk:

CIBERTEC CARRERAS PROFESIONALES


62

a) Canales

Los canales son los procesos de asterisk encargados de crear las sesiones de
comunicación de acuerdo a cada protocolo de comunicación utilizado

b) Interfaces de control

Las interfaces de control son los medios estándares por los que podemos integrar
asterisk con otras aplicaciones que requieran controlar las funcionalidades de asterisk.

Es ampliamente utilizado como aplicaciones como CRM y marcadores predictivos.

c) Aplicaciones de Dial Plan

Son las funciones que se encargan de brindar control y servicios a las


comunicaciones, estas se configuran en el plan de marcación.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 63

d) Códecs de Audio

Son los encargados de codificar y traducir distintos tipos de multimedia entre dos flujos
de comunicación.

e) Formatos de Audio

Son los archivos de audio que se ejecutan durante la comunicación.

f) Logs y Registros

Es el total de archivos y procesos que se tienen para administrar los registros de


eventos internos de asterisk asi como las llamadas administradas por asterisk.

Una funcionalidad interesante del almacenamiento de registros es el guardar la


información en bases de datos a fin de que estos dados sean explotada por otro
software.

1.3.4. Directorios y Archivos de Configuración

1.3.4.1. /etc/asterisk

Contiene los ficheros de configuración. Si al compilar ejecutamos “make samples”,


tendremos ejemplos en este directorio.

1.3.4.2. /usr/lib/Asterisk/modules

Contiene los módulos de Asterisk que hemos compilado

1.3.4.3. /var/lib/Asterisk

Contiene diferentes librerías de Asterisk

1.3.4.4. /var/lib/astereisk/agi-bin

Directorio para contener los AGI

CIBERTEC CARRERAS PROFESIONALES


64

1.3.4.5. /var/spool/Asterisk

Directorio par archivos que genera Asterisk (voicemail,etc)

1.3.4.6. /var/log/Asterisk

Aquí se guardan los log de Asterisk

1.3.4.7. /var/lib/asterisk/sounds/

Es en este directorio donde se guardan los audios que se ejecutaran por los comandos
en el plan de marcación.

1.3.5. Comandos y Control de Procesos

Asterisk se administra principalmente en un entorno de texto, es por ello que es


necesario el conocer un conjunto de comandos hombre máquina que permitirán una
fácil administración.

Así también se revisan distintos comandos utilizados para el control de los procesos
de asterisk en Linux.

1.3.5.1. Comandos de Asterisk

Una vez dentro del entorno de texto de asterisk se tiene un conjunto de instrucciones
nuevas, dado que la función de autocompletar está implementada, es fácil poder ver
que opciones se tiene disponible.

a) Recargar la información de configuración

asterisk-rvoz*CLI> reload
== Parsing '/etc/asterisk/cdr.conf': Found
[Aug 21 17:30:25] NOTICE[24993]: cdr.c:1449 do_reload: CDR simple logging
enabled.
== Parsing '/etc/asterisk/dnsmgr.conf': Found
== Parsing '/etc/asterisk/extconfig.conf': Found
== Parsing '/etc/asterisk/enum.conf': Found
== Parsing '/etc/asterisk/manager.conf': Found

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 65


-- Added extension '_X.' priority 1 to page
-- Registered extension context 'default'
-- Including context 'demo' in context 'default'
== Parsing '/etc/asterisk/users.conf': Found
-- Reloading module 'cdr_custom.so' (Customizable Comma Separated Values
CDR Backend)
== Parsing '/etc/asterisk/cdr_custom.conf': Found

b) Detener Asterisk

asterisk-rvoz*CLI> stop now


asterisk-rvoz*CLI>
Disconnected from Asterisk server
Executing last minute cleanups
rvoz@asterisk-rvoz:/var/lib/asterisk$

c) Iniciar Asterisk en primer plano

El problema de iniciar asterisk en primer plano es que tan pronto nos desconectamos
de asterisk el proceso se detiene.

rvoz@asterisk-rvoz:/var/lib/asterisk$ sudo asterisk -cvvv


Asterisk 1.4.36, Copyright (C) 1999 - 2010 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for
details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it
under
certain conditions. Type 'core show license' for details.

d) Salir de asterisk

Una vez conectado asterisk podemos desconectarnos presionando la combinación de


teclas ctrl+c.

rvoz@asterisk-rvoz:~$ sudo asterisk start


rvoz@asterisk-rvoz:~$ sudo asterisk -rvvv
Asterisk 1.4.36, Copyright (C) 1999 - 2010 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for
details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it
under
certain conditions. Type 'core show license' for details.
=========================================================================
== Parsing '/etc/asterisk/asterisk.conf': Found

CIBERTEC CARRERAS PROFESIONALES


66

== Parsing '/etc/asterisk/extconfig.conf': Found


Connected to Asterisk 1.4.36 currently running on asterisk-rvoz (pid = 25236)
Verbosity was 0 and is now 3
asterisk-rvoz*CLI>
Disconnected from Asterisk server
Executing last minute cleanups
rvoz@asterisk-rvoz:~$

1.3.5.2. Control de Procesos

El control de procesos es importante dado que nos permite validar que aplicaciones se
encuentran en ejecución asi como que puertos estás siendo ocupado por un programa
en particular.

a) Detener Proceso asterisk

rvoz@asterisk-rvoz:~$ ps aux | grep asterisk


avahi 424 0.0 0.3 3528 1584 ? S 08:38 0:00 avahi-
daemon: running [asterisk-rvoz.local]
root 25236 0.0 1.5 17776 8120 ? Ssl 17:47 0:06 asterisk
start
rvoz 25823 0.0 0.1 4160 868 pts/1 S+ 22:27 0:00 grep --
color=auto asterisk

rvoz@asterisk-rvoz:~$ sudo kill -9 25236


[sudo] password for rvoz:

rvoz@asterisk-rvoz:~$ ps aux | grep asterisk


avahi 424 0.0 0.3 3528 1584 ? S 08:38 0:00 avahi-
daemon: running [asterisk-rvoz.local]
rvoz 25828 0.0 0.1 4160 864 pts/1 S+ 22:27 0:00 grep --
color=auto asterisk

b) Verificar estado de puertos

rvoz@asterisk-rvoz:~$ netstat -uan


Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:2727 0.0.0.0:*
udp 0 0 0.0.0.0:5060 0.0.0.0:*
udp 0 0 0.0.0.0:4569 0.0.0.0:*
udp 0 0 0.0.0.0:35816 0.0.0.0:*
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp6 0 0 :::52191 :::*
udp6 0 0 :::5353 :::*
rvoz@asterisk-rvoz:~$
rvoz@asterisk-rvoz:~$

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 67

c) Verificación de estado de filtros

rvoz@asterisk-rvoz:~$ sudo iptables -L


Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)


target prot opt source destination

Chain OUTPUT (policy ACCEPT)


target prot opt source destination
rvoz@asterisk-rvoz:~$

CIBERTEC CARRERAS PROFESIONALES


68

RESUMEN

• Asterisk es una aplicación de comunicación multipropósito desarrollada en


software libre

• Existen 2 formas de instalación: Manual y precompilada.

• La elección del tipo de instalación de asterisk deberá estar basado en las


funcionalidades que se deseen implementar en el servidor de comunicaciones

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 69

Unidad de
Aprendizaje

CONFIGURACIÓN BÁSICA DE ASTERISK

LOGRO DE LA UNIDAD DE APRENDIZAJE

• Al término de la unidad, el alumno, conoce los procedimientos básicos de


configuración de asterisk para la creación de usuarios SIP
• Al término de la unidad, el alumno, comprende el uso de los archivos
para la creación de un plan de marcación

TEMARIO

• Configuración de Entidades SIP


• Configuración del Plan de Marcación

ACTIVIDADES PROPUESTAS

• Crear un conjunto de usuarios representando la disposición de


comunicaciones de una empresa.
• Crea un plan de marcación adecuado para un conjunto de departamentos
en una empresa.

CIBERTEC CARRERAS PROFESIONALES


70

2.1. CONFIGURACIÓN DE ENTIDADES SIP

El archivo sip.conf contiene los parámetros relativos a la configuración de acceso de


cliente SIP con el servidor de Asterisk. Los clientes deben estar configurados en este
archivo antes de que puedan realizar o recibir llamadas utilizando el servidor de
Asterisk.

Se ubica en el directorio /etc/asterisk/ y su lectura utilizando vim facilita la lectura de


los campos dado que esta aplicación colorea el texto del archivo.

2.1.1. Estructura del Archivo sip.conf

El archivo sip.conf se lee de arriba hacia abajo. La primera sección es para las
opciones de servidores generales, tales como la dirección IP y el puerto para unirse.
Las siguientes secciones definen los parámetros del cliente, tales como el nombre de
usuario, contraseña y dirección IP por defecto para los clientes registrados. Las
secciones están delimitadas por un nombre entre paréntesis. La primera sección se
llama general (que no se puede utilizar como un nombre de cliente.)

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 71

[general]

atributo1=valor1
atributo2=valor2
atributo3=valor3

;comentario 1 los comentarios utilizan el punto y coma


;comentatio 2

[usuario1]
atributo1=valor1 ;comentario 3, el atributo1, sobre escribe el
;valor1 del area general
atributo2=valor2
atributo3=valor3

[usuario2]
atributo1=valor1 ;comentario 4, el atributo1, sobre escribe el
;valor1 del area general
;en este caso el atributo1 no tiene injerencia
;con el atributo1 modificado en el usuario1

atributo2=valor2
atributo3=valor3

En las siguientes secciones comienzan con el nombre del cliente entre paréntesis,
seguido por las opciones del cliente.

2.1.1.1. Configuración General

Las siguientes palabras se definen en /etc/asterisk/sip.conf. En la sección general:

a) Port

El puerto de Asterisk debe escuchar para las conexiones SIP. El valor por defecto es
el 5060, de acuerdo con las normas. Toma como argumento un número de puerto (que
no debe ser usado por ningún otro servicio.)

b) bindaddr

La dirección IP Asterisk debe escuchar para las conexiones SIP. Si la máquina tiene
múltiples direcciones IP real o alias, esta opción se puede utilizar para seleccionar las
direcciones IP Asterisk escucha. El comportamiento por defecto es escuchar en todas
las interfaces disponibles y los alias. Toma como argumento una dirección IP (que
debe ser una interfaz disponible en el sistema.)

CIBERTEC CARRERAS PROFESIONALES


72

c) context

Establece un contexto por defecto a todos los clientes que aparezcan, a menos que se
sustituya en su definición del cliente.

A continuación se muestra un ejemplo del área de configuración general en el archivo


sip.conf

[general]

context=default ; Default context for incoming calls

allowoverlap=no ; Disable overlap dialing support. (Default is yes)

bindport=5060 ; UDP Port to bind to (SIP standard port is 5060)

bindaddr=0.0.0.0 ; IP address to bind to (0.0.0.0 binds to all)

srvlookup=yes ; Enable DNS SRV lookups on outbound calls

2.1.1.2. Opciones de cliente

a) Type
La opción de tipo de juegos de la clase de conexión para el cliente. Las opciones son:

• Peers: Un dispositivo que recibe las llamadas desde el servidor de Asterisk.


• User: Un dispositivo que hace llamadas a través del servidor de Asterisk.
• Friend: Un dispositivo que puede recibir y enviar llamadas a través del servidor de
Asterisk. Esto tiene sentido para la mayoría de los teléfonos y otros dispositivos de
escritorio. Si no está seguro, probablemente debería establecer el tipo de este
valor.

b) secret

Establece la contraseña para el cliente. Toma una cadena alfanumérica.

c) host

Establece la dirección IP o el nombre del dispositivo de resolver. Esta alternativa se


puede configurar para "dinámico" en cuyo caso se espera que el anfitrión de venir de

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 73

cualquier dirección IP. Esta es la opción más común, y normalmente es necesario


dentro de una red DHCP.

d) defualtip

Esta opción se puede utilizar cuando la palabra clave de host está en dinámica.
Cuando se establece, el servidor Asterisk intentará enviar las llamadas a esta
dirección IP cuando se recibe una llamada de un cliente SIP que aún no se ha
registrado en el servidor.

e) Username

Esta opción establece el nombre de usuario del servidor Asterisk intenta conectarse
cuando se recibe una llamada. Se utiliza cuando por alguna razón, el valor no es el
mismo que el de nombre de usuario registrado.

f) Canreinvite

Esta opción se utiliza para indicar al servidor que nunca volver a invitar a un problema
al cliente. Esto se utiliza para interactuar con un poco de hardware (buggy) que los
accidentes si volver a invitar, como el común de Cisco ATA 186.

g) context

Cuando aparece en una definición de cliente, esta palabra clave define el contexto por
defecto para este único cliente.

[sedenorte]

type=friend

host=dynamic

context=sedenorte_incoming

secret=12345

disallow=all

allow=gsm

allow=ulaw

CIBERTEC CARRERAS PROFESIONALES


74

2.1.2. Comandos de SIP

Como ejemplo se agrega la siguiente configuración al archivo sip.conf

[cisco1]
type=friend
secret=blah
qualify=200 ; Qualify peer is no more than 200ms away
nat=yes ; This phone may be natted
; Send SIP and RTP to the IP address that packet is
; received from instead of trusting SIP headers
host=dynamic ; This device registers with us
canreinvite=no ; Asterisk by default tries to redirect the
; RTP media stream (audio) to go directly from
; the caller to the callee. Some devices do not
; support this (especially if one of them is
; behind a NAT).
defaultip=192.168.0.4 ; IP address to use until registration
username=goran ; Username to use when calling this device before
; registration
; Normally you do NOT need to set this parameter
setvar=CUSTID=5678 ; Channel variable to be set for all calls from this
device

2.1.2.1. Recarga de archivo de configuración

asterisk-rvoz*CLI> sip reload


Reloading SIP
== Parsing '/etc/asterisk/sip.conf': Found
== Parsing '/etc/asterisk/users.conf': Found
== Parsing '/etc/asterisk/sip_notify.conf': Found

asterisk-rvoz*CLI> sip show peers


Name/username Host Dyn Nat ACL Port Status
cisco1/goran (Unspecified) D N 0 UNKNOWN
1 sip peers [Monitored: 0 online, 1 offline Unmonitored: 0 online, 0 offline]

2.1.2.2. Comandos para mostrar usuarios

asterisk-rvoz*CLI> sip show users


Username Secret Accountcode Def.Context ACL NAT
cisco1 blah default No Always

asterisk-rvoz*CLI> sip show user cisco1

* Name : cisco1
Secret : <Set>
MD5Secret : <Not set>
Context : default

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 75

Language :
AMA flags : Unknown
Transfer mode: open
MaxCallBR : 384 kbps
CallingPres : Presentation Allowed, Not Screened
Call limit : 0
Callgroup :
Pickupgroup :
Callerid : "" <>
ACL : No
Codec Order : (none)
Auto-Framing: No
Variables :
CUSTID = 5678

2.1.2.3. Comandos para mostrar Peers (Destinos)

asterisk-rvoz*CLI> sip show peers


Name/username Host Dyn Nat ACL Port Status
cisco1/goran (Unspecified) D N 0 UNKNOWN
1 sip peers [Monitored: 0 online, 1 offline Unmonitored: 0 online, 0 offline]

asterisk-rvoz*CLI> sip show peer cisco1

* Name : cisco1
Secret : <Set>
MD5Secret : <Not set>
Context : default
Subscr.Cont. : <Not set>
Language :
AMA flags : Unknown
Transfer mode: open
CallingPres : Presentation Allowed, Not Screened
Callgroup :
Pickupgroup :
Mailbox :
VM Extension : asterisk
LastMsgsSent : 32767/65535
Call limit : 0
Dynamic : Yes
Callerid : "" <>
MaxCallBR : 384 kbps
Expire : -1
Insecure : no
Nat : Always
ACL : No
T38 pt UDPTL : No
CanReinvite : No
PromiscRedir : No
User=Phone : No
Video Support: No
Trust RPID : No
Send RPID : No
Subscriptions: Yes
Overlap dial : No
Forward Loop : Yes

CIBERTEC CARRERAS PROFESIONALES


76

DTMFmode : rfc2833
LastMsg : 0
ToHost :
Addr->IP : (Unspecified) Port 0
Defaddr->IP : 192.168.0.4 Port 5060
Def. Username: goran
SIP Options : (none)
Codecs : 0x8000e (gsm|ulaw|alaw|h263)
Codec Order : (none)
Auto-Framing: No
Status : UNKNOWN
Useragent :
Reg. Contact :

2.2. CONFIGURACIÓN DEL PLAN DE MARCACIÓN

Un plan de marcación define el conjunto de reglas que serán utilizadas para atender
las llamadas que lleguen a una central de conmutación. Este conjunto de reglas son
ejecutadas en función a distintos factores entre los factores más comunes se
encuentran:

• Numero marcado
• Numero de Origen
• Fecha y hora
• Interface de entrada de la central por donde llegó la llamada
• Opción de Menú marcada

En asterisk el plan de marcación es uno de los elementos más importantes en su


funcionamiento, este se define en el archivo extensios.conf ubicado en la carpeta
/etc/asterisk

2.2.1. Estructura del Archivo extensions.conf

[general]
--> some settings go here

[globals]
--> definition of some global variables go here

[context1]
-->extension 1, priority 1, application
-->extension 1, priority 2, application

--> extension helpdesk, priority 1, application

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 77

...
[context2]
--> extension 999, priority 1, application
--> extension 999, priority 1, application

El plan de marcación está dividido en 3 secciones cada una de estas se encuentra


separado por un indicador de área entre paréntesis cuadrados:

2.2.1.1. General

En esta sección se asignan valores a algunas de las principales variables de asterisk.


Así también se puede indicar si se desea agregar algún otro archivo de configuración
al plan de marcación. Las variables principales se describen a continuación:

a) Static: si se define como 'yes' permite salvar el dialplan desde la consola de


Asterisk.

b) Writeprotec: Protección frente a escritura, si se deja como 'no' comandos como


'save dialplan' modificarán los ficheros de configuración.

c) Autofallthrough: Si está activada esta opción, cuando una extensión haya acabado
de ejecutar sus prioridades o la lógica salte a una prioridad inexistente hará que la
llamada se cuelgue, señalizándola como BUSY (ocupada), CONGESTION o
HANGUP dependiendo de que sea esta la mejor opción para Asterisk.

d) Clearglobalvars: Con cada recarga de extensions.conf o de extensions.ael se


recargarán las variables globales de Asterisk. Si se desactiva las variables
globales permanecerán con el valor que tienen en memoria, hasta que se vuelva a
reiniciar Asterisk y a recargar el extensions.conf. Esto puede dar un quebradero de
cabeza si se usa el archivo extensions.conf y el extensions.ael ya que
extensions.ael siempre se carga después.

e) Priorityjumping: Activa el salto de prioridad como respuesta, hay aplicaciones que


tras su ejecución devuelve una prioridad a la que se debe saltar. Para que esto
suceda debe activarse este parámetro.

CIBERTEC CARRERAS PROFESIONALES


78

[general]
;
; If static is set to no, or omitted, then the pbx_config will rewrite
; this file when extensions are modified. Remember that all comments
; made in the file will be lost when that happens.
;
; XXX Not yet implemented XXX
;
static=yes
;
; if static=yes and writeprotect=no, you can save dialplan by
; CLI command "dialplan save" too
;
writeprotect=no
;
; If autofallthrough is set, then if an extension runs out of
; things to do, it will terminate the call with BUSY, CONGESTION
; or HANGUP depending on Asterisk's best guess. This is the default.
;
; If autofallthrough is not set, then if an extension runs out of
; things to do, Asterisk will wait for a new extension to be dialed
; (this is the original behavior of Asterisk 1.0 and earlier).
;
;autofallthrough=no
;
; If clearglobalvars is set, global variables will be cleared
; and reparsed on an extensions reload, or Asterisk reload.
;
; If clearglobalvars is not set, then global variables will persist
; through reloads, and even if deleted from the extensions.conf or
; one of its included files, will remain set to the previous value.
;
; NOTE: A complication sets in, if you put your global variables into
; the AEL file, instead of the extensions.conf file. With clearglobalvars
; set, a "reload" will often leave the globals vars cleared, because it
; is not unusual to have extensions.conf (which will have no globals)
; load after the extensions.ael file (where the global vars are stored).
; So, with "reload" in this particular situation, first the AEL file will
; clear and then set all the global vars, then, later, when the
extensions.conf
; file is loaded, the global vars are all cleared, and then not set, because
; they are not stored in the extensions.conf file.
;
clearglobalvars=no
;
; If priorityjumping is set to 'yes', then applications that support
; 'jumping' to a different priority based on the result of their operations
; will do so (this is backwards compatible behavior with pre-1.2 releases
; of Asterisk). Individual applications can also be requested to do this
; by passing a 'j' option in their arguments.
;
;priorityjumping=yes
;
; User context is where entries from users.conf are registered. The
; default value is 'default'
;
;userscontext=default
;
; You can include other config files, use the #include command

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 79

; (without the ';'). Note that this is different from the "include" command
; that includes contexts within other contexts. The #include command works
; in all asterisk configuration files.
;#include "filename.conf"
;#include <filename.conf>
;#include filename.conf
;
; You can execute a program or script that produces config files, and they
; will be inserted where you insert the #exec command. The #exec command
; works on all asterisk configuration files. However, you will need to
; activate them within asterisk.conf with the "execincludes" option. They
; are otherwise considered a security risk.
;#exec /opt/bin/build-extra-contexts.sh
;#exec /opt/bin/build-extra-contexts.sh --foo="bar"
;#exec </opt/bin/build-extra-contexts.sh --foo="bar">
;#exec "/opt/bin/build-extra-contexts.sh --foo=\"bar\""
;

; The "Globals" category contains global variables that can be referenced


; in the dialplan with the GLOBAL dialplan function:
; ${GLOBAL(VARIABLE)}
; ${${GLOBAL(VARIABLE)}} or ${text${GLOBAL(VARIABLE)}} or any hybrid
; Unix/Linux environmental variables can be reached with the ENV dialplan
; function: ${ENV(VARIABLE)};

2.2.1.2. Globals

En esta sección se definen variables que será factibles de leer desde las otras reglas
en distintos contextos. Siendo la forma para referenciarlos el uso de la palabra globals

; The "Globals" category contains global variables that can be referenced


; in the dialplan with the GLOBAL dialplan function:
; ${GLOBAL(VARIABLE)}
; ${${GLOBAL(VARIABLE)}} or ${text${GLOBAL(VARIABLE)}} or any hybrid
[globals]
CONSOLE=Console/dsp ; Console interface for demo
;CONSOLE=Zap/1
;CONSOLE=Phone/phone0
IAXINFO=guest ; IAXtel username/password
;IAXINFO=myuser:mypass
TRUNK=Zap/G2 ; Trunk interface

2.2.1.3. Contexto Default

En esta sección se guardan las reglas y parámetros que se aplicaran a todos los
usuarios que lleguen a la central sin tener un contexto por defecto.

[default]
;
; By default we include the demo. In a production system, you
; probably don't want to have the demo there.

CIBERTEC CARRERAS PROFESIONALES


80

;
include => demo

;
; An extension like the one below can be used for FWD, Nikotel, sipgate etc.
; Note that you must have a [sipprovider] section in sip.conf
;
;exten => _41X.,1,Dial(SIP/${FILTER(0123456789,${EXTEN:2})}@sipprovider,,r)

; Real extensions would go here. Generally you want real extensions to be


; 4 or 5 digits long (although there is no such requirement) and start with a
; single digit that is fairly large (like 6 or 7) so that you have plenty of
; room to overlap extensions and menu options without conflict. You can
alias
; them with names, too, and use global variables

2.2.2. Reglas de Contextos

Las reglas de los contextos tienen el siguiente formato separado por comas donde en
cada línea se tienen los siguientes elementos

exten => someexten,{priority|label{+|-


}offset}[(alias)],application(arg1,arg2,...)

exten => : Indicador de Extension

someexten : Extension

{priority|label{+|-}offset}[(alias)] : Prioridad

application(arg1,arg2,...) : Aplicación

2.2.2.1. Indicador de extensión

El texto inicial “exten=>” es el inidicador de que la linea que sigue es una extensión y
debe ser interpretada como tal por el servidor

2.2.2.2. Extensión

La extensión es propiamente el valor que la central espera recibir por las entidades
que generen llamadas hacia este contexto. Por ejemplo a continuación se muestra el
contexto prueba con 5 extensiones y cada una de estas ejecuta 5 acciones distintas
según se marque una opción en particular

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 81

[prueba]

exten =>100,1,aplicacion1()

exten =>200,1,aplicacion2()

exten =>300,1,aplicacion3()

exten =>400,1,aplicacion4()

exten =>500,1,aplicacion5()

Las extensiones así como números también pueden ser texto alfa numérico, sin
emabargo es importante resaltar que será necesario el utilizar un dispositivo que esté
en capacidad de realizar llamadas a estos destinos.

[prueba]

exten =>recepcion,1,aplicacion1()

exten =>ventas,1,aplicacion2()

exten =>verano,1,aplicacion3()

exten =>emergencia,1,aplicacion5()

Existen Asterisk define algunas extensiones especiales, que tienen un significado


importante dentro del dialplan. Estas extensiones se utilizan para manejar
determinadas condiciones de las llamadas, incluyendo los plazos de espera para
obtener información, recepción inválida de extensiones (desconocido), inicio de una
llamada, y recibir una solicitud de operadora (cuando la persona que llama pulsa cero).
Estas extensiones especiales son:

• s
Define cómo encaminar una llamada cuando no se ha recibido ninguna otra
información de enrutamiento. En una línea de PRI o FXS locales, vamos a
recibir una serie de números para dirigir la llamada. Al recibir una llamada
desde una entrada analógica (FXO), no vamos a obtener toda la información
de enrutamiento. En este caso, la extensión de la 's' se utilizará.

• t
Define lo que debe hacer cuando una llamada ha agotado el tiempo
esperando información de enrutamiento. Si Asterisk está a la espera de cifras

CIBERTEC CARRERAS PROFESIONALES


82

para encaminar una llamada (por ejemplo, cuando la extensión de la 's' ofrece
un menú de extensiones y de entrada no se ha recibido).

• i
Define cómo manejar una extensión no válida o enrutar, como los casos en
que se marca una extensión que no existe en el contexto, o cuando la
extensión es parcialmente marcada, pero el tiempo de espera sin información
suficiente para completar la llamada

• o
Define cómo manejar una petición de asistencia de un operador. Esta
extensión se utiliza cuando una persona que llama pulsa cero durante la
aplicación de correo de voz.

2.2.2.3. Prioridades

Cada extensión se compone de una o varias prioridades. Las prioridades son pasos en
la extensión. Por lo general se ejecutan en orden numérico, aunque las aplicaciones
pueden cambiar esto.

Las prioridades también ofrecen la posibilidad de manejar una llamada de otra manera
si la aplicación 'Dial' devuelve ocupado cuando se trata de un anillo de canales. Si el
canal está ocupado, Asterisk, en vez de ir a la siguiente prioridad, intentará ir a la
siguiente prioridad más 100. Si la prioridad 1 es un 'Dial' y el canal está ocupado,
Asterisk se mueve a la prioridad 102 de la extensión, si es que existe. Si la ruta
ocupado no se puede encontrar, el Asterisk recurrirá a la prioridad más uno.

[supervisores]
exten => 701,1,Dial(SIP/supervisores1)
exten => 701,2,Dial(SIP/supervisores2)
exten => 701,3,Dial(SIP/supervisores3)

2.2.2.4. Aplicación

Las aplicaciones son las funciones que se ejecutarán durante la llamada. A


continuación se muestra una lista de las aplicaciones instaladas por defecto en
asterisk.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 83

asterisk-rvoz*CLI> show applications


-= Registered Asterisk Applications =-
AddQueueMember: Dynamically adds queue members
ADSIProg: Load Asterisk ADSI Scripts into phone
AgentCallbackLogin: Call agent callback login
AgentLogin: Call agent login
AgentMonitorOutgoing: Record agent's outgoing call
AGI: Executes an AGI compliant application
AlarmReceiver: Provide support for receiving alarm reports from a
burglar
or fire alarm panel
AMD: Attempts to detect answering machines
Answer: Answer a channel if ringing
AppendCDRUserField: Append to the CDR user field
Authenticate: Authenticate a user
BackGround: Play an audio file while waiting for digits of an
extension
to go to.
BackgroundDetect: Background a file with talk detect
Busy: Indicate the Busy condition
ChangeMonitor: Change monitoring filename of a channel
ChanIsAvail: Check channel availability
ChannelRedirect: Redirects given channel to a dialplan target.
ChanSpy: Listen to a channel, and optionally whisper into it
Congestion: Indicate the Congestion condition
ContinueWhile: Restart a While loop
ControlPlayback: Play a file with fast forward and rewind
DateTime: Says a specified time in a custom format
DBdel: Delete a key from the database
DBdeltree: Delete a family or keytree from the database
DeadAGI: Executes AGI on a hungup channel
Dial: Place a call and connect to the current channel
Dictate: Virtual Dictation Machine
Directory: Provide directory of voicemail extensions
DISA: DISA (Direct Inward System Access)
DumpChan: Dump Info About The Calling Channel
EAGI: Executes an EAGI compliant application
Echo: Echo audio, video, or DTMF back to the calling party
EndWhile: End a while loop
Exec: Executes dialplan application
ExecIf: Executes dialplan application, conditionally
ExecIfTime: Conditional application execution based on the
current time
ExitWhile: End a While loop
ExtenSpy: Listen to a channel, and optionally whisper into it
ExternalIVR: Interfaces with an external IVR application
Festival: Say text to the user
FollowMe: Find-Me/Follow-Me application
ForkCDR: Forks the Call Data Record
GetCPEID: Get ADSI CPE ID
Gosub: Jump to label, saving return address
GosubIf: Conditionally jump to label, saving return address
Goto: Jump to a particular priority, extension, or context
GotoIf: Conditional goto
GotoIfTime: Conditional Goto based on the current time
Hangup: Hang up the calling channel
HasNewVoicemail: Conditionally branches to priority + 101 with the
right options set

CIBERTEC CARRERAS PROFESIONALES


84

HasVoicemail: Conditionally branches to priority + 101 with the


right
options set
IAX2Provision: Provision a calling IAXy with a given template
ICES: Encode and stream using 'ices'
ImportVar: Import a variable from a channel into a new variable
Log: Send arbitrary text to a selected log level
LookupBlacklist: Look up Caller*ID name/number from blacklist database
LookupCIDName: Look up CallerID Name from local database
Macro: Macro Implementation
MacroExclusive: Exclusive Macro Implementation
MacroExit: Exit From Macro
MacroIf: Conditional Macro Implementation
MailboxExists: Check to see if Voicemail mailbox exists
Milliwatt: Generate a Constant 1004Hz tone at 0dbm (mu-law)
MixMonitor: Record a call and mix the audio during the recording
Monitor: Monitor a channel
Morsecode: Plays morse code
MP3Player: Play an MP3 file or stream
MusicOnHold: Play Music On Hold indefinitely
NBScat: Play an NBS local stream
NoCDR: Tell Asterisk to not maintain a CDR for the current
call
NoOp: Do Nothing
Park: Park yourself
ParkAndAnnounce: Park and Announce
ParkedCall: Answer a parked call
PauseMonitor: Pause monitoring of a channel
PauseQueueMember: Pauses a queue member
Pickup: Directed Call Pickup
Playback: Play a file
PlayTones: Play a tone list
PrivacyManager: Require phone number to be entered, if no CallerID
sent
Progress: Indicate progress
Queue: Queue a call for a call queue
QueueLog: Writes to the queue_log
Random: Conditionally branches, based upon a probability
Read: Read a variable
ReadFile: ReadFile(varname=file,length)
RealTime: Realtime Data Lookup
RealTimeUpdate: Realtime Data Rewrite
Record: Record to a file
RemoveQueueMember: Dynamically removes queue members
ResetCDR: Resets the Call Data Record
RetryDial: Place a call, retrying on failure allowing optional
exit
extension.
Return: Return from gosub routine
Ringing: Indicate ringing tone
SayAlpha: Say Alpha
SayDigits: Say Digits
SayNumber: Say Number
SayPhonetic: Say Phonetic
SayUnixTime: Says a specified time in a custom format
SendDTMF: Sends arbitrary DTMF digits
SendImage: Send an image file
SendText: Send a Text Message
SendURL: Send a URL

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 85

Set: Set channel variable(s) or function value(s)


SetAMAFlags: Set the AMA Flags
SetCallerID: Set CallerID
SetCallerPres: Set CallerID Presentation
SetCDRUserField: Set the CDR user field
SetGlobalVar: Set a global variable to a given value
SetMusicOnHold: Set default Music On Hold class
SetTransferCapability: Set ISDN Transfer Capability
SIPAddHeader: Add a SIP header to the outbound call
SIPDtmfMode: Change the dtmfmode for a SIP call
SMS: Communicates with SMS service centres and SMS capable
analogue phones
SoftHangup: Soft Hangup Application
SpeechActivateGrammar: Activate a Grammar
SpeechBackground: Play a sound file and wait for speech to be
recognized
SpeechCreate: Create a Speech Structure
SpeechDeactivateGrammar: Deactivate a Grammar
SpeechDestroy: End speech recognition
SpeechLoadGrammar: Load a Grammar
SpeechProcessingSound: Change background processing sound
SpeechStart: Start recognizing voice in the audio stream
SpeechUnloadGrammar: Unload a Grammar
StackPop: Remove one address from gosub stack
StartMusicOnHold: Play Music On Hold
StopMixMonitor: Stop recording a call through MixMonitor
StopMonitor: Stop monitoring a channel
StopMusicOnHold: Stop Playing Music On Hold
StopPlayTones: Stop playing a tone list
System: Execute a system command
TestClient: Execute Interface Test Client
TestServer: Execute Interface Test Server
Transfer: Transfer caller to remote extension
TryExec: Executes dialplan application, always returning
TrySystem: Try executing a system command
UnpauseMonitor: Unpause monitoring of a channel
UnpauseQueueMember: Unpauses a queue member
UserEvent: Send an arbitrary event to the manager interface
Verbose: Send arbitrary text to verbose output
VMAuthenticate: Authenticate with Voicemail passwords
VoiceMail: Leave a Voicemail message
VoiceMailMain: Check Voicemail messages
Wait: Waits for some time
WaitExten: Waits for an extension to be entered
WaitForRing: Wait for Ring Application
WaitForSilence: Waits for a specified amount of silence
WaitMusicOnHold: Wait, playing Music On Hold
While: Start a while loop
Zapateller: Block telemarketers with SIT
-= 150 Applications Registered =-

CIBERTEC CARRERAS PROFESIONALES


86

2.2.3. Configuración en Asterisk modo SIP Proxy

Una de las aplicaciones más utilizadas en asterisk es la aplicación DIAL, esta


instrucción tiene la función de generar una llamada saliente hacia un destino
especificado utilizando un canal en particular

Si estructura de funcionamiento es el siguiente:

Dial,{technology}/{phone_id}[|timeout][|options][|URL]

Con cualquier comando DIAL, como mínimo es necesario identificar a donde se desea
marca. Por ende, la tecnología y el phone_id siempre se deberán dar en el comando.
“Tecnología” es la tecnología de canal que desea utilizar para llamar. Tales como:

• IAX
• ZAP
• SIP
• MGCP
• OH323
• DSP

El phone_id es el identificador de circuito dentro de la tecnología de canal. Esta


identificación se suele definir en el archivo de la tecnología de canal respectivo conf.
Tales como /etc/asterisk/iax.conf o /etc/asterisk/sip.conf.

A continuación se muestra un ejemplo de la configuración utilizando el protocolo SIP.

[general]
context=default
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0

[207]
type = friend
host = dynamic
secret = 12348
context = ventas

[208]
type = friend
host = dynamic

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 87

secret = 12349
context = ventas

[209]
type = friend
host = dynamic
secret = 12349
context = ventas

[210]
type = friend
host = dynamic
secret = 12350
context = ventas

[211]
type = friend
host = dynamic
secret = 12350
context = ventas

[212]
type = friend
host = dynamic
secret = 12351
context = ventas

[301]
type = friend
host = dynamic
secret = 12345
context = soporte

[302]
type = friend
host = dynamic
secret = 12346
context = soporte

[303]
type = friend
host = dynamic
secret = 12347
context = soporte

[304]
type = friend
host = dynamic
secret = 12348
context = soporte

[305]
type = friend
host = dynamic
secret = 12349
context = soporte

[306]

CIBERTEC CARRERAS PROFESIONALES


88

type = friend
host = dynamic
secret = 12350
context = soporte

[307]
type = friend
host = dynamic
secret = 12351
context = soporte

[308]
type = friend
host = dynamic
secret = 12352
context = soporte

[309]
type = friend
host = dynamic
secret = 12353
context = soporte

[310]
type = friend
host = dynamic
secret = 12354
context = soporte

[311]
type = friend
host = dynamic
secret = 12355
context = soporte

[312]
type = friend
host = dynamic
secret = 12356
context = soporte

[313]
type = friend
host = dynamic
secret = 12357
context = soporte

[314]
type = friend
host = dynamic
secret = 12358
context = soporte

[315]
type = friend
host = dynamic
secret = 12359
context = soporte

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 89

[316]
type = friend
host = dynamic
secret = 12360
context = soporte

[317]
type = friend
host = dynamic
secret = 12361
context = soporte

[318]
type = friend
host = dynamic
secret = 12362
context = soporte

[319]
type = friend
host = dynamic
secret = 12363
context = soporte

[320]
type = friend
host = dynamic
secret = 12364
context = soporte

[321]
type = friend
host = dynamic
secret = 12365
context = soporte

[322]
type = friend
host = dynamic
secret = 12366
context = soporte

[323]
type = friend
host = dynamic
secret = 12367
context = soporte

[324]
type = friend
host = dynamic
secret = 12368
context = soporte

[325]
type = friend
host = dynamic
secret = 12369
context = soporte

CIBERTEC CARRERAS PROFESIONALES


90

[326]
type = friend
host = dynamic
secret = 12370
context = soporte

[327]
type = friend
host = dynamic
secret = 12371
context = soporte

[328]
type = friend
host = dynamic
secret = 12372
context = soporte

[329]
type = friend
host = dynamic
secret = 12373
context = soporte

[330]
type = friend
host = dynamic
secret = 12374
context = soporte

Luego de cargar el archivo de configuración con el comando sip reload obtenemos:

asterisk-rvoz*CLI>
asterisk-rvoz*CLI> sip show users
Username Secret Accountcode Def.Context ACL NAT
330 12374 soporte No RFC3581
329 12373 soporte No RFC3581
328 12372 soporte No RFC3581
327 12371 soporte No RFC3581
326 12370 soporte No RFC3581
325 12369 soporte No RFC3581
324 12368 soporte No RFC3581
323 12367 soporte No RFC3581
322 12366 soporte No RFC3581
321 12365 soporte No RFC3581
320 12364 soporte No RFC3581
319 12363 soporte No RFC3581
318 12362 soporte No RFC3581
317 12361 soporte No RFC3581
316 12360 soporte No RFC3581
315 12359 soporte No RFC3581
314 12358 soporte No RFC3581

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 91

313 12357 soporte No RFC3581


312 12356 soporte No RFC3581
311 12355 soporte No RFC3581
310 12354 soporte No RFC3581
309 12353 soporte No RFC3581
308 12352 soporte No RFC3581
307 12351 soporte No RFC3581
306 12350 soporte No RFC3581
305 12349 soporte No RFC3581
304 12348 soporte No RFC3581
303 12347 soporte No RFC3581
302 12346 soporte No RFC3581
301 12345 soporte No RFC3581
212 12351 ventas No RFC3581
211 12350 ventas No RFC3581
210 12350 ventas No RFC3581
209 12349 ventas No RFC3581
208 12349 ventas No RFC3581
207 12348 ventas No RFC3581
206 12348 ventas No RFC3581
205 12347 ventas No RFC3581
204 12347 ventas No RFC3581
203 12346 ventas No RFC3581
202 12346 ventas No RFC3581
201 12345 ventas No RFC3581
asterisk-rvoz*CLI> sip show peers
Name/username Host Dyn Nat ACL Port Status
330 (Unspecified) D 0 Unmonitored
329 (Unspecified) D 0 Unmonitored
328 (Unspecified) D 0 Unmonitored
327 (Unspecified) D 0 Unmonitored
326 (Unspecified) D 0 Unmonitored
325 (Unspecified) D 0 Unmonitored
324 (Unspecified) D 0 Unmonitored
323 (Unspecified) D 0 Unmonitored
322 (Unspecified) D 0 Unmonitored
321 (Unspecified) D 0 Unmonitored
320 (Unspecified) D 0 Unmonitored
319 (Unspecified) D 0 Unmonitored
318 (Unspecified) D 0 Unmonitored
317 (Unspecified) D 0 Unmonitored
316 (Unspecified) D 0 Unmonitored
315 (Unspecified) D 0 Unmonitored
314 (Unspecified) D 0 Unmonitored
313 (Unspecified) D 0 Unmonitored
312 (Unspecified) D 0 Unmonitored
311 (Unspecified) D 0 Unmonitored
310 (Unspecified) D 0 Unmonitored
309 (Unspecified) D 0 Unmonitored
308 (Unspecified) D 0 Unmonitored
307 (Unspecified) D 0 Unmonitored
306 (Unspecified) D 0 Unmonitored
305 (Unspecified) D 0 Unmonitored
304 (Unspecified) D 0 Unmonitored
303 (Unspecified) D 0 Unmonitored
302 (Unspecified) D 0 Unmonitored
301 (Unspecified) D 0 Unmonitored
212 (Unspecified) D 0 Unmonitored
211 (Unspecified) D 0 Unmonitored

CIBERTEC CARRERAS PROFESIONALES


92

210 (Unspecified) D 0 Unmonitored


209 (Unspecified) D 0 Unmonitored
208 (Unspecified) D 0 Unmonitored
207 (Unspecified) D 0 Unmonitored
206 (Unspecified) D 0 Unmonitored
205 (Unspecified) D 0 Unmonitored
204 (Unspecified) D 0 Unmonitored
203 (Unspecified) D 0 Unmonitored
202 (Unspecified) D 0 Unmonitored
201 (Unspecified) D 0 Unmonitored
42 sip peers [Monitored: 0 online, 0 offline Unmonitored: 0 online, 42
offline]
asterisk-rvoz*CLI>

A continuación se debe agregar la siguiente información en el archivo extensions.conf


a fin de que los entornos de soprote y ventas se puedan comunicar

[general]
static=yes
writeprotect=no
clearglobalvars=no

[globals]
[soporte]
exten => 301,1,dial(SIP/301)
exten => 302,1,dial(SIP/302)
exten => 303,1,dial(SIP/303)
exten => 304,1,dial(SIP/304)
exten => 305,1,dial(SIP/305)
exten => 306,1,dial(SIP/306)
exten => 307,1,dial(SIP/307)
exten => 308,1,dial(SIP/308)
exten => 309,1,dial(SIP/309)
exten => 310,1,dial(SIP/310)
exten => 311,1,dial(SIP/311)
exten => 312,1,dial(SIP/312)
exten => 313,1,dial(SIP/313)
exten => 314,1,dial(SIP/314)
exten => 315,1,dial(SIP/315)
exten => 316,1,dial(SIP/316)
exten => 317,1,dial(SIP/317)
exten => 318,1,dial(SIP/318)
exten => 319,1,dial(SIP/319)
exten => 320,1,dial(SIP/320)
exten => 321,1,dial(SIP/321)
exten => 322,1,dial(SIP/322)
exten => 323,1,dial(SIP/323)
exten => 324,1,dial(SIP/324)
exten => 325,1,dial(SIP/325)
exten => 326,1,dial(SIP/326)
exten => 327,1,dial(SIP/327)
exten => 328,1,dial(SIP/328)
exten => 329,1,dial(SIP/329)
exten => 330,1,dial(SIP/330)

[ventas]

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 93

exten => 201,1,dial(SIP/ 201)


exten => 202,1,dial(SIP/ 202)
exten => 203,1,dial(SIP/ 203)
exten => 204,1,dial(SIP/ 204)
exten => 205,1,dial(SIP/ 205)
exten => 206,1,dial(SIP/ 206)
exten => 207,1,dial(SIP/ 207)
exten => 208,1,dial(SIP/ 208)
exten => 209,1,dial(SIP/ 209)
exten => 210,1,dial(SIP/ 210)
exten => 211,1,dial(SIP/ 211)
exten => 212,1,dial(SIP/ 212)

2.2.4. Comandos de plan de marcación

Se utilizará el plan de marcación de la sección 2.2.3

2.2.4.1. Recarga del plan de marcación

asterisk-rvoz*CLI> extensions reload


Dialplan reloaded.
== Parsing '/etc/asterisk/extensions.conf': Found
-- Registered extension context 'soporte'
-- Added extension '301' priority 1 to soporte
-- Added extension '302' priority 1 to soporte
-- Added extension '303' priority 1 to soporte
-- Added extension '304' priority 1 to soporte
-- Added extension '305' priority 1 to soporte
-- Added extension '306' priority 1 to soporte
-- Added extension '307' priority 1 to soporte
-- Added extension '308' priority 1 to soporte
-- Added extension '309' priority 1 to soporte
-- Added extension '310' priority 1 to soporte
-- Added extension '311' priority 1 to soporte
-- Added extension '312' priority 1 to soporte
-- Added extension '313' priority 1 to soporte
-- Added extension '314' priority 1 to soporte
-- Added extension '315' priority 1 to soporte
-- Added extension '316' priority 1 to soporte
-- Added extension '317' priority 1 to soporte
-- Added extension '318' priority 1 to soporte
-- Added extension '319' priority 1 to soporte
-- Added extension '320' priority 1 to soporte
-- Added extension '321' priority 1 to soporte
-- Added extension '322' priority 1 to soporte
-- Added extension '323' priority 1 to soporte
-- Added extension '324' priority 1 to soporte
-- Added extension '325' priority 1 to soporte
-- Added extension '326' priority 1 to soporte
-- Added extension '327' priority 1 to soporte
-- Added extension '328' priority 1 to soporte
-- Added extension '329' priority 1 to soporte

CIBERTEC CARRERAS PROFESIONALES


94

-- Added extension '330' priority 1 to soporte


-- Registered extension context 'ventas'
-- Added extension '201' priority 1 to ventas
-- Added extension '202' priority 1 to ventas
-- Added extension '203' priority 1 to ventas
-- Added extension '204' priority 1 to ventas
-- Added extension '205' priority 1 to ventas
-- Added extension '206' priority 1 to ventas
-- Added extension '207' priority 1 to ventas
-- Added extension '208' priority 1 to ventas
-- Added extension '209' priority 1 to ventas
-- Added extension '210' priority 1 to ventas
-- Added extension '211' priority 1 to ventas
-- Added extension '212' priority 1 to ventas
== Parsing '/etc/asterisk/users.conf': Found

2.2.4.2. Verificación del plan de marcación

asterisk-rvoz*CLI> dialplan show ventas


[ Context 'ventas' created by 'pbx_config' ]
'201' => 1. dial(SIP/ 201) [pbx_config]
'202' => 1. dial(SIP/ 202) [pbx_config]
'203' => 1. dial(SIP/ 203) [pbx_config]
'204' => 1. dial(SIP/ 204) [pbx_config]
'205' => 1. dial(SIP/ 205) [pbx_config]
'206' => 1. dial(SIP/ 206) [pbx_config]
'207' => 1. dial(SIP/ 207) [pbx_config]
'208' => 1. dial(SIP/ 208) [pbx_config]
'209' => 1. dial(SIP/ 209) [pbx_config]
'210' => 1. dial(SIP/ 210) [pbx_config]
'211' => 1. dial(SIP/ 211) [pbx_config]
'212' => 1. dial(SIP/ 212) [pbx_config]

-= 12 extensions (12 priorities) in 1 context. =-


asterisk-rvoz*CLI> dialplan show soporte
[ Context 'soporte' created by 'pbx_config' ]
'301' => 1. dial(SIP/301) [pbx_config]
'302' => 1. dial(SIP/302) [pbx_config]
'303' => 1. dial(SIP/303) [pbx_config]
'304' => 1. dial(SIP/304) [pbx_config]
'305' => 1. dial(SIP/305) [pbx_config]
'306' => 1. dial(SIP/306) [pbx_config]
'307' => 1. dial(SIP/307) [pbx_config]
'308' => 1. dial(SIP/308) [pbx_config]
'309' => 1. dial(SIP/309) [pbx_config]
'310' => 1. dial(SIP/310) [pbx_config]
'311' => 1. dial(SIP/311) [pbx_config]
'312' => 1. dial(SIP/312) [pbx_config]
'313' => 1. dial(SIP/313) [pbx_config]
'314' => 1. dial(SIP/314) [pbx_config]
'315' => 1. dial(SIP/315) [pbx_config]
'316' => 1. dial(SIP/316) [pbx_config]
'317' => 1. dial(SIP/317) [pbx_config]
'318' => 1. dial(SIP/318) [pbx_config]
'319' => 1. dial(SIP/319) [pbx_config]
'320' => 1. dial(SIP/320) [pbx_config]

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 95

'321' => 1. dial(SIP/321) [pbx_config]


'322' => 1. dial(SIP/322) [pbx_config]
'323' => 1. dial(SIP/323) [pbx_config]
'324' => 1. dial(SIP/324) [pbx_config]
'325' => 1. dial(SIP/325) [pbx_config]
'326' => 1. dial(SIP/326) [pbx_config]
'327' => 1. dial(SIP/327) [pbx_config]
'328' => 1. dial(SIP/328) [pbx_config]
'329' => 1. dial(SIP/329) [pbx_config]
'330' => 1. dial(SIP/330) [pbx_config]

-= 30 extensions (30 priorities) in 1 context. =-


asterisk-rvoz*CLI>

CIBERTEC CARRERAS PROFESIONALES


96

RESUMEN

• El archivo sip.conf es donde se guarda la información acerca de los usuarios SIP.

• El archivo Extensions.conf almacena la información del plan de marcación.

• La estructura de estos archivos de configuración es jerárquica de arriba abajo por


lo que se pueden configurar parámetros generales para el resto de las entidades
menores.

• La aplicación DIAL es una de las más utilizadas y permite el que 2 puntos


indicados puedas establecer una llamada de voz

JIM MEGGELEN, L. MADSEN, J. SMITH, Asterisk: the future of telephony, O’Reilly

THERMOS, PETER y TAKANEN, ARI 2008 Securing VoIP Networks: threats,


vulnerabilities and countermeasures. Boston: Pearson Education, Inc

FLAVIO E. GONCALVES Configuration Guide for Asterisk PBX: How to Build and
Configure a Pbx With Asterisk

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 97

Unidad de
Aprendizaje

CONFIGURACIÓN DE APLICACIONES
TELEFÓNICAS EN ASTERISK

LOGRO DE LA UNIDAD DE APRENDIZAJE

• Al término de la unidad, el alumno, Se encuentra en capacidad de


implementar una plataforma de comunicaciones empresariasles básicas.
• Al término de la unidad, el alumno, puede realizar funciones de soporte y
diagnostico para las aplicaciones de voz sobre IP

TEMARIO

• Diseño e implementación de un IVR


• Análisis de tramas
• Aplicaciones de control de flujo
• Implementación de un ACD Inbound

ACTIVIDADES PROPUESTAS

• Implementar una solución de callcenter Inboun


• Implementar un sistema de IVR con control de horarios

CIBERTEC CARRERAS PROFESIONALES


98

3.1. DISEÑO E IMPLEMENTACIÓN DE UN IVR

Un IVR es una aplicación de central de comunicaciones que se encarga de recibir las


llamadas de los usuarios y en función a mensajes de audio e interacciones con el
usuario guía la llamada a su destino Óptimo.

3.1.1. Diseño de Flujo de atención de un IVR

A fin de poder diseñar un IVR óptimo debemos comenzar modelando un diagrama de


flujo del modo de atención que se desea crear

• Definición de Servicios
• Restricciones de los servicios
• Selección de interacciones

A continuación se muestra un diagrama básico de un plan de marcación.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 99

Es muy importante señalar que la implementación de este diagrama puede darse de


muchas maneras en asterisk, siendo necesario que se adapte lo mejor posible a las
capacidades presentes en el servidor.

3.1.2. Aplicaciones de Ejecución de Audio

El audio en Asterisk juega un papel importante. En el mundo de las PBX tradicionales


es habitual que mientras el llamante no llega a su destino se le entretenga con
música en espera. Además la reproducción de audio es necesaria para la construcción
de sistemas IVR.

Asterisk, en su instalación, facilita algunos sonidos comunes para, por ejemplo, el


buzón de voz, o para notificar fallos de la red (el usuario no se encuentra, etc), Aunque
podemos llevar esto mucho más allá, mediante Festival y otras aplicaciones.

3.1.2.1. Playback

La aplicación Playback reproduce un archivo de audio que esté localizado en el


directorio de sonidos de Asterisk. No es necesario incluir la extensión del archivo, de
hecho es recomendable no hacerlo. Asterisk reproducirá el archivo que menos coste
de conversión tenga.

3.1.2.2. Background

La aplicación Background() reproduce un audio al igual que Playback(), pero permite


marcar mientras se escucha. En concreto, en el momento en que se comienza a
marcar se deja de reproducir el sonido de audio. Puede ser útil para construir IVR.

3.1.2.3. SayDigits()

Lee las cifras que se pasan como argumento. Ej: SayDigits(1234) lee "1","2". . .

3.1.2.4. SayNumber()

Lee el número que conforman todas las cifras del argumento. Ej: SayNumber(1234)
leerá mil doscientos treinta y cuatro.

CIBERTEC CARRERAS PROFESIONALES


100

3.1.2.5. SayAlpha()

Deletrea la cadena pasada como argumento, en el caso de pasar sólo números el


resultado es el mismo que SayDigits() .

3.1.3. Aplicaciones de Grabación de Audio

Para la grabación no hace falta ninguna aplicación especial, podríamos coger


cualquier aplicación de audio como Audacity o una grabadora de sonidos.

No obstante, Asterisk incorpora una serie de aplicaciones para la grabación en el


sistema telefónico. Esto por sí mismo no es interesante, pero puede utilizarse para
crear una macro que reproduzca un mensaje de bienvenida personalizado por el
usuario.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 101

3.1.3.1. Record()

exten=>ext1,n,Record(nombre.formato[,silencio ,duracion_maxima, opciones])

Graba el audio del canal actual en un archivo de sonido y lo guarda con el nombre de
archivo dado. El parámetro de formato especifica el formato de sonido y la extensión
del archivo. Si no se especifica la ruta completa, el archivo se almacena en la ruta
/var/lib/asterisk/sounds. Si un archivo con el mismo nombre y extensión que ya existe,
será sobrescrito.

Si el archivo contiene %d, estos caracteres serán reemplazados por un número se


incrementa en uno cada vez que se graba en el archivo y el nombre del archivo
resultante será devuelto en la variable $ {canal RECORDED_FILE}.

Los formatos de sonido admitidos son: sln, G723, G729, GSM, h263, ulaw, alaw, VOX,
WAV, WAV (WAV es el formato GSM de archivos wav

3.1.4. Implementación del IVR

[ivr]

exten=>800,1,playaback(bienvenida)
exten=>800,2,backgroudn(opciones)

exten=>1,1,dial(SIP/100)
exten=>2,1,dial(SIP/200)
exten=>3,1,dial(SIP/300)
exten=>0,1,dial(SIP/operadora)

[admin]
Include => IVR

; Se incluye el context IVR para que el administrador pueda hacer pruebas de


cómo
; funciona su IVR

; Se crea un contexto de administración para que se puedan grabar los audios


para el
; contexto IVR

exten=>100,1,record(bienvenida.wav)
exten=>200,1,record(opciones.wav)

CIBERTEC CARRERAS PROFESIONALES


102

3.2. APLICACIONES DE CONTROL DE FLUJO

3.2.1. Uso de Expresiones Regulares

Las expresiones regulares son utilizadas para poder abarcar un gran número de
posibles combinaciones de números con una simple combinación de caracteres.
Básicamente consiste en que el servidor toma como equivalente a un carácter por
cualquiera de un rango específico. Siendo los siguientes caracteres los utilizados:

X: Remplaza caracteres de 0 a 9
Z: Remplaza caracteres de 1 a 9
N: Remplaza caracteres de 2 a 9

Para hacer uso de las expresiones regulares se debe iniciar el valor de la extensión
con un sub-guión “_” a continuación cada vez que se introduzca un carácter especial
este será comparado con todo un rango

3.2.2. Variables

Asterisk puede hacer uso de variables como los argumentos a los comandos. Estas
variables de entorno pueden ser globales, compartidas, y específicas del canal. Las
variables son referidas en el dialplan (extensions.conf) utilizando la sintaxis

$ {foo: desplazamiento: longitud}

Donde foo es el nombre de la variable, el desplazamiento es un campo opcional que


indica que los caracteres deben ser excluidos, y la longitud es un campo opcional que
indica el número de caracteres de los desplazamientos a devolver.

Un nombre de variable puede ser cualquier cadena alfanumérica comienzo con una
letra. Las variables definidas por el usuario no son sensibles a mayúsculas o
minúsculas, es decir que $ {FOO} y $ {foo} se refieren a la misma variable. Pero las
variables definidas por Asterisk si distinguen entre mayúsculas y minúsculas.

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 103

Por ejemplo la variable ${EXTEN} es una variable estándar y especial en Asterisk que
almacena la extensión que se marco. Si se utiliza $ {EXTEN} la variable funciona pero
$ {exten} no.

Hay tres tipos de variables: las variables globales, las variables compartidas, las
variables del canal, y las variables de entorno.

3.2.2.1. Las variables globales

Se pueden establecer en la sección [globals] de extensions.conf o mediante el


comando SetGlobalVar. Una vez definidos, se puede hacer referencia desde cualquier
canal en cualquier momento.

3.2.2.2. Variables del canal

se establecen con el comando Set (anteriormente "setvar"). Cada canal recibe su


espacio de las variables propias, por lo que no hay posibilidad de colisión entre las
distintas convocatorias, y la variable es automáticamente colocada en la papelera
cuando el canal está hungup().

3.2.2.3. Las variables de entorno

Proporcionan un medio para acceder a variables de entorno unix dentro de Asterisk.


Hay una lista de más abajo en esta página. Si se define una variable del canal con el
mismo nombre que una variable global (y recuerde: el usuario define los nombres de
variables no distinguen entre mayúsculas y minúsculas), las referencias a ese nombre
de la variable devolverá el valor de la variable del canal.

3.2.3. Aplicaciones de control

3.2.3.1. Noop()

Este comando funciona con cualquier variable, por lo que NoOp ($ { any_var_name})
imprimirá el valor de la variable nombrada en la consola cuando se alcance el paso del
comando en la extensión. Uno de sus principales usos es el depurar el funcionamiento
de un plan de marcación.

CIBERTEC CARRERAS PROFESIONALES


104

3.2.3.2. Goto()

Esta aplicación salta la ejecución de la llama a una prioridad en particular de una


extensión indicada.

Goto tiene las siguientes variants:

Goto(context,extension,priority)
Goto(extension,priority)
Goto(priority)
Goto(context,extension,label)
Goto(extension,label)
Goto(label)

3.2.3.3. gotoIf()

GotoIf(condition?[label1]:label2)

Gotoif funciona de manera similar a Goto, con la diferencia de que para ejecutarse se
evalúa la veracidad de una condición.

La condición es solo una cadena de texto. Si el valorde la cadena es vacio o “0” la


condición se considera falsa. En caso contrario la condición se considera verdadera

exten => 206,1,GotoIf($["${CALLERID(num)}" = "303"]?dial1)


exten => 206,n,GotoIf($["${CALLERID(num)}" != "304"]?moh:dial2)
exten => 206,n(dial1),Dial(${SPHONE1},15,rt)
exten => 206,n,Hangup()
exten => 206,n(dial2),Dial(${PHONE2},15,rt)
exten => 206,n,Hangup()
exten => 206,n(moh),MusicOnHold(default)

3.2.3.4. while()

Ejecuta lazos entre un las sentencias “While" y "EndWhile", hasta que la condición
especificada se evalúe como falsa. La condición se evalúa una vez por ciclo, desde el
principio.

exten => 123,1,Answer


exten => 123,n,Set(i=1)
exten => 123,n,While($[${i} < 5])
exten => 123,n,SayNumber(${i})
exten => 123,n,Set(i=$[${i} + 1])
exten => 123,n,EndWhile

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 105

3.2.4. Aplicaciones Aritméticas

Se pueden utilizar operadores, dentro de cualquier función. Para utilizarlos es


necesario encerrar la operaci on entre corchetes $[ ].

exten => 5000,1,Set(CONTADOR=0) ;Establecemos variables


exten => 5000,n,While($[${CONTADOR} < 10]) ;mientras contador sea menor que
10
exten => 5000,n,Set(CONTADOR=$[${CONTADOR} + 1]) ;suma 1
exten => 5000,n,Dial(5000) ; llama
exten => 5000,n,EndWhile

3.2.4.1. Operadores lógicos

• expr1 j expr2 (OR logico)


• expr1 & expr2 (AND logico)
• !expr (negación lógica)
• expr1 = expr2
• expr1 != expr2
• expr1 < expr2
• expr1 > expr2
• expr1 <= expr2
• expr1 >= expr2

3.2.4.2. Operadores aritméticos

• expr1 + expr2
• expr1 - expr2
• - expr
• expr1 * expr2
• expr1 / expr2
• expr1 % expr2

CIBERTEC CARRERAS PROFESIONALES


106

3.3. IMPLEMENTACIÓN DE UN ACD INBOUND

A continuación se exponen las técnicas utilizadas para la configuración de un sistema


de ACD entrante.

3.3.1. Estructura del Archivo queues.conf

En este archivo se define la cola de atención entrante, indicando sus principales


parámetros de comportamiento

[general]
;
; Global settings for call queues
;
; Persistent Members
; Store each dynamic member in each queue in the astdb so that
; when asterisk is restarted, each member will be automatically
; read into their recorded queues. Default is 'yes'.
;
persistentmembers = yes
;
; AutoFill Behavior
; The old/current behavior of the queue has a serial type behavior
; in that the queue will make all waiting callers wait in the queue
; even if there is more than one available member ready to take
; calls until the head caller is connected with the member they
; were trying to get to. The next waiting caller in line then
; becomes the head caller, and they are then connected with the
; next available member and all available members and waiting callers
; waits while this happens. The new behavior, enabled by setting
; autofill=yes makes sure that when the waiting callers are connecting
; with available members in a parallel fashion until there are
; no more available members or no more waiting callers. This is
; probably more along the lines of how a queue should work and
; in most cases, you will want to enable this behavior. If you
; do not specify or comment out this option, it will default to no
; to keep backward compatibility with the old behavior.
;
autofill = yes
;
; Monitor Type
; By setting monitor-type = MixMonitor, when specifying monitor-format
; to enable recording of queue member conversations, app_queue will
; now use the new MixMonitor application instead of Monitor so
; the concept of "joining/mixing" the in/out files now goes away
; when this is enabled. You can set the default type for all queues
; here, and then also change monitor-type for individual queues within
; queue by using the same configuration parameter within a queue
; configuration block. If you do not specify or comment out this option,
; it will default to the old 'Monitor' behavior to keep backward
; compatibility.
;

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 107

monitor-type = MixMonitor
;
; Note that a timeout to fail out of a queue may be passed as part of
; an application call from extensions.conf:
; Queue(queuename|[options]|[optionalurl]|[announceoverride]|[timeout])
; example: Queue(dave|t|||45)

;[markq]
;
; A sample call queue
;
; Musicclass sets which music applies for this particular call queue.
; The only class which can override this one is if the MOH class is set
; directly on the channel using Set(CHANNEL(musicclass)=whatever) in the
; dialplan.
;
;musicclass = default
;
; An announcement may be specified which is played for the member as
; soon as they answer a call, typically to indicate to them which queue
; this call should be answered as, so that agents or members who are
; listening to more than one queue can differentiated how they should
; engage the customer
;
;announce = queue-markq
;
; A strategy may be specified. Valid strategies include:
;
; ringall - ring all available channels until one answers (default)
; roundrobin - take turns ringing each available interface
; leastrecent - ring interface which was least recently called by this queue
; fewestcalls - ring the one with fewest completed calls from this queue
; random - ring random interface
; rrmemory - round robin with memory, remember where we left off last ring
pass
;
;strategy = ringall
;
; Second settings for service level (default 0)
; Used for service level statistics (calls answered within service level time
; frame)
;servicelevel = 60
;
; A context may be specified, in which if the user types a SINGLE
; digit extension while they are in the queue, they will be taken out
; of the queue and sent to that extension in this context.
;
;context = qoutcon
;
; How long do we let the phone ring before we consider this a timeout...
;
;timeout = 15
;
; How long do we wait before trying all the members again?
;
;retry = 5
;
; Weight of queue - when compared to other queues, higher weights get
; first shot at available channels when the same channel is included in

CIBERTEC CARRERAS PROFESIONALES


108

; more than one queue.


;
;weight=0
;
; After a successful call, how long to wait before sending a potentially
; free member another call (default is 0, or no delay)
;
;wrapuptime=15
;
; Autofill will follow queue strategy but push multiple calls through
; at same time until there are no more waiting callers or no more
; available members. The per-queue setting of autofill allows you
; to override the default setting on an individual queue level.
;
;autofill=yes
;
; Autopause will pause a queue member if they fail to answer a call
;
;autopause=yes
;
; Maximum number of people waiting in the queue (0 for unlimited)
;
;maxlen = 0
;
; If set to yes, just prior to the caller being bridged with a queue member
; the MEMBERINTERFACE variable will be set with the interface name (eg.
Agent/1234)
; of the queue member that was chosen and is now connected to be bridged with
; the caller
;
;setinterfacevar=no
;
; How often to announce queue position and/or estimated
; holdtime to caller (0=off)
;
;announce-frequency = 90
;
;
; How often to make any periodic announcement (see periodic-announce)
;
;periodic-announce-frequency=60
;
; Should we include estimated hold time in position announcements?
; Either yes, no, or only once.
; Hold time will be announced as the estimated time,
; or "less than 2 minutes" when appropriate.
;
;announce-holdtime = yes|no|once

;
; What's the rounding time for the seconds?
; If this is non-zero, then we announce the seconds as well as the minutes
; rounded to this value.
;
; announce-round-seconds = 10
;
; Use these sound files in making position/holdtime announcements. The
; defaults are as listed below -- change only if you need to.
;

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 109

; Keep in mind that you may also prevent a sound from being played if you
; explicitly set a sound to be an empty string. For example, if you want to
; prevent the queue from playing queue-thankyou, you may set the sound using
; the following line:
;
; queue-thankyou=
;
; ("You are now first in line.")
;queue-youarenext = queue-youarenext
; ("There are")
;queue-thereare = queue-thereare
; ("calls waiting.")
;queue-callswaiting = queue-callswaiting
; ("The current est. holdtime is")
;queue-holdtime = queue-holdtime
; ("minutes.")
;queue-minutes = queue-minutes
; ("seconds.")
;queue-seconds = queue-seconds
; ("Thank you for your patience.")
;queue-thankyou = queue-thankyou
; ("less than")
;queue-lessthan = queue-less-than
; ("Hold time")
;queue-reporthold = queue-reporthold
; ("All reps busy / wait for next")
;periodic-announce = queue-periodic-announce
;
; Calls may be recorded using Asterisk's monitor/MixMonitor resource
; This can be enabled from within the Queue application, starting recording
; when the call is actually picked up; thus, only successful calls are
; recorded, and you are not recording while people are listening to MOH.
; To enable monitoring, simply specify "monitor-format"; it will be disabled
; otherwise.
;
; You can specify the monitor filename with by calling
; Set(MONITOR_FILENAME=foo)
; Otherwise it will use MONITOR_FILENAME=${UNIQUEID}
;
; Pick any one valid extension for monitor format recording. If you leave
; monitor-format commented out, it will not record calls.
;
; monitor-format = gsm|wav|wav49
;
; Monitor Type
; By setting monitor-type = MixMonitor, when specifying monitor-format
; to enable recording of queue member conversations, app_queue will
; now use the new MixMonitor application instead of Monitor so
; the concept of "joining/mixing" the in/out files now goes away
; when this is enabled. If you do not specify or comment out this option,
; it will default to the old 'Monitor' behavior to keep backward
; compatibility.
;
; monitor-type = MixMonitor
;
; ----------------------- TYPE MIXMONITOR OPTIONS ---------------------------
--
;
;

CIBERTEC CARRERAS PROFESIONALES


110

; You can specify the options supplied to MixMonitor by calling (from the
dialplan)
; Set(MONITOR_OPTIONS=av(<x>)V(<x>)W(<x>))
; The 'b' option for MixMonitor (only save audio to the file while bridged)
is
; implied.
;
; You can specify a post recording command to be executed after the end of
; recording by calling (from the dialplan)
; Set(MONITOR_EXEC=mv /var/spool/asterisk/monitor/^{MONITOR_FILENAME}
/tmp/^{MONITOR_FILENAME})
;
; The command specified within the contents of MONITOR_EXEC will be executed
when
; the recording is over. Any strings matching ^{X} will be unescaped to ${X}
and
; all variables will be evaluated just prior to recording being started.
;
; The contents of MONITOR_FILENAME will also be unescaped from ^{X} to ${X}
and
; all variables will be evaluated just prior to recording being started.
;
;
; This setting controls whether callers can join a queue with no members.
There
; are three choices:
;
; yes - callers can join a queue with no members or only unavailable
members
; no - callers cannot join a queue with no members
; strict - callers cannot join a queue with no members or only unavailable
; members
;
; joinempty = yes
;
;
; If you wish to remove callers from the queue when new callers cannot join,
; set this setting to one of the same choices for 'joinempty'
;
; leavewhenempty = yes
;
;
; If this is set to yes, the following manager events will be generated:
; AgentCalled, AgentDump, AgentConnect, AgentComplete; setting this to
; vars also sends all channel variables with the event.
; (may generate some extra manager events, but probably ones you want)
;
; eventwhencalled = yes|no|vars
;
; If this is set to yes, the following manager events will be generated:
; QueueMemberStatus
; (may generate a WHOLE LOT of extra manager events)
;
; eventmemberstatus = no
;
; If you wish to report the caller's hold time to the member before they are
; connected to the caller, set this to yes.
;
; reportholdtime = no

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 111

;
; If you want the queue to avoid sending calls to members whose devices are
; known to be 'in use' (via the channel driver supporting that device state)
; uncomment this option. (Note: only the SIP channel driver currently is able
; to report 'in use'.)
;
; ringinuse = no
;
; If you wish to have a delay before the member is connected to the caller
(or
; before the member hears any announcement messages), set this to the number
of
; seconds to delay.
;
; memberdelay = 0
;
; If timeoutrestart is set to yes, then the timeout for an agent to answer is
; reset if a BUSY or CONGESTION is received. This can be useful if agents
; are able to cancel a call with reject or similar.
;
; timeoutrestart = no
;
; Each member of this call queue is listed on a separate line in
; the form technology/dialstring. "member" means a normal member of a
; queue. An optional penalty may be specified after a comma, such that
; entries with higher penalties are considered last. An optional member
; name may also be specified after a second comma, which is used in log
; messages as a "friendly name". Multiple interfaces may share a single
; member name. An optional state interface may be specified after a third
; comma. This interface will be the one for which app_queue receives device
; state notifications, even though the first interface specified is the one
; that is actually called.
;
;member => Zap/1
;member => Zap/2,10
;member => Zap/3,10,Bob Johnson
;member => Agent/1001
;member => Agent/1002
;member => Local/1000@default,0,John Smith,SIP/1000

;
; Note that using agent groups is probably not what you want. Strategies do
; not propagate down to the Agent system so if you want round robin, least
; recent, etc, you should list all the agents in this file individually and
not
; use agent groups.
;
;member => Agent/@1 ; Any agent in group 1
;member => Agent/:1,1 ; Any agent in group 1, wait for first
; available, but consider with penalty

CIBERTEC CARRERAS PROFESIONALES


112

Entre las técnicas de distribución de llamadas se encuentran:

• Ringall: Timbra todos los canales disponibles hasta que uno conteste. Esta es la
opción.
• Roundrobin: Se turna cada interfaz de sonido disponibles (se remplazó en 1.4, por
el uso de el uso rrmemory)
• Leastrecent: Interfaz de anillo que se lo ha llamado por esta cola
• Fewestcalls: El anillo del uno con menor cantidad de llamadas realizadas desde
esta cola
• Random: La interfaz timbra al azar
• Rrmemory: Round robin con memoria, recuerda dónde se timbró por última vez
• Linear: Las interfaces de los anillos en el orden en que aparecen en el archivo de
configuración. Miembros dinámicos se peldaño en el orden en que se han
añadido.
• Wrandom: Timbra al azar, pero utiliza la penalización de agente como un valor de
elección

3.3.2. Estructura del Archivo Agents.conf

En este archivo se definen la lista de los agentes que se conectarán para recibir
llamadas entrantes:

;
; Agent configuration
[general]
persistentagents=yes

[agents]

agent => 1001,4321,Mark Spencer


agent => 1002,4321,Will Meadows
agent => 201,1234,agente- 201
agent => 202,1234,agente- 202
agent => 203,1234,agente- 203
agent => 204,1234,agente- 204
agent => 205,1234,agente- 205
agent => 206,1234,agente- 206
agent => 207,1234,agente- 207
agent => 208,1234,agente- 208
agent => 209,1234,agente- 209
agent => 210,1234,agente- 210
agent => 211,1234,agente- 211
agent => 212,1234,agente- 212

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 113

asterisk-rvoz*CLI> show agents


1001 (Mark Spencer) not logged in (musiconhold is 'default')
1002 (Will Meadows) not logged in (musiconhold is 'default')
201 (agente- 201) not logged in (musiconhold is 'default')
202 (agente- 202) not logged in (musiconhold is 'default')
203 (agente- 203) not logged in (musiconhold is 'default')
204 (agente- 204) not logged in (musiconhold is 'default')
205 (agente- 205) not logged in (musiconhold is 'default')
206 (agente- 206) not logged in (musiconhold is 'default')
207 (agente- 207) not logged in (musiconhold is 'default')
208 (agente- 208) not logged in (musiconhold is 'default')
209 (agente- 209) not logged in (musiconhold is 'default')
210 (agente- 210) not logged in (musiconhold is 'default')
211 (agente- 211) not logged in (musiconhold is 'default')
212 (agente- 212) not logged in (musiconhold is 'default')
14 agents configured [0 online , 14 offline]

asterisk-rvoz*CLI>

3.3.3. Configuración de Cola de Atención

Para poder tener acceso a la cola de atención será necesario el utilizar el comando
queues().

exten => s,1,Answer


exten => s,2,SetMusicOnHold(default)
exten => s,3,DigitTimeout,5
exten => s,4,ResponseTimeout,10
exten => s,5,Background(welcome)
exten => s,6,Queue(tech-queue)

3.3.4. Configuración de firma de agentes

Para poder tener acceso a la cola de atención como agente será necesario el utilizar el
comando agentlogin()

AgentLogin(AgentNo[|options])

exten => 28xxx,1,AgentLogin(${EXTEN:2:4})

CIBERTEC CARRERAS PROFESIONALES


114

RESUMEN

• Un IVR es una herramienta que nos permite atender de manera eficiente las
llamdas entrantes de los clientes

• Dado que el objetivo de un ivr es asignar el destino optimo para un usuario. Es


necesario el planificar que destinos se tienen y realizar un diagrama de flujo.

• Las operaciones aritméticas de asterisk se evalúan en corchetes cuadrados.

• Las colas se configuran en queues.conf

• Los agentes se configura en el archivo agents.conf

JIM MEGGELEN, L. MADSEN, J. SMITH, Asterisk: the future of telephony, O’Reilly

THERMOS, PETER y TAKANEN, ARI 2008 Securing VoIP Networks: threats,


vulnerabilities and countermeasures. Boston: Pearson Education, Inc

FLAVIO E. GONCALVES Configuration Guide for Asterisk PBX: How to Build and
Configure a Pbx With Asterisk

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 115

Unidad de
Aprendizaje

INTERCONEXIÓN DE ASTERISK

LOGRO DE LA UNIDAD DE APRENDIZAJE

• Al término de la unidad, el alumno, conoce los procedimientos requeridos


para la interconexión de dos centrales de comunicaciones utilizando el
protocolo asterisk

TEMARIO

• Interconexión de asterisk

ACTIVIDADES PROPUESTAS

• Realizar un enlace corporativo de asterisk simulando una red


metropolitana.
• Implementar un escenario de ataque DoS de VoIP

CIBERTEC CARRERAS PROFESIONALES


116

4.1. INTERCONEXIÓN A SIP

El objetivo de este capítulo es el interconectar dos centrales asterisk simulando un


enlace wan para tal fin debemos analizar los elementos para el despliegue

Para nuestro análisis utilizaremos dos locales A y B cada uno con un plan de
numeración distinto. Buscaremos poder llamar directamente a los anexos remostos así
como a una solución de IVR

4.1.1. Configuración de destinos SIP

4.1.1.1. Local A

;configuracion de usuarios Sip.conf

[general]

register => localA:12345@<IPlocalB>

[localB]
type=user
host=dynamic
context=Entrante
secret=12345

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 117

[101]
type= friend
host= dynamic
secret= 12345
context= interno

[102]
type= friend
host= dynamic
secret= 12345
context= interno

[103]
type= friend
host= dynamic
secret= 12345
context=interno

4.1.1.1. Local B

;configuracion de usuarios Sip.conf

[general]

register => localB:12345@<IPlocalA>

[localA]
type=user
host=dynamic
context=Entrante
secret=12345

[201]
type= friend
host= dynamic
secret= 12345
context= interno

[202]
type= friend
host= dynamic
secret= 12345
context= interno

[203]
type= friend
host= dynamic
secret= 12345
context=interno

CIBERTEC CARRERAS PROFESIONALES


118

4.1.2. Configuración de Plan de Marcación

4.1.2.1. Local A

;configuracion de usuarios extensions.conf

[interno]

exten=>1xx,1,dial(sip/${EXTEN})
exten=>2xx,1,dial(sip/localB/${EXTEN})
exten=>2700,1,dial(sip/localB/${EXTEN:1})

[entrante]
Include=>interno

exten=>800,1,playaback(bienvenida)
exten=>800,2,backgroudn(opciones)

exten=>1,1,dial(SIP/100)
exten=>2,1,dial(SIP/200)
exten=>3,1,dial(SIP/300)
exten=>0,1,dial(SIP/operadora)

4.1.2.2. Local B

;configuracion de usuarios extensions.conf

[interno]

exten=>1xx,1,dial(sip/${EXTEN})
exten=>2xx,1,dial(sip/localA/${EXTEN})
exten=>2800,1,dial(sip/localA/${EXTEN:1})

[entrante]
Include=>interno

exten=>700,1,playaback(bienvenida)
exten=>700,2,backgroudn(opciones)

exten=>1,1,dial(SIP/100)
exten=>2,1,dial(SIP/200)
exten=>3,1,dial(SIP/300)
exten=>0,1,dial(SIP/operadora)

CARRERAS PROFESIONALES CIBERTEC


NOMBRE DEL CURSO 119

RESUMEN

• Si bien es posible el realizar interconexiones utilizando otros protocolos, la


utilización del protocolo SIP es una fuerte ventaja dado que la gran mayoría de
equipos usan en la actualidad dicho protocolo.

• Es también importante entender que se debe planificar un plan de marcación


común entre todos los locales que se tengan a fin de evitar cruces en la
comunicación.

JIM MEGGELEN, L. MADSEN, J. SMITH, Asterisk: the future of telephony, O’Reilly

THERMOS, PETER y TAKANEN, ARI 2008 Securing VoIP Networks: threats,


vulnerabilities and countermeasures. Boston: Pearson Education, Inc

FLAVIO E. GONCALVES Configuration Guide for Asterisk PBX: How to Build and
Configure a Pbx With Asterisk

CIBERTEC CARRERAS PROFESIONALES

Вам также может понравиться