Professional Documents
Culture Documents
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.
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 AlcatelLucent, 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 – email.
Figura Nº1
Figura Nº2
Figura Nº3
Figura Nº4
Figura Nº5
Protocolos y Codecs usados Telefonía IP
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 (InterAsterisk eXchange protocol)
IAX (InterAsterisk 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
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 (XLite) 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.
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
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.
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
readlinedevel 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 ncursesdevelopment son
necesarios si usted quisiera construir nuevas herramientas (Como el astman). Las bibliotecas zlib y
zlibdevel 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 openssldev o libssldev
libnewt (para aplicaciones tal como zttool)
lib y zlibdevel
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
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.
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 asteriskaddons.
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.
Asteriskaddons: 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.
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 “asteriskversion.tar.gz” por ejemplo:
Asterisk > asterisk1.4.x.tar.gz
Zaptel > zaptel1.4.x.tar.gz
Libpri > libpri1.4.x.tar.gz
Asteriskaddons > asteriskaddons1.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/zaptel1.4.x.tar.gz
wget http://downloads.digium.com/pub/asterisk/releases/asterisk1.4.x.tar.gz
wget http://downloads.digium.com/pub/libpri/libpri1.4.x.tar.gz
wget http://downloads.digium.com/pub/asterisk/releases/asteriskaddons1.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 archivocomprimido.tar.gz
Esto creara un directorio con el nombre y versión del paquete descomprimido y dentro estará el
contenido del paquete.
La instalación de los paquetes de asterisk se debe realizar en el siguiente orden:
1ero. zaptel
2do. libpri
3ero. asterisk
4to. asteriskaddons
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
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
Para compilar e instalar AsteriskAdoons 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.
agibin/
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:
Para acceder al monitor del sistema o tambien conosido como 'CLI>' ejecutamos el siguiente
comando:
# asterisk -r
CAPITULO 4
Protocolo SIP
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.
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 RemotePartyID es de confianza. Por defecto "no"
; 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 (InterAsterisk 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 inband, 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 outofband 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 Realtime 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.
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
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
Archivo 'extensions.conf' servidor_B:
; extensions.conf servidor_B
[anexos]
exten => 4000,1,Dial(IAX2/servidor_A@servidor_B/4000)
exten => 4000,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
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'.
La tarjeta TDM400P es una tarjeta PCI 22 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:
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=12 indica que los dos primeros módulos son FXS y por ello deben llevar señalización
FXO, 12 es lo mismo que decir 1 y 2. La linea fxsks=34 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=18. 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.
Zaptel Configuration
======================
Channel map:
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
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
Llamadas desde el servidor hacia la PSTN:
;extensions.conf
[anexos]
exten => _XXXXXXX,1,Dial(Zap/g3/${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
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:
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.
Zaptel Configuration
======================
Channel map:
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
Llamadas desde el servidor hacia la PSTN:
;extensions.conf
[anexos]
exten => _XXXXXXX,1,Dial(Zap/g1/${EXTEN},20)
exten => _XXXXXXX,2,Hangup
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
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.
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:
[nombredelcontexto]
exten => extensión,prioridad,aplicación
Una extensión es identificada por un carácter alfanumé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
[1268] 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
Creando un DialPlan
;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
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
600800
;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
[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()
;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
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
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]
;
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
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)
[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)
[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)
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 fechahora 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:
0814. 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"; voiph323: 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
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
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.
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)
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 (MySQLAsteriskStats ; Flash Operator Panel ;
Trixbox ó AsteriskNow según conveniencia).