Sei sulla pagina 1di 58

CAPITULO 1

Introducción

Asterisk

Que es Asterisk?
Asterisk es una aplicación de software libre (bajo licencia GPL) de una central telefónica (PBX). 
Como cualquier PBX, se puede conectar un número determinado de teléfonos para hacer llamadas 
entre sí e incluso conectar a un proveedor de VoIP o bien a una RDSI tanto básicos como primarios.

Mark Spencer, de Digium, inicialmente creó Asterisk y actualmente es su principal desarrollador, 
junto   con   otros   programadores  que   han   contribuido   a   corregir   errores   y   añadir   novedades  y 
funcionalidades.   Originalmente   desarrollado   para   el   sistema   operativo   GNU/Linux,   Asterisk 
actualmente también se distribuye en versiones para los sistemas operativos BSD, MacOSX y otros, 
aunque la plataforma nativa (GNU/Linux) es la mejor soportada de todas.

Asterisk   incluye   muchas   características   anteriormente   sólo   disponibles   en   sistemas   costosos 


propietarios PBX como buzón de voz, conferencias, IVR, distribución automática de llamadas, y otras 
muchas más. Los usuarios pueden crear nuevas funcionalidades escribiendo un dialplan en el lenguaje 
de script de Asterisk o añadiendo módulos escritos en lenguaje C o en cualquier otro lenguaje de 
programación soportado por Linux.

Para conectar teléfonos estándar analógicos son necesarias tarjetas electrónicas telefónicas FXS o 
FXO fabricadas por Digium u otros proveedores, ya que para conectar el servidor a una línea externa 
no basta con un simple módem.

Quizá lo más interesante de Asterisk es que soporta muchos protocolos VoIP como pueden ser SIP, 
H.323, IAX y MGCP. Asterisk puede interoperar con terminales IP actuando como un registrador y 
como gateway entre ambos.

Lejos de poder competir con las compañías que comercializan soluciones de VoIP Hw/Sw de alta 
calidad  como  Alcatel­Lucent,  Cisco, Avaya  ó Nortel,  Asterisk se  empieza a  adoptar en  algunos 
entornos corporativos como solución de bajo coste junto con SER (Sip Express Router).
Algunas características de asterisk
✔ Creación de anexos IP (SIP).
✔ Control, Monitoreo en tiempo real, CDR.
✔ Acceso a base de datos (AstDB, MySQL para almacenar el CDR)
✔ Interfaz Grafica.
✔ Respuesta Interactiva de Voz (IVR) 
✔ Grabación de conversaciones.
✔ Correo de voz – e­mail.

Diagramas (topología – A rquitectura)

Figura Nº1

Figura Nº2
Figura Nº3

Figura Nº4

Figura Nº5
Protocolos y Codecs usados Telefonía IP

Protocolos (SIP, IAX)

SIP (Session Initiation Protocol)
Session Initiation Protocol (SIP o Protocolo de Inicio de Sesiones) es un protocolo desarrollado por el 
IETF MMUSIC Working Group con la intención de ser el estándar para la iniciación, modificación y 
finalización de sesiones interactivas de usuario donde intervienen elementos multimedia como el 
video, voz, mensajería instantánea, juegos online y realidad virtual. En Noviembre del año 2000, SIP 
fue aceptado como el protocolo de señalización de 3GPP y elemento permanente de la arquitectura 
IMS (IP Multimedia Subsystem). SIP es uno de los protocolos de señalización para voz sobre IP, otro 
es H.323. (Véase Capitulo 4)

IAX2 (Inter­Asterisk eXchange protocol)
IAX (Inter­Asterisk eXchange protocol) es uno de los protocolos utilizado por Asterisk, un servidor 
PBX (centralita telefónica) de código abierto patrocinado por Digium. Es utilizado para manejar 
conexiones  VoIP   entre   servidores  Asterisk,   y   entre   servidores   y   clientes  que   también   utilizan 
protocolo IAX.

El protocolo IAX ahora se refiere generalmente al IAX2, la segunda versión del protocolo IAX. El 
protocolo original ha quedado obsoleto en favor de IAX2. (Véase Capitulo 5)
Codecs (G711, G729, GSM, IBLC)
Dispositivos VoIP

Teléfonos IP

Softphone

Adaptadores (ATA)
Gateways (E1-SIP, GSM-SIP)

Hadware Digium
CAPITULO 2

Selección Hardware Servidor


e
Instalación S.O

Este capítulo nos ayudara a preparar el sistema para la instalación de Asterisk. Este funciona en 
muchas  plataformas y sistemas operativos,  mas nosotros  elegimos mantener las cosas  simples  y 
permanecer en una única plataforma y distribución de Linux. Vamos usar la distribución CentOS en 
este curso. Las instrucciones realizadas en este curso pueden funcionar con otras distribuciones, pero 
estas no han sido testeadas por nosotros. 

Hardware Mínimo

Asterisk puede ser intensivo en el uso de procesador, pues usa el propio procesador del servidor (PC) 
donde   fue   instalado  para   realizar  el   procesamiento  de   los   canales  de   voz.   Si   usted   estuviese 
construyendo un sistema complejo con carga elevada es importante entender este concepto.  

Para construir su primer PBX Asterisk un procesador compatible con Intel igual o superior a un 
Pentium III 600Mhz con 128 MB RAM es suficiente para un sistema de pruebas que soporte hasta 5 
llamadas simultaneas y donde podamos explorar todas las funcionalidades de Asterisk, respecto al 
sistema operativo podríamos optar por una distribución de Linux como Centos 4.6, con el objetivo de 
ínter comunicarnos con la red publica de telefonia (PSTN) necesitaremos de una tarjeta telefónica de 
hasta 4 canales ZAP, preferente mente una TDM400P con 4 módulos FXO correspondientes a 4 
lineas analogas.

Asterisk no requiere mucho espacio en disco, cerca de 100 MB se calcula para el sistema calculado, 
donde SI requerimos espacio es para el almacenamiento de mensajes de voz, llamadas grabadas, CDR 
(Bases de datos).
 
Si usted usa únicamente VOIP, ningún otro hardware es necesario. Se puede usar softfones como los 
de Counterpath (X­Lite) y realizar entroncamiento hacia proveedores de telefonía IP.

Algunas aplicaciones de Asterisk como el “Meetme” requieren una fuente de clock para proveer la 
temporización. Normalmente la fuente de clock de Asterisk es una placa TDM. Si su sistema no tiene 
una placa TDM, usted puede usar un driver ztdummy que usa el USB como fuente de temporización.

Una  pista:  Usted puede usar una placa  de fax/modem con chipset Intel 537 o MD3200, ella  se 


comporta como una Digium X100P.
Hardware Minimo-Mediano

Un servidor con un procesador Sempron o Celeron de 1 Ghz con 256 MB de RAM seria suficiente 
para un sistema asterisk que podría soportar de 5 a 10 llamadas simultaneas con máximo dos tarjetas 
de telefonía de 4 canales analógicos cada uno y un S.O Linux kernel versión 2.6 (CentOS 4.6).

Hardware Mediano-Grande

Para un sistema mayor que logre soportar de 10 a 24 llamadas simultaneas lo ideal es un servidor con 
procesador Pentium 4 o Athlon de 3 Ghz con 512 MB RAM y en ese una tarjeta de hasta 24 canales 
como la Digium TDM2406B que posee 24 módulos FXO para 24 lineas análogas.

Hardware Mediano-Grande

Para un sistema que realice 30 llamadas simultaneas a mas lo mas recomendable es soportarse sobre 
sistemas Xeon con opción de segunda CPU además de tarjetas Digium TE120P y hasta la TE410P o 
similares (Tarjetas digitales capaces de soporta de 30 a 120 canales digitales de comunicación). Para 
arquitecturas superiores es necesario el uso de múltiples servidores y una arquitectura distribuida.

En definitiva la medición del hardware a utilizar tiene directa relación con la cantidad de llamadas 
simultaneas a realizar y la cantidad de canales ya sea análogos o digitales a usar en nuestro servidor.

Montando su sistema

Elegir hardware necesario para Asterisk no es muy complicado. Usted no precisa de una tarjeta de 
vídeo   sofisticada   o   periféricos   adicionales.   Puertos   seriales,   paralelos   y   USB   pueden   ser 
completamente deshabilitados desde  la  BIOS.  Una  buena  tarjeta  de  red es esencial  para  nuestro 
sistema. Si usted estuviese usando una de las tarjetas de telefonía de Digium, seria bueno verificar las 
instrucciones de su tarjeta madre para determinar si los Slots PCI soportan estas tarjetas de telefonía. 
Muchas   tarjetas   madres   compartirán   interrupciones   (IRQ's)   en   slots   PCI.   Los   conflictos   de 
interrupciones (IRQ's) son una fuente potencial de problemas de calidad de audio en Asterisk.  Una 
manera de liberar IRQs es deshabilitar desde el BIOS todo lo que no fuera necesario.
IRQ compartidas

Muchas  tarjetas de telefonía como la X100P por ejemplo pueden generar grandes cantidades  de 


interrupciones, atenderlas toma tiempo. Los drivers pueden no conseguir hacerlo a tiempo si otro 
dispositivo estuviese procesando la misma IRQ compartida y la linea de IRQ no podrá recibir otra 
interrupción.  Esta   problemática   tiende   a   funcionar   mejor   y   ser   resuelta   en   parte   en   sistemas 
multiprocesador. En sistemas monoprocesador se puede tener muchas perdidas de interrupción y 
clock desfasado. Cualquiera  de las tarjetas de telefonía de Digium y otras tarjetas de telefonía pueden 
estar sujetas al mismo problema. Como la entrega precisa de IRQs es una necesidad primaria en 
telefonía, usted no debe compartir IRQs con nada. No siempre ocurre esto, pero se debe prestar 
atención al problema. Si se está usando un computador dedicado para  Asterisk, deshabilite el mayor 
número de dispositivos que usted no va a usar.

La mayoría de las BIOS permite que usted manualmente designe las IRQs. Vallase hasta la BIOS y 
observe   en   la   sección   de   IRQs.   Es   posible   que   usted   consiga   configurar   las   interrupciones 
manualmente por slot.

Escogiendo una distribucion de Linux.

Asterisk  fue   originalmente  desarrollado  para   ejecutarse  bajo   plataformas  con   sistema   operativo 
Linux, Ahora puede ser usado en BSD y OS X. No obstante esto, las tarjetas telefonicas Digium 
fueron diseñadas para trabajar con Linux i386. Si usted fuese nuevo con Asterisk procure usar Linux.

Requisitos de Linux

Várias distribuciones como RedHat, Mandrake, Fedora, Debian, Slackware y Gentoo fueron usadas 
con Asterisk.

Diseño tabla de particionamiento tentativa para instalación de Asterisk
Asterisk como sistema no requiere mucho espacio en disco, cerca de 100 MB se calcula para el 
sistema compilado e instalado, donde SI requerimos espacio es para el almacenamiento de mensajes 
de voz, llamadas grabadas, CDR   (Bases de datos). Por lo tanto nuestra tabla de particionamiento 
debería contar como mínimo con 4 particiones (Tomando como ejemplo un disco de 80 GB):

[root@asterisk ~]$ df -h
S.ficheros Tamaño Usado Disp Uso% Montado en
/dev/sda1 100M 15M 85M 15% /boot
/dev/sda2 20G 5G 15G 25% /
/dev/sda3 55G 10G 45M 70% /var
tmpfs 248M 0 248M 0% /dev/shm

En   el   proceso  de   instalación   se   debe   considerar  una   partición  más   asignada  para   memoria  de 
intercambio SWAP, el tamaño de esta deberá ser el doble de la memoria RAM existente.
Elección paquetes y dependencias necesarias para compilación de asterisk.
Antiguamente existían algunos paquetes que eran necesarios para instalar Asterisk como el readline y 
readline­devel que no son  necesarios hoy. No existe hardware especial tal como una placa de sonido 
y el único paquete necesario es el propio Asterisk. Si usted estuviera usando hardware de Digium o 
ztdummy, usted va   a precisar del paquete zaptel. El paquete zaptel es necesario para que algunas 
aplicaciones sean incluídas en tiempo de compilación. Si usted escoge compilar Asterisk y no el 
zaptel,  pero  descubre  que   esta   faltando  una   aplicación  relacionada  al   paquete   zaptel  (Como  el 
Meetme()), usted tendra que compilar el zaptel y entonces sera necesario recompilar Asterisk para 
que la aplicación sea incluída.   Para interfaces T1 y E1 el paquete libpri es necesario. Bison es 
necesario para compilar el Asterisk. Los paquetes de desarrollo ncurses y ncurses­development son 
necesarios si usted quisiera construir nuevas herramientas (Como el astman). Las bibliotecas zlib y 
zlib­devel son necesarias ahora para compilar. Esto se debe a la adhesión del protocolo DUNDi 
(Distributed Universal Number Discovery).

Los paquetes necesitados para el sistema operativo Linux CentOS serán:

­ Kernel sources y headers
­ gcc y sus dependencias
­ bison (necesario para los archivos de configuracion.
­ ncurses (necesario para la consola CLI)
­ openssl y openssl­dev o libssl­dev 
­ libnewt (para aplicaciones tal como zttool)
­ lib y zlib­devel 

La   recomendación  es   que   durante  el   proceso  de   instalación  del   sistema   operativo  se   deberán 


seleccionar los siguientes paquetes:

­ Sección Desarrollo:
* Herramientas de Desarrollo (TODO)
* Desarrollo de Software Anticuado (TODO)

Como herramientas adicionales también se podrá instalar:

­ Sección Servidores:
* Servidor Web 
* Servidor de Correo
* Servidor de Bases de Datos (MySQL y/o Postgres)
CAPITULO 3

Descarga, Compilación é Instalación de Asterisk

Anteriormente en el capitulo 2 vimos detalles respecto a la preparación de un sistema para instalar 
Asterisk en el, además de observaciones y consideraciones importantes a la hora de elegir hardware, 
en el presente capitulo veremos como obtener e instalar Asterisk en el sistema elegido  y utilizando 
una distribución de Linux basada en RedHat (CentOS) ya que es la mas común y también utilizada 
por el equipo de desarrolladores de Digium. 

Paquetes requeridos relacionados con Asterisk

La instalación de Asterisk esta compuesta por como mínimo 4 paquetes básicos que se necesitaran o 
no en su totalidad según la necesidad especifica de nuestro proyecto, estos son: asterisk, zaptel, libpri 
y asterisk­addons.

Cada uno de los paquetes tienen los siguientes contenidos:
­ Asterisk: Incluye el programa principal de asterisk.
­ Zaptel: Incluye los drivers para las tarjetas telefónicas Zaptel.
­ LibPri: Incluye las librerías PRI necesarias para conectarse al RTPC.
­ Asterisk­addons: Incluye módulos adicionales a asterisk, como por ejemplo el modulo 
MySQL para conexión a bases de datos de este tipo.

El único paquete estrictamente  necesario es asterisk, ya que libpri solo se necesitara en caso de que 
vallamos a utilizar interfaces PRI y zaptel en caso de utilizar tarjetas ZAPTEL, en caso de requerir 
utilidades  que   necesiten   fuente  de   temporización  y   no   tengamos  hardware  Zaptel   instalado,  es 
requerido instalar el paquete zaptel activando por defecto el modulo ztdummy.

Descarga paquetes de Asterisk

La descarga de asterisk y sus librerias pueden realizarse en forma de archivos tar.gz, para descargar 
estos archivos los podemos encontrar en:

http://ftp.digium.com/pub/

La nomenclatura de estos paquetes sera “asterisk­version.tar.gz” por ejemplo:
Asterisk ­> asterisk­1.4.x.tar.gz
Zaptel ­> zaptel­1.4.x.tar.gz
Libpri ­> libpri­1.4.x.tar.gz
Asterisk­addons ­> asterisk­addons­1.4.x.tar.gz
Esta  descarga  se   puede  realizar  atraves  de  un  navegador  web  como  cambien  desde  la   linea  de 
comandos ejecutando el comando 'wget':

wget http://downloads.digium.com/pub/zaptel/releases/zaptel­1.4.x.tar.gz
wget http://downloads.digium.com/pub/asterisk/releases/asterisk­1.4.x.tar.gz
wget http://downloads.digium.com/pub/libpri/libpri­1.4.x.tar.gz
wget http://downloads.digium.com/pub/asterisk/releases/asterisk­addons­1.4.x.tar.gz

Si fueron descargados los paquetes .tar.gz, estos se descomprimen ejecutando el comando 'tar' desde 
la linea de comandos:

tar ­xvzf archivo­comprimido.tar.gz

Esto creara un directorio con el nombre y versión del paquete descomprimido y dentro estará el 
contenido del paquete.

Instalación Asterisk 1.4

La instalación de los paquetes de asterisk se debe realizar en el siguiente orden:

1ero.­ zaptel
2do.­ libpri
3ero.­ asterisk
4to.­ asterisk­addons

Compilación e Instalación Zaptel

Para compilar e instalar el driver Zaptel se deben seguir los siguientes pasos como usuario 'root'. 

# cd /usr/src/
# wget http://downloads.digium.com/pub/zaptel/releases/zaptel-1.4.x.tar.gz
# cd /usr/src/zaptel-1.4.x
# ./configure
# make
# make install
# make config
Compilación e Instalación Libpri

Para compilar e instalar Libpri se deben seguir los siguientes pasos como usuario 'root'. 

# cd /usr/src/
# wget http://downloads.digium.com/pub/libpri/libpri-1.4.x.tar.gz
# cd /usr/src/libpri-1.4.x
# make
# make install

Compilación e Instalación Asterisk

Para compilar e instalar Asterisk se deben seguir los siguientes pasos como usuario 'root'. 

# cd /usr/src/
# wget http://downloads.digium.com/pub/asterisk/releases/asterisk-
1.4.x.tar.gz
# cd /usr/src/asterisk-1.4.x
# ./configure
# make
# make install
# make samples
# make config

Compilación e Instalación Asterisk-Adoons

Para compilar e instalar Asterisk­Adoons se deben seguir los siguientes pasos como usuario 'root'. 

# cd /usr/src/
# wget http://downloads.digium.com/pub/asterisk/releases/asterisk-addons-
1.4.x.tar.gz
# cd /usr/src/asterisk-addons-1.4.x
# ./configure
# make
# make install
# make samples

Directorios Usados

A continuación los archivos y directorios mas importantes creados en el proceso de instalación.

/etc/asterisk
En este directorio se encuentran todos los archivos necesarios para configurar la gran cantidad de 
servicios que Asterisk provee. Revisaremos los mas importantes.

asterisk.conf
Configuraciones  generales  de   la   ubicación  de   directorios  de   archivos   de   configuracion,  
módulos   compilados,   voicemails   etc.   En   general   es   buena   idea   no   modificar   estas  
configuraciones, salvo casos especiales.

cdr.conf
Configuraciones referentes al "Call Detail Record". Los CDR son sumamente importantes 
para  las   compañías  telefónicas.  Modificar  datos   en   este  archivo  puede  repercutir  en   la  
integridad de los CDR si no se esta seguro de lo que se hace. Si la instalación es únicamente 
de prueba, o los CDR no son materia importante, no hay problema.

codecs.conf
A menos que utilices SPEEX, o quieras hacer cosas especiales con la forma en la que los  
codecs se comportan, es mejor no modificar este archivo.

extensions.conf
Tal vez el archivo mas importante de Asterisk. En este archivo se toman las decisiones de 
ruteo de las llamadas. Mas adelante veremos la sintaxis de este archivo.

features.conf
Este archivo es también muy importante. Permite habilitar y configurar servicios genéricos 
de un PBX como la transferencia asistida y monitoreo de llamadas.

iax.conf
Importante archivo para el funcionamiento del canal chan_iax que le permite a Asterisk          
interactuar con otros dispositivos IAX, incluyendo otros PBX Asterisk.

logger.conf
Que nivel de verbosidad deben tener los mensajes de log y a donde deben ser enviados.

manager.conf
Configuración   del   importante   servicio   AMI   (Asterisk  Manager  Interface)  que   permite  
conectarnos a un socket TCP y manejar el PBX. De cierta forma se encuentra relacionado con 
el archivo http.conf, que provee de una interfaces para programar aplicaciones con AJAX que 
se comuniquen directamente con AMI.

modules.conf
Archivo  sumamente  importante.  Determina  que  módulos   serán  cargados  por  Asterisk  al  
iniciar. Es frecuente que cuando se instala asterisk por primera vez, no arranque debido a que 
no puede cargar un módulo para el que no tenemos soporte. Esto se soluciona comentando la 
línea del módulo en este archivo.

sip.conf
Análogo del archivo iax.conf para el protocolo SIP
zapata.conf
Configuración de los canales Zap. Las configuraciones de este archivo deben coincidir con el 
hardware instalado y la configuración del driver zaptel. 

voicemail.conf
Configuración de las casillas de voz creadas para los respectivos anexos.

meetme.conf
Configuración de las salas de conferencias.

/var/log/asterisk
En este directorio se encuentran los archivos de registro de las operaciones de Asterisk. Definamos 
cada uno de los archivos encontrados dentro de este directorio.

cdr.db
Este archivo se encuentra disponible si se cuenta con el CDR handler para la base de datos 
SQLite. El archivo contiene la base de datos de los registros de las llamadas.

event_log
Registro de eventos sucedidos en el PBX.

full
Creado con la intención de contener todos los mensajes de debug del sistema.

messages
Contiene un listado de los mensajes de warning, debug y demás niveles de logeo.

queue_log 
Archivo utilizado principalmente por la aplicación app_queue.

/var/lib/asterisk
Directorio con archivos de audio, llaves RSA, scripts AGI (Asterisk Gateway Interface), base de 
datos astdb y archivos para el pequeño servidor HTTP para AJAM (Asynchronus Javascript Asterisk 
Manager). Aqui veremos una descripción de cada uno de los directorios, ya que los archivos pueden 
ser irrelevantes.

agi­bin/ 
Aqui se contienen programas en C, PHP, Python o cualquier otro lenguaje con el que se  
pretenda interactuar desde Asterisk.
keys/ 
Directorio que contiene llaves RSA para la autenticación de llamadas con el protocolo IAX2
       
sounds/
Directorio con todos los sonidos que serán utilizados por aplicaciones como Playback() y 
Background()

Para asegurarnos que el proceso de asterisk y zaptel inician de forma automática con el arranque del 
servidor y en caso de reinicio del S.O completo y para el proceso de inicio o detención de forma 
manual del servicio debemos ejecutar los siguientes comandos en la interfaz de linea de comandos:

# service zaptel start


# service asterisk start
# chkconfig zaptel on
# chkconfig asterisk on

Para   acceder  al   monitor   del   sistema   o   tambien   conosido   como   'CLI>'  ejecutamos   el   siguiente 
comando:

# asterisk -r
CAPITULO 4

Protocolo SIP

SIP (Session Initiation Protocol)


Session Initiation Protocol (SIP o Protocolo de Inicio de Sesiones) es un protocolo desarrollado por el 
IETF MMUSIC Working Group con la intención de ser el estándar para la iniciación, modificación y 
finalización de sesiones interactivas de usuario donde intervienen elementos multimedia como el 
video, voz, mensajería instantánea, juegos online y realidad virtual. En Noviembre del año 2000, SIP 
fue aceptado como el protocolo de señalización de 3GPP y elemento permanente de la arquitectura 
IMS (IP Multimedia Subsystem). SIP es uno de los protocolos de señalización para voz sobre IP, otro 
es H.323.

Funcionamiento del protocolo


El protocolo SIP permite el establecimiento de sesiones multimedia entre dos o más usuarios. Para 
hacerlo se vale del intercambio de mensajes entre las partes que quieren comunicarse.

Agentes de Usuario
Los usuarios, que pueden ser seres humanos o aplicaciones de software, utilizan para establecer 
sesiones lo que el protocolo SIP denomina "Agentes de usuario". Estos no son más que los puntos 
extremos del protocolo, es decir son los que emiten y consumen los mensajes del protocolo SIP. Un 
videoteléfono, un teléfono, un cliente de software (softphone) y cualquier otro dispositivo similar es 
para el protocolo SIP un agente de usuario. El protocolo SIP no se ocupa de la interfaz de estos 
dispositivos   con el usuario final, sólo se interesa en los mensajes que estos generan y cómo  se 
comportan al recibir determinados mensajes.

Los agentes de usuario se comportan como clientes (UAC: User Agent Clients) y como servidores 
(UAS: User Agent Servers). Son UAC cuando realizan una petición y son UAS cuando la reciben. 
Por esto los agentes de usuario deben implementar un UAC y un UAS.

Además de los agentes de usuario existen otras entidades que intervienen en el protocolo, estos son 
los Servidores de Registro o Registrar, los Proxy y los Redirectores. A continuación se describe su 
finalidad.

Servidores de Registro o Registrar


El protocolo SIP permite establecer la ubicación física de un usuario determinado, esto es en qué 
punto de la red está conectado. Para ello se vale del mecanismo de registración. Este mecanismo 
funciona como sigue:
Cada usuario tiene una dirección lógica que es invariable respecto de la ubicación física del usuario. 
Una dirección lógica del protocolo SIP es de la forma usuario@dominio es decir tiene la misma 
forma  que   una   dirección  de   correo  electrónico.  La   dirección  física   (denominada  "dirección  de 
contacto") es dependiente del lugar en donde el usuario está conectado (de su dirección IP). Cuando 
un usuario inicializa su terminal (por ejemplo conectando su teléfono o abriendo su software de 
telefonía SIP) el agente de usuario SIP que reside en dicho terminal envía una petición con el método 
REGISTER a un Servidor de Registro (Registrar en inglés), informando a qué dirección física debe 
asociarse la dirección lógica del usuario. El servidor de registro realiza entonces dicha asociación 
(denominada binding). Esta asociación tiene un período de vigencia y si no es renovada, caduca. 
También   puede  terminarse  mediante  una   derregistración.  La   forma  en   que   dicha   asociación  es 
almacenada en la red no es determinada por el protocolo SIP, pero es vital que los elementos de la red 
SIP accedan a dicha información.

Servidores Proxy y de Redirección

Un conjunto de usuarios que pertenecen a una compañía o proveedor de servicios de comunicaciones, 
conforman un dominio. Este dominio, que se indica en una dirección SIP después del caracter "@" es 
normalmente atendido por un servidor (o más de uno). Este servidor recibe las peticiones hacia sus 
usuarios. Este servidor será el encargado de determinar la dirección física del usuario llamado y 
puede actuar de dos maneras:

­ Como Proxy, o 
­ Como Redirector (Redirect). 

Al actuar como Proxy el servidor determina la ubicación del usuario llamado y envía la petición 
original   a  la  dirección física del  usuario  llamado. Las  respuestas  del agente  de usuario llamado 
también son enviadas al proxy que las remite hacia el originante.

Al actuar como Redirector el servidor genera una respuesta que indica al originante la dirección física 
del usuario que busca para que este pueda realizar una petición y enviarla a la dirección física del 
usuario deseado.

Un mismo servidor puede actuar como Redirector o como Proxy dependiendo de la situación.
Un servidor que recibe las peticiones destinadas a un dominio específico es denominado servidor 
entrante (Inbound Server).

Es habitual también, que exista un servidor que reciba las peticiones originadas por los usuarios de un 
dominio hacia otros dominios. Este recibe el nombre de Servidor Saliente (Outbound Server).

Un  agente  de  usuario normalmente  encamina  todos  sus   pedidos  hacia  un  servidor  de  su  propio 
dominio.  Es  este quien determina (por sus propios medios o valiéndose de otros servidores)  las 
ubicaciones de los usuarios que son llamados por el agente de usuario en cuestión.
Canales SIP
Los canales SIP (Session Initiation Protocol) son los canales utilizados por los dispositivos IP que 
usan este protocolo, añadir nuevos usuarios o conectar con proveedores SIP. La configuración para 
estos canales se encuentra en el el archivo 'sip.conf' ubicado en el directorio '/etc/aserisk/' el cual 
deberá ser editado como usuario 'root'.

El archivo de configuración 'sip.conf' se lee de forma secuencial desde arriba hacia abajo. La sección 
[general] contiene todos los parámetros de configuración general y la sección [4000] contiene los 
parámetros de configuración para el anexo o dispositivo SIP 4000 en particular. A continuación un 
ejemplo practico para configuración de este archivo:

; sip.conf

[general]
context=default
port=5060 ; Puerto UDP en el que responderá el Asterisk
bindaddr=0.0.0.0 ; Si queremos especificar que Asterisk esté en una IP (si
un servidor tiene 3 IPs por ej.) 0.0.0.0 vale para cualquiera
srvlookup=yes ; Habilita servidor DNS SRV

[4000]
type=friend
secret=password
qualify=yes ; Tiempo de latencia no superior a 2000 ms.
nat=yes ; El telefono usa NAT
host=dynamic ; El dispositivo se registra con una IP dinamica
canreinvite=no ; Asterisk por defecto trata de redirigir
context=internal ; El contexto asignado para el anexo

­ En general los servidores SIP escuchan en el puerto 5060 UDP. Por tanto configuramos port=5060 . 
En algunos casos, por ejemplo si utilizamos SER (Sip Express Router) con Asterisk debemos cambiar 
este puerto.

­ DNS es una forma de configurar una dirección lógica para que pueda ser resuelta. Esto permite que 
las llamadas sean enviadas a diferentes lugares sin necesidad de cambiar la dirección lógica. Usando 
el DNS SRV se ganan las ventajas del DNS mientras que deshabilitandolo no es posible enrutar 
llamadas en base a nombre de dominios. Conviene tenerlo activado, por tanto se pone la directiva 
srvlookup=yes 

Cada extensión está definida por un user o usuario, un peer o proveedor o un friend o amigo y viene 
definida con un nombre entre corchetes [].

­ El tipo (type) "user" se usa para autenticar llamadas entrantes, "peer" para llamadas salientes y 
"friend"  para  ambas. En nuestro caso hemos definido una extensión 4000 como "friend". Puede 
realizar y recibir llamadas.

­ Secret es la contraseña usada para la autenticación. En este caso será "password".
­   Se  puede  monitorizar la latencia entre el  servidor Asterisk y el telefono con qualify=yes  para 
determinar cuando el dispositivo puede ser alcanzado. En este caso Asterisk considera por defecto 
que que un dispositivo está presente si su latencia es menor de 2000 ms (2 segundos). Se puede 
cambiar este valor poniendo el numero de milisegundos en vez de yes.

­ Si una extensión está detrás de un dispositivo que realiza NAT (Network Address Translation) como 
un   router   o   firewall   se   puede   configurar   nat=yes   para   forzar   a   Asterisk   a   ignorar   el   campo 
información de contacto y usar la dirección desde la que vienen los paquetes.

­ Si ponemos host=dynamic quiere decir que el telefono se podrá conectar desde cualquier dirección 
IP. Podemos limitar a que dicho usuario solo pueda acceder con una IP o con un nombre de dominio. 
Si ponemos host=static no haría falta que el usuario se registrará con la contraseña proporcionada en 
"secret", 

­ También se ha puesto canreinvite=no. En SIP los invites se utilizan para establecer llamadas y 
redirigir el audio o vídeo. Cualquier invite después del invite inicial en la misma conversación se 
considera un reinvite.

Cuando dos usuarios han establecido la comunicación con canreinvite= yes (por defecto) los paquetes 
RTP  de  audio podrían ser enviados extremo a extremo sin pasar por el servidor Asterisk.  Esto, 
normalmente, no suele ser conveniente en casos en los que haya NAT en alguno de los clientes. 
(NAT=yes).

Usando canreinvite=no se fuerza a Asterisk a estar en medio no permitiendo que los puntos finales 
intercambien mensajes RTP directamente.

De todos modos, existen numerosas condiciones en que Asterisk no permite el reinvite a pesar de que 
no pongamos esta condición ya que necesita controlar el flujo RTP. Por ejemplo: Si los clientes usan 
codecs diferentes, si hay opciones de Music On hold o temporizadores en la llamada, etc ...

Por último context=internal indica el contexto donde está las instrucciones para dicha extensión. Esto 
está relacionado con el contexto del archivo extensions.conf que marca el plan de numeración para 
ese contexto. Por tanto el contexto internal debe existir en el fichero extensions.conf o de lo contrario 
deberíamos crearlo. Varios extensiones pueden tener el mismo contexto.

Opciones avanzadas:
User Peer  Explicación y opciones
context  context  Indica el contexto asociado en el dialplan para un usuario o peer
permit  permit  Permitir una IP
deny  deny  No permitir una IP
secret  secret  Contraseña para el registro
md5secret  md5secret  Contraseña encriptada con md5
dtmfmode  dtmfmode  El modo en el que se transmiten los tonos. Pueden ser 
"RFC2833" o "INFO"
canreinvite  canreinvite  Con "no" se fuerza a Asterisk a no permitir que los puntos finales 
intercambien mensajes RTP directamente.
nat  nat  Indica si el dispositivo está detrás de un NAT con "yes"
callgroup  callgroup  Define un grupo de llamadas
pickupgroup  pickupgroup  Define el grupo de llamadas validas para una aplicacion pickup()
language  language  Define las señales para un pais. Debe estar presente en el archi­
vo indications.conf
allow  allow  permite habilitar un codec. Pueden ponerse varios en un mismo 
usuario Posibles Valores:
allow=all
disallow  disallow  permite deshabilitar un codec. Puede tomar los mismos valores 
que allow
insecure  insecure  Define como manejar las conexiones con peers Tiene los siguien­
tes valores very|yes|no|invite|port Por defecto es "no" que quiere 
decir que hay que autenticarse siempre.
trustpid  trustpid  Si la cabecera Remote­Party­ID es de confianza. Por defecto "no"

progressinband  progressinband  Si se deben generar señales en banda siempre. Por defecto never

promiscredir  promiscredir  Permite soportar redirecciones 302. Por defecto "no"


callerid  Define el identificador cuando no hay ninguna otra informacion 
disponible
accountcode  Los usuarios pueden estar asociados con un accountcode . Se 
usa para facturacion.
amaflags  Se usa para guardar en los CDR y temas de facturación . Puede 
ser "default", "omit", "billing", o "documentation"
incominglimit  Limite de llamadas simultaneas para un cliente
restrictcid  Se usa para esconder el ID del llamante. Anticuada y en desuso
mailbox  Extensión del contestador
username  Si Asterisk actua como cliente SIP este es el nombre de usuario 
que presenta en el servidor SIP al que llama
fromdomain  Pone el campo From: de los mensajes SIP
regexten 
fromuser  Pone el nombre de usuario en el from por encima de lo que diga el 
callerID
host  dirección o host donde se encuentra el dispositivo remoto. Puede 
tomar valores:
­ Una IP o un host concreto
­ "dynamic" con lo que valdría cualquier IP pero necesita contra­
seña
­ "static" vale cualquier IP pero no es necesario contraseña
port  Puerto UDP en el que responderá el Asterisk
qualify  Para determinar cuando el dispositivo puede ser alcanzado
defaultip  IP por defecto del cliente host= cuando es especificado como 
"dynamic"
rtptimeout  Termina la llamada cuando llega a ese timeout si no ha habido 
tráfico rtp
rtpholdtimeout  Termina la llamada cuando llega a ese timeout si no ha habido 
tráfico rtp "on hold"
Ejemplo practico creación de un anexo SIP:

; sip.conf

[4000]
context = anexos
dtmfmode = rfc2833
disallow = all
allow = ulaw
allow = ilbc
allow = gsm
type = friend
host = dynamic
username = 4140
Secret = 4140
mailbox = 1000
callerid = "Anexo 4000" <4000>
qualify = yes
nat = yes

Una vez creado el anexo en el archivo 'sip.conf' es necesario recargar la configuración al sistema, 
para esto ejecutaremos dentro de la interfaz CLI el comando 'sip reload' y para observar si realmente 
se cargo la configuracion ejecutamos el comando 'sip show peers':
­ sip reload
­ sip show peers
[root@asterisk ~]# asterisk -r
Asterisk 1.4.x, Copyright (C) 1999 - 2007 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
=========================================================================
Connected to Asterisk 1.4.x currently running on asterisk (pid = 19496)
asterisk*CLI> sip reload
Reloading SIP
== Parsing '/etc/asterisk/sip.conf': Found
asterisk*CLI> sip show peers
Name/username Host Dyn Nat ACL Port Status
4000/4000 (Unspecified) D N 0 UNKNOWN

Para registrar un teléfono IP atraves su interfaz web genérica, se deben seguir los siguientes pasos:
1.­ Asegurarnos que le teléfono tome dirección IP de forma dinámica (DHCP).
2.­ Averiguar la dirección IP que tomo el teléfono y escribirla en la barra de direcciones de un 
navegador web cualquiera (Por Ej. Firefox).
3.­ Ingresar contraseña y acceder a la interfaz web de configuración.
4.­ Ubicar la sección de configuración para un anexo sip e ingresar datos como:
­ Usuario SIP.
­ Contraseña.
­ Dirección IP del servidor Asterisk.
­ etc.
OBS. Para mas detalles consultar instrucciones en manual de usuario del teléfono correspondiente.
Una vez creado y registrado el anexo, nos faltaría un solo paso. Este paso es el que nos permitirá 
comunicarnos con dicho anexo en otras palabras nos falta una ruta de discado hacia nuestro anexo, 
esta ruta se crea en el archivo de configuración 'extencions.conf' y forma parte de nuestro DialPlan. 
(DialPlan que posterior mente explicaremos mas adelante en este documento).

; extensions.conf

[anexos]
exten => 4000,1,Dial(SIP/4000,20)
exten => 4000,2,Hangup

Guardamos  los   cambios   y   salimos   del   archivo,  ingresamos  en   la   consola   CLI  y   ejecutamos  el 
comando para releer los cambios realizados en el archivo 'extensions.conf':
­ asterisk ­r
­ extensions reload
[root@asterisk ~]# asterisk -r
Asterisk 1.4.x, Copyright (C) 1999 - 2007 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
=========================================================================
Connected to Asterisk 1.4.x currently running on asterisk (pid = 19496)
asterisk*CLI> extensions reload
CAPITULO 5

Protocolo IAX

IAX (Inter-Asterisk eXchange protoco)

IAX (Inter­Asterisk eXchange protocol) es uno de los protocolos utilizado por Asterisk, un servidor 
PBX (centralita telefónica) de código abierto patrocinado por Digium. Es utilizado para manejar 
conexiones  VoIP   entre   servidores  Asterisk,   y   entre   servidores   y   clientes  que   también   utilizan 
protocolo IAX.

El protocolo IAX ahora se refiere generalmente al IAX2, la segunda versión del protocolo IAX. El 
protocolo original ha quedado obsoleto en favor de IAX2.

Propiedades Básicas
IAX2 es robusto, lleno de novedades y muy simple en comparación con otros protocolos. Permite 
manejar una gran cantidad de códecs y un gran número de streams, lo que significa que puede ser 
utilizado para transportar virtualmente cualquier tipo de dato. Esta capacidad lo hace muy útil para 
realizar videoconferencias o realizar presentaciones remotas.

IAX2 utiliza un único puerto UDP, generalmente el 4569, para comunicaciones entre puntos finales 
(terminales VoIP) para señalización y datos. El tráfico de voz es transmitido in­band, lo que hace a 
IAX2 un protocolo casi transparente a los cortafuegos y realmente eficaz para trabajar dentro de redes 
internas.  En  esto se diferencia de SIP, que utiliza una cadena RTP out­of­band para entregar  la 
información.

IAX2  soporta  Trunking   (red),  donde  un   simple  enlace  permite  enviar   datos   y   señalización  por 
múltiples canales. Cuando se realiza Trunking, los datos de múltiples llamadas son manejados en un 
único conjunto de paquetes, lo que significa que un datagrama IP puede entregar información para 
más llamadas sin crear latencia adicional. Esto es una gran ventaja para los usuarios de VoIP, donde 
las cabeceras IP son un gran porcentaje del ancho de banda utilizado.

El Inicio de IAX
El   protocolo  IAX2  fue  creado  por  Mark  Spencer  para  la   señalización  de  VoIP  en  Asterisk.  El 
protocolo   crea   sesiones   internas   y   dichas   sesiones   pueden   utilizar   cualquier   códec   que   pueda 
transmitir   voz  o   vídeo.  El   IAX   esencialmente   provee   control   y   transmisión   de   flujos   de   datos 
multimedia sobre redes IP. IAX es extremadamente flexible y puede ser utilizado con cualquier tipo 
de dato incluido vídeo.
El diseño de IAX se basó en muchos estándares de transmisión de datos, incluidos SIP (el cual es el 
más común actualmente), MGCP y Real­time Transport Protocol.

Objetivos de IAX
El principal objetivo de IAX ha sido minimizar el ancho de banda utilizado en la transmisión de voz y 
vídeo a través de la red IP, con particular atención al control y a las llamadas de voz y proveyendo un 
soporte  nativo   para  ser  transparente  a   NAT.  La  estructura  básica  de   IAX   se   fundamenta   en   la 
multiplexación de la señalización y del flujo de datos sobre un simple puerto UDP entre dos sistemas.

IAX es un protocolo binario y está diseñado y organizado de manera que reduce la carga en flujos de 
datos de voz. El ancho de banda para algunas aplicaciones se sacrifica en favor del ancho de banda 
para VoIP.

Canales IAX
Los canales IAX  (Inter Asterisk eXchange) on canales utilizados por dispositivos IP que utilizan este 
protocolo,    añadir nuevos usuarios o conectar con proveedores IAX. La configuración para estos 
canales se encuentra en el el archivo 'iax.conf' ubicado en el directorio '/etc/aserisk/' el cual deberá ser 
editado como usuario 'root'.

El archivo de configuración 'iax.conf' se lee de forma secuencial desde arriba hacia abajo. La sección 
[general] contiene todos los parámetros de configuración general y la sección [servidor_A] contiene 
los parámetros de configuración para el usuario o dispositivo IAX [servidor_A] en particular. A 
continuación un ejemplo practico para configuración de este archivo:

; iax.conf

[general]
context = inband ; Contexto por defecto
bindaddr= 0.0.0.0 ; Direccion IP donde servidor escucha conexionesIAX
bindport=4569 ; Puerto donde se escuchan las conexiones entrantes
language=es ; Lenguaje español
tos=0x18 ; Indicamos que marque los paquetes para QoS
bandwidth=low ; Preferibles codecs con bajo consumo
allow=all ; Usaremos todos los codecs
lo mismo que bandwidth=high

[servidor_A]
type=friend
secret=123
host=direccion.IP.de.servidor_X
permit=direccion.IP.de.servidor_X
auth=md5
disallow=all
allow=ilbc
context=anexos
qualify=yes
­ En general los servidores IAX escuchan en el puerto 4569 UDP/TCP. Por tanto configuramos 
port=4569 . 

­ El parámetro 'bindaddr=0.0.0.0'  nos indica que el servidor esta escuchando por cualquier dirección 
IP que tenga asignada en cada una de sus interfaces de red.

­ El parámetro 'context=anexos' quiere decir que el usuario [servidor_A] podrá realizar exclusiva­
mente lo que se encuentre dentro de anexos.

­ Language=es corresponde al lenguaje asignado para este usuario.

IAX Trunking (Interconexion entre 2 servidores Asterisk)


Para interconectar dos o mas servidores Asterisk servidor_A y servidor_B usando el protocolo IAX y 
lograr establecer comunicación de anexo a anexo entre ambos servidores (un anexo del servidor_A 
logra comunicarse con un anexo del servidor_B) debemos realizar el siguiente procedimiento de 
creación de usuarios IAX en ambos servidores, usuarios que la postre nos servirán para realizar el 
tunking entre ambos servidores y lograr comunicación entre sí.

Archivo 'iax.conf' servidor_A:
; iax.conf

[general]
context=inband ; Contexto por defecto
bindaddr=0.0.0.0 ; Direccion IP donde servidor escucha conexionesIAX
bindport=4569 ; Puerto donde se escuchan las conexiones entrantes
language=es ; Lenguaje español
tos=0x18 ; Indicamos que marque los paquetes para QoS
bandwidth=low ; Preferibles codecs con bajo consumo
allow=all ; Usaremos todos los codecs
lo mismo que bandwidth=high

[servidor_A]
type=friend
secret=123 ; El parámetro secret debe ser igual en ambos servidores esto
; para efectos de autenticación entre los dos servidores.
host=direccion.IP.de.servidor_B
permit=direccion.IP.de.servidor_B
auth=md5 ; Algoritmo de encriptación para transmición de las 'secret'
disallow=all
allow=ilbc
context=anexos
qualify=no

Atraves de los parametros:
'host=direccion.IP.de.servidor_B' y
'permit=direccion.IP.de.servidor_B'

Logramos establecer una relación de confianza entre ambos autentificandose entre si  permitiendo 
que solamente servidor_A y servidor_B puedan establecer comunicación y nadie mas. 
Archivo 'iax.conf' servidor_B:

; iax.conf

[general]
context=inband ; Contexto por defecto
bindaddr=0.0.0.0 ; Direccion IP donde servidor escucha conexionesIAX
bindport=4569 ; Puerto donde se escuchan las conexiones entrantes
language=es ; Lenguaje español
tos=0x18 ; Indicamos que marque los paquetes para QoS
bandwidth=low ; Preferibles codecs con bajo consumo
allow=all ; Usaremos todos los codecs
lo mismo que bandwidth=high

[servidor_B]
type=friend
secret=123 ; El parámetro secret debe ser igual en ambos servidores esto
; para efectos de autenticación entre los dos servidores.
host=direccion.IP.de.servidor_A
permit=direccion.IP.del.servidor_A
auth=md5 ; Algoritmo de encriptación para transmición de las 'secret'
disallow=all
allow=ilbc
context=anexos
qualify=no

Atraves de los parametros:

'host=direccion.IP.de.servidor_A' y
'permit=direccion.IP.de.servidor_A'

Logramos establecer una relación de confianza entre ambos autentificandose entre si  permitiendo 
que solamente servidor_A y servidor_B puedan establecer comunicación y nadie mas. 

Una vez creados los usuarios IAX en el archivo 'iax.conf' es necesario recargar la configuración al 
sistema, para esto ejecutaremos dentro de la interfaz CLI el comando 'iax2 reload' y para observar si 
realmente se cargo la configuracion ejecutamos el comando 'iax2 show peers':
­ iax2 reload
­ iax2 show peers

[root@asterisk ~]# asterisk -r


Asterisk 1.4.x, Copyright (C) 1999 - 2007 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
=========================================================================
Connected to Asterisk 1.4.x currently running on asterisk (pid = 19496)
asterisk*CLI> iax2 reload
Reloading SIP
== Parsing '/etc/asterisk/sip.conf': Found
asterisk*CLI> iax2 show peers
Name/Username Host Mask Port Status
fwbm 192.168.0.101 (S) 255.255.255.255 4569 OK (6 ms)
beer-man 192.168.1.4 (S) 255.255.255.255 4569 OK (6 ms)
Finalizada la creación de los usuarios IAX en ambos servidores, necesitamos crear las rutas de 
discado para la comunicación de un anexo del servidor_A con un anexo del servidor_B y viceversa. 
Estas rutas se crean en los archivos de configuración 'extensions.conf' de ambos servidores, por 
ejemplo: 

Suponiendo que dentro del servidor_A se encuentran los anexos con numeración '4000' y dentro del 
servidor_B se encuentran los anexos con numeración '5000'.

Archivo 'extensions.conf' servidor_A:
 
; extensions.conf servidor_A

[anexos]
exten => 5000,1,Dial(IAX2/servidor_B@servidor_A/5000)
exten => 5000,2,Hangup

exten => 4000,1,Dial(SIP/4000,20)


exten => 4000,2,Hangup

Archivo 'extensions.conf' servidor_B:

; extensions.conf servidor_B

[anexos]
exten => 4000,1,Dial(IAX2/servidor_A@servidor_B/4000)
exten => 4000,2,Hangup

exten => 5000,1,Dial(SIP/5000,20)


exten => 5000,2,Hangup

En ambos servidores guardamos los cambios y salimos de los archivos, ingresamos en las consolas 
CLI y ejecutamos el comado para releer los cambios realizados en los archivos 'extensions.conf':
­ asterisk ­r
­ extensions reload
[root@asterisk ~]# asterisk -r
Asterisk 1.4.x, Copyright (C) 1999 - 2007 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
=========================================================================
Connected to Asterisk 1.4.x currently running on asterisk (pid = 19496)
asterisk*CLI> extensions reload
CAPITULO 6

Telefonía Zaptel

Zaptel Telefonía Analógica (FXS, FXO)


Estos dos términos siempre llevan a confusión debido a que siendo conceptos diferentes siempre van 
juntos.

FXS es un puerto usado por las líneas de telefonía analógica (también denominados POTS), este 
puerto envía señales de timbre y tono para teléfonos analógicos. Es decir, que emulan a una línea 
telefónica analógica tradicional.

FXO este puerto recibe las señales del puerto fxs. Un teléfono tienes un puerto fxo. Este puerto no 
envía señales de tono o timbrado, solo recibe las señales que envía los FXS. Funciona como terminal 
de línea.

En una central telefónica siempre se encontrará con estos términos y en una central ip también. Una 
central IP recibe una línea fxs en un puerto fxo para conectarse al servicio de telefonía.

En el caso de las tarjetas digium, por ejemplo tdm400, estas tarjetas son modulares en consecuencia la 
tarjeta TDM400P puede estar compuesta por modulos ya sea FXS o FXO.

En la imagen tenemos una tarjeta digium con dos módulos fxs (color verde) y dos módulos fxo (color 
rojo). Estas tarjetas se usan para crear centralitas ip con asterisk.
Canales Análogos y Digitales ZAP
Los canales ZAP (Zapata/Zaptel) son los canales utilizados por los puertos FXS/FXO y PRI. Los 
canales ZAP son los correspondientes al hardware Zaptel, creados originalmente por Jim Dixon en su 
proyecto  Zapata   Telefony.  La   configuración  para   estos   canales  se   encuentran  en   los   archivos 
'zaptel.conf'  ubicado  en  el   directorio  '/etc'  y  en  el  archivo  'zapata.conf'  ubicado  en  el   directorio 
'/etc/aserisk/' ambos deberán ser editados como usuario 'root'.

Configuración Tarjeta TDM400P

La tarjeta TDM400P es una tarjeta PCI 2­2 fabricada por Digium que soporta puertos FXS y FXO 
para conectar dispositivos análogos (FXS) o líneas telefónicas (FXO). Lo que podemos conseguir con 
una de estas tarjetas es el poder llamar desde nuestra red VoIP hacia los números de la empresa 
telefónica tradicional usando Asterisk.

Las tarjeta TDM soportan módulos FXS o FXO en un número máximo de cuatro, puede entonces una 
tarjeta tener una combinación de módulos de acuerdo a nuestras necesidades. En este ejemplo tengo 
una TDM22B lo que significa que   tiene 2 puertos/módulos FXS y 2 puertos/módulos FXO, el 2 
indica los módulos FXS y el otro 2 los módulo FXO. Siguiendo con el ejemplo, si tenemos una tarjeta 
TDM04B quiere decir que no tiene módulos FXS y 4 módulos FXO, un tarjeta TDM11B tendrá un 
módulo FXS y un módulo FXO, etc.

Estas tarjetas deberan ser alojadas en un slot PCI libre y en el se conectará la tarjeta, veremos que 
tiene los dos módulos rojos en ella y dos verdes. Los módulos de color verde son FXS y los módulos 
de color rojo son FXO.

Una vez colocada la tarjeta en su puerto respectivo, debemos saber si es reconocida:

[root@asterisk ~]# lspci | grep Communication


0000:06:05.0 Communication controller: Tiger Jet Network Inc. Tiger3XX 
Modem/ISDN interface

A continuación editaremos los archivos de configuración '/etc/zaptel.conf' y '/etc/asterisk/zapata.conf'.

;zaptel.conf

fxoks=1-2
fxsks=3-4

loadzone=cl
defaultzone=cl

La línea fxoks=1­2 indica que los dos primeros módulos son FXS y por ello deben llevar señalización 
FXO, 1­2 es lo mismo que decir 1 y 2.  La linea fxsks=3­4 indica que los dos últimos módulos son 
FXO y por ello deben llevar señalización FXS. La tarjeta seria  FXS FXS FXO FXO.
Si tuviese dos tarjetas TDM400P con ocho módulos FXO debería tener una sola línea fxsks=1­8. Es 
importante zaptel.conf porque ahí se define la señalización que cada puerto va a tener. Los siguiente 
es ejecutar el comando 'ztcfg ­vvvv' para confirmar que nuestra configuración esta correcta. Si nos 
hemos equivocado con la señalización de cada puerto tendremos un mensaje de error que nos lo 
indicará para poder corregirlo.

[root@asterisk ~]# ztcfg -vvvv

Zaptel Configuration
======================

Channel map:

Channel 01: FXO Kewlstart (Default) (Slaves: 01)


Channel 02: FXO Kewlstart (Default) (Slaves: 02)
Channel 03: FXS Kewlstart (Default) (Slaves: 03)
Channel 04: FXS Kewlstart (Default) (Slaves: 04)

4 channels configured.

Ahora deberemos editar nuestro /etc/asterisk/zapata.conf para nuestros dos canales FXS y dos canales 
FXO:

;zapata.conf
[channels]
usecallerid=yes
hidecallerid=no
inmediate=no

; configuramos el primer canal FXS


context=anexos
signalling=fxo_ks
echocancel=yes
group=1
callerid="Anexo Analogo 4050" <4050>
channel => 1

; configuramos el segundo canal FXS


context=anexos
signalling=fxo_ks
echocancel=yes
group=2
callerid="Anexo Analogo 4051" <4051>
channel => 2

; configuramos el tercer canal FXO


context=from-pstn1
signalling=fxs_ks
echocancel=yes
group=3
callerid="Linea Analogica" <2744040>
channel => 3

; configuramos el cuarto canal FXO


context=from-pstn2
signalling=fxs_ks
echocancel=yes
callerid="Linea Analogica" <2744040>
group=4
channel => 4
Finalizada la edición y configuración del archivo 'zapata.conf' es necesario recargar la configuración 
al sistema, para esto debemos detener el servicio asterisk y luego volver a iniciarlo:
­ service asterisk stop
­ service asterisk start.

OBS. El proceso de reinicio del servicio debe de ser obligatoria mente como esta arriba, esto quiere 
decir primero detenerlo y luego iniciarlo.

Como ultimo paso, para hacer uso de estos canales, necesitamos crear las rutas de discado desde la 
PSTN hacia el servidor, desde el servidor hacia la PSTN y entre anexos analógicos (FXS). Estas rutas 
se crean en los archivos de configuración 'extensions.conf' de ambos servidores, por ejemplo: 

Llamadas desde la PSTN hacia el servidor:

;extensions.conf

[from-pstn1] ; Linea analógica numero 1


exten => s,1,Dial(SIP/4000,20)
exten => s,2,Hangup

[from-pstn2] : Linea analógica numero 2


exten => s,1,Dial(SIP/4000,20)
exten => s,2,Hangup

Llamadas desde el servidor hacia la PSTN:

;extensions.conf

[anexos]
exten => _XXXXXXX,1,Dial(Zap/g3/${EXTEN},20)
exten => _XXXXXXX,2,Hangup

exten => _XXXXXXX,1,Dial(Zap/g4/${EXTEN},20)


exten => _XXXXXXX,2,Hangup

Llamada de anexo a anexo ZAP.

;extensions.conf

[anexos]
exten => 4050,1,Dial(Zap/g1,20)
exten => 4050,2,Hangup

exten => 4051,1,Dial(Zap/g2,20)


exten => 4051,2,Hangup

; Para llamar al anexos SIP 4000


exten => 4000,1,Dial(SIP/4000,20)
exten => 4000,2,Hangup
Zaptel Telefonía Digital (E1 PRI)

Configuración Tarjeta digital TE120P

La TE120P es una tarjeta de interfaz digital de alto rendimiento, es una interfaz telefoníca capaz de 
interconectar sistemas tradicionales de la telefonía con las tecnologías emergentes de Voz sobre IP. 

Usada junto con Asterisk®, la TE120P puede usarse para proporcionar un amplio conjunto de 
servicios de PBX. La tarjeta TE120P es facil de expandir, pudiendo configurarla como T1 (24 
canales), E1 (32 canales), o J1 (24 canales). 

Estas tarjetas deberán ser alojadas en un slot PCI libre y en el se conectará la tarjeta.Una vez colocada 
la tarjeta en su puerto respectivo, debemos saber si es reconocida:

[root@asterisk ~]# lspci | grep Communication


07:04.0 Communication controller: Digium, Inc. Wildcard TE120P (rev 02)

A continuación editaremos los archivos de configuración '/etc/zaptel.conf' y '/etc/asterisk/zapata.conf'.

;zaptel.conf

span=1,0,0,ccs,hdb3
bchan=1-15
dchan=16
bchan=17-31

loadzone=cl
defaultzone=cl
Los siguiente es ejecutar el comando 'ztcfg ­vvvv' para confirmar que nuestra configuración esta 
correcta. Si nos hemos equivocado con la señalización de cada puerto tendremos un mensaje de error 
que nos lo indicará para poder corregirlo.

[root@asterisk ~]# ztcfg -vvvv

Zaptel Configuration
======================

SPAN 1: CCS/HDB3 Build-out: 0 db (CSU)/0-133 feet (DSX-1)

Channel map:

Channel 01: Clear channel (Default) (Slaves: 01)


Channel 02: Clear channel (Default) (Slaves: 02)
Channel 03: Clear channel (Default) (Slaves: 03)
Channel 04: Clear channel (Default) (Slaves: 04)
Channel 05: Clear channel (Default) (Slaves: 05)
Channel 06: Clear channel (Default) (Slaves: 06)
Channel 07: Clear channel (Default) (Slaves: 07)
Channel 08: Clear channel (Default) (Slaves: 08)
Channel 09: Clear channel (Default) (Slaves: 09)
Channel 10: Clear channel (Default) (Slaves: 10)
Channel 11: Clear channel (Default) (Slaves: 11)
Channel 12: Clear channel (Default) (Slaves: 12)
Channel 13: Clear channel (Default) (Slaves: 13)
Channel 14: Clear channel (Default) (Slaves: 14)
Channel 15: Clear channel (Default) (Slaves: 15)
Channel 16: D-channel (Default) (Slaves: 16)
Channel 17: Clear channel (Default) (Slaves: 17)
Channel 18: Clear channel (Default) (Slaves: 18)
Channel 19: Clear channel (Default) (Slaves: 19)
Channel 20: Clear channel (Default) (Slaves: 20)
Channel 21: Clear channel (Default) (Slaves: 21)
Channel 22: Clear channel (Default) (Slaves: 22)
Channel 23: Clear channel (Default) (Slaves: 23)
Channel 24: Clear channel (Default) (Slaves: 24)
Channel 25: Clear channel (Default) (Slaves: 25)
Channel 26: Clear channel (Default) (Slaves: 26)
Channel 27: Clear channel (Default) (Slaves: 27)
Channel 28: Clear channel (Default) (Slaves: 28)
Channel 29: Clear channel (Default) (Slaves: 29)
Channel 30: Clear channel (Default) (Slaves: 30)
Channel 31: Clear channel (Default) (Slaves: 31)

31 channels configured.
Ahora deberemos editar nuestro /etc/asterisk/zapata.conf para nuestros dos canales FXS y dos canales 
FXO:

;zapata.conf
[channels]
;----------------------------
;Configuracion E1 TE120P
;----------------------------
language=cl
switchtype=euroisdn
pridialplan=local
prilocaldialplan=unknown
priindication=outofband
signalling=pri_cpe
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=no
rxgain=0.0
txgain=0.0
inmediate=no
context=from-pstn

group = 1
channel => 1-15
channel => 17-31

Finalizada la edición y configuración del archivo 'zapata.conf' es necesario recargar la configuración 
al sistema, para esto debemos detener el servicio asterisk y luego volver a iniciarlo:
­ service asterisk stop
­ service asterisk start.

OBS. El proceso de reinicio del servicio debe de ser obligatoria mente como se plantea arriva, esto 
quiere decir primero detenerlo y luego iniciarlo.

Como ultimo paso, para hacer uso de estos canales, necesitamos crear las rutas de discado desde la 
PSTN hacia el servidor, desde el servidor hacia la PSTN y entre anexos analógicos (FXS). Estas rutas 
se crean en los archivos de configuración 'extensions.conf' de ambos servidores, por ejemplo: 

Llamadas desde la PSTN hacia el servidor:

;extensions.conf

; Para el caso de numeración 4834000 hasta 4834099 de GTD.


[from-pstn]
exten => _40XX,1,Dial(SIP/${EXTEN},20)
exten => _40XX,2,Hangup
OBS. Esta configuración va depender absolutamente de la compañía telefónica con la que tengamos 
contratados los servicios de telefonía.

Llamadas desde el servidor hacia la PSTN:

;extensions.conf

[anexos]
exten => _XXXXXXX,1,Dial(Zap/g1/${EXTEN},20)
exten => _XXXXXXX,2,Hangup

exten => _XXXXXXX,1,Dial(Zap/g1/${EXTEN},20)


exten => _XXXXXXX,2,Hangup

Respecto al orden de los dispositivos Zap.

Los dispositivos aparecerán como canales para zaptel en el orden en que hayan sido cargados. Por 
ejemplo si tiene un puerto FXO y un puerto FXS en el sistema uno puede cargar el driver FXO 
seguido del driver FXS y el dispositivo FXO sera el canal 1 mientras el FXS sera el canal 2.

Los dispositivos E1/T1 deben cargarse primero que los FXO o FXS, así si el sistema contiene un E1 y 
además un puerto FXO, entonces los canales 1 al 31 perteneserán al E1 y el puerto FXO sera el canal 
32.
CAPITULO 7

Plan de Marcación: Conceptos Generales

El plan de marcación es el encargado de enrutar cada llamada en el sistema desde su origen a un 
destino predeterminado. La configuración del plan de marcación de los sistemas Asterisk se realiza en 
el archivo 'extensions.conf'.

El plan de marcación es la pieza central de cualquier sistema de telefonía, ya que este define la 
manera que se maneja el flujo ya sea entrante o saliente de llamadas. El plan de marcación esta 
compuesto por una lista instrucciones o pasos que el sistema debe de seguir.

Para  definir   un   plan  de   marcación  en   un   sistema  Asterisk  es   absolutamente  importante  que   se 
comprenda el funcionamiento del mismo.

Componentes de un Plan de Marcación

Gran  porcentaje del plan de marcación se define en el archivo 'extensions.conf', este archivo se 
compone de cuatro entidades principales: contextos, extensiones, prioridades y aplicaciones. 

A continuación se describirá cada uno de estos componentes y como funcionan juntos para crear un 
plan de marcación funcional. En la mayoría de sistemas este archivo esta ubicado en el directorio 
'/etc/asterisk'.

Contextos

Los   contextos   definen  la   organización  y   alcance  de   la   información  o   parámetros  del   plan   de 
marcacion definidos en cada uno de ellos. En la practica los contextos pueden ser utilizados para 
hacer que un sistema Asterisk conteste de manera diferente cada linea telefónica. 

Los contextos se definen por su nombre entre corchetes, por ejemplo para crear un contexto llamado 
'anexos' para manejar las llamadas entre anexos lo definiríamos así:

[anexos]

Todas  las   instrucciones  colocadas  después de la  definición  del  contexto  se  consideran  parte  del 
contexto hasta que se defina uno nuevo. Existe la posibilidad de inclusiones de contextos dentro de 
otros contextos, para esto haríamos uso de la instrucción:

include => 'contexto'
Extensiones

En el interior de cada contexto se definen una o mas extensiones, estas determinan el flujo la llamada.

Cada una de las extensiones se define por la palabra 'exten' segida de un signo '=>' esto formado por 
un signo igual y un signo mayor que, como se muestra:

exten => 

Seguido a este signo se define el numero o nombre de la extensión, la prioridad y la aplicación a 
ejecutar todos separados por comas:

[nombre­del­contexto]
exten => extensión,prioridad,aplicación

Una  extensión es identificada por un carácter alfa­numérico y puede contener números, letras  y 
caracteres especiales tales como * y #, ej la extensión 2050 seria de la siguiente forma:

exten => 2050,1,Goto(default,s,1)

Algunos nombres de extensiones están reservadas y se muestran a continuación:

s
start;  una   llamada  que   no   tiene  algún   digito   asociado  con  ella,  por  ejemplo   una  línea   análoga 
loopstart, comienza con .s.

t
Timeout; cuando una llamador en un menú de voz no ingresa el numero correcto de dígitos, la 
extensión executa el timeout

T
absolute timeout; cuando una llamada excede el valor llevado a cabo en una variable absoluta de 
timeout

i
invalid; se ejecuta cuando un llamador ingresa una extensión invalida

h
Hangup; se ejecuta al final de una llamada cuando el llamador cuelga, las aplicaciones ejecutadas en 
esta   extensión   no   pueden  tener   acceso  al   canal  cerrado,  es   muy   util   para   registrar  o   ejecutar 
comandos. 
Patterns

Un prefijo de extensión precedido por el caracter underscore indica un patrón de concordancia, por 
ejemplo 
_NXXXXX 
los siguientes son los patrones utilizados para definir una extensión 

N cualquier digito desde 2 a 9
X cualquier digito desde 0 a 9
Z cualquier digito desde 1 a 9
[126­8] cualquier digito entre corchetes , en este caso 1,2,6,7 y 8
. cualquier carácter 1 o mas

Prioridades

Las prioridades son pasos numerados para definir el orden de ejecución de cada extensión. Cada 
prioridad puede llamar a una aplicación especifica. Las prioridades empiezan en con un 1 y se van 
incrementando de uno en uno, o también esta la opción de ir colocando 'n' en ves de los números 
incrementales.

Aplicaciones

Las aplicasiones son losprogramas que realizan ciertas acciones tales sobre un canal de voz, estas 
acciones  pueden   ser,   reproduccion  de   sonidos   (archivos  de   audio),  aceptar  tonos   de   marcado, 
contestar una llamada o cortar una llamada.

Variables Globales

Dentro del archivo 'extensions.conf' existe una sección denominada [globals] dentro de esta sección 
se pueden definir variables globales para su posterior uso en el plan de marcación:

;extensions.conf

[globals]
CONSOLE=Console/dsp
IAXTRUNK=IAX2/servidor_B@servidor_A
E1GTD=Zap/g1
E1PBX=Zap/g2

[anexos]
exten => _XXXXXXX,1,Dial(${E1GTD}/${EXTEN},20)
exten => _XXXXXXX,2,Hangup

exten => _5000,1,Dial(${IAXTRUNK}/${EXTEN},20)


exten => _5000,2,Hangup
Para hacer uso de estas variables estas deben ir entre los signos ${VARIABLE} obligariamente, tal 
cual como lo observamos en el ejemplo .

Creando un DialPlan

En  este  ejemplo  tenemos  2 extensiones,  y prestemos  atención a la forma en que se  definen  las 


prioridades de la llamada

;extensions.conf

[enviar]
exten => 5555,1,Goto(entrantes,s,1)

[entrantes]
exten => s,1,Answer
exten => s,2,Playback(...)
exten => s,3,Hangup

[anexos]
exten => _40XX,1,Dial(SIP/${EXTEN},20)
exten => _40XX,2,Hangup

Tenemos  el   contexto   [enviar]  en   el   cual  tenemos  la   extensión   5555,  si   nosotros  ingresamos  la 
extension   5555   desde   nuestro   teléfono   IP   o   softphone  como   prioridad  numero   1   ejecutara  la 
aplicación Goto y saltara al contexto entrantes a la extensión 's' prioridad 1, luego se ejecuta la 
aplicación Answer, una vez ejecutada esta aplicación automáticamente pasara a la siguiente prioridad 
2   y  ejecutara  la aplicación Playback  luego una  vez ejecutada esta aplicación pasara  a la  ultima 
prioridad la 3 y ejecutara la aplicación Hangup, osea cortara la llamada.

La variable ${EXTEN} toma el valor que nosotros ingresamos en la extensión, por ejemplo:
­ Si discamos 4000 para comunicarnos con el anexo 4000 entonces la llamada caerá en la   
  extensión “exten => _40XX,1,Dial(SIP/${EXTEN},20)” y la variable ${EXTEN} tomara de 
  forma automática el valor 4000 que el numero se disco originalmente.

De esta forma nos logramos dar cuenta de la forma en como se ejecutan las extensiones siguiendo un 
determinado conjunto de prioridades y ejecutando determinadas aplicaciones.

OBS.  El anexo SIP desde el cual se realiza esta prueba de de alguna forma tener acceso al contexto 
[enviar].
CAPITULO 8

Plan de Marcación: Construyendo

En  este  capitulo haremos uso de todos los  conceptos aprendidos en el capitulo anterior, ya que 


construiremos un plan de marcación practico y funcional.

Caso de Uso Practico

En una empresa existen 6 tipos de llamadas:

1.­ Llamadas entre anexos SIP (anexos tipo citofono).
2.­ Llamadas locales.
       3.­ Llamadas larga distancia nacional. (LDI)
4.­ Llamadas larga distancia internacional. (LDN)
5.­ Llamadas a celulares
       6.­ Llamadas a numeros 600 y 800.

Ademas existen 5 tipos de restricciones:

1.­ Llamadas a cualquier lugar.
2.­ Llamadas a cualquier lugar menos LDI
3.­ Llamadas ­numeros locales­ , ­numeros celulares­ , entre anexos SIP­ y ­600 y 800­ .
4.­ Llamadas ­numeros locales­ , ­entre anexos SIP­ , ­600 y 800­ .
5.­ Llamadas entre anexos SIP.

Crear 5 anexos, por ejemplo el 4080, 4081, 4082, 4083 y 4084.

Asignarle al primer anexo la restricción numero uno.
Asignarle al segundo anexo la restricción numero dos.
Asignarle al tercer anexo la restricción numero tres.
Asignarle al cuarto anexo la restricción numero cuatro.
Asignarle al quinto anexo la restricción numero cinco.
Solución:

Primero.
En el archivo “extensions.conf” crear 6 contextos independientes uno para cada una de los tipos de 
llamadas:
­ anexos
­ locales
­ LDI
­ LDN
­ celulares
­ 600­800

;extensions.conf

[anexos]
exten => _40XX,1,Dial(SIP/${EXTEN},30)
exten => _40XX,2,Hangup

[locales]
   exten => _XXXXXXX,1,Dial(Zap/g1/${EXTEN},20)
exten => _XXXXXXX,2,Hangup

[LDN]
exten => _1XXNXXXXXXX,1,Dial(Zap/g1/${EXTEN},20)
exten => _1XXNXXXXXXX,n,Congestion

exten => _1XXNXXXXXXXX,1,Dial(Zap/g1/${EXTEN},20)


exten => _1XXNXXXXXXXX,n,Congestion

[LDI]
exten => _1XX0.,1,Dial(Zap/g1/${EXTEN},20)
exten => _1XX0.,n,Congestion

[celulares]
exten => _09XXXXXXXX,1,Dial(Zap/g1/${EXTEN},20)
exten => _09XXXXXXXX,n,Congestion

[800_600]
exten => _600NXXXXXX,1,Dial(Zap/g1/${EXTEN},20)
exten => _600NXXXXXX,n,Congestion()

exten => _800NXXXXX,1,Dial(Zap/g1/${EXTEN},20)


exten => _800NXXXXX,n,Congestion()
Segundo.
Agrupar de acuerdo a nuestras restricciones, para esto creamos otros contextos:

;extensions.conf

[R1]
include => anexos
include => locales
include => LDN
include => LDI
include => celulares
include => 800_600

[R2]
include => anexos
include => locales
include => LDN
include => celulares
include => 800_600

[R3]
include => anexos
include => locales
include => celulares
include => 800_600

[R4]
include => anexos
include => locales
include => 800_600

[R5]
include => anexos
Tercero.
Asignamos los contextos restricciones a nuestros anexos SIP, creados en el archivo “sip.conf”.

      [4080]
      disallow=all
      allow=gsm
      allow=ilbc
      allow=ulaw
      type=friend
      host=dynamic
      username=4180
      secret=4180
      dtmfmode=rfc2833
      context=R1
      callerid="Anexo 4180" <4180>
      qualify=1000

      [4081]
      disallow=all
      allow=gsm
      allow=ilbc
      allow=ulaw
      type=friend
      host=dynamic
      username=4181
      secret=4181
      dtmfmode=rfc2833
      context=R2
      callerid="Anexo 4181" <4181>
      qualify=1000

      [4082]
      disallow=all
      allow=gsm
      allow=ilbc
      allow=ulaw
      type=friend
      host=dynamic
      username=4182
      secret=4182
      dtmfmode=rfc2833
      context=R3
      callerid="Anexo 4182" <4182>
      qualify=1000
      [4083]
      disallow=all
allow=gsm
allow=ilbc
allow=ulaw
type=friend
host=dynamic
username=4183
secret=4183
dtmfmode=rfc2833
context=R4
callerid="Anexo 4183" <4183>
qualify=1000

      [4184]
      disallow=all
allow=gsm
allow=ilbc
allow=ulaw
type=friend
host=dynamic
username=4183
secret=4183
dtmfmode=rfc2833
context=R5
callerid="Anexo 4183" <4183>
qualify=1000
CAPITULO 9

Voicemail

Los  voicemail se configuran atraves del archivo de configuración 'voicemail.conf' ubicado en  el 


directorio '/etc/asterisk/', en este archivo se configura el funcionamiento del buzón de voz que posee 
cada extensión. Cuando se defina el contexto, este deberá ser el mismo que hemos definido en el 
parámetro mailbox en el archivo 'sip.conf'. El funcionamiento del voicemail consiste en que si una 
llamada hacia un anexo no fuese contestada entonces como prioridad siguiente saltara al al buzón de 
voz, donde escucharemos una grabación indicando que nos encontramos en el buzón y cuando suene 
la señal podríamos dejar un mensaje de voz, el cual sera enviado a una dirección de correo electrónico 
que hayamos definido.

OBS. En nuestro servidor asterisk debe existir un MTA(Mail Tranfer Agent Servicio de correo) que 
sea capas de enviar correos electrónicos a otra dirección de correo electrónico.

A continuación los parámetros de configuración para este servicio:
;voicemail.conf

[general]
format=wav49|gsm|wav ; Formatos para grabar mensajes.
serveremail=root@localhost.localdomain ; Usuario y servidor
que van a mandar los correos con los mensajes.
language=es ; Lenguaje.
attach=yes ; Permitir que nos envié los mensajes
de audio adjuntos.
maxmessage=180 ; Tamaño máximo de mensaje de vos en
segundos.
Minmessage=3 ; Tamaño minimo de mensaje de vos en
segundos.
skipms=3000
maxsilence=3 ; Cuántos segundos del silencio antes
de que terminemos la grabación
silencethreshold=128
maxlogins=3 ; Numero máximo de intentos de logeo
para recuperar mensajes a través
del teléfono
fromstring="Central Telefonica Asterisk Linux Center"
emailsubject=[PBX] Recibido mensaje numero ${VM_MSGNUM} en su
buzon de voz ${VM_MAILBOX} .
emailbody=\n\n\n***** Este es un mensaje automatico de la
central de VoIp de *****\n* **** Linux
Center *****\n\n\n\n\t
Tiene un mensaje nuevo en su buzon de voz,
con el numero ${VM_MSGNUM}, recibido desde
el numero de telefono ${VM_CALLERID} el
${VM_DATE} . Dicho mensaje se adjunta a
este email, pero no obstante Vd. debe de
llamar a su buzon de voz y eliminarlo tras
su escucha. Si no conoce como acceder a su
buzon de voz, por favor contacte con el
departamento a cargo.\n\n\t Gracias.\n\n\t
Central telefonica Asterisk.\n
;voicemail.conf (continuación)

[default]
4140 => 4140, Usuario Nº1, usuario_N1@dominio.cl
4141 => 4141, Usuario Nº2 ,usuario_N2@dominio.cl
4142 => 4142, Usuario Nº3 ,usuario_N3@dominio.cl

Dentro del contexto [default] van definidas las casillas de voz con sus respectivas cuentas de correo, 
contraseña y nombre de usuario. La sintaxis de esta configuración es la siguiente:

Anexo => Contraseña, Nombre_del_Usuario, Email_al_que_enviara_mensaje

Una vez realizada esta configuración veremos la forma de como dejar mensajes en caso nuestro 
anexo no este disponible, esto se realiza en el archivo 'extensions.conf':

;extensions.conf

[anexos]
  exten => _40XX,1,Dial(SIP/${EXTEN},20)
exten => _40XX,2,Voicemail(${EXTEN})
exten => _40XX,3,Hangup

Con esto en caso de no contestar el anexo por 20 segundos ó en caso de estar ocupado nuestro anexo 
la llamada pasara automáticamente a la siguiente prioridad osea pasara al buzón de voz.

Para recargar esta configuración es necesario releer los archivos de configuración:
­ asterisk r
­ reload
CAPITULO 10

Meetme (Salas de Conferencias)

Configuracion  del   módulo   de   conferencia   MeetMe   de   asterisk   se   realiza   en   el   archivo   de 


configuración 'meetme.conf' y esta ubicado en el directorio '/etc/asterisk'.

El archivo de configuración para las salas de conferencias de MeetMe se definiria de la siguiente 
forma:

;meetme.conf

[rooms]
;
; Usage is conf => confno[,pin][,adminpin]
;

conf => 60000


conf => 60001,1234

La sintaxis del archivo es la siguiente:

Con el contexto [rooms] damos inicio a la definición de nuestras salas de conferencia. Luego para 
crear una sala de conferencia iniciamos con el comando 'conf =>', seguido del numero de la sala de 
conferencia  y  la contraseña para dicha sala, si queremos acceder a esta sala sin una contraseña 
entonces se deja solo el numero de la sala.

conf => numero_sala,contraseña_sala

Posteriormente una vez realizados estos cambios en el archivo 'meetme.conf', veremos la forma de 
acceder a estas salas esto se realiza en el archivo 'extensions.conf':

;extensions.conf

[anexos]
  exten => 60000,1,Meetme(60000)

Con esto en caso de marcar la extensión 60000 entonces como prioridad numero uno ejecutara la 
aplicación Meetme y accederemos a la sala de conferencia 6000.
CAPITULO 11

Evaluación

La evaluación se llevara a cabo en 2.5 hrs, es de carácter netamente practico y sera capaz de medir los 
conocimientos adquiridos por los alumnos al cabo del capitulo 10.
CAPITULO 12

IVR (Interactive Voice Response)

Respuesta Interactiva de Voz (IVR): (Interactive Voice Response) nos permite presentar un menú, a 
la persona que llama, a través del teclado del teléfono, por medio del cual podrá escoger la opción que 
encasille la respuesta o servicio buscado. Además puede sonar mensajes grabados para las llamadas 
en espera, para reforzar la imagen de marca o transmitir información adicional a la persona que llama.

En asterisk un IVR es presentado como un conjunto de contextos que se interrelacionan entre si 
dependiendo de las opciones que este nos de a elegir. El archivo de configuración para un IVR es el 
archivo 'extensions.conf'.

Para ejemplificar el uso de un IVR tomemos el siguiente caso:
Una empresa X que presta servicios de ventas y soporte desea desarrollar un IVR para atender las 
llamadas de sus clientes, además este IVR tiene que ser capaz de tomar decisiones respecto al horario 
ya que esta empresa trabajo en horarios de Lunes a Viernes de 09.00 a 18.30.

A continuación un ejemplo practico de IVR:

;extensions.conf

[anexos]
exten => 9999,1,Goto(menu,s,1)

[menu]
exten => s,1,Answer
exten => s,2,Wait,1
exten => s,3,Background(lc/mymessage-500)
exten => s,4,GotoifTime(9:00-18:30|mon-fri|*|*?menu,s,7)
exten => s,5,Background(lc/mymessage-509)
exten => s,6,Hangup()
exten => s,7,Background(lc/mymessage-501)
exten => s,n,Background(lc/mymessage-502)
exten => s,n,Background(lc/mymessage-503)
exten => s,n,WaitExten(5)
exten => s,n,Dial(SIP/4000,40)

exten => t,1,Hangup()


exten => i,1,Goto(menu,s,3)

exten => 1,1,Goto(menu-ventas,s,1)

exten => 2,1,Goto(menu-soporte,s,1)

exten => 0,1,SetCallerID("del menu de voz")


exten => 0,n,Dial(SIP/4000,40)
;extensions.conf

[menu-ventas]
exten => s,1,Answer
exten => s,n,Wait,1
exten => s,n,Background(lc/mymessage-504)
exten => s,n,WaitExten(3)
exten => s,n,Background(lc/mymessage-504)
exten => s,n,WaitExten(3)
exten => s,n,Goto(menu,s,3)

exten => 1,1,SetCallerID("Ventas Capacitacion")


exten => 1,n,Dial(SIP/4001,20)
exten => 1,n,Dial(SIP/4002,20)

exten => 2,1,SetCallerID("Ventas de Proyectos")


exten => 2,n,Dial(SIP/4003,20)
exten => 2,n,Dial(SIP/4003,20)
exten => 2,n,Dial(SIP/4005,20)
exten => 2,n,Dial(SIP/4006,20)
exten => 2,n,Dial(SIP/4007,20)

exten => 3,1,SetCallerID("Ventas de Productos")


exten => 3,n,Dial(SIP/4008,20,tr)
exten => 3,n,Dial(SIP/4009,20,tr)

exten => 4,1,SetCallerID("Soporte por Eventos")


exten => 4,n,Dial(SIP/4003,20)
exten => 4,n,Dial(SIP/4003,20)
exten => 4,n,Dial(SIP/4005,20)
exten => 4,n,Dial(SIP/4006,20)
exten => 4,n,Dial(SIP/4007,20)

exten => t,1,Goto(menu,s,1)


exten => i,1,Goto(menu,s,1)

[menu-soporte]
exten => s,1,Answer
exten => s,n,Wait,1
exten => s,n,Background(lc/mymessage-505)
exten => s,n,WaitExten(3)
exten => s,n,Background(lc/mymessage-505)
exten => s,n,WaitExten(3)
exten => s,n,Goto(menu,s,1)

exten => 1,1,SetCallerID("Soporte Contrato")


exten => 1,n,Dial(SIP/4010,20,tr)
exten => 1,n,Dial(SIP/4011,20,tr)

exten => 2,1,SetCallerID("Soporte Garantia")


exten => 2,n,Dial(SIP/4012,20,tr)
exten => 2,n,Dial(SIP/4013,20,tr)

exten => 3,1,SetCallerID("Otro tipo de soporte")


exten => 3,n,Dial(SIP/4014,20,tr)
exten => 3,n,Dial(SIP/4015,20,tr)

exten => t,1,Goto(menu,s,1)


exten => i,1,Goto(menu,s,1)

OBS. Los archivos de audio deberán ser grabados en el curso.
Definiciones de las funciones ejecutadas en el IVR

Answer:  Descuelga inmediatamente.

Wait:   Espera un tiempo expresado en segundos antes de continuar.
Parámetros:  Segundos... Segundos de Espera.

Background:  Reproduce una melodía o mensaje de audio mientras se espera la marcación de 
las teclas.
Parámetros:  Archivo... Especifica el archivo que contiene la Melodía o 
Mensaje.
WaitExten:   Espera los segundos expresados, que se marque una nueva extensión antes de 
continuar.
Parámetros:  Tiempo.... Segundos de Espera.

Hangup:   Cuelga inmediatamente.

GotoIfTime:   Desvía el flujo de la llamada a un contexto y extensión especificados, SOLO 
cuando se esté en dentro del rango fecha­hora especificado en los parámetros 
(Un símbolo * indica todo el rango posible en el parámetro).
Parámetros:  Rango Horario.... En formato de 24 Horas, y con una hora 
de comienzo y otra de final (Por ejemplo: 
08­14. Las 24 horas se indican con *).
Días Semana... Indica un numero de Dias hábiles en la  
semana (0 y 7 indican Domingo; * indica 
todos).
Días del Mes.... Indica que dias del mes se desean (* 
indica todos).
Meses.... Indica que meses se desean (* indica 
todos).
Regla de Salto True.. Número de la Regla a la que salta en caso 
de ser Verdadera la Expresión.

Regla de Salto False.. Número de la Regla a la que salta en caso 
de ser Falsa la Expresión.

Dial:  Realiza una llamada a la extensión o número determinado en el campo 
"Num.Llamada", esperando una cantidad de segundos para que se establezca la 
comunicación. En caso de que no se establezca la comunicación pasará a la 
siguiente regla, pero si la comunicación no se establece por estar ocupado el 
interlocutor, saltará a la regla n+101.
Parametros:  Canal Comunicación..Tipo de tecnología que se usa en la 
llamada: Zap, SIP, IAX, H323.
Extension/Número... A una extensión interna sólo indicar la  
Extensión.  Si   es   una   llamada  externa:  
Recurso/${EXTEN} (o Número al que se 
llama).

Segundos de espera... Segundos de espera a que se establezca la 
comunicación.

Goto:   Envía el flujo de la llamada a una determinada posición del dialplan, 
establecida por los parámetros de Contexto + Extensión + Prioridad. Entre los 
contextos hay que tener en cuenta que además de los creados por el usuario 
existen otros de creación automática: default controlado desde la pestaña 
"Control IVR"; voip­h323: controla las extensiones del sistema; outgoing que 
gestiona todas las extensiones de salida creadas dentro de la opción 
"Comunicación Exterior"; servicios contexto administrado desde la ventana  
homónima (Tener en cuenta las mayúsculas y minúsculas).
Parámetros: Contexto... .Contexto al que se desvía la llamada. Los 
contextos: default, servicios, outgoing, voip­
h323; son creados por el sistema, y pueden 
referenciarse.

Extension.... Especifica la extensión, dentro del Contexto, a la 
que se desvía (si no se especifica nada, irá a la 
extensión "s"­start.

Prioridad... Ultimo nivel de detalle al que se puede llegar, y 
expresa el índice de una regla dentro de las de la 
extensión.

SetCallerID:   Establece un nuevo valor para el CallerID de la llamada.
Parámetros:  CID... NuevoCID.
CAPITULO 13

Funciones especiales

Función de Autenticación para Llamadas

Esta función nos permite Authenticar a un usuario con una contraseña marcada en el instante en el 
que vamos a realizar una llamada, esta llamada puede ser de cualquier tipo, por ejemplo llamadas 
larga  distancias  o   llamadas  a   celulares,  dicha  contraseña  sera   pedida   al   usuario  para  seguir  el 
procedimiento de la llamada.

Authenticate: Pide al interlocutor que introduzca una clave válida para continuar.
Parametros: Password... Contraseña válida, que puede ser un archivo 
conteniendo contraseñas.

Ejemplo practico:
Necesitamos que algunos anexos se autentifiquen a través de una contraseña para poder realizar 
llamadas .
En el archivo extensions.conf creamos un contexto:
;extensions.conf

[Llamadas_autenticadas]
exten => _9999,1,Authenticate(/etc/asterisk/passwords/${CALLERID(num)})
exten => _9999,2,Disa,(no-password|Llamar)
exten => _9999,3,Hangup

[Llamar]
exten => _XXXXXXX,1,Dial(Zap/g1/${EXTEN},10)
exten => _XXXXXXX,2,Hangup

Un  anexo  que puede  ejecutar  lo  que  se encuentra dentro  del   contexto “Llamadas_autenticadas”, 


cuando va a marcar el “9999”, como primera prioridad va a ejecutar la función “Authenticate” y nos 
va   a   preguntar  por   una   contraseña  que   nosotros  definimos  en   un   archivo  dentro  del   directorio 
“/etc/asterisk/passwords/” y llamado de la misma forma que el anexo desde el cual estamos llamando.

OBS:  El directorio /etc/asterisk/passwords/ va a contener archivos nombrados de la misma forma 
que los anexos que necesitan autentificarse para poder realizar llamadas:

              /etc/asterisk/passwords/4000 ;Este archivo debe contener una password
              /etc/asterisk/passwords/4000 ;       “
              /etc/asterisk/passwords/4000 ;       “
              etc....
Dentro de cada archivo debemos de escribir la contraseña de autenticación del anexo correspondiente.

Si la password es correcta entonces pasara a la segunda prioridad, la cual nos dará tono de marcado y 
nos enviara automáticamente al contexto “Llamar” y una ves que escuchamos el tono de marcado 
ingresamos el numero externo hacia el cual nos queremos comunicar por ejemplo el “4834000” y se 
la llamada se realizará. Si la Password es incorrecta nos la volverá a preguntar.

Función para grabación de Llamadas

Esta aplicación nos permite grabar una conversación de telefónica realizada por un anexo X hacia 
archivos de audio.

La función monitor se define respecto a su sintaxis de la siguiente forma:

Monitor: Graba la comunicación en curso en un formato de Audio (wav, gsm) y la 
almacena en un archivo de audio la salida y en otro la entrada .. a menos que se 
seleccione la opción "m", en cuyo caso son mezclados los archivos en uno solo. 
Otra opción, "b" indica que no se quieren grabar los saltos de una extensión a 
otra, en caso de que se produzcan.
Parametros: Formato Audio.. Especifica si se deséa almacenar el Audio 
en formato wav, gsm.

Archivo... Nombre con el que se almacena (se 
pueden usar nombre de Variables).

Opciones... m­ mezcla sonidos de entrada y salida; b­
no graba mientras hay una transferencia a 
otro canal.

La aplicación monitor comienza a grabar un canal mientras este esta en comunicación. Los paquetes 
de voz de la entrada y de la salida del canal se van almacenando en un archivo de sonido.  Si no 
especificas una trayectoria como parámetro de la aplicación, el archivo será almacenado en el 
subdirectorio del “monitor” de la ruta especificada con el astspooldir en asterisk.conf (así que por 
defecto los archivos de audio serán almacenados en /var/spool/asterisk/monitor). 
;extensions.conf

[llamadas-grabadas]
exten => _40XX,1,Monitor(wav,archivo-grabacion,m)
exten => _40XX,2,Dial(SIP/${EXTEN},20)
exten => _40XX,3,Hangup
Función de llamadas con limites de tiempo

Esta función es la aplicación 'Dial' con un parámetro adicional que nos permitirá tener control de 
cuantos minutos podrá hablar determinado anexo.

Dial(type1/identifier1[&type2/identifier2[&type3/identifier3... ] ], timeout) 

Donde:  type1  ­> SIP, IAX2, Zap


identified  ­> 4000 or ${EXTEN}
timeout ­> Opción L( : : )

La opción 'L(x:y:z)' quiere decir que limitara la llamada a "x" milisegundos, notificándo cuando falten 
"y" milisegundos y repitiéndolo cada "z" milisegundos, en donde solo "x" es indispensable para su 
funcionamiento.

Ejemplo practico :
;extensions.conf

[llamadas-con-tiempo]
exten => _XXXXXXX,1,Dial(Zap/g1/${EXTEN},L(3600000:61000:30000))
exten => _XXXXXXX,2,Hangup

Para el caso del ejemplo significa que el comando Dial limitara la llamada a 3600000 ms (1 hora) y 
notificara que la llamada llega a ese tiempo cuando falte 61000 (1 minuto y 1 segundo) y esa alarma 
se repetirá cada 30000 ms (30 segundos).
CAPITULO 14

Asterisk AstDB

Asterisk incorpora una BD tipo Berkley DB v2, en ella el propio Asterisk almacena diversos valores 
como:
­ Registros SIP, IAX.
­ Información sobre colas.

Nosotros como desarrolladores y programadores de nuestro dialplan también podemos almacenar 
información en ella y consultarla desde el mismo dialplan.

AstDB posee una organización referente a familias, y dentro de una familia se pueden tener diversas 
keys, y para cada key un solo valor. A continuación un ejemplo de creación de una DB asterisk.
[root@asterisk ~]# asterisk -r
asterisk*CLI> database put MIFAMILIA mikey 1234
Updated database successfully
asterisk*CLI> database show MIFAMILIA
/MIFAMILIA/mikey : 1234
asterisk*CLI> database put MIFAMILIA mikey 4567
Updated database successfully
asterisk*CLI> database show MIFAMILIA
/MIFAMILIA/mikey : 4567

La forma de manipular  esta DB creada anteriormente eliminando el contenido y asignándole otro es 
la siguiente:
; extensions.conf

[AstDB]
exten => _XXXX,1,Set(valrespassadmin=${DB_DELETE(MIFAMILIA/mikey)})
exten => _XXXX,2,Set(DB(MIFAMILIA/mykey)=${EXTEN})
exten => _XXXX,3,Set(pass1=${DB(MIFAMILIA/mykey)})
exten => _XXXX,6,Hangup()

NOTA:
Los capítulos 15, 16 y 17 serán absoluta y completamente abordados en clase realizando de cada uno 
de estos un laboratorio donde se instalará, configurará y ara funcionar cada uno de los softwares 
seleccionados  para  sus  correspondientes  labores  (MySQL­AsteriskStats  ;   Flash  Operator  Panel  ; 
Trixbox ó AsteriskNow según conveniencia). 

Potrebbero piacerti anche