Vous êtes sur la page 1sur 476

Comunicaciones Unificadas

con Elastix
Volumen 1

Edgar Landvar
Copyright (c) 2008-2009 Edgar Landvar

Este documento est permitido de copiar, distribuir y/o modificar


bajo los trminos de la licencia GNU Free Documentation License,
Versin 1.3; sin Secciones Invariantes (Invariant Sections), Textos
de Cubierta Frontal (Front-Cover Texts), y sin Textos de Cubierta
Posterior (Back-Cover Texts).

El autor puede en cualquier momento decidir actualizar la licencia de


la presente obra a una versin ms reciente de la GNU Free
Documentation License.

Una copia de esta licencia se incluye en el Apndice A: GNU Free


Documentation License.

Segunda Edicin, versin Beta

2
A los que siempre creyeron y a otros gigantes que nos
mostraron el camino

3
4
Reconocimiento
La elaboracin de este libro involucr un enorme trabajo que fue facilitado gracias a la
generosa ayuda de algunas personas con las cuales me encuentro agradecido. Mis ms
sinceros agradecimientos a:

A la comunidad Elastix, por su valioso feedback del producto Elastix y de


seguro por el que vendr acerca de esta obra. Sin este componente este libro no
podra evolucionar
Edwin Boza, por su ayuda en el captulo de instalacin de Elastix sobre soft
RAID
Bruno Macas, por aportar con contenido para el apartado de Endpoint
Configurator
Jorge Gutierrez, por colaborar con contenido para la configuracin de telfono
IP Polycom
Rafael Bonifaz, por disipar mis dudas acerca de la FDL

Por qu comprar este libro?


Comprar una versin impresa de este libro es una manera de colaborar con el proyecto
Elastix. Sin embargo, si al lector no le gustan los libros impresos pero desea colaborar
con este proyecto de software libre, todava puede realizar una donacin a travs del
siguiente enlace:

http://www.elastix.org/index.php?option=com_content&task=view&id=128&Itemid=54

Qu significa versin Beta?


Significa que se trata de una edicin preliminar que pudiera estar sujeta a errores
menores y por lo tanto cualquier retroalimentacin de los lectores es bienvenida.

Feedback
Cualquier sugerencia o colaboracin ser bien recibida. Que el lector no dude en
escribir un email a elastixbook@palosanto.com

5
Indice
Indice ............................................................................................................................... 7
Introduccin .................................................................................................................. 13
1. Introduccin a la telefona ....................................................................................... 15
1.1 Breve historia de la telefona ................................................................................ 15
Los albores de la telefona ...................................................................................... 15
Los dolores de cabeza de las famosas patentes ...................................................... 16
El desarrollo de la tecnologa telefnica................................................................. 18
1.2 Principios y transmisin de la voz humana .......................................................... 18
Rango de frecuencias de la voz humana................................................................. 19
El micrfono ........................................................................................................... 19
Ancho de banda y capacidad de informacin......................................................... 21
1.3 Digitalizacin de la voz ........................................................................................ 21
Teorema de Nyquist................................................................................................ 22
1.4 Redes orientadas a circuitos ................................................................................. 22
1.5 Redes orientadas a paquetes ................................................................................. 23
1.6 Red Pblica Telefnica (PSTN)............................................................................ 24
1.7 Circuitos analgicos ............................................................................................. 24
Sealizacin analgica ........................................................................................... 25
DTMFs ................................................................................................................... 27
El telfono analgico .............................................................................................. 28
1.8 Circuitos digitales ................................................................................................. 30
La base DS-0 .......................................................................................................... 30
Circuitos T-carrier y E-carrier ................................................................................ 30
SONET y Circuitos Opticos ................................................................................... 30
1.9 Protocolos de Sealizacin Digital....................................................................... 30
Sealizacin Asociada al Canal (CAS) .................................................................. 31
Sealizacin de Canal Comn (CCS)..................................................................... 31
2. Introduccin a la VoIP............................................................................................. 33
2.1 VoIP: una sopa de protocolos............................................................................... 34
Clasificando los protocolos VoIP ........................................................................... 34
2.2 Protocolo IP .......................................................................................................... 36
El Internet ............................................................................................................... 36
Qu es el protocolo IP?........................................................................................... 37
Direccin IP............................................................................................................ 37
Paquete IP............................................................................................................... 37
Direccionamiento IP ............................................................................................... 38

7
2.3 Protocolos de transporte ....................................................................................... 39
Protocolo TCP ........................................................................................................ 40
Protocolo UDP........................................................................................................ 40
2.4 Codificacin de la voz .......................................................................................... 41
Codecs .................................................................................................................... 41
2.5 Sobrecarga de protocolos...................................................................................... 43
Comparativa de codecs........................................................................................... 44
3. Linux para Administradores de Elastix ................................................................. 47
3.1 Introduccin.......................................................................................................... 47
3.2 Lnea de comandos de Linux................................................................................ 48
3.3 Comandos bsicos ................................................................................................ 49
3.4 Sistema de archivos .............................................................................................. 51
Organizacin........................................................................................................... 51
Permisos ................................................................................................................. 52
3.5 RPMs y actualizaciones va Yum......................................................................... 56
Yum al rescate ........................................................................................................ 57
4. Asterisk Essentials .................................................................................................... 59
4.1 Qu es Asterisk? ................................................................................................... 59
4.2 Breve historia de Asterisk .................................................................................... 60
4.3 Funcionalidad provista por Asterisk..................................................................... 60
4.4 Funcionamiento de Asterisk ................................................................................. 66
Encendido y apagado.............................................................................................. 66
Directorios de Asterisk ........................................................................................... 67
Estructura modular ................................................................................................. 67
4.5 El proyecto Zaptel, ahora DAHDI........................................................................ 68
Breve historia del proyecto Zaptel.......................................................................... 69
4.6 Configuracin de Asterisk .................................................................................... 70
Archivos de configuracin ..................................................................................... 70
Comentarios en los archivos de configuracin....................................................... 70
4.7 Plan de marcado (dial plan) .................................................................................. 71
Contextos ................................................................................................................ 71
Instrucciones........................................................................................................... 72
Variables................................................................................................................. 74
Aplicaciones ms comunes..................................................................................... 76
4.8 Asterisk CLI ......................................................................................................... 77
Comandos del CLI.................................................................................................. 79
5. Instalando Elastix ..................................................................................................... 81
5.1 Instalando desde CD............................................................................................. 81
5.2 Instalando Elastix sobre un CentOS o Red Hat preinstalado ............................... 87

8
5.3 Instalando sobre un soft RAID ............................................................................. 87
6. Elastix Overview ....................................................................................................... 93
6.1 Breve historia del proyecto................................................................................... 94
6.2 Caractersticas de Elastix...................................................................................... 95
VoIP PBX ............................................................................................................... 95
Fax .......................................................................................................................... 96
General ................................................................................................................... 96
Email....................................................................................................................... 97
Colaboracin........................................................................................................... 97
Extras ...................................................................................................................... 97
Call Center.............................................................................................................. 97
Mensajera instantnea ........................................................................................... 97
6.3 Licenciamiento ..................................................................................................... 98
6.4 Sobrevuelo por la interfase de administracin Web de Elastix ............................ 98
System .................................................................................................................... 98
PBX ...................................................................................................................... 100
Fax ........................................................................................................................ 100
Email..................................................................................................................... 101
IM ......................................................................................................................... 101
Reports.................................................................................................................. 101
Extras .................................................................................................................... 102
Agenda.................................................................................................................. 102
6.5 Elastix.org: Sitio oficial del proyecto ................................................................. 103
Foros ..................................................................................................................... 103
7. Elastix: Configuracin Bsica ............................................................................... 105
7.1 Ingreso al Sistema............................................................................................... 105
7.2 Configuracin de red .......................................................................................... 105
7.3 Creando una extensin ....................................................................................... 106
Configuracin de telfono softphone.................................................................... 109
7.4 Configuraciones generales.................................................................................. 109
Opciones del comando Dial (Dial command options).......................................... 111
7.5 Configuracin de colas ....................................................................................... 111
7.6 IVR y sistema de grabacin................................................................................ 115
Grabacin de mensaje de bienvenida ................................................................... 116
Configurar un IVR de bienvenida ........................................................................ 117
7.7 Salas de conferencias.......................................................................................... 119
7.8 Parqueo de llamadas ........................................................................................... 121
7.9 Msica en espera ................................................................................................ 123
7.10 Flash Operator Panel (FOP) ............................................................................. 124

9
7.11 Funciones de transferencia de llamadas ........................................................... 125
Transferencia ciega............................................................................................... 125
Transferencia atendida.......................................................................................... 125
8. Configuracin de hardware................................................................................... 127
8.1 Tipos de tarjetera y fabricantes.......................................................................... 127
8.2 Instalando fsicamente la tarjetera ..................................................................... 128
Hardware modular ................................................................................................ 129
8.3 Deteccin de hardware ....................................................................................... 129
8.4 Configuracin de interfaces digitales a bajo nivel.............................................. 130
Configuracin de los drivers de Zaptel ................................................................ 131
8.5 Configuracin de troncales................................................................................. 132
zapata.conf............................................................................................................ 133
8.6 Algunos cambios que se darn con el cambio de Zaptel a DAHDI ................... 136
Algunos cambios de nombre a tener en cuenta .................................................... 137
9. Configuracin de telfono IP ................................................................................. 139
9.1 Configuracin de softphone................................................................................ 140
9.2 Configuracin de telfono fsico ........................................................................ 143
Configuracin de red ............................................................................................ 144
Registro del dispositivo con el servidor Elastix ................................................... 146
9.3 Utilizando el endpoint configurator ................................................................... 150
Configuracin de un telfono ATCOM, modelo AT-530 .................................... 152
Configuracin de un telfono Polycom SoundPoint IP 501................................. 154
Actualizacin por TFTP ....................................................................................... 156
Personalizando los archivos de configuracin ..................................................... 156
10. Elastix: Configuracin avanzada ........................................................................ 159
10.1 Ruteo de llamadas............................................................................................. 159
Rutas Entrantes ..................................................................................................... 159
Rutas Salientes...................................................................................................... 162
10.2 Troncales .......................................................................................................... 163
Troncales de tipo IAX y SIP................................................................................. 165
Troncales de tipo ZAP.......................................................................................... 166
Troncales personalizadas...................................................................................... 166
10.3 Tarifacin ......................................................................................................... 166
Visualizar, Editar y Eliminar ................................................................................ 167
Crear Tarifa .......................................................................................................... 167
Reporte de Facturacin......................................................................................... 168
Distribucin de Destinos ...................................................................................... 169
Configurar Facturacin......................................................................................... 171
10.4 Reportes ............................................................................................................ 172

10
Reporte CDR ........................................................................................................ 172
Uso de Canales ..................................................................................................... 173
10.5 Configuracin DISA......................................................................................... 174
10.6 Condiciones de tiempo ..................................................................................... 175
11. Funcionamiento interno de freePBX .................................................................. 179
11.1 Fundamentos de freePBX................................................................................. 179
11.2 Organizacin de archivos ................................................................................. 180
11.3 Configuracin ............................................................................................... 181
amportal.conf........................................................................................................ 181
11.4 retrieve_conf: generador del plan de marcado ................................................. 182
11.5 dialparties.agi.................................................................................................... 182
11.6 Estructura de un mdulo de freePBX ............................................................... 183
12. Interconexin con Elastix remotos...................................................................... 185
12.1 A travs de troncales SIP.................................................................................. 185
Definiendo la troncal ............................................................................................ 186
Definiendo la ruta saliente.................................................................................... 187
12.2 Conexin con proveedores de llamadas va IP................................................. 187
Definiendo la troncal ............................................................................................ 188
Definiendo la ruta saliente.................................................................................... 188
13. Calidad de voz....................................................................................................... 191
13.1 Sntomas que afectan la calidad de voz ............................................................ 191
Eco ........................................................................................................................ 191
Bajo nivel o volumen............................................................................................ 193
Retardo ................................................................................................................. 193
Distorsin de la voz .............................................................................................. 193
Comunicacin entrecortada .................................................................................. 194
13.2 Parmetros relacionados con la calidad de voz en redes de paquetes .............. 194
Retardo de red....................................................................................................... 194
Prdidas de paquetes............................................................................................. 195
Jitter ...................................................................................................................... 195
13.3 Cmo medir la calidad de voz .......................................................................... 197
Escala MOS .......................................................................................................... 198
Modelo E .............................................................................................................. 198
13.4 Canceladores de eco ......................................................................................... 202
Cmo funciona un cancelador de eco? ................................................................. 202
El estndar G.168 ................................................................................................. 203
14. Protocolos VoIP al descubierto ........................................................................... 205
14.1 Protocolo SIP.................................................................................................... 205
Detalles del protocolo........................................................................................... 206

11
Sealizacin SIP: Mtodos y respuestas .............................................................. 206
SIP y Asterisk ....................................................................................................... 207
14.2 Protocolo IAX .................................................................................................. 207
Fases de una llamada IAX .................................................................................... 208
Frames IAX .......................................................................................................... 209
14.2 Protocolo RTP .................................................................................................. 210
Estructura de un paquete RTP .............................................................................. 211
15. Diagnstico bsico de problemas ........................................................................ 213
15.1 Interpretando el log........................................................................................... 213
El archivo /var/log/asterisk/full ............................................................................ 215
Qu informacin nos puede indicar el campo TEXTO? ...................................... 216
Nmero de proceso............................................................................................... 217
15.2 Diagnstico a travs del CLI ............................................................................ 217
15.3 Sniffing.............................................................................................................. 217
Captura de llamadas.............................................................................................. 218
16. Control externo de Asterisk................................................................................. 219
16.1 Asterisk AGI..................................................................................................... 219
Ejecucin de scripts AGI...................................................................................... 220
Parmetros enviados al script AGI....................................................................... 220
Comandos AGI ..................................................................................................... 221
Libreras AGI........................................................................................................ 223
Ejemplo sencillo de script AGI ............................................................................ 223
16.2 Asterisk AMI .................................................................................................... 224
Probando desde telnet........................................................................................... 225
Tipo de paquetes AMI .......................................................................................... 226
Comandos o acciones AMI .................................................................................. 227
Apndice A. GNU Free Documentation License ..................................................... 229
Apndice B. Archivos de configuracin de Asterisk distribuidos con Elastix ...... 239
Apndice C. Lista de comandos de CLI ................................................................... 249

12
Introduccin
Ya existan otros libros o manuales de Elastix cuando me vi en la misin de Escribir la
presente obra. Haba ledo ya Elastix Without Tears, un gran trabajo de Ben Shariff y
me pareca que ya estaban cubiertos los temas ms importantes cuando nos reunimos en
mi oficina con otros colaboradores a planificar lo que sera nuestro nuevo producto de
entrenamiento para la certificacin de Elastix.

Casi de inmediato nos dimos cuenta que pese a que las obras existentes cubran muchos
tpicos importantes no funcionaran del todo como material de estudio para un curso de
certificacin. La obra que necesitbamos tena que cubrir aspectos internos del
funcionamiento de Elastix y sus componentes, as como tambin cubrir posibles vacos
de los alumnos en tpicos diversos como Asterisk y protocolos de comunicacin como
SIP y RTP. No exista nada parecido en ese momento, una alternativa era usar diferentes
obras para cubrir la totalidad del entrenamiento pero eso sera un poco engorroso y se
vera algo desorganizado.

Salimos de la reunin con el sinsabor de no tener material de estudio.

Semanas despus me di a la tarea de escribir un pnsum para nuestros cursos


olvidndome un poco del tema del libro faltante. El pnsum fue del agrado de todos as
que decid bosquejar brevemente lo que debera contener cada tpico y ese fue el inicio
del libro que tienen en sus manos (o en su pantalla)... Sin darme cuenta lo haba
comenzado a escribir. Una noche en mi casa vi que ya tena cierta forma as que decid
comentarlo al siguiente da en la oficina y todos aprobaron la idea. Decidimos hacer dos
tomos o volmenes, el primero cubrira los tpicos requeridos para nuestro primer curso
y un segundo cubrira los tpicos de nuestro segundo y final curso.

Ya iba por la mitad del primer volumen cuando surgi la pregunta acerca del
licenciamiento de la obra. Elastix es software libre y yo no haba pensado an en el
licenciamiento del libro. Algunos pensaban en que no debera ser libre debido a que era
material de entrenamiento que de alguna manera nos otorgaba ventaja competitiva en el
mercado. En este punto debo de agradecer la ayuda de algunos integrantes del equipo de
PaloSanto Solutions por sus acertados argumentos en pro de FDL (Free Documentation
License).

Finalmente la presente obra se termino con la escritura de esta introduccin el 29 de


Octubre de 2008. Espero que sea de la utilidad y agrado de todos vosotros.

-- Edgar Landivar
Elastix Project Leader

13
Introduccin a la telefona
No importa si yo muero, otros terminarn mi trabajo
-- Mark Twain

1.1 Breve historia de la telefona


Sin duda la invencin de lo que hoy conocemos como telefona debi ser un acto
asombroso en su tiempo, casi mgico. El or la voz de alguien remoto en tiempo real
saliendo de una misteriosa caja en una poca en la que esto era solo posible en la ciencia
ficcin debi haber sido una experiencia nica y casi fantstica.

De seguro que la idea de un aparato parlante ya rondaba por la cabeza de muchos


inventores desde tiempos inmemoriales, pero fue a inicios del siglo 19 cuando pareca
algo alcanzable pues ya se haba descubierto la electricidad, inventado el telgrafo y
algunos ya experimentaban con ondas de radio.

Los albores de la telefona

A mediados del siglo 19 hubo un interesante movimiento en torno a lo que hoy


conocemos como telfono.

15
En 1849 Antonio Meucci, mdico italiano considerado por muchos como el inventor del
telfono, hizo una demostracin de un dispositivo capaz de transmitir voz en La
Habana. Pocos aos despus, en 1854, el mismo Meucci hace una nueva demostracin
de su invencin en la ciudad de Nueva York.

Mientras Meucci se las daba a las tareas de inventor, otros tambin perseguan la idea de
construir un telgrafo parlante y es as como en 1860 el alemn Johann Philipp Reis
construye un dispositivo capaz de transmitir voz basado en la idea original de Charles
Bourseul, quien a su vez describi la construccin de dicho dispositivo en 1854 pero
nunca lo construy. Reis continu mejorando su aparato y un ao ms tarde ya estaba
transmitiendo voz a ms de 100 metros de distancia.

Telfono de Reis

Un par de aos ms tarde Innocenzo Manzetti construye el esperado telgrafo parlante


que l mismo haba visionado ya en 1844, pero no se interesa en patentarlo.

Los dolores de cabeza de las famosas patentes

Hasta aqu ya existan algunos prototipos de telfono pero nadie lo haba patentado.

El primero en tratar de patentar el invento fue Meucci, quien en 1871 suscribi un


documento de aviso de patente pero por su condicin econmica nunca pudo pagar el
dinero para terminar este trmite y su aviso de patente expir pocos aos despus.

16
A Meucci no le fue muy bien que digamos pues no pudo vender su invento y alcanzar la
prosperidad.

En 1875, un ao despus de expirar el trmite de patente de Meucci, Alexander Graham


Bell, un escocs radicado en los Estados Unidos, logra patentar un aparato similar y es
el primero en hacerlo.

Bell haba estado experimentando previamente con algunas ideas para concebir su
dispositivo telefnico hasta que un da logr arrancarle a la electricidad algunos
sonidos. Cuenta la historia que la primera llamada que hizo fue para decirle a su
asistente las clebres frases Sr. Watson, venga, necesito verlo (Mr. Watson come
here I want to see you).

Un hecho curioso que desat mucha polmica es que otro inventor llamado Elisha Gray
tambin trat de patentar un invento similar tan solo unas pocas horas despus de Bell.
Los dos inventores entraron en una conocida disputa legal que finalmente Bell gan.

Gracias a la patente Bell pudo hacer de la idea del telfono un negocio rentable y tiene
el mrito de haber desarrollado la idea y convertirla en algo prctico para la sociedad.

Ilustracin de dos personas hablando por telfono a fines del siglo IXX

Se cuenta que en determinado momento Bell trat de vender su patente a Western Union
por $100 mil dlares pero el presidente de Western Union se neg pues consider que el
telfono era nada ms que un juguete. Tan solo dos aos ms tarde el mismo directivo
de Western Union le coment a sus colegas que si pudiera conseguir la patente de Bell
por $25 millones de dlares lo considerara una ganga.

17
Esto nos da una idea de cmo comenzaba a crecer el negocio de Bell. En 1886, ya
existan ms de 150,000 abonados telefnicos en los Estados Unidos.

A partir de aqu la telefona poco a poco se empez a convertir en un servicio bsico de


la sociedad actual.

El desarrollo de la tecnologa telefnica

Como sucede siempre con los avances tecnolgicos la telefona continu


evolucionando. Al principio, para que un abonado se comunicara con otro este tena que
solicitarle la llamada a una operadora, quien manualmente conectaba los cables para
conmutar un punto con otro. En 1891 se invent un telfono automtico que permita
marcar directamente.

En un principio Bell fue casi exclusivamente la nica compaa en explotar la


tecnologa debido a sus patentes. Sin embargo, cuando estas expiraron nacieron cientos
de pequeas compaas que empezaron a dar servicio, la mayora en sitios rurales donde
Bell an no llegaba. Poco a poco estas compaas empezaron a crecer y ya a inicios del
siglo 20 tenan en su conjunto ms abonados que la propia Bell. La sana competencia
hizo lo suyo y la tecnologa telefnica aceler su evolucin.

Ya para finales de la segunda guerra mundial el servicio telefnico llegaba a millones de


abonados.

En 1947, cientficos de Bell inventan el transistor y cambian el curso de la historia de la


humanidad. En 1948 ganan el Premio Nobel por su trabajo.

En los aos 60s se lanzan los primeros satlites de comunicaciones y las


comunicaciones entre continentes se facilitan. No est dems decir que esto no hubiera
sido posible sin la previa invencin del transistor.

1.2 Principios y transmisin de la voz


humana
La voz humana est compuesta por ondas acsticas que viajan a travs del aire a la
velocidad del sonido, esto es a 1,244 Km/h (o 340 m/s). Bastante rpido verdad? Incluso
ms rpido que un avin comercial. Pero esta rapidez no significa que me pueda
comunicar fcilmente con puntos distantes pues la voz humana se atena rpidamente,
perdiendo energa a medida que viaja. Luego de unos pocos metros ya no podemos
escuchar una conversacin.

18
La voz humana por tanto es de la misma naturaleza que el resto de ondas acsticas y
esto ya se conoca desde antes de la invencin del telfono.

Antes de la invencin del telfono tambin se conoca que existan otros tipos de ondas
llamadas ondas elctricas que podan ser transmitidas a travs de un conductor metlico
como un cable de cobre. Este segundo tipo de ondas es de una naturaleza diferente a las
ondas acsticas y viaja a la velocidad de la luz, es decir aproximadamente 300,000
km/s. Es decir, ms de lo que podamos imaginar; casi instantneamente desde un punto
de vista terrenal. Adicionalmente podemos controlar la atenuacin de estas ondas y
hacerlas viajar por grandes distancias.

Con estos hechos conocidos ya a mediados del siglo 19 es ms fcil comprender que
muchos persiguieran la idea de transformar las ondas acsticas en ondas elctricas para
as poder transmitirlas luego a grandes distancias a travs de conductores metlicos. La
cuestin es que haba que inventar un dispositivo para hacer dicha transformacin y all
estaba la clave del asunto. Este dispositivo, conocido como micrfono en nuestros das
es una parte importante de cualquier aparato telefnico.

Rango de frecuencias de la voz humana

Otra caracterstica importante de la voz humana es que las cuerdas vocales modulan la
voz en un amplio espectro de frecuencias que van de graves a agudos en un rango
aproximado de 20Hz a 20kHz. Todo un abanico de sonidos!

Esto nos hace suponer que un micrfono debe ser capaz de capturar y transmitir todo
este rango de frecuencias. Sin embargo, en la actualidad sabemos que para transmitir
voz "entendible" no es necesario transmitir todas las frecuencias sino un rango mucho
menor y transmitir un rango menor de frecuencias tiene sus ventajas pues facilita la
transmisin como veremos ms adelante. Por lo tanto los telfonos comerciales solo
transmiten un rango aproximado de 400Hz a 4kHz. Esto distorsiona un poquito la voz
pero de todas maneras se puede entender. Es por eso que cuando omos a alguien por
telfono su voz suena ligeramente diferente que en la vida real pero aun as podemos
entender la conversacin.

El micrfono

El micrfono fue un elemento clave en la invencin del telfono pues era el dispositivo
que realizaba la conversin de las ondas mecnicas a ondas elctricas.

Hay muchos tipos de micrfonos que operan sobre diferentes principios. Uno que se us
por mucho tiempo en telfonos era el de carbn que consista en una cpsula llena de
granitos de carbn entre dos placas metlicas. Una de las placas era una membrana que
vibraba con las ligeras presiones de las ondas de voz; de esta manera la resistencia

19
elctrica de la cpsula variaba con la voz y se generaba una seal elctrica
correspondiente.

Tpico micrfono de carbn extrado de telfono de disco

Diagrama esquemtico de micrfono electro-magntico

20
Otro tipo de micrfono muy comn en la actualidad es el dinmico o electro-magntico
que consiste en una bobina de hilo de cobre enrollada sobre un ncleo de material
ferromagntico. Este ncleo se encuentra sujetado a un diafragma que vibra con la
presin de las ondas de voz. De esta manera se induce una ligera corriente elctrica en
la bobina que es amplificada luego al interior del telfono.

En la figura anterior podemos observar algunos componentes del micrfono electro-


magntico reaccionando frente al estmulo de las ondas de voz.

1 Ondas de voz
2 Diafragma
3 Bobina
4 Ncleo ferromagntico
5 Corriente inducida

Ancho de banda y capacidad de informacin

Ancho de banda es un trmino algo difcil de entender al principio pues es un concepto


bastante amplio.

En general podemos decir que ancho de banda es una medida de la cantidad de


informacin que podemos transmitir por un medio por unidad de tiempo. Debido a que
es una medida por unidad de tiempo muchas veces se hace una analoga con la
velocidad. Pero hay que estar atento a confusiones.

Medidas comunes para expresar el ancho de banda son los bits por segundo. Esta
medida tambin equivale a bits/s, bps o baudios.

El ancho de banda es un trmino muy importante cuando se habla de telefona pues las
comunicaciones en tiempo real necesitan un ancho de banda mnimo asegurado para
entregar una comunicacin de calidad en destino.

1.3 Digitalizacin de la voz


Las redes digitales de transmisin de voz y datos son comunes en nuestra era. Fueron
creadas ya que presentan ciertas ventajas sobre las redes analgicas como por ejemplo
que conservan la seal casi inalterable a travs de su recorrido. Es decir que es ms
difcil que la comunicacin se vea afectada por factores externos como el ruido
elctrico. Adems nos provee de mtodos para verificar de cundo en cuando la
integridad de la seal, entre otras ventajas.

21
Dicho fcil, digitalizar una seal de voz no es otra cosa que tomar muestras (a intervalos
de tiempo regulares) de la amplitud de la seal analgica y transformar esta informacin
a binario. Este proceso de denomina muestreo.

Teorema de Nyquist

En 1928 Henry Nyquist, un ingeniero Suizo que trabajaba par AT&T, resolvi el dilema
de cunto es necesario muestrear una seal como mnimo para poder reconstruirla luego
de forma exacta a la original.

El teorema propuesto deca que como mnimo se necesita el doble de ancho de banda
como frecuencia de muestreo. Esto queda reflejado de mejor manera con la siguiente
expresin.

fm 2 BWs

Hagamos un breve clculo mental acerca de cual sera la frecuencia de muestreo para
poder convertir una seal de voz humana a digital y luego poder reconstruirla en
destino.

Ya habamos dicho que para que la voz humana sea entendible es suficiente transmitir
un rango de frecuencias de entre 400Hz a 4,000Hz. Por lo tanto, segn el teorema de
Nyquist como mnimo deberamos muestrear al doble de la frecuencia mayor, es decir a
8,000Hz.

Luego veremos que es precisamente esa frecuencia de muestreo de 8,000Hz la que se


usa en la mayora de codecs. Gracias Nyquist!

1.4 Redes orientadas a circuitos


Las redes orientadas a circuitos (circuit switched) son aquellas donde se establece un
circuito exclusivo o dedicado entre los nodos antes de que los usuarios se puedan
comunicar.

Una vez que se establece un circuito entre dos puntos que quieren comunicarse, el
resultado bsicamente es el equivalente a conectar fsicamente un par de cables de un
extremo a otro. Una vez establecido el circuito, ste ya no puede ser usado por otros.

En cada circuito el retardo es constante, lo cual es una ventaja. Sin embargo, este tipo de
redes es costoso debido al mismo hecho de que se necesita un circuito dedicado para
cada abonado.

22
Este tipo de redes es el tradicionalmente usado por compaas telefnicas alrededor del
mundo y es el mismo que us Bell en sus inicios; obviamente guardando las distancias
tecnolgicas correspondientes.

Es comn que ciertas personas confundan las redes de circuitos con las redes analgicas
pero es necesario aclarar que las redes de circuitos bien pueden transportar datos
digitalmente.

1.5 Redes orientadas a paquetes


Una red de paquetes es una red que por un mismo medio trafica simultneamente
diferentes flujos de informacin. Para hacer esto divide el trfico de cada flujo de
informacin en fragmentos o paquetes que enva intercaladamente. Luego, en el destino
los paquetes se reensamblan para reproducir el mensaje original.

Simulacin grfica de envo de paquetes en una red de paquetes

Un ejemplo de este tipo de redes son las redes IP como es el caso del Internet, donde
por una misma conexin pueden llegarnos distintos flujos de informacin. De esta
manera podemos estar haciendo video-conferencia al mismo tiempo que enviamos un
correo electrnico o navegamos por el Web. Inclusive por este tipo de redes pueden
circular simultneamente flujos de informacin para diferentes destinos o direcciones
IP.

23
A diferencia de las redes orientadas a circuitos, en este tipo de redes el ancho de banda
no es fijo ya que depende del trfico de la red en un momento dado. Adicionalmente
cada paquete de un mismo flujo de informacin no est obligado a seguir el mismo
camino por lo que los paquetes que originalmente fueron generados en secuencia
pueden llegar desordenados a su destino. Este tipo de factores son muy importantes a
tener en cuenta cuando se trafica voz sobre una red de paquetes ya que afectan la
calidad de la llamada.

Las redes de paquetes se han vuelto populares, principalmente porque optimizan


recursos debido al hecho de poder utilizar el mismo medio para enviar varios flujos de
informacin.

1.6 Red Pblica Telefnica (PSTN)


La Red Pblica Telefnica o PSTN (por sus siglas en ingls) es esencialmente una red
basada en circuitos. Esta red cubre tanto telefona fija como mvil y es la red que hace
posible que podamos comunicarnos con cualquier persona en nuestra ciudad o alrededor
del mundo.

Originalmente fue una red analgica pero actualmente es una red en su mayora digital;
por tanto existen dos tipos de circuitos: analgicos y digitales.

1.7 Circuitos analgicos


Los circuitos analgicos son comnmente pares de cobre que llegan a los abonados del
servicio telefnico y por donde se transmite la seal elctrica de la voz de manera
analgica. El mismo circuito lleva adicionalmente la sealizacin necesaria para
establecer, mantener y terminar una llamada. Estos circuitos analgicos se deben
conectar a un switch telefnico encargado de direccionar la comunicacin entre los
abonados.

Los circuitos analgicos estn en decadencia pues las compaas telefnicas


encontraron muchas ventajas en las comunicaciones digitales y es por esa razn que
pese a que en la actualidad an vemos circuitos analgicos esto se trata tan solo de la
ltima milla. En cierto punto de la red telefnica esta comunicacin es convertida a
digital y transmitida a un switch telefnico digital.

La circuitera analgica comnmente se asocia con el trmino de telefona tradicional.

Como en el pasado era ms comn que los telfonos pudieran estar ubicados en reas
rurales donde no llegaba la electricidad se decidi que la red telefnica proveyera cierto

24
voltaje de alimentacin. Es por eso que algunos modelos de telfonos analgicos no
necesitan conectarse a la alimentacin elctrica.

En todo caso la OC (Oficina Central) genera 48 Voltios de corriente directa para


alimentar a los telfonos de los abonados. Usando lxico estricto deberamos decir -48
Voltios debido a que este voltaje se mide con respecto a uno de los conductores. Sin
embargo para ser prcticos en este libro usaremos indistintamente 48V o -48V para
referirnos a lo mismo.

Sealizacin analgica

Para que las llamadas telefnicas funcionen correctamente es necesario contar con
indicaciones o seales elctricas que nos permitan intercambiar informacin entre el
abonado y la OC. En breve veremos en qu consisten las seales ms comunes.

Existen bsicamente 3 mtodos de sealizacin analgica que la industria ha


desarrollado a travs de los aos. Estos se llaman loop start, ground start y kewlstart.
Es importante cuando se configura una central telefnica que va conectada a una lnea
analgica que escojamos el mtodo de sealizacin adecuado pues caso contrario
podemos encontrarnos con problemas extraos como que la lnea se cuelga
inesperadamente o que no podemos colgar la lnea correctamente, entre otras cosas.

La diferencia entre loop start y ground start radica en la manera en la que el telfono
requiere tono de marcado a la OC (proceso tambin llamado seizure). Ground start
requiere tono de marcado aterrizando (de all el trmino ground) uno de los conductores
de la lnea telefnica mientras que loop start lo hace realizando un corto circuito entre
ambos conductores (es decir creando un lazo o loop).

Kewlstart es una evolucin de loop start que le aade un poco ms de inteligencia a la


deteccin de desconexiones (colgado de la llamada) pero bsicamente sigue siendo un
loop start.

Debido a que ground start no es muy comn en nuestros das, casi siempre nos veremos
usando loop start.

A continuacin explicaremos ms al detalle la sealizacin analgica para los eventos


ms comunes. Para hacerlo nos basaremos en el progreso de una llamada tpica usando
sealizacin loop start. El progreso de una llamada lo podemos dividir en seis
instancias: colgado (on-hook), descolgado, marcacin, conmutacin, ringado y
conversacin.

Colgado

25
Mientras el telfono est colgado la OC provee un voltaje DC de 48 Voltios. El telfono
mantiene un circuito abierto con la lnea telefnica; es decir que acta como si no
estuviera conectado y por lo tanto no fluye corriente por la lnea.

Este estado tambin es conocido como on-hook por su significado en ingls.

Descolgado

Cuando el usuario descuelga el auricular el telfono enva una seal a la OC. Esta seal
consiste en cerrar el circuito, es decir que internamente el telfono conecta entre s los
dos cables de la lnea telefnica a travs de una resistencia elctrica.

Apenas la OC se da cuenta de esto enva tono de marcado al telfono. Este tono de


marcado le indica al abonado que ya puede marcar el nmero.

En gran parte de Amrica el tono de marcado consiste en dos ondas senoidales enviadas
simultneamente. Estas ondas son de 350 Hz y 440 Hz. En Europa el tono de marcado
consiste en una sola onda de 425 Hz. Sin embargo hay pases en los que estos valores
podran ser diferentes.

Nota: Cuando era adolescente acostumbrbamos a afinar la guitarra


escuchando el tono de marcado del telfono pues resulta que 440 Hz es la
frecuencia de la nota musical LA que corresponde a la quinta cuerda de la
guitarra.

Marcacin

La marcacin puede ser por pulsos o por tonos. Los pulsos ya casi no se usan y fueron
populares en los tiempos de los telfonos de disco. Los tonos son pares de frecuencias
asociadas con los dgitos telefnicos. Estas frecuencias se transmiten hasta la OC quien
traduce estos tonos a nmeros.

Ms adelante se explicar ms de estos tonos bajo el ttulo DTMFs.

Conmutacin

Una vez recibido los dgitos la OC tratar de asociar este nmero marcado con el
circuito de un abonado. En caso de que el destinatario no fuere un abonado local,
enviar la llamada a otro switch telefnico para su terminacin.

26
Timbrado o Ringado

Una vez que la OC encuentra al abonado destino tratar de timbrarlo (ringing). La seal
de ring es una onda sinusoidal de 20 Hz y de 90 Voltios de amplitud.

Nota: Si hemos sido observadores nos habremos dado cuenta de que la seal de
ring tiene una amplitud considerable de 90 Voltios. Adems recordemos que la
lnea ya tiene un componente adicional de Voltaje DC de 48 Voltios. Es por esta
razn que si manipulamos los cables telefnicos desnudos en el preciso
momento en el que llega una seal de ring podemos recibir una pequea
descarga elctrica y pasar un buen susto.

Adicionalmente a la seal de ring que la OC enva al destinatario tambin enva una


notificacin a quien origin la llamada. Este tono audible recibe el nombre de ring-back
y consiste en dos ondas sinusoidales superpuestas de 440 Hz y 480 Hz. Estas ondas van
intercaladas con espacios de silencio.

En caso de que el destinatario se encuentre ya en una llamada activa entonces en lugar


del ring-back se devuelve un tono de ocupado a quien origin la llamada. Este tono de
ocupado consiste en dos ondas sinusoidales superpuestas de 480 Hz y 620 Hz
intercaladas con espacios de silencio de medio segundo.

Todos los lectores sin duda han escuchado un ring-back y un tono de ocupado alguna
vez en sus vidas.

Conversacin

Si el destinatario decide contestar la llamada el telfono cerrar el circuito telefnico (de


la misma manera que ocurri con el telfono que origin la llamada en la etapa de
descolgado). Esta seal le informar a la OC que el destinatario decidi contestar y
completar la conexin. La llamada telefnica est finalmente en curso.

DTMFs

Muchas veces es necesario enviar dgitos a travs de la lnea telefnica tanto para
marcar como en medio de una conversacin. Con esta finalidad se pensaron los DTMFs.
DTMF es un acrnimo de Dual-Tone Multi-Frequency. Es decir que cada DTMF es en
realidad dos tonos mezclados enviados simultneamente por la lnea telefnica. Esto se
hace as para disminuir los errores.

A continuacin una tabla ilustrando los pares de frecuencias para cada dgito.

27
1209 Hz 1336 Hz 1477 Hz 1633 Hz
697 Hz 1 2 3 A
770 Hz 4 5 6 B
852 Hz 7 8 9 C
941 Hz * 0 # D

Como se puede ver en la tabla tambin hay correspondencias para los signos * y # as
como tambin para los caracteres A, B, C y D.

El telfono analgico

Es importante hablar de este componente importante de la red telefnica pues


recordemos que su invencin fue lo que marc el desarrollo del negocio de la telefona.

Es importante tambin hablar del telfono analgico porque todava es el tipo de


telfono ms comn en el planeta y porque la comprensin de su funcionamiento nos
permitir entender en el futuro algunos conceptos clave como por ejemplo el eco.

En realidad el telfono, en su forma ms bsica, es un dispositivo sencillo compuesto de


pocos componentes.

Auricular
Micrfono
Switch para colgado/descolgado
Convertidor de dos a cuatro hilos (tambin llamado hbrido)
Marcador (dialer)
Campana o dispositivo de timbrado

28
Diagrama de componentes de un telfono

La mayora de los componentes se explican por si solos. Sin embargo algunos se


preguntarn de qu se trata el convertidor de 2 a 4 hilos?

Convertidor de 2 a 4 hilos

Un componente importante de un telfono es el convertidor de dos a cuatro hilos,


conocido tambin como dispositivo 2H/4H, bobina hbrida o simplemente hbrido. Este
dispositivo es necesario para separar la seal de audio de ida de la de venida ya que son
dos participantes en una conversacin y solo existe un par de cables para esto. Si
existieran tres o cuatro cables (2 de ida y 2 de venida) el convertidor de 2 a 4 hilos no
fuera necesario, pero esto probablemente incrementara los costos de cableado y las
compaas telefnicas prefieren lidiar con los problemas de acoplamiento que este
convertidor introduce en lugar de incrementar sus costos.

En general no existe convertidor de 2 a 4 hilos perfecto ya que es muy difcil separar las
seales de ida y de regreso completamente. Es por eso que este dispositivo
histricamente ha sido una de las causas de eco en lneas telefnicas mal acopladas. Ya
hablaremos de esto en el captulo de calidad de voz.

29
1.8 Circuitos digitales
La PSTN tambin sirve a sus abonados con circuitos digitales. Estos circuitos ofrecen la
ventaja de poder multiplexar ms de una lnea en el mismo medio por lo que resulta
atractivo para abonados con necesidades de un gran nmero de lneas telefnicas, por lo
general empresas.

La base DS-0

Para decirlo simple, DS-0 es un canal digital de 64Kbit/s. Un DS-0 es por tanto una
medida de canal estndar o unidad que nos sirve para definir mltiplos mayores como
los circuitos que veremos a continuacin.

Circuitos T-carrier y E-carrier

Los circuitos T-carrier (o portadora-T) fueron diseados como nomenclatura para


circuitos digitales mutiplexados y fueron desarrollados por Bell Labs hace ms de
cincuenta aos. Los circuitos E-carrier son la equivalente europea.

El ms conocido de los circuitos T-carrier es el popular T1 (y su contraparte E1). Un T1


es un circuito digital compuesto de 24 DS-0s mientras que un E1 est compuesto por
32 DS-0s. Si hacemos las matemticas notaremos que un T1 trafica 1.544 Mbit/s
mientras que un E1 2.048 Mbit/s.

Luego de los T1s tenemos mltiplos mayores como T2, T3, T4 y T5.

SONET y Circuitos Opticos

SONET (Synchronous optical networking) fue desarrollado con el objetivo de contar


con una nomenclatura similar a las T-carrier pero usando la tecnologa de fibra ptica.
SONET utiliza mltiplos de T3 para sus anchos de banda y su circuito base es el
llamado OC-1.

Luego del OC-1 tenemos los OC-3, OC-12, OC-24, OC-48, entre otros.

1.9 Protocolos de Sealizacin Digital

30
Los protocolos de sealizacin se utilizan para transmitir informacin de estado del
canal de comunicaciones (como desconectado, timbrando, respondido),
informacin de control y otra informacin como DTMFs, caller ID, entre otros.

Los protocolos de sealizacin se pueden agrupar en dos tipos llamados CAS (Channel
Associated Sgnaling) y CCS (Common Channel Signaling). La diferencia es que
mientras CAS transmite la sealizacin en el mismo canal en que viaja la informacin,
CCS la transmite en un canal separado. Por este hecho es que con CAS se reduce
ligeramente el ancho de banda disponible o til para la comunicacin ya que una parte
de l se est usando para sealizacin. Esa es una de las razones por las cuales las
compaas telefnicas han adoptado en su mayora CCS.

Nota: No confunda el lector CAS y CCS con protocolos de sealizacin. Tan


solo son tipos de protocolos que se explican aqu para hacer ms fcil la
categorizacin o agrupacin de los mismos.

Sealizacin Asociada al Canal (CAS)

El protocolo CAS ms conocido es robbed-bit y es usado en circuitos T1 y E1 alrededor


del mundo.

Robbed-bit toma (o roba, de all su nombre) el octavo bit de cada canal de


comunicacin cada seis frames y lo reemplaza por informacin de sealizacin. El bit
original robado simplemente se pierde.

Hay que notar de lo anterior que esto es posible debido a que la voz no es muy sensible
que digamos a la prdida de ese bit de informacin ya que es el bit menos significativo.
Pero cuando transportamos data la prdida de un bit no puede pasar desapercibida y la
calidad de la transmisin se degrada de manera sensible.

Otro protocolo CAS que an subsiste en nuestros das es R2. Se trata de un protocolo
que fue popular en los aos 60s. En realidad R2 es una familia de protocolos en donde
cada implementacin se denomina variante. Existen variantes dependiendo del pas o
inclusive de la compaa telefnica que lo ofrece.

Al momento Elastix soporta este protocolo a travs de la librera Unicall. Sin embargo
en el futuro se espera soportar la implementacin del proyecto openR2 desarrollado por
el mexicano Moiss Silva.

Sealizacin de Canal Comn (CCS)

31
ISDN

ISDN (Integrated Services Digital Network) nos permite transmitir voz y datos
simultneamente sobre pares telefnicos de cobre con calidad superior a las lneas
telefnicas analgicas.

El objetivo de ISDN fue el de facilitar las conexiones digitales para poder ofrecer una
amplia gama de servicios integrados a los usuarios. ISDN establece dos tipos de
interfaces para cumplir con este fin.

BRI: Basic Rate Interface


PRI: Primary Rate Interface

BRI estuvo orientada a hogares. Un BRI supone 2 canales tiles (tambin llamados
canales B) de 64Kbit/s cada uno ms un canal de sealizacin de 16Kbit/s (tambin
llamado canal D) que en total suman 144Kbit/s.

BRI estaba llamado a ser un estndar popular en hogares pero no fue as del todo y tuvo
muy poca acogida en este segmento del mercado en los Estados Unidos. En Europa la
situacin fue diferente y es utilizado en muchos pases de este continente.

PRI es la opcin para usuarios de mayor envergadura como negocios o empresas pues
puede aglutinar ms canales B. Actualmente es muy popular y se transmite sobre
circuitos T-carrier y E-carrier.

32
Introduccin a la VoIP
Yo no hice nada por accidente, ni tampoco fueron as mis invenciones;
ellas vinieron por el trabajo
-- Thomas Edison

La voz sobre IP o VoIP consiste en transmitir voz sobre protocolo IP.

Dicho as puede sonar simple pero las redes IP fueron diseadas principalmente para
datos y muchas de las ventajas de las redes IP para los datos resultan ser una desventaja
para la voz pues sta es muy sensible a retardos y problemas de transmisin por muy
pequeos que estos sean.

Por tanto transmitir voz sobre protocolo IP es toda una empresa con muchos problemas
tcnicos que resolver. Por suerte la tecnologa ha evolucionado y la pericia de algunos
ingenieros talentosos ha resultado en que podamos abstraernos en gran medida de
aquellos problemas inherentes a las redes IP que perjudican la calidad de voz.

Solo hace pocos aos me recuerdo haciendo uso de llamadas por Internet y puedo decir
que la mejora de unos 10 aos para ac ha sido notable. Ahora podemos decir que la
transmisin de voz por Internet ya es una alternativa rentable al alance de la mayora de
nosotros.

33
2.1 VoIP: una sopa de protocolos
Hay muchos protocolos involucrados en la transmisin de voz sobre IP. Ya de por s
hay protocolos de red involucrados como el propio protocolo IP y otros protocolos de
transporte como TCP o UDP. Encima de ellos se colocan los protocolos de sealizacin
de voz y como si esto fuera poco existen adems muchas opciones de protocolos de
sealizacin disponibles lo que puede hacer que todo suene un poco confuso al
principio.

Sopa de protocolos VoIP

Clasificando los protocolos VoIP

Para simplificar las cosas podramos clasificar a los protocolos utilizados en la VoIP en
tres grupos.

Protocolos de sealizacin

Los protocolos de sealizacin en VoIP cumplen funciones similares a sus homlogos


en la telefona tradicional, es decir tareas de establecimiento de sesin, control del

34
progreso de la llamada, entre otras. Se encuentran en la capa 5 del modelo OSI, es decir
en al capa de Sesin.

Existen algunos protocolos de sealizacin, que han sido desarrollados por diferentes
fabricantes u organismos como la ITU o el IETF, y que se encuentran soportados por
Asterisk. Algunos son:

SIP
IAX
H.323
MGCP
SCCP

Entre estos los ms populares en el mbito de Asterisk son SIP e IAX.

Entraremos en ms detalles acerca del protocolo SIP ms adelante en otro captulo.

Protocolos de transporte de voz

No se debe confundir aqu con protocolos de transporte de bajo nivel como TCP y UDP.
Nos referimos aqu al protocolo que transporta la voz propiamente dicha o lo que
comnmente se denomina carga til. Este protocolo se llama RTP (Real-time Transport
Protocol) y funcin es simple: transportar la voz con el menor retrazo posible.

Este protocolo entra a funcionar una vez que el protocolo de sealizacin ha establecido
la llamada entre los participantes.

Protocolos de plataforma IP

En esta categora agruparemos a los protocolos bsicos en redes IP y que forman la base
sobre la cual se aaden los protocolos de voz anteriores. En estos protocolos podramos
mencionar a Ethernet, IP, TCP y UDP.

Nota: En el presente captulo pondremos ms nfasis en explicar este grupo de


protocolos con el objetivo de nivelar a quienes no tengan conocimientos slidos
en Networking. Sin embargo, los otros grupos de protocolos se revisarn con
mucho ms detalle en un captulo especial dedicado a este fin.

35
Protocolos involucrados en una llamada SIP. El caso de IAX es muy similar.

En la figura anterior podemos observar un hecho curioso y es que pese a que SIP
soporta tanto UDP como TCP slo lo vemos posado sobre UDP. No se trata de un error
sino ms bien que en Asterisk la implementacin de SIP solo est disponible para UDP.

2.2 Protocolo IP
El protocolo IP sin duda es uno de los ms populares jams implementados,
principalmente por el auge del Internet: La gran red de redes, que utiliza este protocolo
para su enrutamiento. Por esta razn, antes de entrar en detalles acerca del protocolo IP
emplearemos un par de prrafos a resumir los orgenes del Internet.

El Internet

El Internet tuvo su origen en la dcada del 60 como un proyecto del Departamento de


Defensa de los Estados Unidos con el objetivo de crear una red robusta que conectara
algunos organismos pblicos con universidades. La idea de la red, que originalmente se
llam ARPANet, era que si alguno de los nodos quedaba fuera de funcionamiento esto
no perjudicara significativamente a la red. Para esto se ide una red descentralizada que
pudiera manejar ms de un camino entre dos de sus puntos. En resumen, se trataba de
construir una red a prueba de fallos (recordemos tambin que eran pocas de la Guerra
Fra) y de bajo coste.

36
Gracias a este enfoque ARPANet evolucion hasta lo que hoy en da conocemos como
Internet, una red de comunicaciones tan grande y poderosa que sin duda ha ejercido un
impacto en nuestras culturas. Sin su existencia el proyecto Elastix no hubiera existido y
no estaran leyendo esto ahora.

Qu es el protocolo IP?

El protocolo IP (Internet Protocol) es un protocolo que trabaja a nivel de red donde la


informacin se enva en paquetes llamados paquetes IP. Este protocolo ofrece un
servicio sin garantas tambin llamado del mejor esfuerzo. Es decir que nada
garantiza que los paquetes lleguen a destino, sin embargo se har lo posible por hacerlos
llegar.

Direccin IP

Una direccin IP es un nmero nico que provee adems informacin de cmo ubicar al
equipo que la posee. Para que este nmero sea nico existe una autoridad que controla
la asignacin de direcciones IP llamada IANA (Internet Assigned Numbers Authority).

Una direccin IP es un nmero binario que consta de 32 bits. Sin embargo, para fines
prcticos y hacer que este nmero sea ms entendible para los humanos casi siempre se
representa en un formato de 4 nmeros decimales separados por puntos. Cada uno de
estos cuatro nmeros puede tomar un valor de 0 a 255. Un ejemplo de direccin IP es
172.16.254.1

Traduccin de notacin decimal a binaria (32 bits) de una direccin IP

Paquete IP

Como habamos dicho antes el protocolo IP es un protocolo que divide la informacin


en paquetes que enva a su destino y la ventaja de tener la informacin paquetizada es
que estos paquetes pueden tomar diferentes caminos para llegar a destino. Es decir que
hay redundancia de caminos y es menos probable que todos los paquetes se pierdan.

37
Bueno, bueno, pero cmo lucen los famosos paquetes?

El formato de un paquete IP est diseado para llevar informacin que permita


diseccionarlo a su destino y obviamente que permita re-ensamblar los paquetes en
destino para recuperar la informacin til. A continuacin una figura con una cabecera
de paquete IP.

Cabecera de un paquete IP

Direccionamiento IP

El direccionamiento o (enrutamiento) permite determinar la ruta ptima para que un


paquete IP llegue su destino. Para saber dnde quiere llegar un paquete dado hay que
examinar la direccin IP de destino en el campo Destination Address de la cabecera de
un paquete IP.

Los equipos que se encargan de enrutar los paquetes a su destino se llaman ruteadores y
bsicamente contienen tablas de rutas con informacin de cmo alcanzar otras redes.
Por tanto, una vez que llega un paquete a un ruteador ste examina la direccin IP
destino y trata de determinar a qu red pertenece esa direccin IP.

Determinar la red donde quiere llegar un paquete dado no es muy difcil puesto que esa
informacin es parte de la direccin IP. Esto es porque cada direccin IP se podra
dividir en dos partes: una parte que identifica a la red y otra que identifica al equipo
(tambin llamado host).

Identificar cada una de estas partes no es tan trivial pues existen redes de diferentes
tamaos y por tanto el nmero de bits que corresponden a la parte de la red y el nmero
de bits que corresponden a la parte del host varan dependiendo del tamao de la red y
se regulan mediante un parmetro adicional llamado mscara de red.

38
Mscara de red y clculo de direccin de red

Veamos entonces cmo se obtiene la informacin de a qu red pertenece una direccin


IP para que un ruteador pueda encaminar correctamente un paquete a destino.

La mscara de red es un nmero de 32 bits al igual que una direccin IP. Se llama
mscara porque si se superpone a la direccin IP nos permite identificar cul parte es la
que corresponde a la direccin de red y cul a la direccin del host.

Imaginemos que tenemos la direccin IP 130.5.5.26 con mscara


255.255.255.0. Para ilustrar cmo aplicar la mscara sobre la direccin IP
convirtamos estos datos a binario.

Aplicacin de mscara para obtener informacin de la red y host

Ahora podemos ver con ms claridad que los nmeros uno (1) en la mscara marcan el
lmite entre la parte de la red y la parte del host por lo tanto la direccin de red es (en
binario):

10000010.00000101.00000101.00000000

Todos los nmeros binarios a la derecha de la mscara se completan con ceros. Ah


cierto, olvidamos volver a convertir la direccin de red anterior a decimal. Veamos qu
obtenemos:

10000010.00000101.00000101.00000000 130.5.5.0

Lo que quiere decir que la direccin IP 130.5.5.26 pertenece a la red 130.5.5.0.


Ahora el ruteador ya puede decidir hacia qu red enviar nuestro paquete IP.

2.3 Protocolos de transporte

39
Nota: No se debe confundir estos protocolos con el protocolo de transporte de
voz RTP. RTP es un protocolo ms especializado que incluso se monta sobre
UDP (un protocolo que ser explicado aqu). Los protocolos de transporte aqu
cubiertos son de propsito general y reposan directamente sobre el protocolo
IP.

Protocolo TCP

Como ya habamos dicho el protocolo IP no garantiza que los datos lleguen a destino.
Solo hace su mejor esfuerzo para que lleguen.

Por lo tanto era necesario un protocolo que se encargue de controlar la transmisin de


datos y por esta razn se dise lo que se llama Transmission Control Protocol o
simplemente protocolo TCP. TCP es un protocolo de transporte que se transmite sobre
IP.

TCP ayuda controlando que los datos transmitidos se encuentren libre de errores y sean
recibidos por las aplicaciones en el mismo orden en que fueron enviados. Si se pierden
datos en el camino introduce mecanismos para que estos datos sean reenviados.

Obviamente esto implica una carga extra de informacin en el flujo de datos ya que hay
que enviar informacin de control adicional. Es por esto que TCP es un buen protocolo
para control de sesiones pero no tan bueno para transmisin de datos en tiempo real. Por
esta razn la voz en s no se enva usando este protocolo. Sin embargo TCP juega un rol
muy importante en muchos protocolos relacionados con un servidor Elastix.

TCP es quien introduce el concepto de puerto que no es otra cosa que una abstraccin
para poder relacionar los flujos de datos con servicios de red especficos (o protocolos
de ms alto nivel). Por ejemplo, el puerto 80 se asocia con el servicio de Web o el
protocolo HTTP; el puerto 25 se asocia con el servicio de correo electrnico o protocolo
SMTP.

Protocolo UDP

UDP (User Datagram Protocol) es otro protocolo de transporte. Se diferencia con TCP
en que a este protocolo no le importa si los datos llegan con errores o no y tampoco le
importa si llegan en secuencia. La pregunta entonces es para qu sirve este protocolo?

Bueno, un protocolo de transporte no necesariamente tiene que garantizar que la


informacin llegue a destino o llegue en secuencia. Esta es solo una caracterstica extra.
Es ms o menos anlogo a un servicio de transporte de mercanca. Imaginmonos una
flota de motocicletas que ofrece el servicio de transporte en una ciudad e imaginmonos
que le encomendamos a dicha flota la tarea de transportar un gran cargamento de

40
archivos de una oficina u otra. La compaa se encargar de dividir nuestro cargamento
de archivos y distribuirlo en cantidades o paquetes que puedan ser transportados en sus
vehculos. Har lo necesario para que nuestro cargamento llegue a destino. Esto es en
esencia el servicio de transporte. Sin embargo podemos escoger dos clases de servicio:
una que garantiza que la mercanca llegue segura y otra que no. Estos dos tipos de
servicio son anlogos a los dos tipos de protocolos de transporte que estamos
describiendo en este apartado UDP y TCP.

En fin, la cosa es que UDP divide la informacin en paquetes, tambin llamados


datagramas, para ser transportados dentro de los paquetes IP a su destino.

Al no ser necesario incluir mucha informacin de control, el protocolo UDP reduce la


cantidad de informacin extra en los paquetes por lo que es un protocolo ms rpido que
TCP y adecuado para transmisin de informacin que debe ser transmitida en tiempo
real como la voz.

Es por esta razn que la voz en aplicaciones de VoIP es transmitida sobre este
protocolo.

2.4 Codificacin de la voz


Ya tenemos claro que para transportar la voz se utilizan algunos protocolos como SIP,
IAX y otros como RTP o RTCP. Pero la voz es una onda analgica que necesita
transformarse a digital en algn formato antes de ser transmitida.

Lgicamente podramos tratar de transmitirla tal cual resulta de la conversin analgica-


digital (ADC) pero resulta que nos encontramos en una red de paquetes as que
debemos paquetizar esta informacin. Adems si la transmitimos tal cual resulta de la
conversin ADC desperdiciaramos recursos de la red por lo que hace falta encontrar un
formato ptimo.

Esa bsqueda de un formato ptimo gener algunas alternativas de formatos de


transmisin llamadas codecs.

Nota: Los codecs realmente no son exclusivos de la VoIP pues tambin se usan
en otros tipos de comunicaciones digitales.

Codecs

La palabra codec proviene de abreviar las palabras COdificacin y DECodficacin. Su


funcin principal es la de adaptar la informacin digital de la voz para obtener algn

41
beneficio. Este beneficio en muchos casos es la compresin de la voz de tal manera que
podamos utilizar menos ancho de banda del necesario.

Algunos codecs, soportados por Asterisk y comnmente usados en comunicaciones de


VoIP, son G.711, G.729, GSM, iLBC, entre otros.

Explicaremos brevemente tres de ellos.

G.711

G.711 es uno de los codecs ms usados de todos los tiempos y proviene de un estndar
ITU-T que fue liberado en 1972. Viene en dos sabores llamados u-law y a-law. La
primera versin se utiliza en los Estados Unidos y la segunda se utiliza en Europa.

Una de sus caractersticas es la calidad de voz debido a que casi no la comprime. Utiliza
64kbit/s, es decir un muestreo de 8 bits a 8kHz. Es el codec recomendado para redes
LAN pero hay que pensarlo dos veces antes de utilizarlo en enlaces remotos debido al
alto consumo de ancho de banda.

El soporte para este codec ya viene habilitado en Elastix.

G.729

Tambin se trata de una recomendacin ITU cuyas implementaciones ha sido


histricamente licenciadas, o sea que hay que pagar por ellas.

La ventaja en la utilizacin de G.729 radica principalmente en su alta compresin y por


ende bajo consumo de ancho de banda lo que lo hace atractivo para comunicaciones por
Internet. Pese a su alta compresin no deteriora la calidad de voz significativamente y
por esta razn ha sido ampliamente usado a travs de los aos por muchos fabricantes
de productos de VoIP.

G.729 utiliza 8kbit/s por cada canal. Si comparamos este valor con el de G.711
notaremos que consume 8 veces menos ancho de banda, lo cual a simple vista es un
ahorro de recursos significativo.

Nota: Existen variaciones de G.729 que utilizan 6.4kbit/s y 11.8kbit/s.

Para habilitar canales G.729 en Elastix hay que comprar una licencia por cada canal.
Esto se puede adquirir en el sitio Web de Digium.

42
GSM

Muchas personas suelen preguntar si el codec GSM tiene algo que ver con el estndar
de comunicaciones celulares y la respuesta es que s.

El estndar que define la tecnologa celular GSM (Global System for Mobile
communications) incluye este codec.

La ventaja de este codec tambin es su compresin. Acerca de la calidad de voz


bueno, ya habremos hablado por un celular GSM alguna vez.

GSM comprime aproximadamente a 13kbit/s y ya viene habilitado en Elastix.

2.5 Sobrecarga de protocolos


Como ya vimos, para transportar la voz de un lugar a otro, en una red de paquetes,
necesitamos la ayuda de algunos protocolos; pero ya nos habremos dado cuenta de que
estos protocolos transmiten data adicional que ocupa ancho de banda extra a la voz
propiamente dicha. Algunos de ellos son Ethernet, IP, UDP, RTP.

En resumen esto hace que el ancho de banda real para transmitir voz sea mayor al del
codec.

Por ejemplo, para transmitir voz usando G.711 en teora deberamos usar 64Kbps (peso
del codec) pero en realidad usamos 95.2Kbps de BW. En otros codecs ms
compresores la sobrecarga es incluso ms significativa (porcentualmente hablando).

Hagamos un ejercicio sencillo usando como ejemplo G.711. Veamos la siguiente figura
para ilustrar mejor el ejercicio.

43
Ilustracin de la sobrecarga de protocolos usando G.711

Calculemos el ancho de banda para G.711 basndonos en la figura anterior, la cual nos
muestra el desperdicio de cada protocolo. Sumemos ahora todos estos bytes enviados.

Bytes transmitidos cada 20ms = 38 + 20 + 12 + 8 + 160 = 238 bytes

Bits transmitidos cada 20ms = 238 bytes * 8 bits/byte = 1904 bits

Bits transmitidos cada segundo = 1904 bits/frame * 50 frames/seg. = 95,200


bits/segundo = 95.2Kbps!

Comparativa de codecs

A continuacin una tabla que muestra el overhead para algunos de los codecs ms
populares soportados por Asterisk.

Codec Ancho de banda Ancho de banda Porcentaje de overhead


cdec real Ethernet
G.711 64 Kbps 95.2 Kbps 48.75%
iLBC 15.2 Kbps 46.4 Kbps 205.26%
G.729A 8 Kbps 39.2 Kbps 390%

44
Si el lector est interesado en clculos de ancho de banda real para otros codecs, le
recomendamos el siguiente vnculo: http://www.newport-networks.com/pages/voip-
bandwidth-calculator.html

45
Linux para Administradores
de Elastix
Slo los dbiles hacen copias de seguridad en cintas: los hombres de
verdad tan solo suben sus cosas importantes a un servidor ftp, y dejan
que el resto del mundo las replique.
-- Linus Torvalds, creador de Linux

3.1 Introduccin
En este captulo se repasarn algunos conceptos tiles de Linux para facilitar la vida de
los administradores de Elastix. Si usted ya conoce cmo administrar su Elastix desde la
lnea de comandos de Linux, sltese este captulo y vaya directamente al siguiente.

Debido a que este no es un libro de Linux no ahondaremos mucho en el tema, ni


hablaremos de la historia de Linux, ni de sus ventajas, ni ahondaremos en detalles. As
que si en algn momento le parece que estoy abordando los temas de manera muy
general... esa es la idea :)

Si al final de este captulo an siente que existen vacos, le recomendamos capacitarse


en administracin de Linux, sin duda le facilitar las tareas de administracin de Elastix.

47
3.2 Lnea de comandos de Linux
Una manera muy til de administrar Elastix es desde la lnea de comandos de Linux. La
lnea de comandos de Linux nos permitir explotar al mximo el potencial de nuestro
Servidor de Comunicaciones Unificadas.

Para ingresar a la lnea de comandos lo podemos hacer directamente conectando un


monitor y teclado a nuestro equipo instalado con Elastix o conectndonos remotamente
a travs del protocolo SSH.

Si estamos en un equipo Windows debemos descargar un programa cliente para


podernos conectar remotamente. El programa que recomendamos aqu se llama PuTTY
y basta hacer una bsqueda en Google por ese nombre para encontrar el sitio de
descargas. Slo asegrese de hacerlo del sitio oficial.

Figura de la aplicacin PuTTY

48
Figura ejecutando PuTTY

3.3 Comandos bsicos


A continuacin una lista de los comandos bsicos ms usados:

Comando Descripcin
ls Lista los archivos en el directorio actual
ls -la Lista los archivos y sus atributos
cd Cambia de directorio
cd .. Cambia al directorio padre
cat Muestra el contenido de un archivo en la
pantalla
pwd Muestra la ruta actual
cp Copia un archivo o grupo de ellos
mv Mueve un archivo. Tambin se lo usa para
renombrar archivos
rm Elimina un archivo
tail -f nombre_archivo Muestra las ltimas lneas de un archivo
mkdir Crea un directorio
tar -xvzf Descomprime un archivo tar.gz
nombre_archivo.tar.gz
top Muestra un reporte en tiempo real de los

49
procesos que se ejecutan en el sistema.
Puede ser ordenado por consumo de
memoria o CPU. Muy til para
diagnstico
find Permite buscar arhivos
vim Programa para ver y editar archivos de
texto plano
ifconfig Muestra informacin de las interfaces de
red y permite modificarlas temporalmente
ps -aux Muestra un reporte de los procesos que se
estn ejecutando en el servidor
reboot Reincia el equipo
shutdown -h now Apaga el equipo

Figura del la ejecucin del comando top

50
3.4 Sistema de archivos
En Linux es muy importante la organizacin del sistema de archivos.

Esta organizacin le otorga a Linux robustez e interoperabilidad pues los programas


pueden predecir con mayor exactitud dnde se encuentran ciertos archivos para su
correcto funcionamiento y as mismo escribir archivos de manera que otros
componentes los entiendan. Esto minimiza los conflictos y en conjunto con el sistema
de permisos aade ms seguridad al sistema operativo.

Organizacin

La organizacin de directorios que se mostrar a continuacin no es arbitraria. Es


producto de aos de evolucin desde las primeras versiones de UNIX.

Esta estructura de carpetas est ubicada en lo que se llama directorio raz, o directorio
principal. Este directorio raz es el directorio de ms alto nivel en el sistema de archivos.

Directorio Descripcin
sbin Incluye binarios que pueden ser
ejecutados solo por el administrador
bin Contiene binarios necesarios para el
correcto funcionamiento del sistema. Los
binarios de esta carpeta pueden tambin
ser utilizados por los usuarios del sistema
boot Este directorio contiene el kernel y otros
archivos necesarios al momento de
arranque
dev Este directorio contiene archivos que
representan dispositivos de hardware.
Recordemos que en Linux prcticamente
todo es un archivo
etc Este directorio contiene bsicamente
archivos de configuracin para todo el
sistema
home Aqu residen los directorios de los
usuarios. Por ejemplo, el directorio
/home/jorge es el directorio del usuario
jorge
lib Contiene bsicamente las libreras
compartidas que requieren los programas.
Algo anlogo a los archivos .dll en
Windows

51
lost+found Cuando por alguna razn el sistema de
archivos se corrompe y hay que repararlo;
los resultados de esa reparacin se
guardan en este directorio
mnt Este es un lugar comn para montar otros
sistemas de archivos o dispositivos. Por
ejemplo una unidad de CDROM o un
PEN DRIVE
opt Este directorio contiene paquetes de
software que normalmente no son parte de
la instalacin original
proc Es un directorio virtual (ya que realmente
reside en la memoria) donde el kernel y
drivers escriben archivos para que otros
programas los puedan leer. Por ejemplo,
aqu es donde los drivers de zaptel
escriben ciertos archivos en la ruta
/proc/zaptel/
root Este es el directorio del usuario root ya
que este no tiene uno del tipo /home/root
tmp Este directorio contiene archivos
temporales
usr Es uno de los ms importantes directorios
y contiene informacin para ser
compartida como programas que pueden
ser usados por los usuarios del sistema, la
documentacin de dichos programas y
hasta libreras relacionadas, etc.

Este directorio usualmente no contiene


informacin que cambie constantemente
var Contiene informacin en constante
cambio como logs o colas de emails. Por
ejemplo, aqu reside el log de asterisk en
la ruta /var/log/asterisk/full

Permisos

En Linux cada directorio o archivo tiene permisos de acceso y estos permisos pueden
ser de bsicamente 3 tipos:

lectura
escritura
ejecucin

52
Cada archivo tambin tiene un dueo y un grupo al cual pertenece y para cada una de
estas entidades se pueden establecer permisos diferentes.

Por ltimo, tambin es deseable establecer permisos para otros usuarios que
eventualmente pueden querer tener acceso sobre este archivo.

Dicho todo lo anterior podemos establecer la siguiente matriz de permisos que sera
vlida para un determinado archivo del sistema:

dueo grupo otros usuarios


lectura x x x
escritura x
ejecucin x x x

Existe sin embargo una notacin ms sencilla para expresar la matriz de arriba. Esta
notacin, compuesta de 10 caracteres, simplifica el despliegue de la informacin de
permisos y permite mostrarlos en una sola lnea lo cual es muy til cuando se quieren
ver permisos de muchos archivos. Por ejemplo, la matriz de permisos del ejemplo
anterior se puede expresar de la siguiente manera:

-rwxr-xr-x
0123456789

Donde,

El carcter 0 representa el tipo de archivo. Si se llena con la letra d significa


que se trata de un directorio.
Los caracteres 1, 2 y 3 representan los permisos de lectura, escritura y ejecucin
para el dueo del archivo.
Los caracteres 4, 5 y 6 representan los permisos de lectura, escritura y ejecucin
para el grupo al que pertenece el archivo.
Los caracteres 7, 8 y 9 representan los permisos de lectura, escritura y ejecucin
para otros usuarios.

Ahora veamos un ejemplo de un listado largo donde podremos apreciar diferentes


permisos:

53
$ ls -la
drwxrwxr-x 4 edgar edgar 4096 2008-09-01 21:20 Codigo
-rw-rw-r-- 1 edgar edgar 53058 2008-08-04 01:31 comohemo.mid
-rw-rw-r-- 1 edgar edgar 22785270 2008-08-07 12:09 dlj173.pdf
drwxrwxr-x 3 root root 4096 2008-08-26 17:21 elastix
drwxrwxr-x 2 test prueba 4096 2008-09-11 13:03 flashingfop
drwxrwxr-x 3 edgar edgar 4096 2008-08-04 22:18 fpbx
-rw-rw-r-- 1 edgar edgar 398439 2008-08-19 19:19 gforge_manual.pdf
-rwxrw-r-- 1 edgar edgar 102135 2008-09-07 18:53 index2.html
-rw-rw-r-- 1 user4 101 3535 2008-08-19 23:20 install-ceros
drwxrwxr-x 3 edgar edgar 4096 2008-08-03 01:52 installers
-rw-rw-r-- 1 edgar edgar 6860 2008-08-19 23:12 ksraid.cfg
drwxr-xr-x 4 edgar edgar 4096 2008-08-06 12:14 lw
-rw-rw-r-- 1 edgar edgar 1020152 2008-07-30 14:00 Magic Button.pdf
drwxrwxr-x 3 edgar edgar 4096 2008-09-02 17:25 monitoring
-rw-rw-r-- 1 edgar edgar 14341913 2008-08-12 01:59 prbx1.zip
-rw-rw-r-- 1 edgar edgar 7195354 2008-08-03 01:51 rotron1.7.1.tar.bz2
-rw-rw-r-- 1 edgar edgar 25343 2008-08-13 00:25 roundcube.diff
-rw-rw-r-- 1 edgar edgar 12167 2008-08-01 23:03 src-php.tar.bz2
drwxr-xr-x 18 edgar edgar 4096 2008-08-13 09:38 wanpipe-3.2.7
-rw-rw-r-- 1 edgar edgar 16106184 2008-08-29 17:40 wanpipe-3.2.7.1.tgz
-rw-rw-r-- 1 edgar edgar 20525 2008-09-08 17:14 xorcom_test.txt
-rw-rw-r-- 1 edgar edgar 9277 2008-09-08 02:10 Xorcom_logo.png

Representacin numrica de permisos

Aparentemente vamos a complicar las cosas un poco ms aqu pero ya veremos ms


adelante la utilidad de poder representar la dichosa matriz de permisos de una forma
ms condensada llamada representacin numrica u octal de permisos.

La cuestin es que los 3 caracteres que definen los permisos para cada una de las tres
entidades involucradas (dueo, grupo y otros) pueden ser representados por un solo
nmero de tal manera que todos los permisos de un archivo pueden ser representados
por 3 de estos nmeros. Por ejemplo, 755. Donde el primer dgito representa los
permisos del dueo, el segundo dgito los permisos del grupo y el tercer dgito los
permisos de otros usuarios.

Puede ser complicado entender al principio pero sin duda se trata de un formato ms
condensado. De eso s no cabe duda verdad?. Y vasta ver el siguiente ejemplo:

-rwxr-xr-x equivale a 755

Pero de dnde sale el famoso numerito?

54
Resulta que cada uno de los 3 caracteres que representan un permiso para una entidad
dada puede ser reemplazado por 1 o 0 de tal manera que obtenemos un nmero binario,
luego este nmero binario se traduce a su equivalente decimal (realmente deberamos
decir octal aqu). Veamos el ejemplo siguiente.

-rwxr-xr-x

Transformado a binario tendramos los siguientes tros:

111 101 101

y ahora en su equivalente decimal

755

En fin, para los que no les gusta calcular binario les dejo la siguiente tablita.

Versin texto Versin binaria Versin Octal


--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

Ahora s se estarn preguntando para qu nos sirve esta notacin numrica?

Bueno, resulta que de esta manera es mucho ms fcil manipular los permisos de los
archivos mediante comandos y eso es precisamente lo que veremos a continuacin.

Cambiando permisos y dueos de archivos

Las tareas de cambio de permisos y dueos de archivos pueden ser realizadas fcilmente
gracias a los comandos chmod y chown respectivamente.

chmod toma como parmetros los permisos en modo numrico y el nombre del archivo
al que se desea realizar el cambio. Por ejemplo:

55
$ ls -la archivo_prueba
-rw-rw-r-- 1 edgar edgar 0 2008-09-19 04:21 archivo_prueba
$ chmod 755 archivo_prueba
$ ls -la archivo_prueba
-rwxr-xr-x 1 edgar edgar 0 2008-09-19 04:22 archivo_prueba

El comando chmod tambin se puede usar recursivamente para cambiar los permisos de
todos los archivos dentro de una carpeta. Esto se hace con la opcin R. Por ejemplo:
chmod R 755 nombre_carpeta/

Para cambiar el dueo y grupo asociado con un archivo determinado podemos usar el
comando chown. Por ejemplo para cambiar los permisos del archivo anterior al usuario
y grupo root ejecutamos lo siguiente.

# ls -la archivo_prueba
-rwxr-xr-x 1 edgar edgar 0 2008-09-19 04:23 archivo_prueba
# chown root.root archivo_prueba
# ls -la archivo_prueba
-rwxr-xr-x 1 root root 0 2008-09-19 04:24 archivo_prueba

Al igual que el comando chmod, el comando chown tambin soporta la opcin R.

3.5 RPMs y actualizaciones va Yum


Los paquetes de software que se incluyen en Elastix vienen en un formato llamado
RPM. RPM es un formato heredado de Red Hat y su nombre significa Red Hat Package
Manager por sus siglas en ingls. Esto quiere decir que los instaladores de muchos
paquetes de software adicional pueden ser instalados en Elastix de manera sencilla.

Los RPMs tambin nos permitirn actualizar paquetes de software y se encargarn de


resolver las dependencias necesarias para que dichos paquetes no causen problemas en
el sistema. Esto se logra gracias a que el sistema RPM mantiene una base de datos
interna de todos los paquetes instalados con sus respectivas dependencias y versiones.
Adems nos provee con un comando muy til para manipular las instalaciones, des-
instalaciones, actualizaciones y otras tareas importantes.

A continuacin algunas opciones de uso del comando rpm:

Accin a realizar Comando


Instalacin de RPMs rpm -ivh nombre_del_paquete.rpm

56
Actualizacin de un RPM rpm -Uvh nombre_del_paquete.rpm
Eliminacin de un RPM rpm -e nombre_del_paquete.rpm
Obtener informacin de un archivo rpm qpi nombre_del_paquete.rpm
RPM
Obtener un listado de todos los rpm -qa
RPMs instalados en el sistema

Yum al rescate

La instalacin manual de RPMs mediante el comando rpm est bien para muchas de las
tareas, pero hay ocasiones en las cuales instalar RPMs de esta manera es tedioso y
complicado. Un ejemplo de esto es cuando instalamos paquetes RPMs complejos que
tienen muchas dependencias y al momento de instalar dicho paquete resulta que nos
damos cuenta que tenemos que instalar otro paquete necesario y tenemos que buscarlo
en Internet para instalarlo.

Muchas veces un RPM tiene decenas o hasta cientos de dependencias lo que por
supuesto nos llevara horas solucionar manualmente.

Adicionalmente a este problema de dependencias existe otro y es el de la confiabilidad


de los RPMs. Es decir, luego de horas y horas de instalar nuestros paquetes
manualmente nos damos cuenta de que uno de ellos sobrescribi un archivo importante
del sistema y corrompi nuestro Elastix. Vaya dolor de cabeza!

Aqu es cuando entra en escena nuestro hroe llamado Yum!

Yum es una utilidad que nos ayuda a instalar paquetes RPMs desde repositorios y
lo hace de una manera muy amigable.

La mayora de las distribuciones serias, y Elastix no es la excepcin, mantienen


repositorios de paquetes oficiales de software accesibles gratuitamente a travs de
Internet y hacen el mayor esfuerzo porque dichos paquetes no tengan problemas de
dependencias entre s. Adems los paquetes de los repositorios oficiales son probados
para evitar molestias en los usuarios. Es por esta razn que si se usa Elastix lo
recomendable es que se instalen paquetes desde el repositorio oficial.

Bueno, ahora vamos al grano y mostremos algunos comandos Yum tiles:

Comando Descripcin
yum update Actualizar TODO el sistema
yum update nombre_paquete Actualiza solo el paquete especificado y
todas sus dependencias

57
yum install nombre_paquete Instala el paquete especificado y todas sus
dependencias

Nota: Cabe destacar que Elastix nos provee de una interfase Web amigable
para actualizar paquetes y administrar repositorios. Por los tanto, los
procedimientos de actualizacin manuales aqu descritos se dejarn para casos
excepcionales. Se recomienda en lo posible utilizar la interfase Web.

58
Asterisk Essentials
Si una idea no es absurda al principio, entonces no merece la pena.
-- Albert Einstein

4.1 Qu es Asterisk?
Bsicamente Asterisk es un software de central telefnica con capacidad para voz sobre
IP que es distribuido bajo licencia libre.

Partiendo de este concepto muy bsico Asterisk no es una central telefnica cualquiera;
se trata de una central telefnica rica en caractersticas que en otros tiempos solo eran
accesibles mediante la compra de productos costosos.

Esto ha hecho que muchas empresas consideren a Asterisk como una seria opcin al
momento de planificar su proyecto telefnico y por esta razn Asterisk ha tenido gran
acogida a nivel mundial.

Al ver la oportunidad de negocio muchos fabricantes se han sumado a ofrecer hardware


telefnico compatible con Asterisk, principalmente tarjetas PCI para conexin con la
PSTN y esto ha hecho que la oferta de centrales telefnicas basadas en Asterisk crezca
en los ltimos tiempos.

59
Asterisk es uno de los componentes ms importantes de Elastix y quien provee la
mayora de las caractersticas telefnicas de la distro.

4.2 Breve historia de Asterisk


Asterisk fue concebido y desarrollado por Mark Spencer. En un principio por una
necesidad personal pues necesitaba una central telefnica para la pequea empresa de
soporte que estaba fundando llamada Linux Support Services.

Inicialmente pens en adquirir una pero pronto se dio cuenta que estaba muy lejos de su
presupuesto, as que luego de pensarlo un poco decidi crear la suya propia y comenz a
codificar lo que hoy conocemos como Asterisk. En 1999, cuando tuvo un cdigo digno
de mostrar al mundo decidi liberarlo bajo licencia GPL.

En cierto momento Mark se dio cuenta de que su software necesitaba interactuar con
hardware telefnico y se top con el proyecto Zaptel, un proyecto de cdigo abierto
creado por Jim Dixon, que tena el objetivo de crear drivers abiertos para tarjetas
telefnicas de computadora. A partir de all Asterisk y Zaptel caminaran de la mano;
tanto as que en la actualidad los dos proyectos son mantenidos por la misma compaa.

A pesar de lo que se pueda pensar, Mark no era un novato en el mundo del software
libre. El ya haba participado activamente en el desarrollo del cliente de mensajera
Gaim, actualmente llamado Pidgin, uno de los ms populares en el mbito del software
libre.

En el 2002 Linux Support Services se convertira en Digium, quien actualmente ofrece


productos y servicios relacionados con Asterisk y se encarga del desarrollo del
producto.

4.3 Funcionalidad provista por Asterisk


Como ya hemos dicho Asterisk es un software de centralita rico en caractersticas. Al
momento de escribir este libro las caractersticas soportadas ms relevantes son las que
enlistaremos a continuacin.

Contestacin Automtica de llamadas


Transferencia de Llamadas
Opcin de No Molestar
Parqueo de Llamadas
Contestacin de una llamada a una extensin remota
Monitoreo y Grabacin de Llamadas

60
Voicemail
Conferencias
Reportacin de Llamadas
Colas de atencin
Llamada en espera
Identificador de Llamante
Bloqueo por llamante identificado
Recepcin de Fax
Listado Interactivo del directorio de extensiones
Interactive Voice Response (IVR)
Msica en espera
Manejo de coportamiento por tiempo (Time Conditions)
Follow me

Contestacin automtica de llamada

Asterisk provee la facilidad de configurar una contestadora automtica que ayuda al


manejo del flujo de llamadas entrantes contestndolas automticamente sin necesidad de
una operadora en vivo. Diseado para empresas que reciben altos flujos de llamadas o
que no poseen personal necesario para manejar un alto trfico de llamadas entrantes.

La contestadora responde a los dgitos marcados por el teclado de la persona que llama,
enruta las llamadas a extensiones especficas, provee acceso a informacin pregrabada y
toma mensajes 24 horas al da.

Transferencia de llamadas

Existen dos mtodos para transferir llamadas: transferencias desatendidas y


transferencias atendidas.

Transferencia atendida de llamadas

Este mtodo es el usual, es decir, la llamada que usted est atendiendo, es transferida a
una extensin, en donde primero la extensin a la cual es transferida contesta, usted
hace la presentacin de la llamada y cuelga su extensin, en este caso la llamada queda
conectada a la nueva extensin.

Si la nueva extensin no desea que se le transfiera la extensin, simplemente deber


colgar su telfono, en cuyo caso, la llamada ser nuevamente conectada a la extensin

61
original. Mientras el proceso de transferencia se completa, el llamante de la llamada
externa escuchar la msica Music On Hold.

Para realizar una transferencia atendida, usted debe digitar un cdigo predeterminado.
En ese momento un mensaje pedir que le digite la extensin donde desea transferir la
llamada, una vez discada dicha extensin, usted escuchar el ringeado de la llamada
hacia la nueva extensin y podr establecer una comunicacin preliminar con esta
extensin. Cuelgue su telfono y la llamada externa quedar conectada a la nueva
extensin.

Transferencia desatendida de llamadas

Este mtodo permite transferir una llamada sin establecer una comunicacin previa con
la extensin a la cual se desea transferir la llamada.

Para transferir una llamada de manera no atendida, mientras atiende una llamada digite
en el telfono un cdigo predeterminado. Usted escuchar un mensaje pidiendo el
nmero de la extensin a la cual desea transferir la llamada y una vez discada usted
recibir el tono de ocupado y la llamada ha quedado conectada a la nueva extensin.

Opcin de No Molestar

Esta opcin permite a cualquier usuario configurar su extensin para que no reciba
llamadas por un perodo que el crea conveniente. Cualquier llamada entrante a esta
extensin ser ruteada automticamente al buzn de correos de la misma.
Para habilitar la opcin de No Molestar y para deshabilitar esta opcin, en el teclado de
su telfono digite los respectivos cdigos predeterminados.

Parqueo de llamadas

El parqueo de llamadas permite al usuario que recibe una llamada, enviar su llamada a
un cuarto de parqueo, para volver a atenderla desde otra extensin. Este tipo de accin
es til en el siguiente ejemplo. Supongamos que el administrador de la red recibe una
llamada a su extensin ubicada en su escritorio, y esta requiere que l se ubique de
frente en un servidor que se encuentra tres pisos mas arriba, y no sabe si alguien podr
atender la llamada en el telfono ubicado en el cuarto de equipos para que pueda hacer
la transferencia normal de la llamada. En este caso, la opcin es enviar la llamada a un
cuarto temporal, donde mientras tanto el llamante escuchar la msica en espera
configurada, hasta que el administrador llegue al cuarto de equipos y vuelva a tomar la
llamada.

En su central telefnica, para enviar la llamada actual para un cuarto de parqueo,


transfiera la llamada a una extensin predefinida, utilizando el carcter predeterminado

62
para transferir. Un vez digitada la extensin, usted escuchar el nmero de extensin
que deber marcar desde el otro telfono para volver a recuperar la llamada. La llamada
quedar en espera por un lapso mximo de 2 minutos. Mientras la llamada esta
parqueada, el que est llamando escuchar la msica configurada como Music On
Hold.

Contestacin de una llamada a una extensin remota

Esta caracterstica permite atrapar una llamada que se encuentra timbrando en una
extensin que no es la suya de manera remota. Para atrapar la llamada timbrando en una
extensin, digite en su telfono el predeterminado para esta funcin.

Monitoreo y Grabacin de llamadas

Esta caracterstica de Asterisk permite dar seguimiento a las llamadas, por ejemplo para
fines de control de calidad del desenvolvimiento de los operadores telefnicos o de los
agentes de ventas. Para esto existe la facilidad de que a travs de la digitacin de un
cdigo predeterminado se ejecute un comando que permita escuchar en lnea la
conversacin sostenida desde cualquier de las extensiones.

Adicionalmente existe la facilidad de grabar las conversaciones de cualquier extensin


en forma aleatoria programada previamente. Estas grabaciones se almacenarn en el
disco duro del servidor Asterisk para su posterior revisin.

Buzn de Mensajes de Voz (VoiceMail)

El buzn de mensajes de voz es una aplicacin que permite escuchar mensajes dejados
por llamadas que no pudieron ser atendidas por la extensin.

Para acceder al buzn de mensajes, digite en su telfono el cdigo predeterminado


respectivo. Se le pedir que ingrese el nmero de la extensin y la clave que debe haber
sido suministrada por el administrador del sistema. Una vez ingresados estos dos datos,
una grabacin le indicar si tienes nuevos mensajes de voz, y adems opciones para
grabar mensajes personalizados para ser usados en esta aplicacin.

Conferencias

Por defecto, cada extensin tiene asociado un cuarto de conferencias. Este cuarto de
conferencias puede ser utilizado por cualquier usuario que pida a sus compaeros que
ingresen a su cuarto y as, poder establecer una comunicacin multiusuarios.

63
Tambin es posible enviar una llamada externa a un cuarto de conferencias,
simplemente transfiriendo la llamada al cuarto de conferencias.

Los cuartos de conferencias estn asociados a los nmeros de extensiones, anteponiendo


un nmero predeterminado, Por ejemplo:

Si su extensin es 101 y el nmero para esta funcin es 8, usted tiene asociado el cuarto
de conferencias 8101, por lo que si usted desea establecer una llamada multiusuarios, en
su telfono digite la extensin 8101, e ingresar al cuarto de conferencias; pida a las
personas con las cuales desea establecer la conferencia que en sus telfonos tambin
digiten 8101 y podr conversar con cualquier usuario que ingrese a ese cuarto. Al
primer usuario que ingresa a un cuarto de conferencias, una grabadora le indicar que es
el nico usuario en el cuarto de conferencias.

Si desea establecer una conferencia incluyendo una llamada externa, en el momento que
est atendiendo dicha llamada, haga una transferencia desatendida a la extensin 8101;
al usuario que usted envi al cuarto de conferencias se le indicar mediante un mensaje
que es el nico usuario en el saln de conferencias. Ahora usted debe discar en su
telfono el nmero del saln de conferencias e indicar al resto de participantes que
ingresen al mismo saln.

Reportacin de nmero marcados

Asterisk genera CDRs (Call Detail Records) o Registros de Detalle de Llamadas y los
puede almacenar en una base de datos. Accediendo a esta base de datos, se pueden
generar reportes que detallan qu extensin llam a qu nmero, si la llamada fue
contestada o no, cunto dur la llamada, por qu puerto o lnea se realiz la llamada
telefnica.

Colas de Atencin

Esta caracterstica permite que un ilimitado nmero de llamantes puedan permanecer en


espera hasta que un representante o recurso est disponible para dar asistencia. Esto
permite que usted provea a sus clientes la misma calidad de servicio. Adicionalmente,
esto asegura que sus clientes no terminarn obligatoriamente en el voicemail, lo cual
puede resultar molestoso para el llamante. Es decir, con esto nos aseguramos que el
llamante siempre tenga la oportunidad de ser atendido por una persona. El tiempo que el
llamante permanece en espera puede aprovecharse para darle a conocer
ms servicios o productos de su compaa, ofertas especiales, anuncios informativos
se puede proporcionar msica en espera.

Llamada en espera

64
Esta caracterstica permite que la persona que se encuentra atendiendo una llamada y
recibe otra pueda interrumpir temporalmente su primera conversacin para atender la
segunda llamada y poder acordar un tiempo para devolver o atender su llamada.
Debemos recordar que esta caracterstica afecta muchas veces a las conexiones
telefnicas para transferencia de datos, por lo que es comn que los clientes la
deshabiliten.

Identificador de llamante

Esta seal es enviada entre las seales de RING o durante el proceso de establecimiento
de la llamada, antes de que sea contestada. Asterisk aprovecha esta facilidad y a nivel
extensiones IP soporta plenamente su manejo. Sin embargo a nivel de lneas de la red
telefnica pblica conmutada es el proveedor de estas quien debe habilitar o
proporcionar esta caracterstica. Se la conoce tambin como Caller Display Calling
Line Identification Presentation.

Bloqueo por llamante identificado

Esta caracterstica previene que alguien con identificador de llamante vea el nmero
desde el que usted llama. Esta facilidad de ocultar el ID puede ser completa o selectiva.
No todas las redes de telefona pblica soportan esta caracterstica.

En Asterisk esta caracterstica tambin describe el bloquear una llamada entrante en


funcin del ID.

Envo y recepcin de Fax

Asterisk permite detectar automticamente cuando un llamante est intentando enviar


un fax. Se puede poner como parte del mensaje de bienvenida de la central una frase
que diga: Si quiere enviar un fax, envelo ahora. Esto nos ayuda a eliminar papel,
prescindir de mquinas puertos telefnicos exclusivos para fax y digitalizar la
informacin recibida como fax. Luego de ser digitalizado, este documento puede ser
enviado va e-mail a una cuenta especfica para su revisin.

As tambin Asterisk puede ser configurado como Fax Server para que los documentos
que son enviados a una cuenta de correo especfica automticamente sean enviados
como faxes.

Listado interactivo del directorio de extensiones

Asterisk puede contener en su base de datos el directorio telefnico del personal de la


empresa (nombre, apellido y extensin). Esta facilidad permite por ejemplo, que la

65
persona que llama pueda digitar desde su telfono los nmeros correspondientes a las 4
primeras letras del apellido nombre de la persona con la que desea hablar. Esto puede
proporcionar una alternativa para llamantes que no conocen la extensin de la persona
que quieren contactar pero conocen solo su apellido nombre.

Interactive Voice Response (IVR)

A travs de esta caracterstica se proporciona acceso a opciones telefnicas que


mejorar la forma en que un sistema telefnico acepta y distribuye sus llamadas. Con un
men de IVR usted podr distribuir sus llamadas de una manera precisa que ayudar a
incrementar el desempeo de sus empleados y la satisfaccin de sus clientes, ya que se
agilita el acceso a los servicios y a la informacin que posee su compaa. Con esta
facilidad se proporcionan procesos de auto atencin que permitirn incluso prescindir de
una recepcionista.
Con esta caracterstica se pueden crear mens de activacin por dgitos por comandos
de voz para ejecutar incluso transacciones a travs de tarjetas de crditos consultas a
base de datos.

4.4 Funcionamiento de Asterisk

Encendido y apagado

A pesar de que Asterisk puede ser controlado directamente con su script de inicio
(ubicado en /etc/rc.d/init.d/asterisk) lo recomendable en Elastix es hacerlo mediante el
programa amportal. Esto es as debido a que existen otros programas relacionados
con Asterisk que tambin se deben sincronizar con el encendido y apagado de Asterisk.
Para apagarlo podemos ejecutar:

# amportal stop

Para encenderlo:

# amportal start

Para reiniciarlo:

# amportal restart

66
Directorios de Asterisk

Asterisk organiza sus archivos en algunos directorios. Entre los ms importantes


tenemos a los siguientes.

Directorio Descripcin
/etc/asterisk/ Aqu residen los archivos de
configuracin de asterisk
/usr/lib/asterisk/modules/ Este directorio contiene los mdulos de
Asterisk
/usr/sbin/ Aqu reside el binario de Asterisk
/var/log/asterisk/ Contiene los logs de Asterisk
/var/lib/asterisk/agi-bin/ Directorio donde residen los scripts AGI
/var/lib/asterisk/mohmp3 Carpeta que contiene archivos para
msica en espera
/var/lib/asterisk/sounds Sonidos que Asterisk utiliza como
prompts de voz
/var/spool/asterisk/ Directorio donde Asterisk guarda archivos
que genera producto de su funcionamiento
como voicemails y grabaciones de
llamadas
/var/run/ Archivos con informacin de PIDs
/var/log/asterisk/ Aqu residen los archivos de log de
Asterisk como el
/var/log/asterisk/full o el log
de texto de CDRs

Estructura modular

Asterisk utiliza la idea de mdulos para extender su funcionalidad. Es tan importante la


funcionalidad residente en los mdulos que sin ellos Asterisk por si solo no cumplira
ninguna funcin interesante.

Estos mdulos residen en la carpeta /usr/lib/asterisk/modules/ y son


archivos con extensin .so

Los mdulos pueden ser controlados a travs del archivo de configuracin


modules.conf. En este archivo puedo decirle a Asterisk que cargue o no cargue un
mdulo especfico a travs de las directivas load y noload. Por omisin en Elastix
todos los mdulos tratan de ser cargados.

67
A continuacin un fragmento del archivo modules.conf que viene con Elastix,
donde se puede observar cmo se le dice a Asterisk que no cargue algunos mdulos en
el arranque.

;
; DON'T load the chan_modem.so, as they are obsolete in * 1.2

noload => chan_modem.so


noload => chan_modem_aopen.so
noload => chan_modem_bestdata.so
noload => chan_modem_i4l.so

; Trunkisavail is a broken module supplied by Trixbox


noload => app_trunkisavail.so

; Ensure that format_* modules are loaded before res_musiconhold


;load => format_ogg_vorbis.so
load => format_wav.so
load => format_pcm.so
load => format_au.so

Adicionalmente se pueden cargar mdulos en tiempo real a travs de la consola de


Asterisk con el comando module load. Veremos ms de la consola de Asterisk o CLI
ms adelante.

4.5 El proyecto Zaptel, ahora DAHDI


A pesar de ser un gran producto de software Asterisk no puede hacer todo el trabajo.
Uno de los paquetes de software que lo complementa se llama Zaptel.

Bsicamente Zaptel es un conjunto de drivers para controlar hardware telefnico como


tarjetas PCI que nos permiten conectarnos a la PSTN.

Estos drivers se comunican con Asterisk a travs de un mdulo de Asterisk llamado


chan_zap.so que se configura a travs del archivo zapata.conf.

Adicionalmente Zaptel tiene su propio archivo de configuracin, independiente de


Asterisk, llamado zaptel.conf y ubicado en la carpeta /etc/.

68
Diagrama explicativo de la interaccin de Asterisk con Zaptel

Breve historia del proyecto Zaptel

En el ao 2000 Jim Dixon lanz el proyecto Zaptel cuyo nombre era una abreviacin de
Zapata Telephony Project. Lo nombr as en honor a Emiliano Zapata, hroe de la
revolucin mexicana.

Los drivers fueron lanzados bajo licencia GPL de tal manera que cualquiera pudo tener
acceso al cdigo.

Inicialmente Zaptel contena drivers para tarjetas Tormenta fabricadas por Zapata
Telecom, pero pronto Digium comenz a mejorar los drivers y extender el soporte para
nuevos modelos de hardware, entre ellos los que el mismo Digium fabricaba. Pronto
Digium se convirti en el principal desarrollador de Zaptel.

69
Luego de algunos aos de mantener Zaptel, Digium cay en cuenta de que Zaptel era
una marca registrada de Zapata Telecom y para evitar cualquier posible confusin futura
decidi cambiar de nombre a sus drivers. El nombre elegido es DAHDI.

DAHDI ya se encuentra disponible para descarga pero muchos continan usando Zaptel
por razones histricas o esperando a que este nuevo paquete se estabilice un poco ms.

Digium ha manifestado que en su nueva versin de Asterisk 1.6 ya no soportarn Zaptel


oficialmente.

4.6 Configuracin de Asterisk

Archivos de configuracin

Asterisk se puede configurar a travs de algunos archivos de configuracin ubicados en


la ruta /etc/asterisk. Existen decenas de archivos de configuracin en este
directorio y se encuentran en texto plano para facilitar su modificacin por lo que
nosotros podremos modificarlos desde la lnea de comandos utilizando el editor vim o
el editor de lnea de comandos de nuestra preferencia.

Si bien todos estos archivos son importantes no todos son necesarios y existen otros que
ya han sido pre-configurados por Elastix para que no tengamos que modificarlos.
Algunos de los ms importantes se explican en la siguiente tabla.

Archivo Descripcin
extensions.conf Aqu reside el plan de marcado. En Elastix
este archivo incluye otros ms para
organizar el plan de marcado de mejor
manera. Estos archivos adicionales
empiezan con la cadena extensions_
sip.conf Aqu se definen los endpoints SIP
iax.conf Aqu se definen los endpoints IAX
zapata.conf Archivo de configuracin de los canales
tipo ZAP. Aqu se puede troncalizar
dichos canales y configurar algunos
parmetros

Comentarios en los archivos de configuracin

70
Los archivos de configuracin de Asterisk pueden contener comentarios. Un comentario
empieza con el carcter de punto y coma, y una vez escrito el resto de la lnea se
convierte en un comentario. Es decir que es ignorado por Asterisk al interpretar el
archivo. Veamos un ejemplo de comentario.

;
; El siguiente es un bloque de comentarios.
; Como pueden ver puedo escribir cualquier cosa
; aqu porque ser ignorada por Asterisk.
; Los comentarios son muy tiles para escribir
; notas e informacin relativa a la configuracin
; que estamos escribiendo.

; Ahora si contino con las directivas...


;

#include sip_general_custom.conf
#include sip_nat.conf
#include sip_registrations_custom.conf
#include sip_registrations.conf

4.7 Plan de marcado (dial plan)


El plan de marcado en Elastix reside principalmente en el archivo
extensions.conf. Desde este archivo se incluyen otros importantes que contienen
tambin porciones del plan de marcado. Los principales son:

extensions_additional.conf: Aqu reside el plan de marcado


variable escrito por freePBX. Si se escribe manualmente en este archivo los
cambios se perdern cuando freePBX sobreescriba este archivo.

extensions_custom.conf: Aqu se puede escribir plan de marcado


definido manualmente por el usuario. Este archivo no es tocado por el freePBX
por lo que es seguro escribirlo sin temor a perder los cambios.

Todos estos archivos de plan de marcado estn escritos en texto plano en un formato
definido por Asterisk. Estos archivos se encuentran divididos en secciones llamadas
contextos.

Contextos

71
Bsicamente los contextos sirven para agrupar lgica de plan de marcado. Los contextos
tambin pueden incluir otros contextos mediante la clusula "include" o redirigir el hilo
de ejecucin del plan de marcado a otros contextos dependiendo de condiciones. Por
ejemplo, un contexto puede contener la lgica necesaria para rutear una llamada hacia la
troncal correspondiente luego de examinar el prefijo del nmero telefnico marcado. Un
contexto tambin puede agrupar la lgica necesaria para la aplicacin de reloj
despertador. Tambin puede incluir lgica para acceder al voicemail o para autenticar
un nmero de PIN. En general prcticamente todo en el plan de marcado se encuentra
agrupado en contextos. Los contextos son los agrupadores u organizadores del plan de
marcado.

Cada contexto debe llevar un nombre nico y este nombre va encerrado entre los
smbolos [ y ]. A continuacin un ejemplo donde se pueden observar dos contextos
llamados app-pickup y ext-test

[app-pickup]
include => app-pickup-custom
exten => _**.,1,Noop(Attempt to Pickup ${EXTEN:2})
exten => _**.,n,Pickup(${EXTEN:2})

[ext-test]
include => ext-test-custom
exten => 7777,1,Goto(from-pstn,s,1)
exten => 666,1,Goto(ext-fax,in_fax,1)
exten => h,1,Macro(hangupcall,)

Fragmento del archivo extensions_additional.conf para ilustrar los contextos

Contextos reservados

Hay dos nombres de contextos que estn reservados para un propsito especial y son
[general] y [globals] .

Instrucciones

Los contextos contienen instrucciones. Estas instrucciones son lneas de plan de


marcado que tienen la siguiente sintaxis.

exten => nombre_extension, prioridad, aplicacin

72
Estas instrucciones tambin son llamadas extensiones.

Nota: Normalmente asociamos el trmino extensin a un nmero de telfono,


pero en Asterisk el trmino extensin va ms all de lo que normalmente
conocemos. Una extensin es una serie de lgica de plan de marcado. Es ms,
cuando marcamos un nmero desde nuestro telfono no necesariamente tiene
que ringar otro telfono pues podemos crear la lgica que queramos para este
nmero dado. Por ejemplo podemos hacer que la llamada simplemente se
cuelgue, que reproduzca un mensaje dado o cosas mucho ms complejas.

Una tpica instruccin luce como la siguiente.

exten => 4567,1,Answer()

Nombre de Extensin

El nombre de extensin es un identificador numrico de la extensin. Llammosle el


nmero de telfono por ahora para simplificar las cosas. Sin embargo hay una extensin
especial no numrica llamada extensin s que le prestaremos particular atencin.

La extensin s significa cualquier extensin. La letra s viene de la palabra start que


significa inicio. Un ejemplo del uso de la extensin s es el siguiente.

[prueba]
exten => s,1,Answer()
exten => s,2,noOp(Prueba)

La extensin s se usa cuando el usuario que realizo la llamada aun no ha presionado el


numero de la extensin. Por ejemplo una llamada entrante que todava se encuentra
escuchando el IVR de bienvenida.

Prioridad

La prioridad indica el orden en el que debe ser ejecutada una instruccin dentro de un
contexto. Es necesario que la primera prioridad sea la 1 pues cuando Asterisk lee un
contexto lo primero que busca es esta prioridad.

Existe tambin una prioridad especial que es la prioridad n. La prioridad n significa que
a la prioridad de la instruccin anterior se le debe sumar uno. Esto es muy til para
facilitar la escritura del plan de marcado.

73
Por ejemplo, el siguiente plan de marcado:

exten => s,1,NoOp(Hola este es solo un ejemplo)


exten => s,2,NoOp(para demostrar)
exten => s,3,NoOp(como usar la prioridad n)

Podra ser escrito de la siguiente manera usando la prioridad n.

exten => s,1,NoOp(Hola este es solo un ejemplo)


exten => s,n,NoOp(para demostrar)
exten => s,n,NoOp(como usar la prioridad n)

Las prioridades tambin pueden contener etiquetas para facilitar su identificacin ya que
si usamos siempre la prioridad n ser difcil acceder a una ubicacin determinada
dentro de un contexto. Esto se consigue con la sintaxis n(nombre_etiqueta).

Aplicacin

En las aplicaciones radica el verdadero poder del plan de marcado en Asterisk. Para
hacer una analoga, las aplicaciones son el equivalente a las funciones de un lenguaje de
programacin. Las aplicaciones nos permitirn contestar una llamada o colgarla,
reproducir msica en espera, saltar a otros contextos entre otras muchas cosas.

Las aplicaciones tambin pueden recibir parmetros. Por ejemplo a la aplicacin Dial( )
habr que indicarle qu nmero marcar para que pueda realizar su labor.

Ms adelante en el presente captulo se explicarn con ms detalle las aplicaciones ms


comunes en el plan de marcado.

Variables

Las variables en el plan de marcado son un concepto similar a las variables en un


lenguaje de programacin. Es decir que son abstracciones que pueden almacenar
informacin de naturaleza variable. Una variable tiene la siguiente sintaxis.

${NOMBRE}

Donde nombre es el nombre de la variable. Las variables pueden ser de tres tipos:

74
Globales

Son las variables definidas en la seccin [globals] del extensions.conf. La


palabra global quiere decir que pueden ser referenciadas desde cualquier lugar.

De canal

Son las variables que se pueden definir usando el comando (o aplicacin) "Set".

Pre-definidas

Asterisk se encarga de administrar algunos nombres de variables por su cuenta. Estos


nombres se encuentran predefinidos y se llenan con cierta informacin dependiendo del
comportamiento de la llamada o de otros factores. Algunas variables predefinidas son:

${CALLERID}
${CALLERIDNAME}
${CALLERIDNUM}
${CHANNEL}
${CONTEXT}
${EPOCH}
${EXTEN}
${SIPUSERAGENT}
${UNIQUEID}

Nota: Hay un tipo adicional de variable que ser introducida en Asterisk 1.6
llamada "Shared" pero no la estudiaremos aqu puesto que la ltima versin
estable de Elastix disponible usa Asterisk 1.4

A continuacin un segmento del archivo extensions.conf que se distribuye con


Elastix. Podemos ver aqu algunas variables predefinidas como ${UNIQUEID},
${BLINDTRANSFER} y ${EPOCH}, y variables de canal como
${CALLFILENAME}.

75
[macro-record-enable]
exten => s,1,GotoIf($[${LEN(${BLINDTRANSFER})} > 0]?2:4)
exten => s,2,ResetCDR(w)
exten => s,3,StopMonitor()
exten => s,4,AGI(recordingcheck,${STRFTIME(${EPOCH},,%Y%m%d-
%H%M%S)},${UNIQUEID})
exten => s,5,Noop(No recording needed)
exten => s,999,MixMonitor(${CALLFILENAME}.wav)

Aplicaciones ms comunes

Answer

Sintaxis: Answer([delay])

Contesta un canal si este est timbrando. Puede recibir opcionalmente el parmetro


delay que le indica si debe esperar un nmero determinado de milisegundos antes de
contestar.

Background

Sintaxis:
Background(filename1[&filename2...][|opciones[|langoverride
][|context]])

Reproduce un listado de archivos de audio en el fondo, es decir que devuelve el control


a Asterisk, quien puede continuar ejecutando el plan de marcado mientras el audio
contina siendo reproducido. Cuando termina de reproducir el ltimo archivo termina
su ejecucin por lo que si se quiere seguir esperando por una extensin se debe usar otra
aplicacin en conjunto llamada WaitExten.

Esta aplicacin es tpicamente usada para reproducir el mensaje de bienvenida de un


IVR.

La aplicacin Background puede recibir algunas opciones:

Opcin Descripcin
s Saltarse la reproduccin del audio si el canal no se encuentra contestado
n No contestar el canal antes de reproducir los archivos
m Dejar de reproducir el audio si un dgito marcado coincide con una

76
extensin existente en el contexto destino

Playback

Sintaxis: Playback(filename1[&filename2...][,options])

Reproduce uno o ms archivos de audio. La diferencia con la aplicacin Background es


que Playback reproduce todo el archivo de audio hasta el final y no retorna el control
hasta que termina la reproduccin.

Nota: No es necesario especificar la extensin del archivo de audio en esta


funcin. Los archivos de audio son buscados en el directorio
/var/lib/asterisk/sounds

Hangup

Sintaxis: Hangup()

Cuelga el canal y retorna -1

Goto

Sintaxis: Goto([[context|]extension|]priority)

Salta la ejecucin del plan de marcado a un contexto, extensin y prioridades dados. Si


solo se pasa un parmetro se sobreentiende que se trata de una prioridad dentro del
mismo contexto.

Dial

Sintaxis: Dial(type/identifier, timeout, options, URL)

Este comando es el que hace la magia. Marca un canal especificado y lo vincula con el
canal corriente.

4.8 Asterisk CLI

77
Asterisk CLI es el nombre que recibe la consola de Asterisk. Es decir, una lnea de
comandos para controlar Asterisk directamente.

Para ingresar al CLI debemos ejecutar el siguiente comando desde la consola de Linux.

# asterisk -r
Asterisk 1.4.21.2, Copyright (C) 1999 - 2008 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for
details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 1.4.21.2 currently running on elastix (pid = 2245)
Verbosity is at least 3
elastix*CLI>

Como podemos observar obtenemos un prompt CLI> desde donde podemos ejecutar
una serie de comandos que veremos en breve.

El CLI tambin nos puede proveer informacin en tiempo real de la actividad de


Asterisk. Podemos controlar el grado de detalle con el que queremos ver dicha
informacin con algunos comandos. Los ms usados son los siguientes.

elastix*CLI> core set debug 9


Core debug was 3 and is now 9
elastix*CLI> core set verbose 9
Verbosity is at least 9

Mientras ms altos los niveles de las variables debug y verbose ms detallada ser
la informacin mostrada. Por omisin el grado nivel de verbose en Elastix se
encuentra en 3.

Nota: Debido al gran volumen de informacin que se puede generar con estos
comandos es importante reestablecer los valores de las variables debug y
verbose a los mnimos al finalizar nuestras tareas de diagnstico. Caso
contrario Asterisk continuar generando esta informacin detallada cuando
realmente no la necesitamos, lo cual es un trabajo extra que consume recursos.
En sistemas con mucha actividad este gasto extra puede ser significativo y
afectar el desempeo de las llamadas.

78
Comandos del CLI

A continuacin una breve lista de los comandos de CLI ms comunes. Para ver una lista
completa de comandos revisar el Apndice C.

Comando Descripcin
agi debug Permite habilitar el debug de scripts AGI.
Se apaga con agi debug off
core set debug channel Habilita el debug en un canal determinado
core set debug Permite cambiar el nivel de debugging. Se
apaga con core set debug off
core set verbose Incrementa la intensidad del logging. Muy
til en diagnstico
core show channels Muestra informacin de los canales
activos en el instante de ejecutar el
comando
dialplan reload Recarga todo el plan de marcado
dialplan show Muestra el plan de marcado
help Muestra un listado con todos los
comandos de CLI disponibles
iax2 set debug Habilita el debug a nivel de IAX2. Se
deshabilita con el comando iax2 set
debug off
iax2 show peers Muestra los peers definidos y alguna
informacin adicional como el IP desde
donde se conectan, el estatus, entre otros
datos
iax2 show registry Muestra informacin de registro IAX2 e
informacin como el estatus y el IP a la
que se trata de conectar
module reload Recarga todos los mdulos de Asterisk.
til para aplicar los cambios hechos en
los archivos de configuracin
pri debug span Habilita debug de un span determinado de
una interfase PRI
restart gracefully Reinicia Asterisk de manera ordenada
restart now Reinicia Asterisk de manera brusca
restart when convenient Reinicia Asterisk cuando no haya
actividad en la central. Adecuado en
ambientes de produccin donde no
tenemos otra opcin que reiniciar la
central pero no queremos tampoco que se
corten llamadas

79
sip set debug ip Habilita debug de SIP a nivel de una
direccin IP especfica
sip set debug peer Habilita debug de SIP a nivel de un peer
especfico
sip show peers Muestra un listado con todos los peers SIP
configurados e informacin de cada uno
de ellos como el estatus
sip show registry Muestra un listado con los registros SIP e
informacin relevante de cada uno de
ellos
stop gracefully Detiene Asterisk de manera ordenada
stop now Detiene Asterisk de manera brusca
stop when convenient Detiene Asterisk cuando no haya
actividad en la central. Adecuado en
ambientes de produccin donde no
tenemos otra opcin que reiniciar la
central pero no queremos tampoco que se
corten llamadas
zap show channels Muestra un listado de los canales ZAP y
algunos parmetros de funcionamiento.
Ver ejemplo luego de esta tabla.
zap show status Muestra un listado de los dispositivos
ZAP y un reporte de alarmas y errores

elastix*CLI> zap show channels


Chan Extension Context Language MOH Interpret
pseudo from-zaptel es default
1 from-pstn default
2 from-pstn default
3 from-pstn default
4 from-pstn default
5 from-zaptel es default
6 from-zaptel es default
7 from-zaptel es default
8 from-pstn default
9 from-zaptel es default
10 from-zaptel es default
11 from-zaptel es default
12 from-zaptel es default
elastix*CLI>

80
Instalando Elastix
Hay hombres que luchan un da y son buenos. Hay otros que luchan un ao y son
mejores. Hay quienes luchan muchos aos, y son muy buenos. Pero hay los que luchan
toda la vida, esos son los imprescindibles
-- Bertolt Bretch

5.1 Instalando desde CD


Antes de comenzar asegrese de tener una copia de la ltima versin estable de Elastix.
Esta se puede conseguir en el sitio de descargas del proyecto en
http://sourceforge.net/projects/elastix/

Elastix se distribuye como un archivo ISO que puede ser quemado a un CD desde
cualquier software de grabacin de CDs.

Una vez quemado el CD insrtelo en su computador al momento de encenderlo.


Asegrese de que su computador arranque de la unidad de CDROM, caso contrario
deber habilitar esta opcin en el BIOS de su mquina. Si todo va bien debera obtener
una pantalla como la siguiente.

81
Pantalla de instalacin inicial

Nota: El CD de instalacin de Elastix formatear TODO el disco duro durante


el proceso de instalacin as que asegrese de no tener informacin que vaya a
necesitar en su disco duro.

Si usted es un usuario experto puede ingresar en modo avanzado digitando el comando:


advanced

Caso contrario espere, el CD de instalacin iniciar la instalacin automticamente


presione ENTER.

Proceda a escoger el tipo de teclado de acuerdo al idioma. Si su teclado es de idioma


espaol seleccione la opcin es.

82
Seleccin de tipo de teclado

Seleccione la hora zona horaria de su regin.

Seleccin de zona horaria

Digite la contrasea que ser usada por el administrador de Elastix. Recuerde que esta
es una parte crtica para la seguridad del sistema.

83
Escogiendo la contrasea de root

Nota: Los procedimientos a continuacin los realizar el CD de instalacin de


manera automtica.

Primero se buscar las dependencias necesarias para la instalacin.

El instalador se encuentra revisando dependencias entre paquetes

Luego se procede con la instalacin, inicialmente usted ver algo como lo siguiente.

84
Inicio del proceso de instalacin de paquetes

Imagen del proceso de instalacin por finalizar.

Fin del proceso de instalacin de paquetes

Una vez se realice la instalacin completa, se procede a reiniciar el sistema.

Luego de reiniciar el sistema usted podr escoger entre las opciones de boot la distro
de Elastix.

85
Pantalla de GRUB para seleccionar una imagen de arranque

Ingrese como usuario root y la contrasea digitada al momento de la instalacin.

Pantalla de autenticacin para ingresar a Elastix desde consola

86
5.2 Instalando Elastix sobre un CentOS o
Red Hat preinstalado
A pesar de que el CD de Elastix es la manera recomendada de instalar la distro existen
algunos escenarios donde es deseable partir de un sistema operativo pre-instalado y
sobre l instalar. Algunas razones para hacer esto podran ser las siguientes.

Soporte para 64 bits y obviamente ms de 4 GB de RAM


Para obtener soporte Red Hat

Para cumplir con este cometido se ha ideado un script llamado CentOS2Elastix. Este
script bsicamente convierte un CentOS en un Elastix. CentOS es una popular
distribucin de Elastix basada en la popular tambin Red Hat. Por lo dicho, al menos en
teora, este script tambin debera funcionar sobre Red Hat.

Sin embargo, no todo es soplar y hacer botellas. Solo ciertas versiones de CentOS son
soportadas. La ltima versin del script CentOS2Elastix funciona con CentOS 5.2
usando kernel 2.6.18-53. Es necesario que se encuentre instalado este kernel
exactamente pues algunos drivers de Elastix son dependientes del kernel. Por ejemplo,
Zaptel.

El script CentOS2Elastix se lo puede descargar de elastix.org. Sin embargo, se trata


realmente de una imagen ISO que hay que montar antes de poder acceder a su
contenido. Por esta razn, luego de descargar la imagen podemos seguir el siguiente
procedimiento.

# mkdir /testFolder
# mount -o loop ElastiXCorE-xxxx.iso /testFolder
# cd /testFolder
# ./install

En el ejemplo anterior debemos reemplazar las letras xxxx por la versin del script que
nos hemos descargado.

Nota: Para ms informacin existe un pequeo how-to en el wiki de Elastix.org

5.3 Instalando sobre un soft RAID

87
Una configuracin muy til que Elastix ha heredado de Linux es la posibilidad de
configurar arreglos de disco por software (Software RAID), permitiendo agregar un
nivel mnimo de redundancia a un bajo costo.

Aunque estn soportados 3 tipos de RAID (0, 1 y 5), el que generalmente se utiliza es
del RAID 1 o espejo que nos permite tener duplicada la informacin de las
particiones. Es importante recalcar que no es estrictamente necesario que todas las
particiones sean agregadas al arreglo, sin embargo, es recomendable que si se tienen 2
discos duros, se haga un espejo de todas las particiones.

Un esquema de particionamiento comn consiste en tener una particin de 100Mb para


/boot, una particin de 2Gb para la memoria swap y el resto del espacio en una
particin para la raz /. Si se sigue este esquema pero con un arreglo de tipo 1 se
debern crear las 3 particiones en ambos discos duros de tal forma que al final se
tendrn 6 particiones de tipo RAID.

La configuracin del Software RAID se la hace durante el proceso de instalacin del


Elastix, pero utilizando el modo avanzado. Bsicamente se presentar un paso adicional
correspondiente al particionamiento de los discos duros, ste paso se subdivide a su vez
en pasos adicionales que son la creacin de las particiones de tipo RAID y luego la
creacin de los dispositivos RAID que agrupan a las particiones creadas anteriormente.

Para ingresar en modo avanzado es necesario digitar el comando advanced en la


pantalla inicial.

88
Pantalla de instalacin inicial: escogiendo opcin advanced

Al igual que en el proceso de instalacin normal se deber seleccionar el tipo de teclado


de acuerdo al idioma, luego de lo cual aparecer una pantalla preguntando el tipo de
particionamiento que se va a realizar.

Opciones de tipo de particionamiento

Se debe elegir la opcin Create custom layout (Crear un diseo personalizado) y


asegurarse de que estn listados y seleccionados los dos discos duros del servidor. La
pantalla de particionamiento mostrar el listado de discos duros con las particiones que
se vayan creando.

Herramienta de particionamiento mostrando los discos duros aun sin particionar

89
El primer paso ser crear todas las particiones de tipo RAID, para ello se elige la opcin
New.

Creando una particin

En el tipo de sistema de archivos se debe elegir software RAID, adicionalmente se


debe especificar el disco duro en el que se crear la particin, el tamao de la misma y
si ser una particin primaria. Luego de seleccionar OK la nueva particin aparecer
en el listado como se muestra a continuacin.

Resumen del particionamiento hasta este punto

90
Se debe repetir este proceso por cada una de las particiones RAID y finalmente se
tendr un listado como el que se muestra a continuacin.

Listado de particiones al final del proceso

En este listado se aprecia que en el particionamiento es exactamente igual entre los dos
discos duros. El siguiente paso ser la creacin de los dispositivos RAID. Para ello se
selecciona la opcin de RAID.

Creacin del RAID

91
En esta pantalla se debe elegir el punto de montaje que tendr el dispositivo, el tipo de
sistema de archivos, el tipo de RAID (1) y las particiones RAID que le pertenecen. Hay
que tener mucho cuidado de seleccionar adecuadamente las particiones
correspondientes. Este proceso de repetir por cada uno de los dispositivos RAID de
acuerdo al esquema de particionamiento definido. Posteriormente, los dispositivos
RAID aparecern en el listado de las particiones.

Finalmente hemos terminado, el RAID est creado

Finalmente, se elige la opcin OK y se sigue con el procedimiento de instalacin


normal.

92
Elastix Overview
Los que dicenimposible no deberan interrumpir a los que estn
intentando
-- Thomas Edison

Elastix es una distribucin de Software Libre de Servidor de Comunicaciones


Unificadas que integra en un solo paquete algunas tecnologas de comunicaciones
claves como:

VoIP PBX
Fax
Mensajera Instantnea
Email
Colaboracin

Al decir distribucin nos referimos al concepto de distro, es decir un conjunto de


paquetes de software que se distribuyen juntos en un mismo medio, en este caso un CD,
incluyendo el instalador y sistema operativo. Al final de la instalacin tendremos un
Servidor de Comunicaciones Unificadas listo para produccin.

Elastix implementa gran parte de su funcionalidad sobre 4 programas de software muy


importantes como son Asterisk, Hylafax, Openfire y Postfix. Estos brindan las
funciones de PBX, Fax, Mensajera Instantnea e Email, respectivamente. La parte de

93
sistema operativo se basa en CentOS, una popular distribucin Linux orientada a
servidores.

A continuacin una figura un poco ms ordenada donde se pueden observar los


componentes de Elastix y su relacin entre s.

Esquema general de los componentes de Elastix

6.1 Breve historia del proyecto


Elastix fue creado y actualmente es mantenido por la compaa ecuatoriana PaloSanto
Solutions. Elastix fue liberado por primera vez en Marzo de 2006 pero no se trataba de
una distro sino ms bien de una interfase para mostrar registros de detalles de llamadas
para Asterisk, fue recin a finales de Diciembre de 2006 cuando se lo lanz como una
distribucin que contena muchas herramientas interesantes administrables bajo una
misma interfase Web que llam la atencin por su usabilidad.

Desde entonces hasta la fecha esta distribucin no ha parado de crecer en popularidad y


actualmente es una de las preferidas del mercado. En 2007 el proyecto estuvo nominado
en 2 categoras para los premios CCA de SourceForge.

94
6.2 Caractersticas de Elastix
Es difcil enlistar todas las caractersticas de Elastix en un simple listado, pero las ms
importantes son segn el sitio www.elastix.org y basado en Elastix 1.2:

VoIP PBX

Grabacin de llamadas con interface va Web


Voicemails con soporte para notificaciones por email
IVR configurable y bastante flexible
Soporte para sintetizacin de voz
Herramienta para crear lotes de extensiones lo cual facilita instalaciones nuevas
Cancelador de eco integrado
Provisionador de telfonos va Web. Esto permite instalar numerosos telfonos
en muy corto tiempo.
Soporte para Video-fonos
Interface de deteccin de hardware de telefona
Servidor DHCP para asignacin dinmica de IPs a IP-Phones
Panel de operador. Desde donde el operador puede ver toda la actividad
telefnica de manera grfica y realizar sencillas acciones drag-n-drop como
transferencias, parqueos, etc
Parqueo de llamadas
Reporte de detalle de llamadas (CDRs) con soporte para bsquedas por fecha,
extensin y otros criterios
Tarifacin con reportacin de consumo por destino
Reporte de uso de canales por tecnologa (SIP, ZAP, IAX, Local, H323)
Soporte para colas de llamadas
Centro de conferencias. Desde donde se puede programar conferencias estticas
o temporales.
Soporta protocolo SIP, IAX, H323, MGCP, SKINNY entre otros
Codecs soportados: ADPCM, G.711 (A-Law & -Law), G.722, G.723.1 (pass
through), G.726, G.729 (si se compra licencia comercial), GSM, iLBC
Soporte para interfaces anlogas FXS/FXO
Soporte para interfaces digitales E1/T1/J1 a travs de protocolos PRI/BRI/R2
Soporte para interfaces bluetooth para celulares (canal chan_mobile)
Identificacin de llamadas
Troncalizacin

95
Rutas entrantes y salientes las cuales se pueden configurar por coincidencia de
patrones de marcado lo cual da mucha flexibilidad
Soporte para follow-me
Soporte para grupos de ringado
Soporte para paging e intercom. El modelo de telfono debe soportar tambin
esta caracterstica
Soporte para condiciones de tiempo. Es decir que la central se comporte de un
modo diferente dependiendo del horario
Soporte para PINes de seguridad
Soporte DISA
Soporte Callback
Editor Web de archivos de configuracin de Asterisk
Acceso interactivo desde el Web a la consola de Asterisk

Fax

Servidor de Fax administrable desde Web


Visor de Faxes integrado, pudiendo descargarse los faxes desde el Web en
formato PDF.
Aplicacin fax-a-email
Personalizacin de faxes-a-email
Control de acceso para clientes de fax
Puede ser integrado con WinprintHylafax. Esta aplicacin permite, desde
cualquier aplicacin Windows, enviar a imprimir un documento y este realmente
se enva por fax.
Configurador Web de plantillas de e-mails

General

Ayuda en lnea embebida


Elastix est traducido a 20 idiomas
Monitor de recursos del sistema
Configurador de parmetros de red
Control de apagado/re-encendido de la central va Web
Manejo centralizado de usuarios y perfiles gracias al soporte de ACLs
Administracin centralizada de actualizaciones
Soporte para backup/restore a travs del Web
Soporte para temas o skins

96
Interface para configurar fecha/hora/uso horario de la central

Email

Servidor de Email con soporte multi-dominio


Administrable desde Web
Interfase de configuracin de Relay
Cliente de Email basado en Web
Soporte para "cuotas" configurable desde el Web

Colaboracin

Calendario integrado con PBX con soporte para recordatorios de voz


Libreta telefnica (Phone Book) con capacidad clic-to-call
Dos productos de CRM integrados a la interfase como vTigerCRM y SugarCRM

Extras

Interface de generacin de tarjetas de telefona basada en software A2Billing


CRM completo basado en el producto vTigerCRM
Tambin versin open source de SugarCRM

Call Center

Mdulo de call center con marcador predictivo incluido. Ms detalle de este


mdulo ms abajo.

Mensajera instantnea

Servidor de mensajera instantnea basado en OpenFire e integrado a PBX con


soporte para protocolo Jabber, lo que permite usar una amplia gama de clientes
de IM disponibles
Se puede iniciar una llamada desde el cliente de mensajera (si se usa el cliente
Spark)
El servidor de mensajera es configurable desde Web
Soporta grupos de usuarios

97
Soporta conexin a otras redes de mensajera como MSN, Yahoo Messenger,
GTalk, ICQ, etc. Esto permite estar conectado a varias redes desde un mismo
cliente
Reporte de sesiones de usuarios
Soporte para plugins
Soporta LDAP
Soporta conexiones server-to-server para compartir usuarios

6.3 Licenciamiento
Elastix es software libre distribuido bajo licencia GPL versin 2. Es decir que puede ser
usado, copiado, estudiado, modificado y redistribuido libremente segn los lineamientos
de esta licencia.

Para acceder al texto completo de la licencia el lector puede seguir el siguiente vnculo.

http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt

6.4 Sobrevuelo por la interfase de


administracin Web de Elastix
La interfase Web de Elastix es una aplicacin completa de administracin del servidor
de comunicaciones unificadas escrita en su mayora en lenguaje PHP.

En este capitulo haremos un sobrevuelo de la funcionalidad mas importante que


podemos administrar desde esta interfase y a continuacin explicaremos como se
encuentran organizados los mens y mdulos con los que cuenta Elastix. Cada men
aparecer en negritas encabezando una tabla con los mdulos que dicho men contiene.

System

Nombre mdulo Descripcin


Dashboard Dashboard es una especie es una especie
de escritorio donde el usuario puede ver
un resumen de actividad en Elastix como
sus ltimos emails, sus voicemails, sus
ltimos faxes, si tiene algo agendado en el
calendario, etc

98
System Info Muestra informacin de sistema como uso
de memoria, CPU y disco duro
Network Men de configuracin de parmetros de
red
Network Parameters Aqu se pueden configurar parmetros de
red como direccin IP y mscara de red,
gateway, nombre de host, servidores
DNS, entre otros.
DHCP Server Permite configurar el servidor DHCP
embebido que viene con Elastix
User Management Men de administracin de usuarios de
Elastix
Groups Permite configurar grupos de usuarios
Users Permite administrar usuarios y asignarlos
a grupos. Tambin permite asociar cuentas
de email y extensiones telefnicas a
usuarios
Group Permission Aqu se configuran los permisos de acceso
a los diferentes mdulos para un grupo
determinado
Load Module Permite cargar un mdulo de Elastix
Shutdown Sirve para apagar el servidor
Hardware Detection Mdulo de deteccin de hardware
telefnico
Updates Men de actualizaciones
Packages Listado de paquetes con la opcin de
instalar o actualizar
Repositories Se pueden configurar los repositorios en
base a los cuales se realizan las
actualizaciones
Backup/Restore Modulo para respaldar el servidor Elastix
y tambin para subir respaldos y restituir
informacin
Preferences Men para configurar preferencias varias
Language Cambia el idioma de toda la interfase Web
de Elastix
Date/Time Cambia la fecha, hora y zona horaria del
servidor
Themes Permite cambiar los temas (skins) para
darle a la interfase de Elastix un diferente
look

99
PBX

Nombre mdulo Descripcin


PBX Configuration Aqu se encuentra embebido freePBX.
Desde aqu se hacen la mayora de
configuraciones a nivel de central
telefnica
Flash Operator Panel Panel de operador basado en flash,
herramienta muy til para el recepcionista
Voicemails Listado de voicemails. Se debe haber
asociado previamente al usuario con una
extensin telefnica para poder ver el
listado
Monitoring Listado de grabaciones telefnicas. Al
igual que con el mdulo anterior el
usuario debe estar asociado con una
extensin
Echo Canceller Actividad del cancelador de eco
Endpoint Configuration Herramienta muy til para provisionar
lotes grandes de telfonos en corto tiempo
Conference Mdulo para agendar conferencias
temporales
Extensions Batch Mdulo para crear grandes lotes de
extensiones
Tools Men con herramientas varias
Asterisk CLI Permite ejecutar comandos del CLI desde
el Web
File Editor Permite editar archivos de texto plano
desde el Web

Fax

Nombre mdulo Descripcin


Virtual Fax List Listado de extensiones de fax virtuales. Es
decir que recibirn faxes en formato PDF
en un buzn de email
New Virtual Fax Este mdulo permite crear extensiones de
fax nuevas
Fax Master Permite configurar una direccin email
que recibir notificaciones del
funcionamiento del fax
Fax Clients Configuracin de permisos de acceso para

100
aplicaciones clientes de fax
Fax Visor Visor de faxes que permite visualizar
faxes en formato PDF
Template Email Herramienta de configuracin de plantilla
de email que se enviar cada vez que
arribe un fax

Email

Nombre mdulo Descripcin


Domains Creacin de dominios de email. Elastix
soporta multidominios.
Accounts Creacin de cuentas de email y asignacin
de cuotas de espacio en disco duro
Relay Configuracin de relay para permitir a
otras redes utilizar a Elastix para enviar su
email
Webmail Interfase de Webmail basada en software
Roundcube

IM

Nombre mdulo Descripcin


OpenFire Interfase embebida para administrar el
servidor Openfire

Reports

Nombre mdulo Descripcin


CDR Report Reporte de CDRs con opciones de filtrado
por campos y por fechas
Channels Usage Reporte de uso de canales. Se pueden ver
grficos por diferentes tipos de tecnologa
como SIP e IAX
Billing Men de tarifacin
Rates Aqu se pueden establecer las tarifas
dependiendo de la troncal y el prefijo
telefnico
Billing Report Reporte de tarifacin con filtrado por
fechas y campos. Bsicamente se calcula

101
y muestra el costo de cada llamada
Destination Distribution Grfico de pastel de la distribucin por
destinos. Hay 3 criterios: por costo, por
nmero de llamadas y por tiempo de
duracin de las llamadas
Billing Setup Configuracin de las troncales habilitadas
para la tarifacin. Tambin se establece
aqu la tarifa por omisin
Asterisk Logs Interfase para ver el log de Asterisk con
filtrado por fechas y cadenas de texto

Extras

Nombre mdulo Descripcin


vTigerCRM Software de poderoso CRM embebido
Calling Cards Interfase basada en software A2Billing
para administrar tarjetas de llamadas
Downloads Men de descargas
Softphones Listado de aplicaciones de softphones
recomendadas
Fax Utilities Listado de aplicaciones de fax
recomendadas
Instant Messaging Listado de clientes de IM recomendados
SugarCRM Software CRM en su versin de cdigo
abierto

Agenda

Nombre mdulo Descripcin


Calendar Mdulo de calendario para agendar
eventos que inclusive pueden generar
llamadas telefnicas automticas
Address Book Libreta de direcciones
Recordings Interfase para grabar mensajes que se
pueden asociar con el mdulo Calendar y
que se reproducen cuando se genera una
llamada automtica

102
6.5 Elastix.org: Sitio oficial del proyecto
El principal recurso al que puede acceder el usuario en busca de informacin acerca de
Elastix es el sitio Web oficial del proyecto ubicado en http://www.elastix.org

Aqu el usuario puede encontrar algunas herramientas tiles como:

Foros
Wiki
Chat en vivo
Suscripcin a listas de correo
Links a descargas
entre otra informacin

Foros

Una de las herramientas ms importantes en el sitio Web de Elastix son los foros. Los
foros son muy activos y para participar en ellos basta registrarse gratuitamente como
usuario. Sin duda esta es una buena manera de buscar solucin a problemas comunes y
los desarrolladores de Elastix suelen visitar esta herramienta a la caza de posibles bugs.
Sin embargo, el foro es un lugar pblico as que antes de participar hay que tener en
cuenta algunas reglas de etiqueta de foros bsicas.

Antes de preguntar en el foro busque si su problema ha sido resuelto antes. La


mayora de problemas comunes ya han sido reportados antes. Si vuelve a
preguntar es posible que no le contesten adecuadamente, recuerde que es un foro
pblico.

Los foros se encuentran organizados de cierta manera. Se debe tratar en todo


momento de aadir un nuevo comentario a la categora correcta, caso contrario
se puede ensuciar el foro y tambin el nuevo comentario podra ser ignorado.

Use un lenguaje adecuado para no herir la susceptibilidad de nadie. La


amabilidad es un buen ingrediente si desea que otras personas colaboren con su
problema.

El foro no es un espacio publicitario.

El foro es un espacio moderado. No incluya lenguaje subido de tono, amenazas,


comentarios mal intencionados o que puedan herir la susceptibilidad de alguien.
Su mensaje puede ser eliminado permanentemente.

103
No adjunte imgenes o archivos pesados. Si necesita subir un archivo mayor a 2
MB trate de subirlo a otro servidor y simplemente copie el link. Nos gustara
aceptar todos los archivos pero debemos cuidar los recursos de los servidores
para poder servir a la mayor cantidad de usuarios posible.

Use un ttulo de mensaje relevante y si en algn momento la discusin cambia


de tpico abra otro mensaje para tratar el nuevo tema. Esto ayudar a tener el
foro ms legible.

104
Elastix: Configuracin Bsica
Educacin es elevar al hombre al nivel de su tiempo
-- Jos Mart

7.1 Ingreso al Sistema


El usuario y contrasea por defecto para ingreso al sistema son los siguientes:

Usuario: admin
Contrasea: palosanto

7.2 Configuracin de red


Lo primero que debemos configurar luego de ingresar al equipo son los parmetros de
red:

La opcin Red del Men Sistema del Elastix nos permite visualizar y configurar los
parmetros de red del servidor.

105
Configuracin de parmetros de red

Host: Nombre del Servidor, por ejemplo: pbx.example.com


Puerta de Enlace: Direccin IP de la Puerta de Enlace (Gateway)
DNS Primario: Direccin IP del Servidor de Resolucin de Nombres
(DNS) Primario
DNS Secundario: Direccin IP del Servidor de Resolucin de Nombres
(DNS) Secundario o Alternativo.

7.3 Creando una extensin


Esta seccin est dirigida a los telfonos, softphones, sistemas paginadores, o cualquier
cosa que pueda ser considerada como una extensin.

Definir y corregir extensiones es probablemente la tarea ms comn realizada por un


administrador de PBX, y como tal, se encontrar muy al corriente de esta pgina. Hay
actualmente cuatro tipos de dispositivos o tecnologas soportadas: SIP, IAX2, ZAP y
Custom.

Para crear una Nueva extensin ingrese al Men PBX. Por defecto se accede a la
seccin Configuracin PBX, en esta seccin escogemos del panel izquierdo la opcin
Extensiones. Ahora podremos crear una nueva extensin.

Primero escoja el dispositivo de entre las opciones disponibles:

106
Creando nueva extensin

Generic SIP Device: El SIP es el protocolo estndar para los telfonos VoIP y
ATA. La mayora de telfonos IP soportan SIP.

Generic IAX2 Device: IAX es el protocolo Inter Asterisk Exchange, un


nuevo protocolo apoyado solamente por algunos dispositivos (Por ejemplo, los
telfonos basados en PA1688, y el IAXy ATA).

Generic ZAP Device: ZAP es un dispositivo de hardware conectado al servidor


Elastix. Por lo general tarjetera PCI controlada con los drivers del proyecto
Zaptel (de all el nombre de ZAP).

Other (Custom) Device: Custom nos permite escribir directamente una entrada
en los archivos de configuracin y por ende esta entrada debe estar en formato
de extensin entendible por Asterisk. Puede tambin ser utilizado para mapear
una extensin a un nmero externo. Por ejemplo, para enrutar la extensin 211
a 1-800-555-1212, se puede crear una extensin Custom 211 y en la caja de
texto del dial se puede ingresar: Local/18005551212@outbound-allroutes.

Una vez haya escogido el dispositivo correcto, de clic en Ingresar.

Luego de escoger el tipo de dispositivo nos aparecer un formulario que vara un poco
dependiendo de lo que hayamos escogido previamente. Nosotros supondremos que el
usuario ha escogido SIP pues es lo ms comn.

107
Formulario de creacin de nueva extensin SIP

Como podemos observar se pueden configurar aqu muchas cosas interesantes pero no
todos los datos son necesarios para conseguir una extensin funcional as que
explicaremos aqu solo los ms importantes.

Extensin del Usuario: Debe ser nico. ste es el nmero que se puede marcar
de cualquier otra extensin, o directamente del recepcionista Digital si est
permitido. Puede ser cualquier longitud, pero convencionalmente se utiliza una
extensin de tres o cuatro cifras.

Display Name: Es el nombre del Caller ID, para llamadas de este usuario sern
fijadas con su nombre. Slo debe ingresar el nombre no la extensin.

108
Secret: Esta es la contrasea usada por el dispositivo de la telefona para
autenticar al servidor de Asterisk. Esto es configurado generalmente por el
administrador antes de dar el telfono al usuario, y generalmente no se requiere
que lo conozca el usuario. Si el usuario est utilizando un softphone, entonces
necesitarn saber esta contrasea para configurar su software.

Configuracin de telfono softphone

Nota: Aqu explicaremos algo muy breve. Para ms detalles visitar el captulo
Configuracin de telfono IP.

Al configurar un telfono softphone lo que lograremos es tener una PC conectada que


cumpla con las mismas funciones de un telfono convencional, para esto es necesario
instalar un software que haga las veces de telfono. Adems se necesita disponer de
audfonos y micrfono. Existen varias alternativas para softphones, entre ellos podemos
citar los siguientes:

Zoiper: Este software nos permite trabajar con extensiones de tipo SIP e IAX,
adems es multiplataforma, podemos descargarlo de la siguiente direccin:
http://www.asteriskguru.com

XtenLite: Este software trabaja con extensiones SIP nicamente, tambin es


multiplataforma, lo podemos descargar de la siguiente direccin:
http://www.xten.com/index.php?menu=download

7.4 Configuraciones generales


En esta seccin se configuran parmetros generales del sistema Elastix en lo que tiene
que ver con telefona. Explicaremos qu significan los parmetros ms relevantes.

109
Formulario de modificacin de configuraciones generales

110
Opciones del comando dial: Explicaremos esto ms al detalle en breve.

Company Directory: El directorio de una empresa se puede escuchar marcando *411


# cuando se escucha un IVR.

Play extension number: En el mensaje que toca: Por favor mantngase en la lnea
mientras transfiero su llamada a la extensin XXX. Es decir, menciona la extensin a
donde se va a transferir la llamada por lo tanto el llamante ya sabr el nmero de
extensin para llamadas futuras.

Security Settings: Permite a annimas llamadas SIP ser conectadas. El valor por
omisn es no.

Online updates: Permite revisar por actualizaciones disponibles. El valor por omisn
es no.

Opciones del comando Dial (Dial command options)

La mayora de opciones son configuradas en tr, lo cual significa que la persona que
recibe la llamada puede transferirla usando el feature configurado para esta
funcionalidad. La r significa que enviar un ring al llamante y no pasa ningn audio
hasta la llamada sea contestada.

Aqu se describen otras opciones:

A(X): Toca un anuncio a la persona llamada, usando x como archivo.


D(X): Enva un especfica seal DTMF
h: Permite a la persona llamada colgar enviando el dgito *.
H: Permite al llamante colgar enviando el dgito *.
r: Enva un ringueado a la parte llamante.
T/t: Permite a la parte (llamante/llamada) transferir llamadas.
W/w: Permitir a la parte (llamante/llamada) habilitar la grabacin de llamadas.

7.5 Configuracin de colas


Las colas consisten en grupos de usuarios para los cuales se definen ciertas polticas (o
estrategias) principalmente en lo que tiene que ver con llamadas entrantes. Las colas
pueden ser llamadas como una extensin ms. Los usuarios de las colas pueden ser
estticos, llamados miembros (es decir que tienen un nmero de extensin fijo) o

111
usuarios dinmicos, llamados agentes (es decir que pueden ingresar a la cola desde
cualquier extensin).

Una poltica o estrategia define la manera como se distribuyen las llamadas entrantes a
la cola entre los miembros o agentes. Las polticas de cola que soporta Asterisk al
momento son las siguientes:

ringall: ring all available channels until one answers (default)


roundrobin: take turns ringing each available interface (deprecated in 1.4, use
rrmemory)
leastrecent: ring interface which was least recently called by this queue
fewestcalls: ring the one with fewest completed calls from this queue
random: ring random interface
rrmemory: round robin with memory, remember where we left off last ring
pass

Para configurar una cola en Elastix tenemos que ir al Mdulo PBX y escoger en el
men llamado Queues.

Para aadir una nueva cola deberemos llenar el siguiente formulario.

112
Formulario para aadir nueva cola

113
Queue Number:
Este es el nmero que puede ser marcado desde cualquier extensin para ser puesto en
la cola. Este tambin es el mismo nmero que se usa cuando se selecciona un destino.
En conclusin este nmero identifica a la cola y debe ser nico.

Queue Name:
Un nombre corto para la cola. Este es usado nicamente para propsitos de
identificacin.

Queue password:
A una cola se le puede poner una clave. Cuando un agente intenta conectarse, deberan
ser preguntados por la clave de la cola.

CID name prefix:


Como un agente puede logonearse en varias colas al mismo tiempo, es til colocarle un
prefijo al Caller ID para que cuando el agente vea la llamada entrante en el telfono
sepa a que cola pertenece la llamada.

Static Agents:
Estos son dispositivos que siempre se loguean en la cola. Esto es til si se tienen
siempre los mismo agentes en una cola. Aqu se deben listar los Agentes de la siguiente
forma:

A5013, 0

Donde la letra A indica que se trata de un agente y no de una extensin, seguido del
nmero de agente y el valor 0

Agent Announcement:
Este es un anuncio que es tocado al agente antes de que le conecten una llamada. Esto es
til cuando los agentes no tienen Caller ID en su telfono y les avisa de una llamada
entrante.

Music On Hold:
Este es la msica que es tocada al llamante mientras est en la cola por un agente que lo
atienda.

Max wait time:


Es el nmero mximo de segundos que un llamador puede esperar en la cola antes de
ser sacado de la misma. La accin a tomar despus de este tiempo es configurado ms
abajo.

114
Max callers:
Es el mximo nmero de personas permitidas a esperar en la cola. Si este nmero es
alcanzado, las personas adicionales son enviadas al destinado configurado en Destino de
Fallas.

Join Empty:
Si se desea que los llamantes ingresen a una cola vaca (sin agentes), entonces hay que
setear este parmetro a yes. Esto no es recomendado.

Leave when empty:


Se setea a yes si se quiere sacar a los llamantes que ingresen a una cola en donde no
hay agentes. Recomendado poner no.

Ring strategy:
Hay 6 tipos de estrategia de ringueado:
ringall: ringuean todos los agentes vlidos hasta que alguno responda.
Roundrobin: ringuea en orden desde el primer agente vlido
leastrecent: ringuea al agente cual fue el menos reciente llamado en la cola
fewestcalls: ringuea al agente con menos llamadas completadas en la cola.
random: ringuea a un agente en forma aleatoria.
Rrmemory: round robin con memoria, recuerda donde se conect la ltima llamada.

Agent timeout:
El nmero de segundo que se espera para intentar nuevamente riguear a un agente.

Wrap-up-time:
Despus de una llamada exitosa, indica el nmero de segundos antes de declarar al
agente libre y enviarle una nueva llamada, El valor por defecto es 0.

Call Recording:
Opcin de grabar las llamadas entrantes a la cola.

Fail Over Destination:


Este el destino si una llamada de la cola no pudo ser atendida.

7.6 IVR y sistema de grabacin

115
Grabacin de mensaje de bienvenida

Antes de Crear un IVR es necesario tener un mensaje de bienvenida. Por lo tanto hay
que grabar uno cargar uno ya existente.

Para acceder a este mdulo dirjase al Men PBX, aparecer por defecto la seccin
Configuracin PBX, en el panel izquierdo escoja la opcin System Recordings
(Grabaciones del Sistema).

Grabaciones del sistema

La primera opcin que tenemos es crear un anuncio grabndolo directamente, para esto
ingresamos el nmero de extensin desde el cual queremos realizar la grabacin, en este
caso usaremos la extensin 201 y damos clic sobre el botn Go.

Luego de hacer esto, Asterisk estar esperando nuestra grabacin en la extensin 201,
para continuar marcamos *77, grabamos nuestro mensaje y finalmente presionamos la
tecla # (numeral).

Para revisar nuestra grabacin presionamos *99, ingresamos el nombre de nuestra


grabacin y damos clic sobre el botn Save (Guardar).

La segunda opcin que tenemos es cargar una grabacin creado en otro medio, para ello
debemos tener un archivo soportado por Asterisk, damos clic sobre el botn
Examinar..., buscamos nuestro archivo, luego procedemos a darle un nombre a esta
grabacin. Finalmente damos clic en Save (Guardar).

116
Configurar un IVR de bienvenida

El IVR nos permite grabar un mensaje de bienvenida y adems podemos tener un men
controlado por teclado telefnico, a travs de los 10 dgitos, y los smbolos # numeral y
* asterisco. Con esto es posible enviar la llamada a otro destino o de nuevo al IVR que
envi el anuncio.

Para acceder al mdulo IVR dirjase al Men PBX, aparecer por defecto la seccin
Configuracin PBX, en el panel izquierdo escoja la opcin IVR.

Para grabar un mensaje de bienvenida dirjase a la seccin System Recordings


(Grabaciones del Sistema), por ejemplo:

IVR: Gracias por llamar a Elastix, si usted conoce el nmero de extensin puede
marcarlo ahora, caso contrario espere en la lnea y un operador lo atender.

Para ingresar un nuevo IVR NO es necesario completar todos los campos, pues para
nuestro caso (un IVR de bienvenida), no necesitaremos opciones.

Los campos necesarios son los siguientes:

Change Name: Cambiar el nombre, le pondremos Bienvenida.

Timeout: Tiempo de espera (en segundos) antes de enrutar la llamada a un


operador despus de escuchar el mensaje de bienvenida. Para este ejemplo
usaremos el nmero 3.

Enable direct dial: Opcin que permite a quien llama marcar una extensin
directamente en caso de que la conozcan sin tener que esperar al operador.

Announcement: Es el anuncio o mensaje de bienvenida que se grab


anteriormente. Aparecer una lista con todos los mensajes disponibles.

Ahora procederemos a configurar ciertas opciones que son frecuentemente usadas, la


primera es la opcin 0 (cero) que nos permitir ir directamente al operador y la segunda
es tambin ir al operador pero una vez se ha escuchado todo el mensaje de bienvenida,
ms el tiempo de espera configurado anteriormente.

117
Formulario de creacin de IVR

Entre las opciones del men disponibles, en la parte izquierda existe un casillero donde
se debe ingresar la opcin. Para la primera opcin (cero) pondremos este valor en el
casillero, y asignamos alguna extensin configurada anteriormente, sta extensin ser
el operador.

Estas extensiones aparecern luego en la opcin Core.

Ahora procedemos a configurar la segunda opcin (permitir ir al operador luego de


escuchar el mensaje de bienvenida ms el tiempo de espera), para ello en el casillero de

118
la izquierda ingresamos la letra t lo que significa timeout y asignamos la extensin del
operador.

Finalmente grabamos el IVR.

7.7 Salas de conferencias


Primero hay que aclarar que en Elastix se pueden administrar dos tipos de cuartos de
conferencia: Los cuartos de conferencia permanentes y los cuartos de conferencia
temporales. El primer tipo se puede administrar bajo el men PBX => PBX
Configuration => Conferences, mientras que el segundo se puede administrar bajo el
men PBX => Conferencias.

Los cuartos de conferencia no son otra cosa que una especie de extensin virtual en la
que se puede alojar varias llamadas al mismo tiempo, dando con esto la ilusin de estar
en una conferencia con muchas personas conversando al mismo tiempo.

Un cuarto de conferencia permanente es aquel que tiene un numero definitivo


preasignado. Por ejemplo supongamos que queremos crear el cuarto 88999 y asignarlo
al Gerente de Operaciones. De ahora en adelante las reuniones telefnicas de los lunes
por las maanas se pueden realizar simplemente marcando 88999 cuando llegue la hora
pactada y todos los participantes saben que ese nmero de cuarto no cambiara de lunes a
lunes.

Un cuarto de conferencia temporal se crea, como es obvio, para fines temporales. Por
ejemplo la empresa va a participar de una exposicin de productos en el extranjero y
quiere agendar una serie de reuniones entre los proveedores y asesores externos para
que se pongan de acuerdo en diferentes tpicos. Por lo tanto se decide asignar un cuarto
de conferencia para cada asesor con el fin de que ellos mismos coordinen las
conferencias que crean necesarias. Lgicamente no queremos que estos cuartos sean
permanentes sino ms bien que expiren luego de la feria ya que ellos no son
trabajadores permanentes de la compaa.

Listado de conferencias

119
En el presente apartado explicaremos cmo administrar conferencias temporales.

Al ingresar a conferencia podremos observar todas las conferencias concurrentes. Para


ver las conferencias pasadas o futuras seleccione esta opcin en Estado y de clic en
Mostrar. Adems se provee de un filtro usado para los nombres de las conferencias.

Para poder eliminar alguna o varias conferencias debemos seleccionarlas y dar clic
sobre el botn Eliminar.

Si desea agregar una nueva conferencia de clic sobre el botn Nueva Conferencia.

Creacin de nueva conferencia

Los campos requeridos para agregar una conferencia son:

Nombre de la Conferencia: Necesario para identificar la conferencia


Nmero de la conferencia: Se provee un nmero aleatorio para la conferencia
usted puede cambiarlo si no est siendo usado por otra conferencia
Tiempo Inicio (PST/PDT): Tiempo de inicio de la conferencia
Mximo Participantes: No se podrn invitar ms participantes una vez se
completo el nmero mximo de participantes.

Para ver los detalles sobre una conferencia puede dar clic sobre el nombre de la
conferencia.

120
Si desea administrar una conferencia concurrente, de clic sobre el enlace de
participantes correspondiente a dicha conferencia.

Para invitar a alguien a la conferencia debe escogerlo de la lista proporcionada (lista de


extensiones disponibles) y dar clic sobre el botn Llamada a invitar, deber esperar
hasta que se conteste la llamada.

Una vez haya invitado a alguien a la conferencia irn apareciendo en el reporte, si desea
Silenciar a uno o varios invitados seleccinelos en la columna Callado y de clic sobre
este botn (Callado).

Adems puede botar de la conferencia a uno o varios invitados seleccionndolos en la


columna Botar y de clic sobre este botn (Botar).

Si desea botar a todos los invitados de la conferencia de clic sobre Botar a Todos.
Si alguien a quien invit no se muestra en la lista de invitados, o alguien a quien bot
aun se muestra, de clic en el botn Actualizar. Este botn tambin actualizar el
tiempo que lleva cada invitado en la conferencia.

Note que una vez de clic sobre el botn Callado, se actualizar el Estado del invitado,
los estados posibles son: Muted (Callado), UnMuted (No Callado).

Para regresar a la interfaz de administracin de todas las conferencias de clic en


Cancelar.

7.8 Parqueo de llamadas


Un lote de llamadas es una extensin virtual con msica en espera. Es decir que si se
llama a esta extensin oiremos msica en espera. A esta accin se le llama parquear una
llamada.

Esta caracterstica es muy til cuando recibimos una llamada y no sabemos que hacer
con ella. Por ejemplo, ingresa una llamada importante para el gerente de la empresa y el
no esta en su puesto pero como es una llamada importante la operadora tiene que
localizarlo as que mientras lo busca puede transferir al llamante en un lote de parqueo
para que espere confortablemente con msica en espera. Claro, muchos dirn que
simplemente se lo pudo haber puesto on hold pero esto ocupara la lnea telefnica del
telfono de recepcin impidiendo que nuevas llamadas ingresen. Una vez encontrado al
esquivo gerente se le puede decir por ejemplo que tiene una llamada parqueada en el
lote 3434. Luego, el mismo puede des-parquear dicha llamada y reiniciar la
conversacin.

121
Configuracin de un nuevo lote de parqueos

122
Enable Parking Lot Feature:
Seleccionando esta opcin con un visto se habilitarn la funcionalidad de parqueo de
llamadas.

Parking Lot Extension:


Indica la extensin que servir para parqueo de llamadas. Generalmente indica el primer
slot de canales de parqueo.

Number Slots:
Indica el nmero de slots disponibles para parquear llamadas.

Parking Timeout:
El perodo de tiempo que una llamada puede permanecer parqueada. Si se alcanza este
tiempo se intentar retornar la llamada al origen.

Parking Lot Context:


Este es el contexto para las llamadas parquedas. Por defecto este contiene el contexto
parkedcalls y no deber ser cambiado.

Destination for Orphaned Parked Calls:


Indica el destino de una llamada cuando la llamada no puede ser parqueada y el
llamador orginal tampoco puede ser alcanzado. Los destinos posibles pueden ser: Un
anuncio, un IVR, Terminar la llamada, una extensin, una cola, una conferencia una
aplicacin personalizada.

7.9 Msica en espera


En esta seccin se puede configurar el Music On Hold que debera ser tocado, cuando
se coloca una llamada en espera. Se pueden configurar varios archivos de audio y
pueden ser usados en Colas.

Upload a .wav or .mp3 file:


Simplemente mediante el botn browse selecciono el archivo .mp3 .wav. Luego hago
clic en upload y debera aparecer el archivo disponible en la lista de archivos de
MOH que se muestran debajo de la opcin de cargado de archivo.

123
Formulario de administracin de msica en espera

7.10 Flash Operator Panel (FOP)


El Flash Operator Panel del Men PBX del Elastix es un manejador en flash de
extensiones en Asterisk para monitorear los canales y terminales que se producen en un
servidor con Asterisk. Es una herramienta muy til para una recepcionista o para
cualquiera que quiera tener una visin grafica del funcionamiento telefnico de la
empresa.

124
Flash operador panel

7.11 Funciones de transferencia de llamadas


Por omisin Elastix viene configurado la funcionalidad de transferencia de llamada de
la siguiente forma:

Transferencia ciega

Para trasferir una llamada de una manera ciega se debe digitar: ## seguido del nmero
de extensin a donde se va a transferir la llamada.

Transferencia atendida

Para transferir una llamada de manera atendida se debe digitar: *2, seguido de la
extensin.

Si desea cambiar estos features es necesario modificar el archivo


/etc/asterisk/features.conf

125
Configuracin de hardware
No siempre podemos agradar, pero siempre podemos tratar de ser
agradables
-- Voltaire

A pesar de que Elastix puede funcionar sin necesidad de hardware telefnico, es


necesario su uso si se requiere conexin a la PSTN. Su instalacin y configuracin se
simplifica con Elastix gracias a que se dispone de una interfase Web especializada que
facilita esta tarea.

En el presente captulo nos referiremos bsicamente a tarjetera PCI. Sin embargo


pueden usarse otros dispositivos para conectarse a la PSTN como es el caso de los
gateways.

8.1 Tipos de tarjetera y fabricantes


En este apartado nos referiremos bsicamente a tarjetera telefnica PCI que es
soportada por Elastix. Este hardware est disponible tanto para interfaces telefnicas
analgicas como digitales y dentro de cada una de estas categoras existen bsicamente
las siguientes subcategoras:

Analgico
o FXO

127
o FXS
Digital
o E1/T1/J1
o BRI

Elastix ha sido probado el soporte para muchos modelos y fabricantes de tarjetera. Los
siguientes son los modelos soportados oficialmente a la fecha de redaccin del presente
libro:

Digium
OpenVox
Sangoma
Rhino
Yeastar
Xorcom (con interface USB)

8.2 Instalando fsicamente la tarjetera


Esto no involucra ninguna tarea complicada, solo las precauciones obvias al instalar
tarjetas electrnicas en un computador.

Nota: En caso de instalar hardware FXS es muy comn que se requiera


conectar un cable de poder a la tarjeta pues hay que recordar que las interfaces
FXS deben proveer potencia elctrica a los dispositivos que se conecten a ella.

Tarjeta telefnica analgica de tipo modular con 3 puertos FXO y 2 FXS instalados

128
Luego encendemos el equipo y deberamos verla enlistada a nivel de bus PCI

Hardware modular

Existen fabricantes que disean su hardware de manera modular, de tal forma que pueda
ser expandible. Por ejemplo, demos un vistazo a esta tarjeta analgica marca OpenVox
de 8 puertos poblada con mdulos. Se puede observar que se ha extrado un mdulo
FXS de su base.

La misma tarjeta de la figura anterior a la cual se le ha extrado un mdulo FXO

8.3 Deteccin de hardware


Una vez que la tarjetera ha sido instalada es hora de detectarla. En versiones muy
antiguas de Elastix esta tarea se hacia manualmente ejecutando un comando desde la
consola del equipo. Actualmente se cuenta con una interfase Web que detecta el
hardware automticamente y nos muestra grficamente el hardware detectado.

Esta interfase se puede acceder desde el men System Hardware Detector. Para
detectar nuevo hardware basta con presionar el botn Detectar Nuevo Hardware.

129
Figura donde se observa 2 tarjetas detectadas

Esta deteccin no significa que nuestra tarjeta est lista para funcionar ni mucho menos.
Solo significa que los drivers han reconocido la tarjeta correctamente y que cierta
configuracin por defecto ha sido escrita para dicho hardware.

A partir de esta configuracin por defecto el usuario puede modificar ciertos parmetros
para que la tarjetera funcione cmo se desea. Estas configuraciones a bajo nivel se
explicarn ms adelante en este mismo captulo.

Nota: Al momento de escribir este libro si se presiona el botn para detectar


hardware TODAS las tarjetas sern re-detectadas y su configuracin por
defecto re-escrita. Si ya se haba configurado una tarjeta previamente esta
configuracin ser re-escrita. No se olvide de hacer los respaldos necesarios.

8.4 Configuracin de interfaces digitales a


bajo nivel

La herramienta de deteccin de hardware basada en Web que viene con Elastix nos
permite detectar el hardware de manera sencilla. Sin embargo, a pesar de que la
herramienta puede configurar exitosamente el hardware digital en muchos casos, hay
que tener en cuenta que la herramienta realiza su trabajo suponiendo muchos parmetros
que pueden diferir de la realidad. Para corregir esto debemos realizar modificaciones a
bajo nivel, es decir cambios en los archivos de configuracin.

Nota: En este apartado nos referiremos bsicamente a circuitos T-Carrier y E-


Carrier (que es lo que mayormente se usa) basados en los drivers de Zaptel.

130
Configuracin de los drivers de Zaptel

Como ya habamos visto en el archivo zaptel.conf se configura la tarjetera o


hardware presente en el servidor; al menos los dispositivos que usan los drivers Zaptel.
Esta parte es independiente de Asterisk. Es decir, bien podramos utilizar el hardware y
los drivers de Zaptel con otro software de PBX como Callweaver por ejemplo.

Para interfaces digitales en el archivo zaptel.conf se deben definir los spans. Un


span es un grupo de canales digitales. Usualmente un span representa un puerto digital
de la tarjeta. Por ejemplo, si la tarjeta contiene 4 puertos E1 entonces usualmente
deberamos definir 4 spans, uno por cada puerto.

Un span define en una sola lnea, la cual tiene el siguiente formato.

span=(spannum),(timing),(LBO),(framing),(coding)

spannum
Es un identificador numrico nico para etiquetar el span. Se debe empezar con el
nmero 1 e ir incrementando este identificador secuencialmente de uno en uno.

Timing
Es un dgito que define la forma en la cual se manejar la sincronizacin del span. Los
posibles valores son los siguientes.

Valor Significado
0 NO usar el span (telco) como fuente de sincronizacin. Zaptel
proveer la sincronizacin y la enviar al otro lado. Esto es
ms comn cuando se conecta a travs de este span una PBX
antigua a la cual hay que proveerle sincronizacin.
Normalmente si nos conectamos a una compaa telefnica
no deberamos tener ningn span con este valor de timing
1 Usar el span (telco) como fuente primaria de sincronizacin
2 Usar el span (telco) como fuente secundaria de sincronizacin
3,4,5,,n Usar el span (telco) como fuente de sincronizacin tercera,
cuarta, quinta, etc

Nota: Solo el valor 0 puede ser repetido. Los dems valores del uno en adelante
NO se deben repetir.

LBO (Line Build Out)

131
Es un dgito que representa la longitud del cable entre la tarjeta y el equipo (modem)
provisto por la compaa telefnica. Casi siempre se puede dejar en 0 sin problemas.
Sin embargo si tenemos un cable muy largo habr que revisar la tablita siguiente.

Valor Longitud del cable o nivel de atenuacin


0 0 dB / 0 - 133 pies
1 133 - 266 pies
2 266 - 399 pies
3 399 - 533 pies
4 533 - 655 pies
5 -7.5 dB
6 -15 dB
7 -22.5 dB

Framing
Como recordaremos, los protocolos de comunicacin digital T-Carrier y E-Carrier
dividen la informacin en frames, donde cada frame transporta un nmero determinado
de timeslots. Estos frames pueden ser de diferentes formatos y eso es lo que se define
aqu.

Los valores posibles para T1 son d4 o esf, mientras que para E1 son cas o ccs.

Coding
Es necesario codificar la informacin enviada para hacerla menos susceptible a errores.
Esto es as porque la propia data se suele usar como fuente de sincronizacin (o reloj) y
si se transmiten tramas largas de ceros (largos segmentos sin variacin de voltaje) se
puede perder dicha sincronizacin. Para evitar esto se codifica la data para evitar
transmitir estas tramas largas de ceros. Por ejemplo la codificacin b8zs significa
Bipolar with 8 Zeros Substitution.

Los valores posibles para T1 son ami o b8zs, mientras que para E1 son ami o hdb3. En
E1 tambin se puede necesitar aadir chequeo de errores crc4 (Control de Redundancia
Cclica de 4 bits o Cyclic Redundancy Check 4-bits).
Al final reiniciamos Zaptel y ejecutamos el comando lszaptel para ver si nuestra
tarjeta se encuentra bien configurada. Si todo est bien configurado y an encontramos
errores puede ser que el cable no est conectado o algn error de parte del proveedor.

8.5 Configuracin de troncales

132
Hasta este momento el hardware que hemos instalado no se encuentra relacionado con
Asterisk de ninguna manera (a menos que se haya presionado el botn de sobrescribir
zapata.conf).

zapata.conf

Asterisk cuenta con un mdulo llamado chan_zap que sirve para conectarse con los
drivers de Zaptel y de esta manera conectar Asterisk con hardware telefnico. Este
mdulo se configura a travs de un archivo llamado zapata.conf

En el archivo zapata.conf bsicamente se configura la sealizacin de los canales


de voz y se mapean los canales de Asterisk con los circuitos o lneas telefnicas
definidos en el archivo zaptel.conf que configuramos antes. Estos canales se
pueden agrupar en grupos, tambin llamados troncales.

Es decir que si tengo 15 circuitos o lneas telefnicas que terminan en hardware


telefnico de mi servidor los puedo controlar con Asterisk y troncalizarlas. Por ejemplo
podra dividir esas lneas en 3 troncales debido a que mi cliente tiene 3 departamentos:
ventas, soporte y financiero.

Veamos primero un archivo zapata.conf sencillo para ver los parmetros ms


importantes y despus continuaremos explicando algunos de estos parmetros.

133
[trunkgroups]

[channels]
context=from-pstn
signalling=fxs_ls

; trunk #0
group=0
language=es
callprogress=no
context=from-zaptel
channel=1-5

; trunk #1
group=1
language=es
callprogress=no
context=from-zaptel
channel=6-10

; trunk #2
group=2
language=es
callprogress=no
context=from-zaptel
channel=11-15

Como vemos arriba hemos configurado tres troncales. Cada troncal comienza con la
palabra group y se le asigna un identificador numrico. Por lo general se empieza con
el nmero cero.

Dentro de cada troncal se pueden repetir los valores globales (es decir los que se
encuentran en el encabezado, fuera de la definicin de las troncales) y estos valores
sobrescriben a los anteriores. Por ejemplo, se podra sobrescribir la sealizacin para
una troncal especfica.

Algunos parmetros importantes

signaling

134
Este parmetro define la sealizacin de cada canal o grupo de canales. Lo ms comn
que veremos para circuitos analgicos ser fxs_ls y para circuitos digitales pri_cpe. Sin
embargo a continuacin la tabla completa.

em: E & M Immediate Start


em_w: E & M Wink Start
em_e1: E & M CAS signalling for E1 lines
featd: Feature Group D (The fake, Adtran style, DTMF)
featdmf_ta: Feature Group D (The real thing, MF (domestic, US)) through a
Tandem Access point
fgccama Feature Group C-CAMA (DP DNIS, MF ANI)
fgccamamf Feature Group C-CAMA MF (MF DNIS, MF ANI)
featdmf: Feature Group D (The real thing, MF (domestic, US))
featb: Feature Group B (MF (domestic, US))
fxs_ls: FXS (Loop Start)
fxs_gs: FXS (Ground Start)
fxs_ks: FXS (Kewl Start)
fxo_ls: FXO (Loop Start)
fxo_gs: FXO (Ground Start)
fxo_ks: FXO (Kewl Start)
pri_cpe: PRI signalling, CPE side
pri_net: PRI signalling, Network side (for instance, side that provides the
dialtone)
sf: SF (Inband Tone) Signalling
sf_w: SF Wink
sf_featd: SF Feature Group D (The fake, Adtran style, DTMF)
sf_featdmf: SF Feature Group D (The real thing, MF (domestic, US))
sf_featb: SF Feature Group B (MF (domestic, US))
e911: E911 (MF) style signalling. Originating switch goes off-hook, far-end
winks, originating sends KP-911-ST, far-end gives answer supervision,
Originating-end sends KP-0-ANI-ST
The following are used for Radio interfaces:
fxs_rx: Receive audio/COR on an FXS kewlstart interface (FXO at the channel
bank)
fxs_tx: Transmit audio/PTT on an FXS loopstart interface (FXO at the channel
bank)
fxo_rx: Receive audio/COR on an FXO loopstart interface (FXS at the channel
bank)
fxo_tx: Transmit audio/PTT on an FXO groundstart interface (FXS at the
channel bank)

135
em_rx: Receive audio/COR on an E&M interface (1-way)
em_tx: Transmit audio/PTT on an E&M interface (1-way)
em_txrx: Receive audio/COR AND Transmit audio/PTT on an E&M interface
(2-way)
em_rxtx: same as em_txrx (for our dyslexic friends)
sf_rx: Receive audio/COR on an SF interface (1-way)
sf_tx: Transmit audio/PTT on an SF interface (1-way)
sf_txrx: Receive audio/COR AND Transmit audio/PTT on an SF interface (2-
way)
sf_rxtx: same as sf_txrx (for our dyslexic friends)

switchtype

Este parmetro es para circuitos digitales y especifica el tipo de switch PRI usado. Lo
ms comn es national y euroisdn, dependiendo de en qu pas nos encontremos claro
est. Este dato lo debe proporcionar la compaa telefnica as que sintmonos en la
libertad de preguntar. Los valores posibles son los siguientes.

national: ISDN nacional tipo 2


ni1: ISDN nacional tipo 1
dms100: Nortel DMS100
4ess: AT&T 4ESS
5ess: Lucent 5ESS
euroisdn: EuroISDN
qsig: Protocolo usado en ISDN

8.6 Algunos cambios que se darn con el


cambio de Zaptel a DAHDI
A partir de Elastix 1.5 el paquete Zaptel ser reemplazado por el paquete DAHDI. Se ha
tratado de que el proceso sea lo ms transparente posible al usuario. Sin embargo, es
muy importante tener en cuenta algunos detalles importantes y eso se cubrir
brevemente en el presente captulo.

A pesar de que para algunos, el cambio de Zaptel a DAHDI es meramente un cambio de


nombre, se ha aprovechado esta coyuntura para hacer algunos cambios en el cdigo.
Algunos hechos importantes a tener en cuenta son los siguientes.

136
Zaptel ya no es mantenido por los desarrolladores de Asterisk y es en DAHDI
donde se hacen los cambios. Por lo mismo, era vital migrar a DAHDI en Elastix.
Los canceladores de eco pueden ser ahora configurados por canal en lugar de el
enfoque anterior donde se deba seleccionar un solo cancelador de eco para toda
la instalacin
Existen mejoras en el manejo de memoria con DAHDI
Soporte para nuevo hardware

Algunos cambios de nombre a tener en cuenta

Si bien uno de los cambios ms obvios de la migracin de Zaptel a DAHDI es el cambio


de nombre de los canales de ZAP a DAHDI; existen otros cambios de nombre que es
muy importante tener en cuenta.

Cambios de nombre de mdulos de kernel

Mdulo Zaptel Mdulo DAHDI


zaptel.ko dahdi.ko
ztd_eth.ko dahdi_dynamic_eth.ko
ztd_loc.ko dahdi_dynamic_loc.ko
ztdummy.ko dahdi_dummy.ko
ztdynamic.ko dahdi_dynamic.ko
zttranscode.ko dahdi_transcode.ko

Cambios de nombre de mdulos de Asterisk

Mdulo Zaptel Mdulo DAHDI


chan_zap.so chan_dahdi.so
app_zapbarge.so app_dahdibarge.so
app_zapras.so app_dahdiras.so
app_zapscan.so app_dahdiscan.so
codec_zap.so codec_dahdi.so

Cambios de nombre de algunos comandos

Comando Zaptel Comando DAHDI


ztcfg dahdi_cfg
ztmonitor dahdi_monitor

137
ztscan dahdi_scan
ztspeed dahdi_speed
zttest dahdi_test
zttool dahdi_tool
zapconf o genzaptelconf dahdi_genconf

Cambios en archivos de configuracin

Archivo Zaptel Archivo DAHDI


/etc/zaptel.conf /etc/dahdi/system.conf
/etc/asterisk/zapata.conf /etc/asterisk/chan_dahdi.conf
/etc/sysconfig/zaptel /etc/dahdi/init.conf y /etc/dahdi/modules

Para ms informacin acerca de los cambios de Zaptel a DAHDI recomendamos el


siguiente vnculo oficial:

http://www.asterisk.org/zaptel-to-dahdi

138
Configuracin de telfono IP
Es difcil despertar a aquel que simula estar dormido
-- Provervio navajo

La configuracin de un telfono IP suele ser bastante sencilla. Como mnimo un


telfono IP necesita 3 valores para funcionar: El IP del servidor PBX (en este caso
Elastix) el usuario (comnmente la extensin) y la contrasea de dicho usuario.

Aqu mostraremos al detalle cmo configurar un telfono IP fsico y otro basado en


software ya que los softphones se han vuelto bastante populares en los ltimos tiempos.
En estos telfonos se usar tecnologa SIP para su configuracin puesto que es la
tecnologa ms popular en la actualidad, pero sintmonos confiados de configurar un
telfono en tecnologa IAX. La configuracin no diferir mucho de lo aqu mostrado.
En general para la mayora de los casos usaremos SIP en nuestros ejemplos a menos que
estemos hablando de telfonos que se conectan remotamente ya que en estos casos ser
preferible usar IAX debido a los problemas de NAT que sufre el protocolo SIP.

Finalmente explicaremos un mtodo bastante til si nos encontramos en el caso de


configurar un nmero grande de extensiones. Este mtodo nos permite pre-configurar
los telfonos desde una herramienta llamada endpoint configurator disponible en
Elastix.

139
9.1 Configuracin de softphone
Los telfonos en software o softphones se han vuelto muy populares ltimamente por el
hecho del ahorro que puede significar su uso al no tener que comprar telfonos fsicos.
El ahorro es mayor mientras ms extensiones se tengan y es por eso que esta solucin es
muy popular en call centers.

Por supuesto antes de empezar a configurar el softphone habr que crear una extensin
desde Elastix. Ya hemos explicado esto anteriormente en este libro as que omitiremos
los detalles. En este ejemplo se supondr la extensin 5678 con tecnologa SIP y secret
5678.

El softphone que vamos a configurar ser el Zoiper que est disponible en versin
gratuita y comercial. La versin gratuita es suficiente para que podamos hablar
cmodamente de un punto a otro as que basaremos nuestro ejemplo en esta versin.

Para descargar el Zoiper debemos visitar el sitio http://www.zoiper.com

Suponemos que el lector tiene la habilidad suficiente para instalar el software sin
problemas. Una vez instalado lo ejecutamos y aparecer una ventana como la siguiente.

Pantalla inicial del software ZoIPer

A continuacin presionamos el botn con la figura de la herramienta y accederemos al


men de opciones. All veremos una pantalla con opciones para configurar nuevas
extensiones SIP y tambin IAX, pues el Zoiper cuenta con soporte para ambos
protocolos. En nuestro ejemplo configuraremos una extensin SIP as que veremos una
pantalla como la siguiente.

140
Configurando una cuenta SIP

Llenaremos dicha pantalla con los siguientes datos:

Domain: La direccin IP o nombre de dominio del servidor Elastix.


Username: 5678
Password: 5678
Caller ID Name: El nombre que aparecer en los telfonos que reciban nuestras
llamadas

A continuacin volvemos a la pantalla inicial del Zoiper y all debemos registrarnos con
la extensin que creamos. Para esto debemos seleccionar la extensin creada en el
combo de la parte inferior y dar clic en el botn Register.

141
Antes de registrar la cuenta SIP

Si el Zoiper se registra correctamente veremos que junto al nombre de nuestra cuenta


Test aparecer la palabra Registered.

Luego de que la cuenta SIP ha sido registrada

Listo, ahora voy a llamar desde otro telfono para ver si se puede alcanzar a mi nueva
extensin 5678 y podemos mantener una conversacin.

142
Llamada ingresando a nuestro softphone

Todo bien, la llamada fue recibida y la comunicacin transcurri sin inconvenientes.

Nota: En ocasiones nos encontraremos solos configurando un Elastix para un


cliente y se nos complica un poco hacer pruebas con otro telfono. En estos
casos puede ser til probar la comunicacin llamando a la extensin de ECO.
Esta extensin contestar automticamente y reproducir el mismo audio que
enviemos.

9.2 Configuracin de telfono fsico


Para configurar un telfono IP debemos tener en cuenta dos aspectos:

1. Configuracin de red
2. Registro del dispositivo con el servidor Elastix

Para ilustrar de mejor manera los puntos mencionados, utilizaremos un telfono


Polycom SoundPoint IP 330.

143
El telfono Polycom 330 que configuraremos

Configuracin de red

La configuracin de red puede realizarse considerando que el telfono obtendr su IP


mediante DHCP (lo ms comn) o que se le asignar una direccin IP esttica.
Explicaremos los dos mtodos. Para el primer caso explicaremos cmo obtener el IP del
telfono ms que cmo configurarla ya que se asigna automticamente. En el caso de IP
esttica explicaremos cmo asignarle un IP al telfono.

Al final del proceso conoceremos la direccin IP del dispositivo y con este dato
podremos acceder a la interfase de configuracin Web que nos ofrece este modelo de
telfono.

DHCP

Mediante esta opcin, el telfono obtendr una direccin IP de manera automtica. No


se debe olvidar de que para que ste lo pueda hacer, dentro de la red deber haber un

144
servidor DHCP. Elastix viene con un servidor DHCP embebido que se puede activar
fcilmente desde la interfase Web.

Primero necesitamos conocer la direccin IP que adquiri el telfono. A continuacin se


detalla el procedimiento para determinarla.

Presionar "Menu -> Status -> Network -> TCP/IP Parameters

Aqu aparecer la direccin IP. Anotmosla para luego poder acceder al telfono desde
la interfase Web.

IP esttica

Esta opcin le ser til si desea contar con un registro exacto de las direcciones IP de
sus telfonos y/o si desea colocar sus dispositivos IP en segmentos especficos de su
red. En esta opcin, necesitar ingresar la siguiente informacin.

Direccin IP

Recuerde que la IP que le vaya a asignar a este equipo no la debe tener ningn otro
equipo, debe ser nica en su red. Vamos a suponer que el telfono estaba previamente
configurado con DHCP ya que as viene de fbrica.

Presionar "Menu -> Settings -> Advanced -> (ingresar clave. Por omisin es 456) ->
Admin Settings -> Network Configration -> DHCP Client -> Editar -> Disabled ->
Phone IP Addres"

Aqu procederemos a ingresar la direccin IP.

Mscara de red

Si usted no ingresa una mscara de red adecuada, su telfono IP no podr registrarse con
su central Elastix. Esos problemas ocurren con mayor frecuencia cuando los telfonos
IP estn dentro de diferentes segmentos de redes que la central Elastix, es ah donde se
debe seleccionar la mscara adecuada.

Seleccionar "Subnet Mask -> (Ingresar la mscara de red)

Puerta de enlace

En el caso de que su telfono se encuentre en otro segmento de red, deber ingresar la


puerta de enlace adecuada para que su telfono pueda ver a su Elastix.

145
Seleccionar "IP Gateway -> (Ingresar la IP de la puerta de enlace)

Luego de cualquier cambio debemos seleccionar "Exit" y luego "Save Config".


Debemos esperar a que el telfono termine de reiniciarse

Registro del dispositivo con el servidor Elastix

Esta configuracin se la pueda realizar desde el mismo telfono o desde un navegador


Web. En este caso utilizaremos el navegador: Mozilla Firefox.

Como ya conocemos la direccin IP de nuestro telfono la accedemos desde el


navegador Web. En el siguiente ejemplo el IP de nuestro telfono es la 192.168.1.235

Barra del navegador Firefox

IP del servidor Elastix

Para comenzar debemos seleccionar la pestaa que dice "SIP".

La interfaz Web nos pedir el usuario y la clave del telfono para poderlo configurar. El
usuario y clave de fbrica son Polycom y 456 respectivamente.

Dilogo de autenticacin va usuario y contrasea

146
Aqu podremos configurar algunos parmetros SIP como el servidor SIP, es decir
nuestra central Elastix, as como tambin el Outbound Proxy que viene a ser lo mismo
en nuestro caso. La configuracin adecuada se muestra en la siguiente figura, donde se
supone que la direccin IP del servidor Elastix es la 192.168.1.66

Interfase Web de configuracin de parmetros SIP del telfono

Debemos tomar en cuenta de que la direccin de la Elastix puede estar dentro de nuestro
segmento de red, dentro de otro segmento de red, o incluso una IP fuera de nuestra red
(IP pblica externa).

147
En esta pantalla tambin podemos configurar el puerto SIP donde se registrar nuestro
telfono. Por omisin en Elastix este valor es 5060.

Extensin

Seleccione la opcin "Lines" y configure aqu su extensin como se muestra en la


siguiente figura. El parmetro Auth Password debe ser igual al parmetro secret que
se ingres cuando se cre la extensin en la interfase Web del Elastix.

Configuracin de la lnea SIP

148
Configuracin Opcional

En esta seccin veremos cmo configurar el Polycom para que muestre la fecha y hora
del Elastix.

En el men debemos dar clic en la pestaa "General" y en el campo "SNTP Server"


(bajo la seccin time) ingresar la direccin IP del servidor Elastix.

Adicionalmente debemos seleccionar el valor adecuado de su zona horaria en "GMT


Offset"

Configuracin del servidor de tiempo

Nota: Si al querer digitar alguna de sus extensiones su telfono marca


inmediatamente una parte de esta y no espera a que termine de ingresar todos
los dgitos de la extensin, revise la opcin "Digitmap", dentro de la seccin
"Local Settings" dentro del men "SIP", o en su defecto elimnela por completo.

149
Cambiando el mapa de dgitos

9.3 Utilizando el endpoint configurator


En ocasiones la instalacin de telfonos IP se complica cuando son muchos y ms an
cuando la configuracin no es tan trivial como en el softphone que acabamos de
configurar. Existen por ejemplo algunos modelos de telfonos que se pueden configurar
desde una interfase Web embebida en el propio telfono e inclusive existen otros que se
tienen que configurar a travs de una sesin telnet.

La distro Elastix est preparada para estos y cuenta con una interfase que nos permitir
configurar muchos telfonos de una manera ms sencilla. Esta herramienta recibe el
nombre de Endpoint Configurator.

El mdulo Endpoint Configurator como primera accin realiza un rastreo (scan) de la


red o subred que se le suministre. Algo de notar es que cuando se ingresa al mdulo, la
red o subred por omisin es aquella en la que se encuentra la propia central Elastix; el
scan que se hace a dicho segmento de red obtiene internamente informacin de MAC e
IP de los dispositivos de red conectados.

150
Rastreando la red en busca de endpoints

Nota: La direccin MAC tambin le sirve al endpoint configurator como


identificador nico del telfono. Si se usara la direccin IP sta podra cambiar
con el tiempo, pero con la direccin MAC no ocurre esto.

Luego de obtener la informacin de todos los endpoints de algn segmento de red, el


mdulo de forma inteligente trata de identificar los equipos que pudieran ser telfonos
IP y tambin trata de recabar informacin de fabricante y modelo para elegir cules
puede configurar basndose en su base de conocimiento de modelos de telfonos.

Cuando ya se tiene el grupo de telfonos a configurar se presenta la informacin en la


Web interfase de Elastix, se mostrara algo como se ilustra en la figura siguiente.

Listado inicial de telfonos encontrados en la red. Sin configurar an.

Es una lista de todos los telfonos que se han encontrado en el segmento de red dado y
que el Elastix conoce o podr configurar segn su base de datos. Hay que recalcar que
actualmente Elastix en este mdulo solo tiene soporte garantizado para Atcom, Polycom
y Linksys. Se prevee para versiones futuras de Elastix tener soporte para Cisco, Aastra,
Grandstream y Snom.

Como podr notar el reporte muestra las columnas MAC Address, IP Address y Vendor
que nos ayudar a reconocer de cual telfono IP se trata y con esto podremos relacionar
mentalmente su ubicacin fsica.

151
Vista acercada de campos MAC, direccin IP y Fabricante

Luego hay dos columnas Phone type y User extension para una configuracin rpida de
la extensin para el telfono. En Phone type podr elegir el modelo del telfono y solo
se listaran aquellos que Elastix sabe configurar y reconocer. Tener en cuenta que para
configurar los telfonos se deben haber creados previamente extensiones desde el men
PBX->PBX Configuration.

Otra limitante es que las extensiones deben ser SIP, no estn soportadas extensiones de
ningn otro protocolo.

A continuacin se listaran modelos y fabricantes, lo que esta de color amarillo son


aquellos que seran soportados en proximas versiones Elastix:

Polycom Atcom Linksys Aastra Cisco Grandstream Snom


IP 301 AT 320 SPA921 480i 7960 HT386 360
IP 330/320 AT 530 SPA922 480i CT 7940 GXP2000 320
IP 430 SPA941 9133i 7970
IP 501 SPA942 53i 7971
IP 601 SPA962 55i
IP 550 SPA841 57i
IP 650 57i CT
SoundStation
IP 4000

Configuracin de un telfono ATCOM, modelo AT-530

152
A continuacin explicaremos paso a paso cmo configurar un telfono marca ATCOM,
modelo AT-530. Este es un modelo de telfono de bajo costo que soporta tanto SIP
como IAX.

Para configurarlo primero elegimos el modelo y la extensin a configurar del listado


mostrado en el Endpoint Configurator. Cuando un telfono es configurado por primera
vez mediante este mdulo, ste presenta un estatus Not Set lo que significa que
todava la central Elastix no tiene configuracin acerca del l.

Lnea correspondiente al telfono AT-530 detectado en la red

En la parte izquierda vamos a elegir la casilla, y luego presionamos el botn Set.


Inmediatamente aparece la ventana de confirmacin en la cual si se est seguro se
acepta y el proceso de configuracin empezar. Esto puede tomar algo de tiempo
dependiendo del nmero de telfonos que haya elegido, en este caso por ser un ejemplo
hay solo un telfono a configurar.

Vista amplificada con los datos de nuestro telfono AT-530

Luego del proceso vamos a ver que el reporte se actualiz y el estatus del telfono es
Configured without incident. Esto indica que la central Elastix hizo varias cosas.

Primero cre el (o los) archivos de configuracin necesarios en la ruta


/tftpboot/ (ruta en la central Elastix) y en caso de este ejemplo solo se cre
el archivo atc000945531b45.cfg donde 000945531b45 representa la
direccin MAC del telfono.

Segundo cre un registro en la base de datos de Elastix para mantener un


historial del telfono configurado.

Tercero, mediante conexin telnet (solo para los ATCOM), realiz acciones de
cargar el archivo de configuracin al telfono, guardar al archivo y reiniciar. Por
ello usted podr notar que el telfono se va ha reiniciar.

Telfono AT-530 configurado

153
Hay que tener ciertas consideraciones en cuanto a la conexin telnet en los telfonos
ATCOM y es que para poder establecerse es necesario de un usuario y contrasea que
por efectos de simplicidad en Elastix se usan los que vienen por omisin de fbrica.
Para el caso del modelo AT-530 son usuario admin con clave admin y para el caso del
AT-320 la clave es 12345678.

Regresando a interpretar los Status del telfono tenemos.

Estatus Color Descripcin


Not Set Naranja configurado aun por la
central Elastix
Configured without Verde La central configur el
incident telfono sin problemas
UPDATE: Secrets no Rojo Es necesario actualizar. La
equals in FreePBX and razn es porque ha
Endpoint cambiado la clave en la
central (FreePBX) y en la
base de endpoint.db aun se
mantiene la anterior

Si no hay incidentes entonces ahora nuestro telfono IP ya esta configurado desde la


central Elastix y cuando se desee cambiar de extensin slo vamos al endpoint
configurator, hacemos un par de clics y listo.

Nota: Existe el botn Unset. La accin que ejecuta ste es slo a nivel del
mdulo. La central Elastix borra el registro histrico relacionado con el
telfono IP de la base de su base de datos interna y borra los archivos de
configuracin relacionados en la ruta /tftpboot/. Esto indica que el telfono en
si mantiene la configuracin que tuvo.

Configuracin de un telfono Polycom SoundPoint IP 501

A continuacin mostraremos un ejemplo de cmo configurar un telfono Polycom


SoundPoint IP501.

Primero elegimos el modelo y la extensin a configurar. Como en el caso del telfono


ATCOM podemos partir de que es la primera vez que se lo va a configurar desde la
central Elastix y por ende notamos el Status Not Set.

Lnea correspondiente al telfono Polycom detectado en la red

154
En la parte izquierda vamos a elegir la casilla, y luego presionamos el botn Set.
Inmediatamente aparece la ventana de confirmacin en la cual si esta seguro se acepta y
el proceso de configuracin empezar. Esto puede tomar algo de tiempo dependiendo
del nmero de telfonos que haya elegido, en este caso por tratarse de un ejemplo hay
solo un telfono a configurar.

Vista amplificada con los datos de nuestro telfono Polycom IP501

Luego del proceso vamos a ver que el reporte se actualiz y el estatus del telfono es
Configured without incident, esto indica que la central Elastix hizo varias cosas.

Primero creo los archivos de configuracin necesarios en la ruta /tftpboot/ (ruta en


la central Elastix). Estos archivos para el caso de los telfonos Polycom son algunos.

Archivo Descripcin
0004f2131470.cfg El 0004f2131470 representa la direccin MAC y este
archivo es un encabezado que le indica al telfono lo que
se va a hacer durante el proceso de actualizacin y
configuracin
0004f2131470reg.cfg Contiene informacin de la (o las) extensiones que va ha
poseer el telfono
polycom Realmente es una carpeta que posee a su vez otras
carpetas llamadas contacts, logs y overrides
server.cfg Configuracin relacionada con servidor de proxy y SIP
sip.cfg Todos los parmetros adicionales que se deseen
configurar. Para esto es bueno revisar un manual de
Usuario Polycom

Segundo, en estos telfonos no se realiza ninguna conexin a telnet y hasta el momento


no se conoce como reiniciar y enviar los archivos de configuracin desde la central
Elastix como una accin centralizada. Por ende es necesario hacer lo siguiente en el
telfono Polycom:

Elegir que el tipo de provisionamiento es TFTP.


Ingresar la IP de la central Elastix.
Elegir que lea la configuracin por TFTP.
Reiniciar el telfono Polycom.

155
Estos pasos son iguales en todos los modelos Polycom que Elastix soporta. As mismo
como en el caso de los telfonos marca ATCOM se genera un historial en la base de
datos interna de Elastix acerca de la configuracin del telfono Polycom.

Si no hay incidentes entonces ahora nuestro telfono IP ya esta configurado desde la


central Elastix y cuando se desee cambiar de extensin solo debemos ir al mdulo
Endpoint Configurator, hacemos un par de clics y listo.

Actualizacin por TFTP

TFTP es el protocolo usado en este caso para proveer provisionamiento. Significa


Trivial FTP y es un protocolo que no necesita identificarse, es decir que no necesitamos
ni un usuario o contrasea para realizar algn proceso. La mayora de telfonos IP
proveen este tipo de provisionamiento para poder transferir los archivos de
configuracin desde la central Elastix hasta los endpoints y viceversa, como el caso de
los telfonos Polycom que lo usan para bajar la lista de contactos y escribir logs.

En la central Elastix ya viene configurado el servicio encargado de escuchar para


aceptar comunicacin o transferencia por TFTP.

Es en el archivo de configuracin /etc/xinetd.d/tftp donde se personaliza el


directorio para uso de tftp. En nuestro caso es /tftpboot/.

Personalizando los archivos de configuracin

Existen ocasiones en que es necesario personalizar ciertos parmetros en los archivos de


configuracin para los telfonos IP. Se piensa hacer una interfaz para ello en versiones
futuras, pero para alguien que tiene conocimientos de Linux podr hacerlo editando los
archivos plantillas de configuracin que estn en la ruta de la central Elastix
/var/wwww/html/modules/endpoint_configuration/libs/vendors/

En esta ruta vamos a encontrar lo siguiente.

Archivo Descripcin
atcom.cfg.php Se encuentra configuracin para los modelos AT-530 y AT-
320. Para cambiar alguna configuracin se recomienda revisar
manuales del archivos de configuracin para ATCOM
polycom.cfg.php Aqu se encuentran las configuraciones para algunos modelos
Polycom. Ya que el contenido de los archivos son XML esto
hace que se puedan usar el mismo XML para algunos modelos.
linksys.cfg.php Se encuentra configuraciones para algunos modelos Linksys.
Hay que notar que tambin tienen formato XML

156
cisco.cfg.php, Estos archivos son versiones aun no terminadas, para la
aastra.cfg.php configuracin de Cisco y Aastra en un futuro cercano

Al hacer estos cambios en estos archivos plantilla, la prxima vez que use el mdulo
Endpoint Configuration su personalizacin de configuracin ser reflejada al configurar
o actualizar los telfonos.

157
Elastix: Configuracin avanzada
Si espero perder la audacia de la juventud
-- Alejandro Magno

10.1 Ruteo de llamadas

Rutas Entrantes

Esta opcin permite configurar el destino de las llamadas que ingresan por una
determinada troncal. Cuando una llamada ingresa al servidor, Asterisk puede darse
cuenta si coinciden el DID el CallerID de la troncal el nmero de la troncal en caso
de que sea una de tipo ZAP con la informacin de la llamada entrante.

159
Formulario de creacin de nueva ruta entrante

160
DID Number:
Para un peer de tipo SIP IAX, el DID es proporcionado por el proveedor y
generalmente esta asociado al nmero de cuenta. Por ejemplo si su cuenta es
'85679432', poniendo este dato en el campo DID, las llamadas entrantes deberan
matchear esta informacin y dirigirse al destino configurado.

Caller ID Number:
El CID Number es el Caller ID que es recibido por Elastix. Este dato no es confiable ya
que es fcilmente spoofable. Al dejarlo en blanco matchea cualquier Caller ID.

Zaptel Channel:
En est opcin se puede colocar el nmero de la troncal zap que se quiere que se
matchee con el nmero de troncal por donde asterisk recibe una llamada. Esta opcin es
excluyente con el la opcin de DID Number.

Fax Handling:
Con esta opcin se pueden administrar la forma en que los faxes son recibidos.

Immediate Answer:
Esta caracterstica hace que se conteste la llamada tan pronto como este renguea (con las
lneas zaptel, esto ocurre despus de que el Caller-ID es recibido, lo cual puede ser
despus de 3 rings). Si estamos usando g729 GSM, los rings debera sonar divertido
al llamador.

Pause Alter Answer:


En esta opcin se define el nmero de segundos que deberamos esperar despus de una
inmediata respuesta. El primer propsito para esta opcin fue la de pausar y escuchar
por un tono de fax antes de permitir que la llamada contine.

Alert Info:
ALERT_INFO puede ser usado para rings distintivos con algunos de dispositivos SIP.

Set destination:
Mediante el set destination podemos especificar donde queremos que la llamada sea
terminada, siendo esto: un IVR, una extensin, un miscelaneous destination, colgar la
llamada a un contexto personalizado.

161
Rutas Salientes

Mediante las rutas salientes podemos indicar por que troncal troncales deben ser
enviadas las llamadas.

Formulario de creacin de nueva ruta saliente

Route Name:
En este campo se especifica un nombre descriptivo para la troncal para poder facilitar la
administracin de las mismas.

Route Password:

162
Si llenamos este campo cada vez que una llamada salga por una troncal, al llamador ser
solicitado un password. Si el password es ingresado correctamente la llamada es
conectada, caso contrario la llamada es descartada.

Emergency Dialling:
Con esta opcin podemos especificar que la ruta es para llamadas de emergencia. Se
puede especificar un diferente caller ID.

Dial Patterns:
El patrn de marcado es el conjunto de dgitos patrn de dgitos que Asterisk usa para
verificar el match con los dgitos marcados por un llamador para determinar el canal
por donde debe enviar la llamada.

Existen reglas de cmo especificar los patrones de marcados, las cuales indicamos a
continuacin:

Patrn Descripcin
X Representa cualquier dgito de 0-9
Z Representa cualquier dgito de 1-9
N Representa cualquier dgito de 2-9
[1237-9] Representa cualquier dgito entre corchetes
. Representa uno o ms caracteres
| Separa el nmero ubicado a la izquierda del nmero
marcado. Por ejemplo: 9|NXXXXXX debera
representar los nmeros marcados como 92234567
pero slo debera pasar 2234567

Trunk Sequence:
Se lista e indica el orden en que se debe intentar el uso de las troncales. Cuando un
nmero digitado por un llamador es matcheado por el patrn de marcado especificado
antes, Asterisk intentar realizar la llamada por las troncales especificadas en esta
opcin en el orden en que son listadas.

10.2 Troncales
Una troncal es aquella que permite llevar una llamada a cualquier proveedor de servicio
de voz a cualquier dispositivo que reciba su intento de llamada y la gestione a otro
destino. Alguno de los tipos de troncales son:

ZAP
IAX2

163
SIP
Custom

Veamos algunos de los parmetros a configurar en una troncal ZAP.

Creacin de nueva troncal tipo ZAP

Outbound Caller ID:


En esta opcin especificamos el caller ID con el que se quiere que salga una llamada
que es colocada en esta troncal.

El formato utilizado es:

Nombre del llamador <###########>

164
Si no se quiere usar un caller ID dejar en blanco esta opcin

Maximum channels:
Esta opcin limita el nmero de canales que pueden ser usados en una troncal. Al decir
canales se refiere al nmero de llamadas simultneas que se pueden hacer, tanto
entrantes como salientes.

Dial Rules:
Las reglas de marcado indican como asterisk debera marcar para hacer la llamada en
una troncal. Esta opcin puede ser usada para adicionar remover prefijos. Si un
nmero marcado no matchea con patrones colocados en estas reglas, es marcado como
fue digitado.

Las reglas pueden ser especificadas mediante la siguiente sintaxis:

Patrn Descripcin
X Representa cualquier dgito de 0-9
Z Representa cualquier dgito de 1-9
N Representa cualquier dgito de 2-9
[1237-9] Representa cualquier dgito entre corchetes
. Representa uno o ms caracteres
| Separa el nmero ubicado a la izquierda del nmero
marcado. Por ejemplo: 9|NXXXXXX debera
representar los nmeros marcados como 92234567
pero slo debera pasar 2234567
+ Adiciona un prefijo al nmero marcado. Por ejemplo:
001+NXXNXXXXXX debera agregar el 001 al
nmero 3058293438 cuando este es marcado

Troncales de tipo IAX y SIP

Adems de las configuraciones arriba especificadas, se deben especificar


configuraciones entrantes y salientes que generalmente son especificadas por el
proveedor de servicios de voz. Las configuraciones pueden incluir username, password,
codec utilizado, el host con el cual debe de registrarse, etc.

Ejemplo de configuracin de los detalles del Peer:

165
allow=ulaw&alaw&gsm&ilbc&g726&adpcm&lpc10
canreinvite=no
disallow=all
dtmfmode=info
fromuser=myusername
host=nyc.voicepulse.com
qualify=5000
secret=mypassword
sendrpid=yes
type=peer
username=myusername

Adems es posible que se requiera una cadena de registro que tiene la siguiente sintaxis:

myusername:mypassword@host

Troncales de tipo ZAP

Las troncales de tipo zap son las asociadas a hardware de telefona instalado en la
mquina y usa el mdulo chan_zap.so. Los archivos asociados a este tipo de troncales
son el /etc/zaptel.conf y /etc/asterisk/zapata.conf

Las troncales Zap son creadas mediante un nmero asociado a la posicin del canal en
el hardware.

Troncales personalizadas.

Estas troncales son creadas cuando se usan protocolos no estndares como h323,
Unicall, etc.

Se debe especificar un strip de marcado. Por ejemplo:

Unicall/XXXXXXX

10.3 Tarifacin

166
La opcin Tarifas del Men Facturacin del Elastix nos permite visualizar y
configurar las tarifas que se usarn para la facturacin de llamadas.

Listado de tarifas definidas

Visualizar, Editar y Eliminar

El enlace Ver nos llevar a una pantalla donde se mostrar los datos de la tarifa.

Para eliminar una tarifa de clic en el botn Eliminar.

Puede adems modificar los valores de la tarifa dando clic en el botn Editar. Los
nicos valores que puede cambiar son: Nombre, Tarifa y Tarifa de Conexin.

Formulario de edicin de tarifa

Crear Tarifa

Para agregar una nueva tarifa dar clic en el botn Crear Nueva Tarifa. Se mostrar un
formulario en el que se ingresarn los siguientes campos:

Prefijo: Prefijo telefnico al cual se aplicar la tarifa


Nombre: Nombre para la tarifa
Tarifa: Valor de la tarifa
Tarifa de Conexin: Valor de conexin

167
Creacin de nueva tarifa

Reporte de Facturacin

La opcin Reporte de Facturacin del Men Facturacin del Elastix nos permite
visualizar el detalle de las llamadas con su respectivo costo y tarifa aplicada.

El reporte cambiar dependiendo de los valores de filtrado:

Fecha Inicio: Fecha a partir de la cual se seleccionarn las llamadas.


Fecha Fin: Fecha hasta la cual se seleccionarn las llamadas.
Campo: Campos adicionales de filtrado: Fuente, Destino, Canal Destino.

168
Reporte de tarifacin

Distribucin de Destinos

La opcin Distribucin de Destinos del Men Facturacin del Elastix nos permite
visualizar mediante un grfico la distribucin de las llamadas salientes agrupadas por
tarifa. El grfico cambiar dependiendo de los valores de filtrado:

Fecha Inicio: Fecha a partir de la cual se seleccionarn las llamadas


Fecha Fin: Fecha hasta la cual se seleccionarn las llamadas
Criterio de distribucin: Distribucin por Tiempo, Distribucin por Nmero
de Llamadas, Distribucin por Costo

Distribucin por Tiempo

169
La opcin de distribucin por tiempo muestra un grfico de pastel del tiempo traficado
para cada troncal. Adems muestra una lista de las troncales que ms tiempo han
traficado.

Grfico de pastel que muestra la distribucin de destinos en base a tiempo de uso

Distribucin por Nmero de Llamadas

Muestra un grfico de pastel del nmero de llamadas para cada troncal. Adems muestra
una lista de las troncales con ms nmero de llamadas traficadas.

Distribucin de destinos en base a nmero de llamadas

170
Distribucin por Costo

Muestra un grfico de pastel dividido por el costo resumido por troncal. Es decir que
para cada troncal se computa el costo de todas las llamadas traficadas. Este clculo de
costo est basado en las tarifas ingresadas en el men Tarifas (rates).

Configurar Facturacin

Dentro de esta opcin tenemos dos secciones que explicaremos a continuacin.

Configuracin de Tarifa por Omisin

La opcin Configuracin de Tarifa por Omisin del Men Facturacin del Elastix
nos permite determinar el costo por minuto y de conexin para la ruta por omisin o
dicho de otra manera la tarifa que se aplicar cuando no se encuentre otra tarifa que
aplicar a una llamada.

Tarifa por omisin

Configuracin de Troncales para Facturacin

La opcin Configuracin de Troncales del Men Facturacin del Elastix nos


permite determinar cules sern las troncales que se usarn para obtener las llamadas
para el proceso de facturacin.

El listado muestra todas las troncales registradas, deber seleccionar las que se usarn
para la facturacin y luego dar clic en el botn Habilitar para Facturar.

171
Centrales habilitadas para tarifacin seleccionadas con visto

10.4 Reportes

Reporte CDR

CDR es la abreviacin de Call Detail Record o Registro de Detalle de Llamada.

La opcin Reporte CDR del Men Reportes del Elastix nos permite visualizar un
listado con el detalle de las llamadas.

172
Reporte de CDRs

El reporte cambiar dependiendo de los valores de filtrado:

Fecha Inicio: Fecha a partir de la cual se seleccionarn las llamadas


Fecha Fin: Fecha hasta la cual se seleccionarn las llamadas
Campos adicionales de filtrado: Fuente, Destino, Canal Destino
Estado Estado de la llamada: ANSWERED, BUSY, FAILED, NO
ANSWER

Nota: Este reporte es exportable a formato CSV (separado por comas). Este
formato se puede abrir desde una hoja de clculo para realizar las manipulaciones
matemticas que se estime conveniente como por ejemplo sacar promedios de
tiempo de llamada por extensin.

Uso de Canales

La opcin Uso de Canales del Men Reportes del Elastix nos permite visualizar
grficamente el nmero de llamadas simultneas para cada canal.

173
Reporte de uso de canales

10.5 Configuracin DISA


El concepto de DISA (Direct Inward System Access) permite que los usuarios puedan
acceder telefnicamente al servidor Elastix desde fuera y obtener un tono "interno" de
marcado. Con este tono "interno" puedo tener acceso a las mismas facilidades que desde
dentro. Por ejemplo, podra realizar llamadas internacionales (si es que se me lo permite
claro est).

Normalmente el soporte DISA no est disponible para todos los empleados de una
compaa y es necesaria una clave para poder obtener el tono "interno". Para poder
ingresar la clave algunas compaas proveen de una opcin oculta en el IVR principal
de la compaa. En todo caso hay que tomar las precauciones para que el acceso DISA
no pueda ser quebrantado por usuarios indeseados, quienes podran aprovecharlo para
hacer llamadas a costa de la compaa.

174
Para configurar un acceso DISA debemos ir al men "PBX -> PBX Configuration ->
DISA" y obtendremos una pantalla como la siguiente.

Formulario para crear un nuevo acceso DISA

DISA name: El nombre que se le da al nuevo acceso DISA. Puede ser


cualquiera
PIN: La clave para que el usuario acceda al soporte DISA (tono interno)
Response Timeout: Tiempo mximo que la aplicacin DISA espera para que el
usuario complete el PIN
Digit Timeout: Mximo tiempo entre dgitos

Luego, para que ste acceso DISA est disponible desde el IVR principal debemos
modificar dicho IVR y asociar una opcin con el acceso DISA recientemente creado.

10.6 Condiciones de tiempo

175
El uso de condiciones de tiempo es una caracterstica muy til para muchos negocios
que quieren modificar el comportamiento de su PBX dependiendo de la hora del da o
da de la semana. Por ejemplo, la compaa X desea que en la noche las llamadas a
ventas no vayan a la cola de ventas sino que se reproduzca un mensaje indicando el
horario de atencin y diciendo tambin que pueden contactar a un nmero alternativo
para casos urgentes; o tambin la compaa Z que quiere reproducir un IVR de
bienvenida distinto al habitual durante los fines de semana ya que tienen promociones
de fin de semana.

Las condiciones de tiempo son funcionalidad provista gracias a la integracin de Elastix


con el software freePBX. Para configurar una condicin de tiempo hay que ir al men
"PBX -> PBX Configuration -> Time Condition". Aqu accederemos a un formulario
que nos permitir establecer el rango de tiempo asociado con la condicin que queremos
crear. Al final del formulario podemos relacionar esta condicin de tiempo con una
entidad como por ejemplo un IVR, una extensin, una cola, un voicemail, etc.

176
Aadiendo una nueva condicin de tiempo

177
Funcionamiento interno de
freePBX
La libertad no se implora, se conquista
-- Eloy Alfaro

11.1 Fundamentos de freePBX


freePBX es un poderoso software de configuracin de Asterisk que ha sido integrado
como parte de la distro Elastix. Bsicamente es el software que se encarga de generar
los archivos de configuracin de Asterisk incluido el plan de marcado en base a la
configuracin ingresada por el usuario desde el Web.

Para realizar esta difcil tarea freePBX la divide en dos pasos:

1. Recaba la configuracin deseada por el usuario en una base de datos de


configuracin. En el caso de Elastix se usa el motor de base de datos MySQL.

179
2. Luego convierte esa informacin almacenada en MySQL principalmente en
archivos de configuracin a travs de una herramienta de parsing llamada
retrieve_conf

Para ilustrar mejor el proceso los dejamos con la siguiente figura.

Componentes principales de freePBX

11.2 Organizacin de archivos


freePBX escribe o lee informacin de algunos directorios para su correcto
funcionamiento. A continuacin una lista de los ms importantes.

Directorio Descripcin
/var/www/html/admin/ El directorio principal donde reside el
GUI de freePBX
/var/www/html/panel/ Directorio del Flash Operador Panel. En
realidad se trata de otro proyecto
independiente pero relacionado.
/etc/asterisk/ El directorio donde residen los archivos de
configuracin de Asterisk que escribe

180
freePBX
/var/lib/asterisk/agi-bin/ Aqu residen los scripts AGI de Asterisk.
freePBX cuenta con algunos scripts en
esta carpeta como el
dialparties.agi
/var/lib/asterisk/bin/ Algunos binarios utilizados por freePBX.
Algunos de ellos son links simblicos a
las carpetas de los mdulos
/usr/local/sbin/ Aqu reside el script amportal. Se
encuentra en esta carpeta porque puede ser
manipulado solo por root
/var/lib/asterisk/sounds/ Aqu residen los sonidos que se utilizan en
el plan de marcado por freePBX
/var/lib/asterisk/sounds/custom/ Aqu residen los sonidos que han sido
creados por el usuario. Por ejemplo
cuando se crea un IVR de bienvenida
/var/spool/asterisk/voicemail/ Directorio donde se almacenan los
voicemails
/var/spool/asterisk/monitor/ En este directorio se almacenan las
grabaciones de voz
/var/log/asterisk/cdr-csv/ Directorio donde se escriben los CDRs en
formato texto

11.3 Configuracin

amportal.conf

El archivo /etc/amportal.conf es un archivo de texto plano ledo por freePBX


para recabar informacin general de configuracin. Digamos que es el principal archivo
de configuracin de freePBX y puede ser editado manualmente en caso de requerirse.

Por ejemplo, aqu se encuentra informacin de acceso a la base de datos como usuario y
clave as como tambin el tipo de autenticacin que freePBX usar para con sus
usuarios Web.

Es un archivo bien documentado por lo que no se nos har difcil entender las opciones
o directivas de configuracin.

181
11.4 retrieve_conf: generador del plan de
marcado
retrieve_conf es un programa escrito en PHP que se encarga de generar el plan de
marcado a partir de la informacin almacenada en la base de datos. Este programa
puede ser invocado inclusive desde la lnea de comandos aunque usualmente se ejecuta
desde el Web a travs de un script PHP cada vez que damos clic en la famosa barrita
roja de freePBX (la que dice aplicar cambios).

11.5 dialparties.agi
Se trata de un script AGI, escrito en PHP, que se invoca desde el plan de marcado
cuando se quiere hacer una llamada. Este script se encarga de revisar el estado de la
extensin a la que se est tratando de alcanzar, as como tambin ciertas opciones que
pudieran estar configuradas en dicha extensin (como call waiting, call forward, do not
disturb) y retorna dicha informacin para que se pueda tomar una accin acorde como
por ejemplo devolver al llamante un tono de ocupado en el caso de DND o rutar la
llamada a otra extensin en el caso de call forward. Si la extensin est disponible y no
se encuentran opciones activadas la llamada transcurre sin inconvenientes.

Para realizar su trabajo dialparties.agi consulta la base de datos de Asterisk (la


que se encuentra almacenada en el archivo /var/lib/asterisk/astdb).

A continuacin algunas lneas de diagnstico que aparecen en el CLI cuando se intenta


hacer una llamada. Estas lneas son devueltas por el script dialparties.agi.

dialparties.agi: Caller ID name is 'Pedro Paramo' number is '5454'


dialparties.agi: Methodology of ring is 'none'
-- dialparties.agi: Added extension 1616 to extension map
-- dialparties.agi: Extension 1616 cf is disabled
-- dialparties.agi: Extension 1616 do not disturb is disabled
dialparties.agi: Extension 1616 has ExtensionState: 0
-- dialparties.agi: Checking CW and CFB status for extension 1616
-- dialparties.agi: dbset CALLTRACE/1616 to 5454
-- dialparties.agi: Filtered ARG3: 1616

Nota: Este script puede ser sobrescrito por el propio freePBX por uno nuevo
por lo que si se realizan cambios en su cdigo se debe tener este hecho en
cuenta. dialparties.agi est ubicado en la ruta /var/lib/asterisk/agi-
bin/dialparties.agi.

182
11.6 Estructura de un mdulo de freePBX
La idea de este apartado no es proveer de los conocimientos para que podamos construir
un mdulo de freePBX sino ms bien para que podamos entender cmo solucionar
posibles problemas y para entender mejor cmo funciona freePBX.

Los mdulos de freePBX tienen la siguiente estructura mnima de archivos.

Nombre del archivo Descripcin


module.xml Contiene informacin del mdulo en
formato XML
page.nombredelmodulo.php Es el archivo principal del mdulo escrito
en PHP. Como es de imaginar, la palabra
nombredelmodulo debe ser reemplazada
por el respectivo nombre del mdulo.
functions.inc.php Se trata bsicamente de una librera de
funciones PHP. Funciones tanto para uso
del mdulo como para que puedan ser
compartidas por otros componentes de
freePBX
install.sql Contiene sentencias SQL que se
ejecutarn sobre la base de datos al
instalar el mdulo. Bsicamente para crear
las tablas necesarias para el mdulo
uninstall.sql Contiene las sentencias SQL necesarias
para desinstalar el mdulo. Bsicamente
para remover las tablas creadas
install.php Script PHP para ser ejecutado al momento
de instalacin del mdulo
uninstall.php Script PHP para ser ejecutado al momento
de desinstalacin del mdulo

183
Interconexin con Elastix
remotos
Cualquier poder, si no se basa en la unin, es dbil
-- Jean de la Fontaine

12.1 A travs de troncales SIP


Una de las ventajas de usar Elastix es que fcilmente podemos interconectar dos cajas
Elastix de tal manera que se puedan unir las comunicaciones de dos lugares remotos,
por ejemplo en un solo plan de marcado.

A continuacin veremos como configurar la interconexin de dos Elastix mediante una


troncal de tipo SIP.

En el escenario mostrado en el grfico anterior queremos interconectar un servidor


Elastix en el punto A con otro servidor Elastix en el punto B de tal forma que el
telfono en A y el telfono B se puedan comunicar nicamente marcando las
extensiones directamente de cada telfono.

Para implementar esto se requiere definir dos cosas:

185
1. La troncal
2. Las rutas salientes en cada Elastix

Definiendo la troncal

Definimos el nombre de la troncal el cual en nuestro caso servir de username para el


proceso de registro. A la troncal del Elastix en el punto A la llamaremos pointA y la del
punto B la llamaremos pointB.

Luego definimos los detalles del peer que en este caso sern los siguientes:

host=dynamic
secret=welcome
trunk=yes
type=friend

Configuracin que se repite en ambos servidores Elastix. Como se ve hemos definido


como secret la palabra welcome.

Definimos el register string siguiendo el formato especificado anteriormente.

En este caso para el servidor A debera ser:

pointB:welcome@192.168.1.240

y para la central Elastix en el servidor B debera ser:

pointA:welcome@192.168.1.239

Una vez establecido esta configuracin en ambos Elastix podemos verificar en el


Asterisk CLI si se encuentran registradas las troncales mediante el comando: sip
show registry y deberamos ver algo como esto:

elastix*CLI> sip show registry


Host Username Refresh State Reg.Time
192.168.1.240:5060 pointB 105 Registered Fri,11 Apr 2008 10:29:43

186
El siguiente paso es definir los detalles del user, es decir en donde se quiere terminar
la llamada. En este caso queremos que sea accesible a la extensiones local, bastar con
colocar el contexto primario. Esto indica que cuando la llamada entre por la troncal
iniciar en el contexto aqu especificado. La configuracin es como sigue:

context=from-internal
host=192.168.1.240
insecure=very
type=friend

Definiendo la ruta saliente

Primero determinamos el nombre de la ruta saliente. En este caso le pondremos:


ElastixB

Luego definimos el patrn de marcado, en este caso usaremos el siguiente patrn


de marcado: 2|XXX. Estamos suponiendo que los nmeros locales empiezan con
el nmero 2 adelante. Debemos ajustar esto dependiendo del pas donde nos
encontremos.

En tercer lugar escogemos la troncal por la cual debe irse la llamada. En este
caso escogemos por la troncal SIP/pointA

12.2 Conexin con proveedores de llamadas


va IP
Hoy en da ha tenido mucho auge lo que se llaman los VSP (Voice Service Provider)
proveedores de servicios de voz, los cuales proveen entre cosas conexiones SIP IAX
para permitir conectar llamadas locales en una regin.

En este apartado implementaremos una conexin SIP con un proveedor que nos
permitir hacer llamadas dentro de los Estados Unidos.

En el escenario mostrado en el grfico anterior queremos registrar nuestra troncal de


tipo SIP con un VSP que nos permita realizar llamadas a USA desde cualquier telfono
IP.

Para implementar esto se requiere definir dos cosas:

1. La troncal

187
2. Las rutas salientes en cada Elastix

Definiendo la troncal

Como vimos anteriormente se debe definir el nombre de la troncal en este caso le


llamaremos: VP-SIP-NYC

Luego definimos las caractersticas del peer. Esta informacin debe ser proporcionada
por el VSP y generalmente es la misma para todos los usuarios a registrar, lo nico que
cambia es el username y el password.

En nuestro caso nuestro VSP nos pidi que configuremos de la siguiente forma.

allow=ulaw&alaw&gsm&ilbc&g726&adpcm&lpc10
canreinvite=no
disallow=all
dtmfmode=info
fromuser=myusername
host=nyc.voicepulse.com
qualify=5000
secret=mypassword
sendrpid=yes
type=peer
username=myusername

Luego agregamos la cadena de registro que en nuestro caso sera la siguiente.

myusername:mypassword@nyc.voicepulse.com

Definiendo la ruta saliente

Primero determinamos el nombre de la ruta saliente. En este caso le pondremos:


INTERNACIONAL

Luego definimos el patrn de marcado, en este caso usaremos el siguiente patrn


de marcado: 00.

En tercer lugar escogemos por que troncal debe irse la llamada en este caso
escogemos por la troncal SIP/VP-SIP-NYC

188
Una vez establecido esta configuracin podemos verificar en el Asterisk CLI si se
encuentra registrada nuestra troncal mediante el comando: sip show registry y
deberamos ver algo como esto:

elastix*CLI> sip show registry


Host Username Refresh State Reg.Time
nyc.voicepulse.com:5060 myusername 105 Registered Fri,11 Apr 2008
10:29:43

Con esto estamos listos para realizar llamadas hacia USA.

189
Calidad de voz
Calidad es hacer las cosas bien cuando nadie est controlando
-- Henry Ford

13.1 Sntomas que afectan la calidad de voz


Enumerar los problemas que afectan la calidad de voz es difcil pues a lo largo de los
aos me he encontrado con muchos, algunos muy parecidos a otros lo cual hace difcil
categorizarlos y cuyas causas son muy variadas. Sin embargo, en el presente apartado
pretendo enumerar los ms comunes explicando sus causas y posibles soluciones.

Eco

El eco es uno de los sntomas ms comunes y es muy fcil reconocerlo. Se produce


cuando una parte de la seal de ida se refleja en la seal de vuelta.

Hay algunas causas del eco pero una de las ms comunes se produce en las lneas
analgicas cuando se combinan las seales en el convertidor hbrido o convertidor de 2
4 hilos ya que es muy difcil separar las seales de ida y de vuelta de manera eficaz.

191
El problema se agrava cuando la impedancia de la lnea telefnica vara mucho. Mucha
de la tarjetera telefnica disponible para Asterisk no dispone de un buen mecanismo
dinmico de ajuste de la impedancia de la lnea con la impedancia de la tarjeta. Por esta
razn una parte de la onda se refleja.

Nota: hay que recordar que para que un receptor absorba eficientemente la
potencia de la seal recibida su impedancia debe coincidir con la de la lnea.

Sin embargo, existe una forma de acoplar estas impedancias lo mejor posible. Esto se
puede realizar con la utilera llamada fxotune disponible en Elastix.
Lamentablemente esta utilera se debe ejecutar manualmente y con el servicio Asterisk
apagado. Para lneas con problemas se recomienda ejecutarlo en horas no laborables una
vez por semana. El comando es el siguiente.

fxotune -i 5

Lo que hace el comando fxotune es hacer prueba y error enviando una seal pura por
la lnea y escuchando el retorno. Esto lo hace muchas veces para cada lnea hasta
encontrar el mejor valor de ganancia, el cual escribe en un archivo ubicado en
/etc/fxotune.conf

Al finalizar su ejecucin podemos encender Asterisk de nuevo pero antes hay que
ejecutar el siguiente comando para decirle a Zaptel que cargue los valores nuevos de
ganancia.

fxotune -s

Esto lo debemos ejecutar siempre antes de arrancar Asterisk por lo que se recomienda
mejor incluirlo al final del script de arranque de Zaptel ubicado en la ruta
/etc/init.d/zaptel para no tener que hacerlo manualmente cada vez.

Nota: Es muy importante hacer notar que si se utiliza el fxotune para tratar de
acoplar las lneas no se deben configurar las variables txgain o rxgain en el
zapata.conf ya que sobrescribirn el trabajo del fxotune.

Otra causa del eco es el eco acstico provocado cuando la seal de sonido se
retroalimenta desde el micrfono al audfono. Esto es ms notable cuando hablamos por
altavoz. Por supuesto el diseo del telfono tiene mucho que ver aqu y hay modelos
que introducen menos eco acstico que otros.

192
Bajo nivel o volumen

Muchas redes telefnicas de baja calidad atenan la seal de manera significativa


haciendo que oigamos un volumen muy bajo. Esto obviamente afecta la calidad de voz,
haciendo que la conversacin muchas veces sea inentendible o haciendo que no se
puedan detectar los dgitos DTMFs.
Tanto el volumen de recepcin como el de transmisin pueden ser amplificados
mediante parmetros en el archivo zapata.conf. Sin embargo se debe tener mucho
cuidado pues en ocasiones un volumen bajo significa una lnea mal acoplada y por ende
la mejor solucin es utilizar la utilera fxotune para corregir el problema. Si subimos
a ciegas los parmetros de ganancia en este caso podramos conseguir empeorar el eco
en la lnea.

El parmetro para modificar la ganancia de la seal de transmisin se llama txgain y


el que sirve para modificar la ganancia de la seal de recepcin se llama rxgain.
Ambos se pueden modificar en el archivo zapata.conf.

Retardo

El retardo no es otra cosa que la demora de la voz en llegar a destino. Usualmente el


retardo es menor a un segundo y si es menor a 200 ms pasa casi desapercibido.

Retardos mayores a 500 ms provocan que la conversacin se pise, es decir que los
interlocutores se interrumpan y la conversacin se traslape. Esto es irritante para la
conversacin.

Cuando existe retardo es casi imposible eliminarlo a nivel del servidor pues en la gran
mayora de los casos el retardo es un sntoma de problemas inherentes a la red de
comunicaciones. Con esto quiero decir que si se quiere eliminar el retardo habr que
analizar si se puede cambiar o mejorar algo en la red de comunicaciones. S hablamos de
una red de paquetes, puede ser que uno de los equipos (por ejemplo un ruteador) est
saturado en su capacidad.

Distorsin de la voz

En esta categora recaen diferentes problemas. Sin embargo uno comn es el de los
usuarios que reportan algo como se escucha robotizado.

Cuando se escucha robotizado usualmente se trata de usuarios que utilizan un codec


ahorrador de ancho de banda como por ejemplo gsm. Estos codecs realizan un muy
buen trabajo comprimiendo la voz lo mximo posible pero el costo es la prdida de

193
informacin en el proceso de codificacin. Si a esto se le agregan problemas con el
ancho de banda el problema empeora.

La solucin en este caso en particular es cambiar de codec pero hay que tener presente
que eso podra disparar otro problema peor si es que se usa un codec mas consumidor
de ancho de banda y el enlace se satura.

Comunicacin entrecortada

Un problema muy molestoso por cierto que normalmente est relacionado con la
prdida de paquetes. A su vez la prdida de paquetes puede ser causada por diferentes
problemas en la red, siendo el ms comn el de redes con una latencia elevada o ancho
de banda limitado. La comunicacin entrecortada tambin puede ser ocasionada por un
elevado jitter en la red. Estudiaremos esto ltimo ms adelante.

En todo caso lo normal es buscar la causa en la red y no en el servidor.

Por lo general si la latencia de la red es siempre (no hablo del promedio) de menos de
150 ms y el canal de comunicaciones no se encuentra saturado podemos estar tranquilos
de que los problemas de comunicacin entrecortada no nos quitarn el sueo.

13.2 Parmetros relacionados con la calidad


de voz en redes de paquetes

Retardo de red

Hay que distinguir aqu que no estamos hablando de retardo de voz sino el retardo de
los paquetes de red en las redes de paquetes.

Una manera sencilla (aunque no exacta) de calcular el retardo de la red es utilizar al


comando ping. El comando ping nos presenta al final un pequeo resumen estadstico
de los paquetes envidos. El resumen luce como el siguiente.

--- ping statistics ---


6 packets transmitted, 6 received, 0% packet loss, time 5004ms
rtt min/avg/max/mdev = 73.055/74.181/74.852/0.710 ms

Aqu podemos ver algunos parmetros como el retardo mnimo, mximo, promedio y
desviacin.

194
Prdidas de paquetes

Las prdidas son ocasionadas por paquetes que no llegaron a su destino. Pueden haber
muchas razones para esto como equipos defectuosos o saturados, prdidas en el medio
de transmisin (cables mal ponchados, ruido ambiente elevado), etc.

En el reporte del comando ping examinado hace poco vemos que tambin se nos reporta
porcentualmente las prdidas de paquetes. Lo deseable es que no existan prdidas de
paquetes en lo absoluto. Si existen, hay que averiguar el por qu.

Inclusive prdidas de menos del 1% pueden afectar a las conversaciones de voz sobre
IP. Ms aun si usamos codecs con gran compresin.

Jitter

El jitter es un parmetro muy importante cuando se habla de calidad de voz en redes de


paquetes. El jitter se define como la variabilidad del retardo y normalmente est en el
orden de los milisegundos.

Este parmetro es necesario para analizar la calidad de voz pues conocer que tenemos
un promedio de retardo bajo no es suficiente para garantizar una buena calidad. Por
qu?

Porque si tenemos un promedio de retardo aceptable pero en cambio es muy variable


esto significa que existe ms probabilidad que los paquetes lleguen en desorden o con
retardos excesivos y debemos recordar que debido a que estamos hablando de
comunicaciones en tiempo real no se pueden esperar a que lleguen todos los paquetes,
habr que descartar los que se demoren ms de lo necesario. Por tanto, si tenemos un
jitter elevado es ms probable que se descarten paquetes y por lo tanto oigamos una
conversacin entrecortada.

Nota: Muchas personas confan ciegamente en el comando ping para obtener el


retardo de una red e incluso para calcular el jitter haciendo clculos manuales.
Pero hay que notar que, pese a que puede usarse en situaciones en las que no
tengamos otra herramienta a la mano, el comando ping no enva paquetes
reales de voz sino trfico ICMP lo cual no es lo mismo y no recibe el mismo
tratamiento. Inclusive en ciertas redes este protocolo puede tener una limitacin
de ancho de banda totalmente diferente al de los paquetes de voz. La manera
ms exacta de calcular el jitter es con paquetes RTP reales y esto se puede
analizar con un sniffer.

195
Jitter buffers

Para tratar de que el problema del jitter tenga un menor impacto en la calidad de voz se
pens en que si se espera un poquito por los paquetes de voz en el destino (antes de re-
ensamblar la seal de voz para enviarla al telfono del destinatario) a lo mejor lleguen
una buena parte de los paquetes extraviados y la comunicacin sufra menos las
consecuencias.

El problema es que con esta accin estamos tambin aumentando el retardo, que es otro
problema desagradable. Sin embargo la idea es buena y si esperamos lo slo lo justo es
probable que lleguen una buena parte de los paquetes perdidos sin afectar
significativamente el retardo.

Un jitter buffer entonces es un pequeo registro donde se almacenan temporalmente


todos los paquetes de voz durante un corto tiempo para esperar por posibles paquetes
perdidos. El tiempo de espera se denomina tamao del buffer.

Asterisk 1.4 ya soporta el concepto de jitter buffer y este parmetro es configurable a


nivel de protocolos IAX y SIP. Este parmetro se puede configurar por tanto en los
archivos de tecnologa correspondientes (iax.conf y sip.conf).

Si se quiere estar seguro de que el jitter buffer est habilitado se puede aadir las
siguientes opciones en los archivos de tecnologa. usando.

En el sip.conf

jbenable=yes
jbmaxsize=200 ; Opcional (define el tamanio del buffer)

En el iax.conf

jitterbuffer=yes
maxjitterbuffer=200 ; Opcional (define el tamanio del buffer)

196
Esquema de funcionamiento de un jitterbuffer

13.3 Cmo medir la calidad de voz


Medir la calidad de voz siempre ha sido un rompecabezas para los ingenieros y su
complejidad radica en que la calidad de voz es en parte un parmetro subjetivo de la
persona que escucha. Incluso muchos conceptos como la entendibilidad de una
conversacin telefnica varan dependiendo del idioma que usemos. Para ponerlo ms
complicado an, nuestra mente juega una serie de trucos con nosotros para facilitarnos
la vida que hacen que ciertas mediciones de la calidad de voz sean ms difciles de
obtener. Un ejemplo de esto es que nuestra mente le da ms importancia a eventos ms
recientes que a los pasados por lo que si la voz se distorsiona justo antes de terminar la
conversacin es probable que las personas califiquen la calidad de la llamada de manera
diferente a que si los errores ocurrieron al principio de la llamada. Tambin hay
personas que justifican inconscientemente cierta falta de calidad de voz en pro de las
ventajas o conveniencias personales percibidas y un ejemplo de esto es que las personas
no se quejan mucho de la calidad de voz en telfonos celulares (al menos de primera
generacin) en pro de la ventaja de la movilidad. Sin embargo, si la misma calidad la
escucharan en una lnea fija es probable que llamen a la compaa telefnica a quejarse
porque su lnea suena raro o con mala calidad. Dicho de otra manera inconscientemente
estamos justificando esa falta de calidad y hacindola justificable.

En fin, esto es solo la punta del iceberg pues hay una serie de parmetros subjetivos un
tanto difciles de cuantificar. Lo importante es ilustrar la difcil tarea que se tiene al
tratar de cuantificar la calidad de voz.

Ahora vayamos al grano. En efecto existen algunos intentos de estandarizar la medicin


de la calidad de voz. Uno de los ms conocidos es la famosa escala MOS que se basa en
mediciones subjetivas y tambin se encuentra el modelo E que ya pone en el tapete
algunos parmetros objetivos como el retardo o la prdida de paquetes. Algo interesante
de este ltimo modelo es que contempla la conversin de sus resultados a la famosa
escala MOS, de manera que podramos decir que ya tendramos una escala estndar que
podemos usar para calificar la calidad de voz.

197
Escala MOS

La escala MOS es realmente una recomendacin de la ITU. Especficamente la


recomendacin ITU-T P.800 y describe una escala de calidad de voz basada en la toma
de muestras subjetivas que se realizan con una serie de tcnicas llamadas ACR
(Absolute Category Rating).

Para hablar claro se rene a un grupo grande de personas y se les pide que califiquen la
calidad de voz. Las pruebas ACR, a diferencia de otras, no contemplan la comparacin
de la conversacin telefnica con una seal referencial y pensndolo bien as es como
sucede en una llamada telefnica real.

Pero al no tener un parmetro de comparacin o referencia, cmo podemos normalizar


las muestras obtenidas?. Para esto se le hacen escuchar a los participantes algunos
ejemplos que previamente han sido definidos por la Recomendacin de manera que los
usuarios tengan algn marco referencial.
Una vez hecho esto se transmiten una serie de frases (tambin pre-definidas por la
Recomendacin) por la lnea telefnica y los usuarios proceden a calificar la calidad de
voz.

A continuacin la escala MOS.

Calificacin MOS Calidad Esfuerzo


5 Excelente No hace falta esfuerzo alguno
4 Buena Es necesario prestar atencin pero no es
necesario un esfuerzo apreciable
3 Aceptable Esfuerzo moderado
2 Pobre Gran esfuerzo
1 Mala No es posible entender la conversacin

Modelo E

El modelo E es un modelo ms matemtico y objetivo de medicin de la calidad de voz


basado en algunos parmetros de red como el retardo, el jitter y la prdida de paquetes.

Nota: Al decir que es un mtodo objetivo el lector no debe pensar


necesariamente que este es un mejor mtodo de medicin de la calidad de voz
porque ya hemos expuesto que la calidad de voz contiene un importante
componente subjetivo. Sin embargo, si teneos la posibilidad de tomar
mediciones de los parmetros de red, este mtodo es ms prctico que el

198
primero pues luego de un relativamente sencillo clculo matemtico podemos
tener una aproximacin de la calidad de voz en la escala MOS.

El modelo E tambin fue recomendado por el ITU y se trata de la recomendacin ITU-T


G.107. Para ir a lo que nos interesa, el modelo E dice que la calidad de voz queda
representada por un parmetro R. Luego veremos como traducir ese parmetro R a la
escala MOS, pero primero veamos cmo se calcula R.

R = R0 IS Id Ie + A

Donde,

R0 es la relacin seal-a-ruido (signal-to-noise ratio)


IS es la degradacin por conversin (la degradacin que sufre la seal en su conversin
a un formato paquetizado para poder transmitirla en una red de paquetes)
Id representa el retardo
Ie representa la degradacin introducido por los equipos de red. Bsicamente este factor
depende del codec y de las prdidas de red
A representa el margen de seguridad

Simplifiquemos las cosas un poco

Para los impacientes que ya quieren comenzar a hacer clculos matemticos les dir que
la recomendacin ITU nos provee de una frmula ms simplificada para calcular el
parmetro R, aunque obviamente menos precisa que la primera pues supone algunos
valores por omisin. Esta frmula es la siguiente.

R = 94,2 Id Ie

Nota: Si somos observadores notaremos que el valor mximo que podra tomar
R es de 94,2.

Ahora bien, como mencionamos antes los parmetros Id e Ie representan el retardo y la


prdida de paquetes, pero esto no significa que vayamos a reemplazar estos valores por
las mediciones de retardo en milisegundos y de prdidas en porcentaje directamente en
la frmula. No, no; debemos antes adecuar estos valores y normalizarlos con ciertas
frmulas provistas por la recomendacin.

El parmetro Id representa el retardo y se calcula con la siguiente frmula.

199
Id = 0.024 d + 0.11 (d 177.3) H(d 177.3)

Donde d es el retardo en milisegundos y H( ) es la funcin de Heavyside.

H(x) = 0 para x < 0 y 1 para x 0.

Al analizar la frmula de Id notaremos a primera vista que hay un valor de inflexin en


los 177.3 milisegundos y a valores mayores que ste la calidad de voz se ve afectada a
un ritmo ms severo. Esto es un dato interesante ya que nos permite bosquejar una regla
emprica y decir que en las instalaciones siempre deberamos mantener el retardo de la
red debajo de los 170 milisegundos (redondeando un poco 177.3 milisegundos para
podernos aprender ese valor).

Finalmente hay que calcular Ie para poder reemplazar este valor en la frmula y calcular
el dichoso R. Como dijimos antes Ie depende de algunos factores pero bsicamente de
las prdidas de paquetes y del codec usado. Para mantener las cosas relativamente
simples usaremos un grfico con el cual podremos determinar de manera aproximada el
valor de Ie dependiendo de, precisamente, el porcentaje de prdida de paquetes y el
codec usado. La tabla es la siguiente.

Grfico Ie vs Prdida de paquetes

Este grfico fue generado a partir de la siguiente tabla de valores aproximados. El eje
horizontal representa la prdida de paquetes y el eje vertical representa el parmetro Ie.

Packet Loss % G.711 G.723.1 G.729A


0 0 11 15

200
1 3 15 18
2 5 18 20
4 7 20 25
8 9 22 28
16 20 24 30

Podemos observar que mientras ms compresin involucre el uso de determinado


codec, mayor es la contribucin al parmetro Ie y por lo tanto menor la calidad de voz.
Incluso podemos observar que con cero prdidas ya algunos codecs merman la calidad
de voz.

Traduciendo R a la escala MOS

Ahora que ya tenemos un valor de R vamos a explicar cmo traducirlo a la ms


conocida escala MOS.
La frmula es la siguiente.

MOS = 1 R<0
MOS = 1 + 0.035 R + 7 R (R 60) (100 R) 10 -6 0 < R < 100
MOS = 4.5 R > 100

Ahora ya tenemos una manera prctica y objetiva de medir la calidad de voz de una
instalacin de voz sobre IP y de esta manera hacer ajustes correspondientes para
mejorar la satisfaccin de los usuarios telefnicos.

Ejemplo prctico

Veamos un caso de la vida real. Supongamos que hemos realizado algunas mediciones
en un punto de la red y queremos determinar la calidad de voz en dicho punto en la
escala MOS conociendo que usamos el codec G.711. Tenemos que el retardo es de 143
ms y la prdida de paquetes llega al 7%. Cul sera la medida de calidad de voz segn la
escala de MOS?

No entrar en detalles del desarrollo del problema aqu pero en algn momento
llegaremos a la siguiente expresin.

R = 94.2 0.024 143 7.2

R = 83.57

201
Traduciendo R a la escala MOS tendramos:

MOS = 4.15

Lo cual no es un resultado de todo malo pues todava nos encontramos en el rango de


usuarios Satisfechos.

13.4 Canceladores de eco

Cmo funciona un cancelador de eco?

Es muy importante saber cmo funcionan los canceladores de eco para entender cmo
sacarles el mximo provecho y quin sabe, para tener las bases para disear el nuestro
propio o modificar alguno existente. A fin de cuentas estamos hablando de cdigo
abierto verdad?

Un cancelador de eco parte de un principio lgico muy sencillo. Si se refleja una parte
de la seal de ida en la de regreso, entonces para eliminar el eco debera bastar con
restar la seal de ida (en cierta proporcin) a la seal de regreso.

Debido a que el eco es una seal reflejada que se encuentra atenuada, la clave est en
estimar adecuadamente dicha atenuacin. Por ejemplo, supongamos que la seal de eco
es un 20% de la seal original. Entonces si podemos predecir que debemos restar a la
seal de regreso un 20% de la seal de ida, habremos eliminado el eco completamente.
Al menos en teora claro est.

Esta prediccin del factor de atenuacin es una parte clave de todo algoritmo de
cancelacin de eco y recibe el nombre de algoritmo adaptativo o filtro adaptativo
(adaptive filter) ya que debe adaptar el valor constantemente para obtener los mejores
resultados.

En la siguiente figura supondremos que la atenuacin de la seal reflejada est denotada


por la letra .. La seal recibida es Rx, la seal transmitida es Tx y la seal transmitida
con el componente de eco es Txe.

202
Diagrama bsico del funcionamiento de un cancelador de eco

Sin embargo, no todo es tan sencillo como se explica aqu. El eco no es solo una seal
reflejada atenuada sino que tambin puede estar desplazada en el tiempo con cierto
retardo. Ese retardo tambin hay que predecirlo para poder restar la indeseable seal de
eco. Predecir el retardo no es una tarea sencilla y por lo general los canceladores de eco
tienen limitantes. Si el retardo es muy grande dejan de funcionar ya que es mucho
trabajo revisar la seal en busca de retardo por grandes lapsos de tiempo.

Nota: Hay que hacer un pequeo parntesis aqu y recordar que los
canceladores de eco deben funcionar a tiempo real y por lo tanto no pueden
perder el tiempo en clculos muy tediosos ya que dejaran de ser veloces y
retrazaran el envo de la voz.

Valores tpicos de retardo que un cancelador de eco puede manejar son 64 ms o 128 ms.
Obviamente mientras menor sea el valor menor es el trabajo para el cancelador de eco
(en trminos de uso de CPU) pero mayor podra ser la imprecisin. Este tiempo mximo
de retardo que un cancelador de eco puede tolerar se denomina comnmente cola o tail.

El estndar G.168

Hace algunos aos el ITU lanz una especificacin que define los parmetros de lo que
debe ser un cancelador de eco. Podramos decir que el documento es una
recomendacin. Por lo tanto, si un cancelador de eco est en concordancia con dicha
recomendacin se dice que es G.168 compatible (compliant with G.168). Sin embargo,
G.168 es una especificacin tcnica compleja y no es cosa fcil determinar si un
cancelador de eco es compatible o no. Existen empresas inclusive que se dedican al
trabajo de revisar si un cancelador de eco es compatible o no con G.168.

203
No vamos a explicar aqu los detalles de G.168 pues sale del alcance del presente libro.
Sin embargo, si alguien est interesado en detalles tcnicos le recomendamos visitar el
sitio del ITU (http://www.itu.int).

Un cancelador de eco para Asterisk que dice ser G.168 compatible es SoftEcho de
OctWare.

204
Protocolos VoIP al descubierto
Within a few years a simple and inexpensive device, readily carried
about, will enable one to receive on land or sea the principal news, to
hear a speech, a lecture, a song or play of a musical instrument,
conveyed from any other region of the globe.
-- Nikola Tesla, 1905

14.1 Protocolo SIP


El protocolo SIP (Session Initialization Protocol) es un protocolo de sealizacin
(application-layer control) creado para administrar sesiones multimedia entre dos o ms
partes. Muchos se confunden pensando en que el protocolo SIP es quien transporta la
voz propiamente dicha pero no es as, esta labor la realiza otro protocolo que veremos
ms adelante; de lo que s se encarga SIP es de la comunicacin necesaria para
establecer una llamada, modificarla, as como para finalizarla.

El protocolo SIP fue diseado con la premisa de la simplicidad en mente, se trata de un


protocolo de texto con mensajes de comunicacin sencillos. Inclusive SIP comparte
algunos cdigos de estatus con HTTP como el familiar 404: Not found

Es un protocolo peer-to-peer. Es decir que prcticamente toda la lgica es almacenada


en los endpoints.

205
Detalles del protocolo

RTP es el portador de la voz y el video.


SDP se usa para negociar las capacidades de los endpoints.
Usa dos importantes protocolos como RTP/RTCP y SDP.
La ltima versin del estndar es la RFC3261.
Basado en texto, lo que nos permite entender los mensajes de una manera
relativamente fcil.

Sealizacin SIP: Mtodos y respuestas

Mtodos

Mtodo Descripcin
INVITE Invita a un usuario a una llamada
ACK Facilita el intercambio de mensajes
confiables

BYE Termina una conexin entre usuarios o


declina una llamada
CANCEL Termina un requerimiento o bsqueda por
un usuario
OPTIONS Solicita informacin acerca de
capacidades del servidor SIP
REGISTER Registra una ubicacin de usuario
INFO Usado para sealizacin en mitad de
sesin. Para intercambiar informacin

Respuestas

1xx Informational (e.g. 100 Trying, 180 Ringing)


2xx Successful (e.g. 200 OK, 202 Accepted)
3xx Redirection (e.g. 302 Moved Temporarily)
4xx Request Failure (e.g. 404 Not Found, 482 Loop Detected)
5xx Server Failure (e.g. 501 Not Implemented)
6xx Global Failure (e.g. 603 Decline)

206
SIP y Asterisk

Algunos detalles a tener en cuenta cuando se usa el protocolo SIP con Asterisk son los
siguientes:

A pesar de que SIP es independiente de la capa de transporte (puede ser usado


con TCP, UDP, ATM, X.25, entre otros) en Asterisk su implementacin est
limitada a UDP

Por omisin se usa el puerto 5060, pero este parmetro se puede modificar en el
archivo sip.conf

SIP adolece de problemas de NAT

En Asterisk es posible hacer diagnstico del protocolo SIP. Se ver esto ms


adelante.

14.2 Protocolo IAX


El protocolo IAX (Inter-Asterisk eXchange) es un protocolo de sealizacin creado por
Mark Spencer, el mismo creador de Asterisk, con el objetivo de solucionar algunos
problemas existentes con otros protocolos. El protocolo todava no es un estndar pero
pretende serlo a travs de un proceso de estandarizacin en la IETF.

En esencia IAX presenta tres ventajas muy interesantes sobre otras alternativas como
SIP.

Consume menos ancho de banda


Soluciona mejor problemas de NAT
Pasa ms fcilmente a travs de firewalls

Si reflexionamos acerca de estas ventajas nos daremos cuenta rpidamente que resultan
perfectas para troncalizacin entre dos servidores Elastix. En otras palabras, es
recomendable el uso de IAX para interconectar dos o ms servidores Elastix entre si.

La versin actual del protocolo es la versin 2. La versin anterior ha quedado obsoleta


por lo que es comn ver el nombre IAX2 como sinnimo de IAX.

207
IAX es un protocolo binario, a diferencia de SIP que como recordaremos es un
protocolo basado en texto. Esto es una ventaja desde el punto de vista desde ancho de
banda puesto que en binario se desperdiciarn menos bytes.

IAX usa UDP y normalmente usa el puerto 4569. Lo interesante de IAX es que por un
solo puerto transmite tanto la voz como la sealizacin y es esto lo que le permite
resolver problemas de NAT y pasar a travs de firewalls sin mayor inconveniente.

Adems de esta caracterstica el protocolo permite la troncalizacin de varios canales de


audio en el mismo flujo de datos. Es decir que en un mismo datagrama se pueden enviar
varias sesiones al mismo tiempo, lo que significa una reutilizacin de datagramas y por
consiguiente un ahorro de ancho de banda.

Fases de una llamada IAX

Una llamada IAX tiene tres fases:

Establecimiento de la llamada

Para iniciar una llamada el equipo que la inicia (equipo A) le enva un mensaje NEW al
equipo B y ste ltimo responde con un mensaje ACCEPT. Luego de esto obviamente
el equipo destino timbrar en espera de que el usuario conteste. Si esto sucede, el equipo
B enviar un mensaje ANSWER al equipo A para notificar que el usuario contest.

Nota: Se han omitido intencionalmente algunos mensajes ACK en la explicacin de


arriba para aadir claridad a la explicacin.

Llamada en curso

Si se contest la llamada se inicia el intercambio de audio mediante unos paquetes


llamados frames que estudiaremos ms adelante. Estos frames se envan dentro del
mismo flujo de comunicacin que la sealizacin inicial.

Colgado

Para terminar la llamada cualquiera de las partes involucradas debe enviar un mensaje
HANGUP.

208
Establecimiento de una llamada IAX entre los puntos A y B

Colgado de una llamada IAX

Frames IAX

Para intercambiar el audio entre los participantes de la llamada se utilizan dos tipos de
frames llamados Full y Mini. Tambin se les suelen llamar F y M.

Una conversacin est compuesta en su mayora por frames tipo Mini cuya virtud es
(como su nombre lo sugiere) ser ligeros. Esto quiere decir que tienen una cabecera

209
pequea (de 4 bytes), lo cual ayuda a ahorrar ancho de banda. De cuando en cuando se
intercambian frames tipo Full, los cuales conllevan adicionalmente informacin de
sincronizacin para mantener sincronizados a ambos puntos.

1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|F| Source Call Number |R| Destination Call Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| time-stamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OSeqno | ISeqno | Frame Type |C| Subclass |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
: Data :
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Frame tipo Full

1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|F| Source call number | time-stamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
: Data :
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Frame tipo Mini

14.2 Protocolo RTP


RTP es el protocolo que se encarga de transportar la voz propiamente dicha. Muchas
personas se confunden y piensan que ese es el trabajo de SIP pero no es as. Una vez
que SIP establece una llamada es RTP quien toma la posta para transportar la voz a su
destino.

RTP trabaja sobre UDP y por lo tanto no hay mucho control de transmisin. Es decir
que el equipo emisor enva la voz hacia el otro extremo con la esperanza de que llegue,
pero no espera recibir confirmacin de esto y a decir verdad tampoco hay tiempo para
hacerlo pues la voz necesita ser transmitida en tiempo real. Si un paquete de voz se

210
pierde en el camino simplemente se rellenar ese espacio con un silencio. Lo que
tcnicamente se llama ruido confortable (comfort noise).

Es por esta necesidad de transmitir la informacin en tiempo real que resulta obvio que
RTP sea un acrnimo de Real Time Protocol.

A pesar de encargarse de casi toda la labor de transportar la voz, RTP no est solo y
tiene un protocolo de apoyo llamado RTCP. RTCP no es del todo indispensable pero
proporciona valiosa ayuda al momento de transportar la voz de manera ptima pues
proporciona estadsticas e informacin de control que le permiten a Asterisk o al otro
extremo tomar decisiones para mejorar la transmisin en caso de ser posible. Por lo
tanto, los paquetes RTCP se transmiten peridicamente para comunicar dicha
informacin a los equipos de voz involucrados.

RTP se define en el documento RFC 3550 as que veamos qu dice al respecto:

RTP provides end-to-end network transport functions suitable for applications


transmitting real-time data, such as audio, video or simulation data, over
multicast or unicast network services. RTP does not address resource
reservation and does not guarantee quality-of-service for real-time services. The
data transport is augmented by a control protocol (RTCP) to allow monitoring
of the data delivery in a manner scalable to large multicast networks, and to
provide minimal control and identification functionality. RTP and RTCP are
designed to be independent of the underlying transport and network layers. The
protocol supports the use of RTP-level translators and mixers.

Para tener una mejor visin de lugar que ocupa un paquete RTP en el modelo TCP/IP
veamos la siguiente figura.

Estructura de un paquete RTP

Un paquete RTP se compone de un encabezado y la data (o payload). En encabezado


contiene alguna informacin interesante que explicaremos en breve, pero antes veamos
cmo luce un encabezado RTP.

Byte 1 Byte 2 Byte 3 Byte 4


V=2 P X CC M PT Nmero de Secuencia
Timestamp
Synchronization Source (SSRC)
Contributing Source (CSRC)
Extensin (opcional dependiendo del bit X)
Data

211
Ahora s pasemos a explicar qu informacin contiene un encabezado RTP.

V es el nmero de versin. Este campo es de 2 bits de longitud y su valor


contenido siempre es el nmero 2.
P o padding es un bit que indica si hay relleno al final de la data o no. Si el bit
est en uno quiere decir que si hay relleno. El relleno no es otra cosa que bytes
adicionales al final del payload.
X o extensin es un bit que indica si hay extensin del encabezado
CC es un identificador de 4 bits que indica el conteo CSRC
M o marcador de un bit
PT o tipo de carga til (Payload Type) es un identificador de 7 bits que nos
indica el tipo de carga til que contiene este paquete RTP. Ejemplos de tipos son
G729, GSM, PCMU (G711 u-law), entre otros.
Nmero de Secuencia (sequence number) es un nmero entero que identifica
cada paquete del presente flujo de datos. Este es un identificador secuencial que
se incrementa en uno con cada paquete transmitido. Ocupa 16 bits.
Timestamp representa el instante de tiempo (en formato timestamp) en el que se
comenz a muestrear la data que est siendo transmitida en el payload. Ocupa 32
bits.
SSRC identifica la fuente de sincronizacin ya que el mismo equipo puede estar
hablando con diferentes fuentes de paquetes RTP. Es un nmero aleatorio de
32 bits por lo que hay la posibilidad (aunque la probabilidad es baja) de que este
nmero se repita entre dos fuentes. Existen mecanismos para resolver este
problema.
CSRC es un nmero de 32 bits que identifica las fuentes contribuyentes para el
payload

Luego de la cabecera vienen los datos.

212
Diagnstico bsico de
problemas
Si hubiera preguntado a mis clientes qu necesitaban, habran dicho un
caballo mejor
-- Henry Ford, fundador de Ford Motor Company

15.1 Interpretando el log


Es muy importante entender cmo leer los archivos de log de Asterisk puesto que de all
podemos extraer informacin muy valiosa en nuestro proceso de diagnstico.

Antes que nada es necesario conocer que tanto el nivel de detalle, as como el tipo de
informacin que se escribe en los archivos de log son controlados desde el archivo
/etc/asterisk/logger.conf. Este es un archivo de texto plano donde se
definen los archivos donde se va a escribir informacin. Para cada uno de estos archivos
se tiene que especificar tambin el nivel de detalle que se escribir en ellos. Esto se hace
en una sola lnea, la sintaxis es la siguiente.

nombre_archivo => listado_de_niveles_separados_por_coma

213
Donde los niveles de debugging pueden ser los siguientes:

debug
notice
warning
error
verbose

Nota: Hay un tipo especial de nombre de archivo que se encuentra reservado y que
se llama "console". Representa la consola de Asterisk, o sea lo que se muestra en el
Asterisk CLI.

Veamos ahora como ejemplo un fragmento del contenido del archivo logger.conf que se
distribuye con Elastix.

; Directory for log files is configures in asterisk.conf


; option astlogdir
;
[logfiles]
;
; Format is "filename" and then "levels" of debugging to be
included:
; debug
; notice
; warning
; error
; verbose
;
; Special filename "console" represents the system console
;
;debug => debug
;console => notice,warning,error
;console => notice,warning,error,debug
;messages => notice,warning,error
full => notice,warning,error,debug,verbose

En el ejemplo anterior vemos algunas lneas comentadas y bsicamente un solo archivo


de log llamado full. Este, al igual que los dems archivos definidos de esta manera
reside en la ruta /var/log/asterisk/

214
El archivo /var/log/asterisk/full

Como vimos en el ltimo ejemplo, por omisin en Elastix tenemos un archivo de log
llamado full donde Asterisk escribe informacin de su funcionamiento. Cada lnea de
este archivo tiene el siguiente formato.

[HORA FECHA] NIVEL[PID] NOMBRE_ARCHIVO: TEXTO

Veamos un ejemplo de cmo lucen algunas lneas del archivo de log de Asterisk.

Vista de archivo de log /var/log/asterisk/full

Observar el log interactivamente

Siempre es muy til observar en tiempo real la actividad del servidor Elastix. Muchas
veces nos veremos haciendo esto mientras realizamos o recibimos una llamada para
tratar de averiguar qu falla. Podemos monitorear la salida en tiempo real con el
comando tail de la siguiente manera.

tail -f /var/log/asterisk/full

Si queremos ver interactivamente solo los errores podemos aadir el siguiente filtro.

tail -f /var/log/asterisk/full | grep ERROR

215
Si queremos adems ver los WARNINGs podemos modificar ligeramente el filtro de la
siguiente manera.

tail -f /var/log/asterisk/full | grep -E "(ERROR|WARENING)"

Nota: Si queremos examinar todo el log en lugar de hacerlo interactivamente


reemplazar el comando tail -f por el comando cat

Qu informacin nos puede indicar el campo TEXTO?

Al mencionar la palabra TEXTO nos referimos a la informacin que viene al final de


cada lnea del log luego del nombre del archivo. Si se trata de una lnea de ERROR
encontraremos aqu una breve descripcin del error ocurrido, si se trata de un
WARNING tambin encontraremos un pequeo mensaje descriptivo. Sin embargo hay
otro tipo de lneas con mensajes menos obvios y que simplemente describen el
procesamiento de una llamada a travs del plan de marcado. Estas lneas normalmente
se encuentran macadas con nivel VERBOSE pues son simplemente informativas.

Examinar estas lneas de nivel VERBOSE o simplemente informativas tambin nos


proveen de importante informacin que nos puede ser til al momento de diagnosticar
problemas.

En especial hay algunas de ellas que empiezan con la palabra "Excecuting" y a


continuacin mencionan en qu contexto y prioridad se encuentra Asterisk procesando
el plan de marcado. Estas son las lneas de ejecucin del plan de marcado. La sintaxis de
estas lneas es la siguiente.

[TIME DATE] VERBOSE[PID] logger.c: -- Excecuting


[extension@contexto:prioridad] MAS_TEXTO

Donde MAS_TEXTO puede contener informacin acerca de la Aplicacin que fue


ejecutada con los parmetros que le fueron pasados. Veamos un ejemplo de esto.

[Oct 28 17:52:34] VERBOSE[22034] logger.c: -- Executing


[s@macro-dial:7] Dial("Local/502@from-internal-e27c,2",
"SIP/502|21|trTWuwM(auto-blkvm)") in new stack

En este ejemplo vemos que cuando se escribi esta lnea en el log nos encontrbamos
dentro del contexto macro-dial (una macro, ya que empieza con la palabra macro), la
extensin era la extensin s y la prioridad era la 7. Tambin podemos observar que se
est tratando de marcar mediante la aplicacin Dial y podemos ver los parmetros que

216
se le pasaron como por ejemplo la cadena "trTWuwM(auto-blkvm)". En fin, podemos
observar en todo caso que hay mucha informacin til que podemos obtener de cada
lnea escrita en el log.

Nmero de proceso

Asterisk es un software multiproceso, es decir que puede crear varias instancias de si


mismo que trabajen de manera coordinada entre si y de esta manera atender diferentes
tareas al mismo tiempo. Cuando Asterisk escribe un lnea en el log anota el nmero de
proceso (o PID) que la escribi. Esto nos provee valiosa informacin puesto que
podemos tener una visin ms exacta del hilo de la llamada. Para hacer esto podemos
filtrar por el nmero de proceso si es que lo conocemos. Por ejemplo.

cat /var/log/asterisk/full | grep 38484

Con el comando anterior estamos filtrando la salida por el proceso 38484. Por supuesto
tambin podremos haber capturado alguna cadena de caracteres que coincida con el
patrn 38484 como por ejemplo algn nmero de telfono de algn usuario, pero estas
lneas irrelevantes se las pueden eliminar manualmente.

Decamos que gracias a este procedimiento podremos filtrar un poco ms el hilo de una
llamada. Esto es particularmente til puesto que Asterisk escribe mucha informacin en
el archivo de log y si nos encontramos en ambientes con muchas llamadas concurrentes
ubicar informacin de una llamada especfica en el log puede resultar un verdadero
dolor de cabeza.

Nota: Algo importante a tener en cuenta es que una llamada puede tener ms de
un proceso involucrado.

15.2 Diagnstico a travs del CLI


Desde el CLI podemos ver en tiempo real el funcionamiento de Asterisk. Es algo
similar a hacer un "tail -f /var/log/asterisk/full" pero con algunas
ventajas como por ejemplo que podemos ver el texto de la salida resaltado (coloreado)
lo que mejora indudablemente la legibilidad y tambin est la posibilidad de interactuar
simultneamente con Asterisk al poder ejecutar algunos comandos desde la consola.

15.3 Sniffing

217
En el mbito de networking el trmino sniffing significa capturar paquetes de red en su
formato original para su posterior anlisis. Existen herramientas especializadas para este
fin y algunas cuestan una verdadera fortuna. Por suerte hay una de cdigo abierto que
hace un gran trabajo y se llama Wireshark.

Wireshark, anteriormente conocido como Ethereal, es un poderoso sniffer provisto con


herramientas de anlisis avanzadas, entre ellas algunas que nos permitirn analizar
paquetes RTP y SIP.

Captura de llamadas

Antes que nada debemos pensar en qu tarjeta de red del servidor queremos capturar los
paquetes de llamadas; al menos en los casos en los que tengamos ms de una. Cuando
ya estemos seguros la captura es sencilla, colocamos la laptop en la misma tarjeta

Finalizada la captura lo ms probable es que junto con los paquetes de voz hayamos
capturado otros paquetes que circulaban por la red y que no nos interesan como
paquetes ICMP, requerimientos de DNSs, SMTP, etc. Con algo de prctica
aprenderemos a filtrar estos paquetes irrelevantes, eso se lo dejamos de tarea al
estudiante.

218
Control externo de Asterisk
Ms que exigirlo, el respeto es algo que uno se gana
-- Annimo

A veces editar el plan de marcado no es suficiente. Hace falta algn mecanismo ms


flexible para lograr lo que la empresa necesita. En otras ocasiones podemos inclusive
poder controlar a Asterisk en tiempo real a travs de alguna aplicacin remota.

Para expandir el comportamiento de Asterisk, ms all del plan de marcado, existen dos
interfases muy tiles llamadas AGI y AMI, que nos permitirn interactuar con Asterisk
a un nivel mucho ms poderoso que el logrado hasta ahora.

16.1 Asterisk AGI


AGI (Asterisk Gateway Interface) es una manera de interactuar con Asterisk desde un
programa de lnea de comandos. Este programa puede ser escrito en prcticamente
cualquier lenguaje y es invocado por Asterisk desde el dialplan.

Al momento de la invocacin de un programa AGI se le pasan ciertos parmetros y este


a su vez responde con comandos AGI que son entendidos por Asterisk.

219
La utilidad de AGI es enorme y nos permite desarrollar funcionalidad extra para nuestra
central telefnica. Un ejemplo muy comn de esto es el desarrollo de aplicaciones de
consulta telefnica a bases de datos.

Los programas o scripts AGI son muy populares y Elastix viene con algunos
preinstalados en la carpeta /var/lib/asterisk/agi-bin/

Ejecucin de scripts AGI

Los scripts AGI se comunican con Asterisk a travs de STDIN, STDOUT y STDERR.
Esto quiere decir que deberan poderse ejecutar desde la misma lnea de comandos.

Algo muy importante a notar es que los scripts AGI deben ser ejecutables por el usuario
asterisk as que es bueno asegurarse de que esto suceda.

# chown asterisk.asterisk script_prueba.agi


# chmod 755 script_prueba.agi

Luego de esto ya podemos ejecutar el script AGI desde el dialplan para que haga algo
til. Esto se lo hace gracias a la funcin AGI(). A continuacin un ejemplo.

exten => 6789,1,Answer


exten => 6789,2,AGI(script_prueba.agi)

Como vemos en el ejemplo anterior le hemos dicho a Asterisk que ejecute el script
llamado script_prueba.agi. Este script se ejecutar cuando el usuario digite la
extensin 6789. Por omisin Asterisk asume que el script se encuentra en la ruta
/var/lib/asterisk/agi-bin/ as que si lo ubicamos en un lugar diferente habr que
especificar la ruta completa.

Parmetros enviados al script AGI

Como habamos dicho antes, en el momento de la invocacin del script, Asterisk le


enva cierta informacin. A continuacin un ejemplo de la informacin enviada cuando
ejecutamos un script llamado dialparties.agi, un componente de freePBX.

220
agi_request: dialparties.agi
agi_channel: SIP/4444-08d6ab60
agi_language: en
agi_type: SIP
agi_uniqueid: 1222117320.271
agi_callerid: 4444
agi_calleridname: Edgar Landivar
agi_callingpres: 0
agi_callingani2: 0
agi_callington: 0
agi_callingtns: 0
agi_dnid: 216 6
agi_rdnis: unknown
agi_context: macro-dial
agi_extension: s
agi_priority: 3
agi_enhanced: 0.0
agi_accountcode:

Adicionalmente a la informacin que por omisin Asterisk le enva al script AGI,


nosotros podramos enviarle informacin adicional invocando la funcin AGI() de la
siguiente manera.

exten => 6789,1,Answer


exten => 6789,2,AGI(script_prueba.agi|param1|param2|param3)

En el ejemplo anterior le estoy enviando 3 parmetros adicionales al script. Se pueden


enviar tantos parmetros como sean necesarios.

Ya veremos ms adelante cmo diferenciar estos dos grupos de parmetros desde la


programacin del script.

Comandos AGI

A continuacin un listado de los comandos AGI disponibles en la ltima versin de


Elastix 1.3. Este listado ha sido generado con el comando agi show desde el CLI.

Comando Descripcin
answer Answer channel
channel status Returns status of the connected channel

221
database del Removes database key/value
database deltree Removes database keytree/value
database get Gets database value
database put Adds/updates database value
exec Executes a given Application
get data Prompts for DTMF on a channel
get full variable Evaluates a channel expression
get option Stream file, prompt for DTMF, with
timeout
get variable Gets a channel variable
hangup Hangup the current channel
noop Does nothing
receive char Receives one character from channels
supporting it
receive text Receives text from channels supporting it
record file Records to a given file
say alpha Says a given character string
say digits Says a given digit string
say number Says a given number
say phonetic Says a given character string with
phonetics
say date Says a given date
say time Says a given time
say datetime Says a given time as specfied by the
format given
send image Sends images to channels supporting it
send text Sends text to channels supporting it
set autohangup Autohangup channel in some time
set callerid Sets callerid for the current channel
set context Sets channel context
set extension Changes channel extension
set music Enable/Disable Music on hold generator
set priority Set channel dialplan priority
set variable Sets a channel variable
stream file Sends audio file on channel
control stream file Sends audio file on channel and allows the
listner to control the stream
tdd mode Toggles TDD mode (for the deaf)
verbose Logs a message to the asterisk verbose log

222
wait for digit Waits for a digit to be pressed

Libreras AGI

A pesar de que un programa AGI puede ser escrito en prcticamente cualquier lenguaje,
existen algunos lenguajes que ya cuentan con libreras para facilitar las labores de
desarrollo de scripts AGI. Algunos de estos lenguajes son los siguientes.

Pearl
PHP
Python
Ruby
C
.NET

Para ver informacin actualizada de las libreras o frameworks disponibles para estos
lenguajes recomendamos revisar el siguiente link: http://www.voip-info.org/wiki-
Asterisk+AGI

En nuestro caso utilizaremos una librera para PHP llamada phpAGI con la que
codificaremos un sencillo script AGI de ejemplo.

Ejemplo sencillo de script AGI

Aqu ilustraremos con un ejemplo muy sencillo lo que podemos lograr con un script
AGI.

Lo que haremos ser algo muy bsico, un script que reproduzca un nmero cuando
marquemos una extensin determinada. A continuacin el cdigo en PHP.

#!/usr/bin/php -q
<?php
echo "SAY NUMBER 1234 \n";
sleep(4);
?>

Este cdigo lo podemos copiar en un archivo llamado simple.agi y para ser


ordenados lo copiaremos en la ruta estndar /var/lib/asterisk/agi-bin/

223
Una vez copiado debemos estar seguros que el script pueda ser ejecutado por Asterisk
as que sera buena idea ejecutar los siguientes comandos para asegurarnos de esto.

chmod 755 /var/lib/asterisk/agi-bin/simple.agi


chown asterisk.asterisk /var/lib/asterisk/agi-bin/simple.agi

Finalmente modifiquemos el plan de marcado para invocar nuestro script AGI cuando
se marque una determinada extensin. Usaremos la extensin 6789 para este ejemplo.

exten => 6789,1,Answer


exten => 6789,2,AGI(simple.agi)
exten => 6789,3,Hangup

Este cdigo anterior podra ir al final del archivo


/etc/asterisk/extensions_custom.conf, ya que este archivo no es
sobrescrito por freePBX.

Listo, ahora solo queda probar marcando la extensin 6789 y escuchar hablar a nuestro
cgido!

16.2 Asterisk AMI


AMI (Asterisk Manager Interface por sus siglas en ingls) es una manera de
comunicarse con Asterisk a travs del protocolo IP. Digamos que es un concepto similar
a AGI pero mientras que AGI est pensado para comunicaciones locales AMI puede ser
ejecutado desde equipos remotos. Es esto ltimo lo que lo convierte en una herramienta
poderosa.

Gracias a AMI se pueden desarrollar poderosas aplicaciones cliente que pueden


ejecutarse en otros computadores, liberando con esto de carga al servidor Asterisk. Un
ejemplo de esto es el mdulo para call centers que forma parte del proyecto Elastix.
Este mdulo de Elastix est codificado en gran parte usando AMI.

Debido a que a travs de AMI equipos remotos estn en la capacidad de controlar


Asterisk se requiere que estos equipos se autentiquen. Estos usuarios, claves y permisos
se definen en un archivo llamado manager.conf

A continuacin el archivo manager.conf que se distribuye con Elastix

224
;
; Asterisk Call Management support
;
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0

[admin]
secret = elastix456
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read = system,call,log,verbose,command,agent,user
write = system,call,log,verbose,command,agent,user

#include manager_additional.conf
#include manager_custom.conf

Como podemos observar en el archivo anterior se define un usuario llamado admin


con clave elastix456 que puede conectarse desde el IP 127.0.0.1 con mscara
255.255.255.0. Luego de esto se definen ciertos permisos para este usuario.

Probando desde telnet

No necesitamos de un programa sofisticado para probar si podemos interactuar con el


AMI. Una manera sencilla de hacerlo es a travs del programa telnet disponible en
casi cualquier computador.

Veamos un ejemplo desde el propio servidor Elastix y suponiendo el archivo de


configuracin anterior.

Primero nos conectamos al propio servidor Elastix a travs de una sesin telnet. Para
esto ejecutamos lo siguiente desde la lnea de comandos.

[root@elastix ~]# telnet 127.0.0.1 5038


Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Asterisk Call Manager/1.0

225
Como podemos ver el servidor nos ha contestado con un mensaje indicando que el AMI
est escuchando y nos dice tambin que se trata de la versin 1.0 del protocolo.

A continuacin nos autenticamos con el usuario y clave especificado en el archivo


manager.conf

Action: Login
ActionID: 1
Username: admin
Secret: elastix456

Es importante conocer que para enviar un comando debemos ingresar dos retornos de
carro. O sea que debemos dar ENTER un par de veces para enviar la peticin de
autenticacin anterior. Luego de esto AMI nos contestar con un mensaje de xito o
error. En nuestro caso como ingresamos bien la clave nos contestar con xito.

Response: Success
ActionID: 1
Message: Authentication accepted

Luego de esto comenzaremos a ver aparecer mensajes de registro que el AMI enva a
nuestra sesin cada vez que ocurre un evento como por ejemplo cuando una llamada
cuelga o si una extensin est timbrando.

A partir de aqu ya podemos interactuar con AMI a travs de comandos, tambin


llamados acciones (como veremos a continuacin).

Tipo de paquetes AMI

En la comunicacin por AMI se pueden identificar tres tipos de paquetes de


informacin.

Accin: Un comando enviado por el cliente al servicio AMI para que sea
procesado.
Respuesta: La respuesta de Asterisk a la Accin requerida por la aplicacin
cliente.
Evento: Se trata de informacin de un evento asincrnico ocurrido en Asterisk.
Por ejemplo, ingres una llamada telefnica.

226
Para relacionar las respuestas con las acciones se puede incluir un ActionID en cada
Accin. Asterisk devolver este parmetro en la respuesta.

Comandos o acciones AMI

El siguiente listado de comandos AMI se obtuvo con el comando show manager


commands desde el CLI de Elastix 1.3.

Comando Privilegios Descripcin


AbsoluteTimeout call,all Set Absolute Timeout
AgentCallbackLo agent,all Sets an agent as logged in by
callback
AgentLogoff agent,all Sets an agent as no longer logged
in
Agents agent,all Lists agents and their status
ChangeMonitor call,all Change monitoring filename of a
channel
Command command,all Execute Asterisk CLI Command
DBGet system,all Get DB Entry
DBPut system,all Put DB Entry
Events <none> Control Event Flow
ExtensionState call,all Check Extension Status
GetConfig config,all Retrieve configuration
Getvar call,all Gets a Channel Variable
Hangup call,all Hangup Channel
IAXnetstats <none> Show IAX Netstats
IAXpeers <none> List IAX Peers
ListCommands <none> List available manager
commands
Logoff <none> Logoff Manager
MailboxCount call,all Check Mailbox Message Count
MailboxStatus call,all Check Mailbox
MeetmeMute call,all Mute a Meetme user
MeetmeUnmute call,all Unmute a Meetme user
Monitor call,all Monitor a channel
Originate call,all Originate Call
Park call,all Park a channel
ParkedCalls <none> List parked calls
PauseMonitor call,all Pause monitoring of a channel

227
Ping <none> Keepalive command
PlayDTMF call,all Play DTMF signal on a specific
channel
QueueAdd agent,all Add interface to queue
QueuePause agent,all Makes a queue member
temporarily unavailable
QueueRemove agent,all Remove interface from queue
Queues <none> Queues
QueueStatus <none> Queue Status
Redirect call,all Redirect (transfer) a call
SetCDRUserField call,all Set the CDR UserField
Setvar call,all Set Channel Variable
SIPpeers system,all List SIP peers (text format)
SIPshowpeer system,all Show SIP peer (text format)
Status call,all Lists channel status
StopMonitor call,all Stop monitoring a channel
UnpauseMonitor call,all Unpause monitoring of a channel
UpdateConfig config,all Update basic configuration
UserEvent user,all Send an arbitrary event
WaitEvent <none> Wait for an event to occur
ZapDialOffhook <none> Dial over Zap channel while
offhook
ZapDNDoff <none> Toggle Zap channel Do Not
Disturb status OFF
ZapDNDon <none> Toggle Zap channel Do Not
Disturb status ON
ZapHangup <none> Hangup Zap Channel
ZapRestart <none> Fully Restart zaptel channels
(terminates calls)
ZapShowChannels <none> Show status zapata channels
ZapTransfer <none> Transfer Zap Channel

228
GNU Free Documentation
License
Version 1.3, 3 November 2008

Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
<http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license document,
but changing it is not allowed.

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other functional and
useful document "free" in the sense of freedom: to assure everyone the effective
freedom to copy and redistribute it, with or without modifying it, either commercially or
noncommercially. Secondarily, this License preserves for the author and publisher a
way to get credit for their work, while not being considered responsible for
modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document
must themselves be free in the same sense. It complements the GNU General Public
License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because
free software needs free documentation: a free program should come with manuals

229
providing the same freedoms that the software does. But this License is not limited to
software manuals; it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License principally for
works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice
placed by the copyright holder saying it can be distributed under the terms of this
License. Such a notice grants a world-wide, royalty-free license, unlimited in duration,
to use that work under the conditions stated herein. The "Document", below, refers to
any such manual or work. Any member of the public is a licensee, and is addressed as
"you". You accept the license if you copy, modify or distribute the work in a way
requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a
portion of it, either copied verbatim, or with modifications and/or translated into another
language.

A "Secondary Section" is a named appendix or a front-matter section of the Document


that deals exclusively with the relationship of the publishers or authors of the Document
to the Document's overall subject (or to related matters) and contains nothing that could
fall directly within that overall subject. (Thus, if the Document is in part a textbook of
mathematics, a Secondary Section may not explain any mathematics.) The relationship
could be a matter of historical connection with the subject or with related matters, or of
legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as
being those of Invariant Sections, in the notice that says that the Document is released
under this License. If a section does not fit the above definition of Secondary then it is
not allowed to be designated as Invariant. The Document may contain zero Invariant
Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover
Texts or Back-Cover Texts, in the notice that says that the Document is released under
this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may
be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in


a format whose specification is available to the general public, that is suitable for
revising the document straightforwardly with generic text editors or (for images
composed of pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or for automatic
translation to a variety of formats suitable for input to text formatters. A copy made in
an otherwise Transparent file format whose markup, or absence of markup, has been

230
arranged to thwart or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount of text. A copy
that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without
markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly
available DTD, and standard-conforming simple HTML, PostScript or PDF designed
for human modification. Examples of transparent image formats include PNG, XCF
and JPG. Opaque formats include proprietary formats that can be read and edited only
by proprietary word processors, SGML or XML for which the DTD and/or processing
tools are not generally available, and the machine-generated HTML, PostScript or PDF
produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following
pages as are needed to hold, legibly, the material this License requires to appear in the
title page. For works in formats which do not have any title page as such, "Title Page"
means the text near the most prominent appearance of the work's title, preceding the
beginning of the body of the text.

The "publisher" means any person or entity that distributes copies of the Document to
the public.

A section "Entitled XYZ" means a named subunit of the Document whose title either is
precisely XYZ or contains XYZ in parentheses following text that translates XYZ in
another language. (Here XYZ stands for a specific section name mentioned below, such
as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve
the Title" of such a section when you modify the Document means that it remains a
section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that
this License applies to the Document. These Warranty Disclaimers are considered to be
included by reference in this License, but only as regards disclaiming warranties: any
other implication that these Warranty Disclaimers may have is void and has no effect on
the meaning of this License.

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or
noncommercially, provided that this License, the copyright notices, and the license
notice saying this License applies to the Document are reproduced in all copies, and that
you add no other conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further copying of the copies
you make or distribute. However, you may accept compensation in exchange for
copies. If you distribute a large enough number of copies you must also follow the
conditions in section 3.

231
You may also lend copies, under the same conditions stated above, and you may
publicly display copies.

3. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of
the Document, numbering more than 100, and the Document's license notice requires
Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all
these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the
back cover. Both covers must also clearly and legibly identify you as the publisher of
these copies. The front cover must present the full title with all words of the title
equally prominent and visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve the title of the
Document and satisfy these conditions, can be treated as verbatim copying in other
respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the
first ones listed (as many as fit reasonably) on the actual cover, and continue the rest
onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100,
you must either include a machine-readable Transparent copy along with each Opaque
copy, or state in or with each Opaque copy a computer-network location from which the
general network-using public has access to download using public-standard network
protocols a complete Transparent copy of the Document, free of added material. If you
use the latter option, you must take reasonably prudent steps, when you begin
distribution of Opaque copies in quantity, to ensure that this Transparent copy will
remain thus accessible at the stated location until at least one year after the last time you
distribute an Opaque copy (directly or through your agents or retailers) of that edition to
the public.

It is requested, but not required, that you contact the authors of the Document well
before redistributing any large number of copies, to give them a chance to provide you
with an updated version of the Document.

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions
of sections 2 and 3 above, provided that you release the Modified Version under
precisely this License, with the Modified Version filling the role of the Document, thus
licensing distribution and modification of the Modified Version to whoever possesses a
copy of it. In addition, you must do these things in the Modified Version:

232
A. Use in the Title Page (and on the covers, if any) a title distinct from that of the
Document, and from those of previous versions (which should, if there were
any, be listed in the History section of the Document). You may use the same
title as a previous version if the original publisher of that version gives
permission.
B. List on the Title Page, as authors, one or more persons or entities responsible for
authorship of the modifications in the Modified Version, together with at least
five of the principal authors of the Document (all of its principal authors, if it
has fewer than five), unless they release you from this requirement.
C. State on the Title page the name of the publisher of the Modified Version, as the
publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications adjacent to the other
copyright notices.
F. Include, immediately after the copyright notices, a license notice giving the
public permission to use the Modified Version under the terms of this License,
in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections and required
Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add to it an item
stating at least the title, year, new authors, and publisher of the Modified
Version as given on the Title Page. If there is no section Entitled "History" in
the Document, create one stating the title, year, authors, and publisher of the
Document as given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for public access to
a Transparent copy of the Document, and likewise the network locations given
in the Document for previous versions it was based on. These may be placed in
the "History" section. You may omit a network location for a work that was
published at least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the
Title of the section, and preserve in the section all the substance and tone of each
of the contributor acknowledgements and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document, unaltered in their text and
in their titles. Section numbers or the equivalent are not considered part of the
section titles.
M. Delete any section Entitled "Endorsements". Such a section may not be
included in the Modified Version.
N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in
title with any Invariant Section.
O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as
Secondary Sections and contain no material copied from the Document, you may at

233
your option designate some or all of these sections as invariant. To do this, add their
titles to the list of Invariant Sections in the Modified Version's license notice. These
titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but
endorsements of your Modified Version by various parties--for example, statements of
peer review or that the text has been approved by an organization as the authoritative
definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up
to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified
Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be
added by (or through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or by arrangement
made by the same entity you are acting on behalf of, you may not add another; but you
may replace the old one, on explicit permission from the previous publisher that added
the old one.

The author(s) and publisher(s) of the Document do not by this License give permission
to use their names for publicity for or to assert or imply endorsement of any Modified
Version.

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License,
under the terms defined in section 4 above for modified versions, provided that you
include in the combination all of the Invariant Sections of all of the original documents,
unmodified, and list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical
Invariant Sections may be replaced with a single copy. If there are multiple Invariant
Sections with the same name but different contents, make the title of each such section
unique by adding at the end of it, in parentheses, the name of the original author or
publisher of that section if known, or else a unique number. Make the same adjustment
to the section titles in the list of Invariant Sections in the license notice of the combined
work.

In the combination, you must combine any sections Entitled "History" in the various
original documents, forming one section Entitled "History"; likewise combine any
sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You
must delete all sections Entitled "Endorsements".

234
6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released
under this License, and replace the individual copies of this License in the various
documents with a single copy that is included in the collection, provided that you follow
the rules of this License for verbatim copying of each of the documents in all other
respects.

You may extract a single document from such a collection, and distribute it individually
under this License, provided you insert a copy of this License into the extracted
document, and follow this License in all other respects regarding verbatim copying of
that document.

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent
documents or works, in or on a volume of a storage or distribution medium, is called an
"aggregate" if the copyright resulting from the compilation is not used to limit the legal
rights of the compilation's users beyond what the individual works permit. When the
Document is included in an aggregate, this License does not apply to the other works in
the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the


Document, then if the Document is less than one half of the entire aggregate, the
Document's Cover Texts may be placed on covers that bracket the Document within the
aggregate, or the electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of


the Document under the terms of section 4. Replacing Invariant Sections with
translations requires special permission from their copyright holders, but you may
include translations of some or all Invariant Sections in addition to the original versions
of these Invariant Sections. You may include a translation of this License, and all the
license notices in the Document, and any Warranty Disclaimers, provided that you also
include the original English version of this License and the original versions of those
notices and disclaimers. In case of a disagreement between the translation and the
original version of this License or a notice or disclaimer, the original version will
prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or


"History", the requirement (section 4) to Preserve its Title (section 1) will typically
require changing the actual title.

235
9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly
provided under this License. Any attempt otherwise to copy, modify, sublicense, or
distribute it is void, and will automatically terminate your rights under this License.

However, if you cease all violation of this License, then your license from a particular
copyright holder is reinstated (a) provisionally, unless and until the copyright holder
explicitly and finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means prior to 60 days
after the cessation.

Moreover, your license from a particular copyright holder is reinstated permanently if


the copyright holder notifies you of the violation by some reasonable means, this is the
first time you have received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after your receipt of the
notice.

Termination of your rights under this section does not terminate the licenses of parties
who have received copies or rights from you under this License. If your rights have
been terminated and not permanently reinstated, receipt of a copy of some or all of the
same material does not give you any rights to use it.

10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free
Documentation License from time to time. Such new versions will be similar in spirit
to the present version, but may differ in detail to address new problems or concerns.
See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document
specifies that a particular numbered version of this License "or any later version"
applies to it, you have the option of following the terms and conditions either of that
specified version or of any later version that has been published (not as a draft) by the
Free Software Foundation. If the Document does not specify a version number of this
License, you may choose any version ever published (not as a draft) by the Free
Software Foundation. If the Document specifies that a proxy can decide which future
versions of this License can be used, that proxy's public statement of acceptance of a
version permanently authorizes you to choose that version for the Document.

11. RELICENSING

236
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide
Web server that publishes copyrightable works and also provides prominent facilities
for anybody to edit those works. A public wiki that anybody can edit is an example of
such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site
means any set of copyrightable works thus published on the MMC site.

"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license


published by Creative Commons Corporation, a not-for-profit corporation with a
principal place of business in San Francisco, California, as well as future copyleft
versions of that license published by that same organization.

"Incorporate" means to publish or republish a Document, in whole or in part, as part of


another Document.

An MMC is "eligible for relicensing" if it is licensed under this License, and if all works
that were first published under this License somewhere other than this MMC, and
subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or
invariant sections, and (2) were thus incorporated prior to November 1, 2008.

The operator of an MMC Site may republish an MMC contained in the site under CC-
BY-SA on the same site at any time before August 1, 2009, provided the MMC is
eligible for relicensing.

237
Archivos de configuracin de
Asterisk distribuidos con
Elastix
Archivo Descripcin
a2billing.conf Archivo general de configuracin de
a2billing
additional_a2billing_iax.conf Configuracin de IAX para a2billing
additional_a2billing_sip.conf Configuracin de SIP para a2billing
adsi.conf Archivo de configuracin para ADSI
(Interfase Anloga para servicios de
Display por sus siglas en Ingls). Con
ADSI se puede interactuar entre Asterisk
y los displays de telfonos anlogos
adtranvofr.conf Archivo de configuracin que permite
tener soporte de Voz sobre Frame Relay
agents.conf Archivo de configuracin que permite
manejar los agentes de las colas.
alarmreceiver.conf Sirve para configurar la aplicacin
AlarmReciever()
alsa.conf Configura el driver de sonido con los
drivers de ALSA
amd.conf Se utiliza para cuando se hace llamadas y

239
estas detectan una contestadora
automtica
applications.conf Bsicamente aqu se incluye plan de
marcado. Los contextos aqu incluidos se
les puede denominar aplicaciones y sus
nombres empiezan con la cadena app-
asterisk.conf Archivo principal de configuracin de
Asterisk. Aqu se configuran los
directorios de trabajo de Asterisk as como
algunas opciones generales
cbmysql.conf Archivo de configuracin del mdulo de
Asterisk llamado CBMySQL (Conference
Bridge MySQL) usado para manejar las
conferencias en Elastix
cdr_custom.conf Este archivo define lo que se escribe en
los CDRs de Asterisk
cdr_manager.conf Este archivo controla si se deben enviar
CDRs a travs del AMI (Asterisk
Manager Interface)
cdr_mysql.conf Archivo de configuracin del mdulo
cdr_mysql que permite registrar los CDRs
en la base de datos MySQL
cdr_odbc.conf Aqu se configura el mdulo que permite
registrar CDRs a travs del driver ODBC
de base de datos
cdr_pgsql.conf Aqu se configura el mdulo que permite
registrar CDRs en la base de datos
PostgreSQL
cdr_tds.conf Con este archivo podemos configurar el
mdulo que permite registrar CDRs a
travs de los drivers de freeTDS. Por
ejemplo, con este mdulo podemos
registrar CDRs en la base de datos MS-
SQL
cdr.conf El archivo principal de configuracin de la
reportacin de CDRs
codecs.conf En este archivo se configuran algunas
opciones que controlan el funcionamiento
de algunos codecs
dnsmgr.conf Este archivo define si Asterisk debe
realizar peticiones DNS regularmente y
cada cunto tiempo
dundi.conf Archivo de configuracin de DUNDI
(Distributed Universal Number
Discovery)

240
enum.conf Archivo de configuracin de ENUM
extconfig.conf Permite configurar lo que se llama
configuracin externa. Es bsicamente
una funcionalidad que permite mapear
cualquier archivo de configuracin con
una entidad externa como una base de
datos
extensions_a2billing.conf Plan de marcado adicional para la
aplicacin A2Billing
extensions_additional.conf Archivo de configuracin de Asterisk
modificado por FreePBX donde no se
debe editar a mano porque los cambios se
perdern
extensions_custom.conf Archivo donde se pueden crear contextos
personalizados de Asterisk sin que
FreePBX los sobre escriba
extensions.ael Plan de marcado en formato AEL
(Asterisk Extension Language). No se usa
en Elastix.
extensions.conf Archivo de configuracin que incluye a
extensions_additional.conf y a
extensions_additional.conf
features_applicationmap_additional.conf Archivo incluido desde el
features.conf que contiene
configuracin de la seccin
applicationmap y que es sobrescrito
por freePBX
features_applicationmap_custom.conf Archivo incluido desde el
features.conf que contiene
configuracin de la seccin
applicationmap y que puede ser
sobrescrito por el usuario ya que no lo
sobrescribe freePBX
features_featuremap_additional.conf Archivo incluido desde el
features.conf que contiene
configuracin de la seccin
featuremap y que es sobrescrito por
freePBX
features_featuremap_custom.conf Archivo incluido desde el
features.conf que contiene
configuracin de la seccin
featuremap y que puede ser
sobrescrito por el usuario ya que no lo
sobrescribe freePBX
features_general_additional.conf Archivo de configuracin general de
features que sobrescribe freePBX

241
features_general_custom.conf Archivo de configuracin general de
features que puede ser escrito por el
usuario ya que freePBX no lo sobrescribe
features.conf Aqu se pueden configurar algunas
caractersticas de Asterisk como
parmetros de transferencias y captura de
llamadas.
festival.conf Arhcivo de configuracin de Festival
followme.conf Configuracin de la funcionalidad
followme
func_odbc.conf Permite configurar parmetros de
conexin con una base de datos a travs
del driver ODBC para poder hacer
consultas en caliente a travs del mismo
plan de marcado
globals_custom.conf Permite al usuario definir variables
globales que no sern sobrescritas por
freePBX. Este archivo es incluido desde el
extensions_additional.conf
gtalk.conf Archivo de configuracin para que
Asterisk funcione como cliente del
servicio Google Talk
h323.conf Archivo de configuracin para protocolo
H.323 segn la implementacin basada en
el proyecto Open H.323. Existen otras
implementaciones.
http.conf Configuracin de mini servidor Web
embebido en Asterisk. Por omisin este
servicio est apagado as que tener
cuidado de no levantarlo en el mismo
puerto que el servidor Apache que viene
integrado en el Elastix
iax_additional.conf Configuracin de IAX generada por
FreePBX no se debe editar
iax_custom.conf Configuracin de IAX que se puede editar
ya que no la sobrescribe FreePBX
iax_general_additional.conf Archivo complementario al iax.conf
donde freePBX escribe configuracin
general. Esto es porque en la actualidad el
archivo iax.conf ha quedado como un
simple archivo de inclusin, o sea que
incluye a otros archivos
iax_general_custom.conf Similar al
iax_general_additional.conf
pero aqu puede escribir informacin el
usuario ya que este archivo no es

242
sobrescrito por freePBX
iax_registrations_custom.conf Similar al
iax_registrations.conf pero
este archivo no es sobrescrito por freePBX
permitiendo almacenar configuracin del
usuario sin temor a que se borre
iax_registrations.conf Archivo utilizado por freePBX para
almacenar informacin de cadenas de
registro con otras centrales o proveedores
VoIP que usan protocolo IAX
iax.conf Archivo principal de IAX que incluye a
los otros
iaxprov.conf Archivo utilizado par actualizar el
firmware de dispositivos IAXy
indications.conf Archivo para configurar la definicin de
tonos. Estos tonos pueden variar de un
pas a otro o de una compaa telefnica a
otra. Algunos tonos analgicos comunes
son el RING, BUSY, DIAL, entre otros.
jabber.conf Archivo que permite configurar el soporte
Jabber en Asterisk. Esto es porque
Asterisk se puede conectar como cliente a
un servidor Jabber (XMPP para decirlo
ms formal)
localprefixes.conf Archivo que permite configurar reglas de
marcado basadas en prefijos
logger.conf En este archivo se puede configurar el
logging de Asterisk. Ver la seccin de
diagnstico para mayor informacin.
manager_additional.conf Informacin de configuracin de AMI que
puede ser sobrescrita por freePBX
manager_custom.conf Informacin de configuracin de AMI
para uso del usuario, o sea que este
archivo no es sobrescrito por freePBX
manager.conf Archivo de configuracin del servicio de
Asterisk Manager Interface.
meetme_additional.conf Configuracin de cuartos de conferencia
escrita por freePBX
meetme.conf Configuracin de los cuartos de
conferencia permanentes
mgcp.conf Configuracin de protocolo MGCP.
misdn.conf Archivo de configuracin del canal
chan_misdn en Asterisk
modem.conf Archivo de configuracin del soporte para
modems e ISDN usando los drivers de

243
ISDN4Linux o CAPI4Linux.
modules.conf Este archivo le dice a Asterisk cules
mdulos se cargan y cules no.
musiconhold_additional.conf Arvhivo para configuracin de msica en
espera que sobrescribe freePBX
musiconhold_custom.conf Definicin de msica en espera definida
por el usuario. Este archivo no lo
sobrescribe freePBX
musiconhold.conf Aqu se configura la msica en espera.
Asterisk es muy flexible e inclusive
soporta streaming de audio.
muted.conf Permite enviar audio a ciertos canales y
reducir el volumen de dicho audio
mientras estos canales estn activos.
osp.conf Permite para configurar soporte para
protocolo OSP (Open Settlement
Protocol). Este protocolo nos permite
intercambiar informacin (como
accounting y uso) con proveedores que
soporten dicho protocolo.
oss.conf Permite configurar canales tipo OSS
(Open Sound System). Digamos que OSS
es un driver de audio para simplificar las
cosas y este canal nos permite configurar
canales en la propia de tarjeta de sonido
teniendo un softphone simplemente
conectando un headset.

Algo similar al soporte ALSA.


parking_additional.inc Archivo que almacena cierta informacin
de lotes de parqueo. Este archivo se
escribe automticamente por el mdulo
Parkinglot
phone.conf Permite configurar canales tipo phone
que se basan en una implementacin de
canal para el proyecto Linux Telephony
que soporta este tipo de dispositivos en
Linux
phpagi.conf Configura algunos parmetros bsicos
para el soporte de la librera PHPAGI
privacy.conf Bsicamente este archivo define el
nmero de intentos que tiene un usuario
para intentar ingresar un nmero de
telfono vlido en la aplicacin
PrivacyManager( )

244
queues_additional.conf Archivo que crea colas generado desde
FreePBX, no se debe modificar
manualmente porque se pueden perder los
cambios
queues_custom_general.conf Archivo de configuracin general de colas
escrito por el usuario, es decir que no lo
sobrescribe freePBX
queues_custom.conf Archivo de configuracin de colas que
puede ser modificado por los usuarios sin
que FreePBX lo borre
queues_general_additional.conf Archivo de configuracin general de colas
escrito por freePBX
queues_post_custom.conf Actualmente freePBX no usa este archivo
queues.conf Archivo general de configuracin para
colas. Si desea editar las colas en archivos
de texto, se recomienda modificar
queues_custom.conf
res_mysql.conf Permite a Asterisk obtener la
configuracin de la base de datos MySQL.
El concepto se denomina Asterisk
Realtime
res_odbc.conf Permite a Asterisk obtener configuracin
de bases de datos a travs del driver
ODBC
res_pgsql.conf Permite a Asterisk obtener configuracin
de la base de datos PostgreSQL
res_snmp.conf Permite configurar soporte SNMP en
Asterisk
rpt.conf Archivo de configuracin de repetidora de
radio. Esto le permite a Asterisk
comunicarse va VoIP utilizando
tecnologa de repeticin de radio
rtp.conf Configuracin del protocolo RTP. Aqu se
puede configurar el rango de puertos RTP
que Asterisk utilizar
say.conf Define ciertos parmetros de
internacionalizacin
sip_additional.conf Configuracin de SIP generada por
FreePBX y que no se debe editar
sip_custom_post.conf
sip_custom.conf Configuracin de SIP que se puede
modificar y no es sobre escrita por
FreePBX
sip_general_additional.conf Archivo complementario al sip.conf
donde freePBX escribe configuracin

245
general. Esto es porque en la actualidad el
archivo sip.conf ha quedado como un
simple archivo de inclusin, o sea que
incluye a otros archivos
sip_general_custom.conf Similar al
sip_general_additional.conf
pero aqu puede escribir informacin el
usuario ya que este archivo no es
sobrescrito por freePBX
sip_nat.conf Configuracin para trabajar con SIP a
travs de NAT
sip_notify.conf Utilizado para configurar el soporte que
permite reiniciar algunos telfonos SIP
remtamente
sip_registrations_custom.conf Similar al
sip_registrations.conf pero este
archivo no lo sobrescribe freePBX
permitiendo almacenar configuracin del
usuario sin temor a que se borre
sip_registrations.conf Archivo utilizado por freePBX para
almacenar informacin de cadenas de
registro con otras centrales o proveedores
VoIP
sip.conf Archivo de configuracin de SIP que
incluye a los otros
skinny.conf Permite configurar el protocolo SCCP
(Skinny Client Control Protocol) en
Asterisk
sla.conf Configuracin de SLAs (Shared Line
Appearances)
smdi.conf Permite configurar soporte SMDI (Station
Message Desk Interface) que le permite a
Asterisk funcionar como un sistema de
voicemail para centrales que soportan este
protocolo
udptl.conf Le permite a Asterisk soportar paquetes
UDPTL. Estos paquetes son utilizados por
el protocolo T.38 para fax
unicall.conf Aqu se puede configurar el mdulo
chan_unicall
users.conf Este archivo se utiliza para definir el
concepto de usuario que puede tener
asociado opcionalmente un telfono (o
extensin). Esto modela mejor el hecho de
que un usuario puede cambiar de telfono
pero no necesariamente deja la compaa

246
(o la central telefnica)
vm_email.inc Plantilla de email que se enva para
notificar al usuario de la llegada de un
nuevo correo de voz
vm_general.inc Algunos parmetros generales
relacionados con el voicemail
voicemail.conf Archivo de configuracin de los casilleros
de voz
vpb.conf Archivo de configuracin de tarjetas
VoiceTronix
zapata_additional.conf Archivo que sobrescribe freePBX y que se
incluye en el zapata.conf. Se utiliza
bsicamente cuando se crean extensiones
tipo ZAP.
zapata-channels.conf Archivo escrito por el script
genzaptelconf y por el detector de
hardware de Elastix para agregar
configuracin al zapata.conf
zapata.conf Configuracin de las tarjetas de telefona
que usan los drivers de zaptel.

247
Lista de comandos de CLI
La siguiente lista de comandos ha sido generada en base al comando help sobre la
versin de Asterisk 1.4.21.2.

Comando Descripcin
! Execute a shell command
abort halt Cancel a running halt
ael debug contexts Enable AEL contexts debug (does
nothing)
ael debug macros Enable AEL macros debug (does nothing)
ael debug read Enable AEL read debug (does nothing)
ael debug tokens Enable AEL tokens debug (does nothing)
ael nodebug Disable AEL debug messages
ael reload Reload AEL configuration
agent logoff Sets an agent offline
agent show Show status of agents
agent show online Show all online agents
agi debug Enable AGI debugging
agi debug off Disable AGI debugging
agi dumphtml Dumps a list of agi commands in html
format
agi show List AGI commands or specific help
cb mysql status Show connection status of CBMySQL

249
cdr mysql status Show connection status of cdr_mysql
cdr status Display the CDR status
core clear profile Clear profiling info
core set debug channel Enable/disable debugging on a channel
core set debug Set level of debug chattiness
core set debug off Turns off debug chattiness
core set global Set global dialplan variable
core set verbose Set level of verboseness
core show applications Shows registered dialplan applications
core show application Describe a specific dialplan application
core show audio codecs Displays a list of audio codecs
core show channels Display information on channels
core show channel Display information on a specific channel
core show channeltypes List available channel types
core show channeltype Give more details on that channel type
core show codecs Displays a list of codecs
core show codec Shows a specific codec
core show config mappings Display config mappings (file names to
config engines)
core show file formats Displays file formats
core show file version List versions of files used to build
Asterisk
core show functions Shows registered dialplan functions
core show function Describe a specific dialplan function
core show globals Show global dialplan variables
core show hints Show dialplan hints
core show image codecs Displays a list of image codecs
core show image formats Displays image formats
core show license Show the license(s) for this copy of
Asterisk
core show profile Display profiling info
core show switches Show alternative switches
core show threads Show running threads
core show translation Display translation matrix
core show uptime Show uptime information
core show version Display version info
core show video codecs Displays a list of video codecs
core show warranty Show the warranty (if any) for this copy
of Asterisk

250
database del Removes database key/value
database deltree Removes database keytree/values
database get Gets database value
database put Adds/updates database value
database show Shows database contents
database showkey Shows database contents
dialplan add extension Add new extension into context
dialplan add ignorepat Add new ignore pattern
dialplan add include Include context in other context
dialplan reload Reload extensions and *only* extensions
dialplan remove extension Remove a specified extension
dialplan remove ignorepat Remove ignore pattern from context
dialplan remove include Remove a specified include from context
dialplan show Show dialplan
dnsmgr reload Reloads the DNS manager configuration
dnsmgr status Display the DNS manager status
dundi debug Enable DUNDi debugging
dundi flush Flush DUNDi cache
dundi lookup Lookup a number in DUNDi
dundi no debug Disable DUNDi debugging
dundi no store history Disable DUNDi historic records
dundi precache Precache a number in DUNDi
dundi query Query a DUNDi EID
dundi show entityid Display Global Entity ID
dundi show mappings Show DUNDi mappings
dundi show peers Show defined DUNDi peers
dundi show peer Show info on a specific DUNDi peer
dundi show precache Show DUNDi precache
dundi show requests Show DUNDi requests
dundi show trans Show active DUNDi transactions
dundi store history Enable DUNDi historic records
feature show Lists configured features
file convert Convert audio file
group show channels Display active channels with group(s)
help Display help list, or specific help on a
command
http show status Display HTTP server status
iax2 provision Provision an IAX device

251
iax2 prune realtime Prune a cached realtime lookup
iax2 reload Reload IAX configuration
iax2 set debug Enable IAX debugging
iax2 set debug jb Enable IAX jitterbuffer debugging
iax2 set debug jb off Disable IAX jitterbuffer debugging
iax2 set debug off Disable IAX debugging
iax2 set debug trunk Enable IAX trunk debugging
iax2 set debug trunk off Disable IAX trunk debugging
iax2 show cache Display IAX cached dialplan
iax2 show channels List active IAX channels
iax2 show firmware List available IAX firmwares
iax2 show netstats List active IAX channel netstats
iax2 show peers List defined IAX peers
iax2 show peer Show details on specific IAX peer
iax2 show provisioning Display iax provisioning
iax2 show registry Display IAX registration status
iax2 show stats Display IAX statistics
iax2 show threads Display IAX helper thread info
iax2 show users List defined IAX users
iax2 test losspct Set IAX2 incoming frame loss percentage
indication add Add the given indication to the country
indication remove Remove the given indication from the
country
indication show Display a list of all countries/indications
keys init Initialize RSA key passcodes
keys show Displays RSA key information
local show channels List status of local channels
logger mute Toggle logging output to a console
logger reload Reopens the log files
logger rotate Rotates and reopens the log files
logger show channels List configured log channels
manager show command Show a manager interface command
manager show commands List manager interface commands
manager show connected List connected manager interface users
manager show eventq List manager interface queued events
manager show users List configured manager users
manager show user Display information on a specific manager
user

252
meetme Execute a command on a conference or
conferee
mgcp audit endpoint Audit specified MGCP endpoint
mgcp reload Reload MGCP configuration
mgcp set debug Enable MGCP debugging
mgcp set debug off Disable MGCP debugging
mgcp show endpoints List defined MGCP endpoints
mixmonitor Execute a MixMonitor command
module load Load a module by name
module reload Reload configuration
module show List modules and info
module show like List modules and info
module unload Unload a module by name
moh reload Music On Hold
moh show classes List MOH classes
moh show files List MOH file-based classes
no debug channel
originate Originate a call
pri debug span Enables PRI debugging on a span
pri intense debug span Enables REALLY INTENSE PRI
debugging
pri no debug span Disables PRI debugging on a span
pri set debug file Sends PRI debug output to the specified
file
pri show debug Displays current PRI debug settings
pri show spans Displays PRI Information
pri show span Displays PRI Information
pri unset debug file Ends PRI debug output to file
queue add member Add a channel to a specified queue
queue remove member Removes a channel from a specified
queue
queue show Show status of a specified queue
realtime load Used to print out RealTime variables
realtime mysql status Shows connection information for the
MySQL RealTime driver
realtime pgsql status Shows connection information for the
Postgresql RealTime driver
realtime update Used to update RealTime variables
restart gracefully Restart Asterisk gracefully

253
restart now Restart Asterisk immediately
restart when convenient Restart Asterisk at empty call volume
rtcp debug ip Enable RTCP debugging on IP
rtcp debug Enable RTCP debugging
rtcp debug off Disable RTCP debugging
rtcp stats Enable RTCP stats
rtcp stats off Disable RTCP stats
rtp debug ip Enable RTP debugging on IP
rtp debug Enable RTP debugging
rtp debug off Disable RTP debugging
say load set/show the say mode
show parkedcalls Lists parked calls
show queues
sip history Enable SIP history
sip history off Disable SIP history
sip notify Send a notify packet to a SIP peer
sip prune realtime Prune cached Realtime object(s)
sip prune realtime peer Prune cached Realtime peer(s)
sip prune realtime user Prune cached Realtime user(s)
sip reload Reload SIP configuration
sip set debug Enable SIP debugging
sip set debug ip Enable SIP debugging on IP
sip set debug off Disable SIP debugging
sip set debug peer Enable SIP debugging on Peername
sip show channels List active SIP channels
sip show channel Show detailed SIP channel info
sip show domains List our local SIP domains
sip show history Show SIP dialog history
sip show inuse List all inuse/limits
sip show objects List all SIP object allocations
sip show peers List defined SIP peers
sip show peer Show details on specific SIP peer
sip show registry List SIP registration status
sip show settings Show SIP global settings
sip show subscriptions List active SIP subscriptions
sip show users List defined SIP users
sip show user Show details on specific SIP user
skinny reset Reset Skinny device(s)

254
skinny set debug Enable Skinny debugging
skinny set debug off Disable Skinny debugging
skinny show devices List defined Skinny devices
skinny show lines List defined Skinny lines per device
sla show stations Show SLA Stations
sla show trunks Show SLA Trunks
soft hangup Request a hangup on a given channel
stop gracefully Gracefully shut down Asterisk
stop now Shut down Asterisk immediately
stop when convenient Shut down Asterisk at empty call volume
stun debug Enable STUN debugging
stun debug off Disable STUN debugging
transcoder show Display Zaptel transcoder utilization
udptl debug Enable UDPTL debugging
udptl debug ip Enable UDPTL debugging on IP
udptl debug off Disable UDPTL debugging
voicemail show users List defined voicemail boxes
voicemail show zones List zone message formats
zap destroy channel Destroy a channel
zap restart Fully restart zaptel channels
zap show cadences List cadences
zap show channels Show active zapata channels
zap show channel Show information on a channel
zap show status Show all Zaptel cards status

255
256
Comunicaciones Unificadas
con Elastix
Volumen 2

Edgar Landvar
Copyright (c) 2008-2009 Edgar Landvar

Este documento est permitido de copiar, distribuir y/o modificar


bajo los trminos de la licencia GNU Free Documentation License,
Versin 1.3; sin Secciones Invariantes (Invariant Sections), Textos
de Cubierta Frontal (Front-Cover Texts), y sin Textos de Cubierta
Posterior (Back-Cover Texts).

El autor puede en cualquier momento decidir actualizar la licencia de


la presente obra a una versin ms reciente de la GNU Free
Documentation License.

Una copia de esta licencia se incluye en el Apndice A: GNU Free


Documentation License.

Segunda Edicin, versin Beta

2
A los que siempre creyeron y a otros gigantes que nos
mostraron el camino

3
4
Reconocimiento
La elaboracin de este volumen 2 involucr un enorme trabajo que fue facilitado gracias
a la generosa ayuda de algunas personas con las cuales me encuentro agradecido. Mis
ms sinceros agradecimientos a:

A la comunidad Elastix, por su valioso feedback del producto Elastix y de


seguro por el que vendr acerca de esta obra. Sin este componente este libro no
podra evolucionar
Edwin Boza, por su ayuda en el captulo de Email System
Bruno Macas, por aportar con contenido para el apartado Extendiendo la
Interfase Web de Elastix
Alex Villacs, por su aporte en el captulo Mdulo Call Center
A Rafael Bonifaz por su ayuda en el apartado referente a VirtualBox

Por qu comprar este libro?


Comprar una versin impresa de este libro es una manera de colaborar con el proyecto
Elastix. Sin embargo, si al lector no le gustan los libros impresos pero desea colaborar
con este proyecto de software libre, todava puede realizar una donacin a travs del
siguiente enlace:

http://www.elastix.org/index.php?option=com_content&task=view&id=128&Itemid=54

Qu significa versin Beta?


Significa que se trata de una edicin preliminar que pudiera estar sujeta a errores
menores y por lo tanto cualquier retroalimentacin de los lectores es bienvenida.

Feedback
Cualquier sugerencia o colaboracin ser bien recibida. Que el lector no dude en
escribir un email a elastixbook@palosanto.com

5
Indice
Indice ............................................................................................................................... 7
Introduccin .................................................................................................................. 13
17. Plan de marcado avanzado .................................................................................... 15
17.1 Introduccin........................................................................................................ 15
17.2 Manipulacin de variables.................................................................................. 15
Eliminando dgitos al inicio y final de una variable............................................... 15
Concatenacin de variables .................................................................................... 16
Expresiones............................................................................................................. 16
Sintaxis condicional................................................................................................ 18
17.3 Macros ................................................................................................................ 18
Variables disponibles en la macro .......................................................................... 19
Otro ejemplo de macro ........................................................................................... 19
17.4 AstDB ................................................................................................................. 20
Aplicaciones para administrar AstDB .................................................................... 20
17.5 El plan de marcado de freePBX ......................................................................... 21
extensions.conf ....................................................................................................... 21
extensions_additional.conf ..................................................................................... 22
17.6 Algunos conocimientos tiles............................................................................. 23
Cmo verificar si una variable se encuentra vaca? ............................................... 23
Cmo obtener la fecha actual en el plan de marcado? ........................................... 24
Cmo proceder si quiero realizar cambios en el extensions.conf?......................... 24
18. Elastix Email System .............................................................................................. 25
18.1 Arquitectura del sistema de email ...................................................................... 25
18.2 Configurando el sistema de correo electrnico de Elastix ................................. 26
18.3 Configuraciones a bajo nivel .............................................................................. 32
18.4 Luchando contra el SPAM ................................................................................. 34
18.5 Instalando antivirus ............................................................................................ 35
19. Mensajera Instantnea.......................................................................................... 39
19.1 Protocolo XMPP (Jabber)................................................................................... 39
19.2 Openfire .............................................................................................................. 40
Caractersticas destacables ..................................................................................... 40
19.3 Usando Openfire en Elastix................................................................................ 40
Activacin de Openfire........................................................................................... 41
Interfaz Web de administracin de Openfire.......................................................... 44
Integracin de Openfire con Asterisk..................................................................... 46
20. Fax en Elastix.......................................................................................................... 51
20.1 Hylafax e IAXModem ........................................................................................ 51
Hylafax ................................................................................................................... 51
IAXModem............................................................................................................. 52
20.2 Configuracin de Fax en la interfase Web de Elastix ........................................ 53
Listado de Fax Virtual ............................................................................................ 53
Nuevo Fax Virtual .................................................................................................. 54
Fax Master .............................................................................................................. 55
Clientes de Fax ....................................................................................................... 56
Visor de Fax ........................................................................................................... 56
20.3 Enviando un FAX desde una estacin de trabajo ............................................... 57
20.4 Procesamiento interno de un documento de FAX en Elastix ............................. 60
20.5 Protocolo T.38 .................................................................................................... 61
20.6 AvantFAX, un GUI alternativo .......................................................................... 62
21. Sintetizacin y reconocimiento de voz .................................................................. 63
21.1 Sintetizacin de voz............................................................................................ 63
Festival ................................................................................................................... 65
Cmo interactuar con Festival desde el plan de marcado ...................................... 67
Sintetizando voz desde la interfase Web de Elastix ............................................... 69
21.2 Reconocimiento de voz ...................................................................................... 70
Lumenvox............................................................................................................... 70
Instalando LumenVox en Elastix ........................................................................... 71
Probando LumenVox en Asterisk .......................................................................... 73
22. Desempeo y dimensionamiento ........................................................................... 75
22.1 Desempeo de Elastix ........................................................................................ 75
Factores que afectan el desempeo de Elastix........................................................ 75
Herramientas........................................................................................................... 77
22.2 Dimensionamiento telefnico............................................................................. 78
Determinando el nmero de lneas telefnicas necesarias ..................................... 78
Agner Krarup Erlang .............................................................................................. 78
La unidad Erlang .................................................................................................... 78
Modelos Erlang ...................................................................................................... 79
22.3 Cuando un slo servidor no alcanza ................................................................... 81
Distribuir el trabajo en equipos especializados ...................................................... 81
Distribuir el plan de marcado ................................................................................. 82
23. Seguridad................................................................................................................. 83
23.1 Algo de historia .................................................................................................. 83
23.2 Seguridad fsica .................................................................................................. 85
Limitacin del acceso al servidor ........................................................................... 86
No usar el usuario root ........................................................................................... 86

8
NO dejar sesiones de consola abiertas.................................................................... 86
Bloquear el reinicio ................................................................................................ 87
Cambiar las claves por omisin en Elastix............................................................. 87
23.3 Ataques y vulnerabilidades a nivel de red IP ..................................................... 88
Denegacin de servicio........................................................................................... 88
Ataques de inundacin SIP (SIP Flooding)............................................................ 88
Sniffing.................................................................................................................... 89
23.4 Encriptando la VoIP ........................................................................................... 91
SRTP....................................................................................................................... 91
VPNs....................................................................................................................... 92
Encriptacin IAX.................................................................................................... 93
23.5 Auditoras de seguridad ...................................................................................... 94
23.6 Algunas soluciones a los problemas de seguridad ............................................. 97
Apagando los servicios que no vamos a usar ......................................................... 97
Firewalls ................................................................................................................. 98
IDSs e IPSs ........................................................................................................... 100
Actualizaciones..................................................................................................... 101
Monitoreo ............................................................................................................. 101
Usar un Switch en lugar de un HUB .................................................................... 102
24. Debugging Avanzado............................................................................................ 105
24.1 Introduccin...................................................................................................... 105
Qu hacer cuando Asterisk se comporta de mal? ................................................. 106
Errores de programacin que provocan cadas, colgados o comportamientos
indeseados............................................................................................................. 108
24.2 strace................................................................................................................. 109
Un ejemplo sencillo de depuracin de Asterisk ................................................... 111
24.3 GDB.................................................................................................................. 113
Ejemplos simples de uso de GDB ........................................................................ 113
Comandos bsicos ................................................................................................ 114
24.4 Archivos core y backtraces .............................................................................. 115
Cmo reportar un backtrace a Digium? ............................................................... 118
25. DUNDI ................................................................................................................... 119
25.1 Introduccin...................................................................................................... 119
25.2 Ejemplo de configuracin................................................................................. 120
Escenario .............................................................................................................. 120
Certificados de encriptacin ................................................................................. 120
dundi.conf ............................................................................................................. 121
iax_custom.conf.................................................................................................... 127
extensions.conf ..................................................................................................... 128

9
extensions_custom.conf........................................................................................ 128
Aplicar la configuracin ....................................................................................... 130
Conclusin............................................................................................................ 130
25.3 Integrando IVRs con DUNDi ........................................................................... 130
26. Mdulo de Call Center ......................................................................................... 133
26.1 Introduccin...................................................................................................... 133
26.2 Funcionalidad bsica ........................................................................................ 133
Modelo de funcionamiento................................................................................... 133
Funcionalidad implementada................................................................................ 134
Limitaciones conocidas ........................................................................................ 135
26.3 Componentes del Elastix Dialer ....................................................................... 135
Marcador predictivo ............................................................................................. 135
Consola de agente................................................................................................. 137
Administracin de campaas................................................................................ 137
Reportes ................................................................................................................ 137
26.4 Procedimientos para el uso del Elastix Dialer .................................................. 138
Administrador - Configuracin de agentes........................................................... 138
Administrador - Creacin de campaas ............................................................... 138
Administrador - Reportes ..................................................................................... 138
Operador - interaccin con consola de agente...................................................... 139
26.5 Resolucin de problemas................................................................................. 139
Marcador no marca (ningn agente recibe llamadas):.......................................... 139
Marcador slo marca a un nmero pequeo de agentes (subutilizacin):............ 140
Marcador deja de generar llamadas luego de funcionar correctamente por un
intervalo:............................................................................................................... 141
26.6 Usando la interfase Web de administracin de campaas................................ 141
Administracin de Agentes .................................................................................. 142
Administracin de Formularios ............................................................................ 144
Administracin de campaas salientes ................................................................. 148
Administracin de llamadas entrantes.................................................................. 154
Administracin de Breaks .................................................................................... 157
27. Extendiendo la interfase Web de Elastix............................................................ 161
27.1 El framework Neo............................................................................................. 161
Arquitectura Web basada en MVC2..................................................................... 162
Desarrollo POO .................................................................................................... 164
Implementacin modular...................................................................................... 164
27.2 Creacin de un mdulo de Elastix.................................................................... 165
Creando el Men .................................................................................................. 165
Definicin de lenguajes ........................................................................................ 168

10
Visualizando el nuevo mdulo ............................................................................. 169
27.3 Programacin de un Mdulo ............................................................................ 170
27.4 Arquitectura Modular ....................................................................................... 171
Archivo index.php ................................................................................................ 171
27.5 Elastix Developer Tools al rescate................................................................ 172
Instalando Elastix Developer Tools...................................................................... 172
Construyendo un mdulo de Elastix con el Developer ........................................ 173
Eliminacin de un mdulo a travs del Developer............................................... 178
Administracin de lenguajes desde el Developer ............................................. 179
27.6 Estndar de codificacin PHP en Elastix ......................................................... 179
Indentacin ........................................................................................................... 180
Estructuras de control ........................................................................................... 180
Llamadas a funciones ........................................................................................... 181
Definicin de funciones........................................................................................ 181
Comentarios.......................................................................................................... 182
Cdigo de inclusin .............................................................................................. 183
Comentarios de cabecera ...................................................................................... 183
URL de ejemplo ................................................................................................... 184
Convencin de nombres ....................................................................................... 185
28. Virtualizacin........................................................................................................ 187
28.1 Opciones de virtualizacin ............................................................................... 187
28.2 Elastix sobre VMWare ..................................................................................... 188
28.3 Elastix sobre Virtualbox ................................................................................... 188
Virtualbox y Redes ............................................................................................... 189
Configuracin Interfase Anfitrin ........................................................................ 189
Crear la mquina virtual ....................................................................................... 191
Configuracin Previa de la Mquina Virtual........................................................ 192
Arrancar la Mquina Virtual por Primera Vez ..................................................... 192
Opciones Avanzadas ............................................................................................ 193
28.4 Elastix sobre XEN ............................................................................................ 194
Breve introduccin a XEN ................................................................................... 195
Algunos comandos XEN bsicos ......................................................................... 196
Instalacin de Elastix virtualizado utilizando XEN ............................................. 197
29. Compilando Asterisk............................................................................................ 201
29.1 Recompilando los SRPMs ................................................................................ 201
Instalar un Elastix con los requisitos para construir el RPM................................ 202
Instalar el SRPM de Asterisk y modificar el SPEC de acuerdo a nuestras
necesidades ........................................................................................................... 203
Construir el RPM de Asterisk............................................................................... 203

11
30. La Certificacin Elastix ....................................................................................... 205
30.1 Introduccin...................................................................................................... 205
30.2 El Curso de Certificacin Elastix ..................................................................... 205
30.3 El Examen de Certificacin Elastix.................................................................. 206
Tpicos y Pesos .................................................................................................... 206
30.4 Preguntas tpicas de examen............................................................................. 207
Apndice A. GNU Free Documentation License ..................................................... 211

12
Introduccin
Ya existan otros libros o manuales de Elastix cuando me vi en la misin de Escribir la
presente obra. Haba ledo ya Elastix Without Tears, un gran trabajo de Ben Shariff y
me pareca que ya estaban cubiertos los temas ms importantes cuando nos reunimos en
mi oficina con otros colaboradores a planificar lo que sera nuestro nuevo producto de
entrenamiento para la certificacin de Elastix.

Casi de inmediato nos dimos cuenta que pese a que las obras existentes cubran muchos
tpicos importantes no funcionaran del todo como material de estudio para un curso de
certificacin. La obra que necesitbamos tena que cubrir aspectos internos del
funcionamiento de Elastix y sus componentes, as como tambin cubrir posibles vacos
de los alumnos en tpicos diversos como Asterisk y protocolos de comunicacin como
SIP y RTP. No exista nada parecido en ese momento, una alternativa era usar diferentes
obras para cubrir la totalidad del entrenamiento pero eso sera un poco engorroso y se
vera algo desorganizado.

Salimos de la reunin con el sinsabor de no tener material de estudio.

Semanas despus me di a la tarea de escribir un pnsum para nuestros cursos


olvidndome un poco del tema del libro faltante. El pnsum fue del agrado de todos as
que decid bosquejar brevemente lo que debera contener cada tpico y ese fue el inicio
del libro que tienen en sus manos (o en su pantalla)... Sin darme cuenta lo haba
comenzado a escribir. Una noche en mi casa vi que ya tena cierta forma as que decid
comentarlo al siguiente da en la oficina y todos aprobaron la idea. Decidimos hacer dos
tomos o volmenes, el primero cubrira los tpicos requeridos para nuestro primer curso
y un segundo cubrira los tpicos de nuestro segundo y final curso.

Ya iba por la mitad del primer volumen cuando surgi la pregunta acerca del
licenciamiento de la obra. Elastix es software libre y yo no haba pensado an en el
licenciamiento del libro. Algunos pensaban en que no debera ser libre debido a que era
material de entrenamiento que de alguna manera nos otorgaba ventaja competitiva en el
mercado. En este punto debo de agradecer la ayuda de algunos integrantes del equipo de
PaloSanto Solutions por sus acertados argumentos en pro de FDL (Free Documentation
License).

Finalmente la presente obra se termino con la escritura de esta introduccin el 29 de


Octubre de 2008. Espero que sea de la utilidad y agrado de todos vosotros.

-- Edgar Landivar
Elastix Project Leader

13
14
Plan de marcado avanzado
Olvidar lo malo tambin es tener memoria
-- Jos Hernandez en su obra Martn Fierro

17.1 Introduccin
En el volumen 1 exploramos brevemente el plan de marcado (dialplan) de Asterisk
explicando conceptos bsicos como contextos, aplicaciones o variables. En este captulo
avanzaremos ms y explicaremos conceptos adicionales que nos permitirn leer y
escribir plan de marcado con ms facilidad.

17.2 Manipulacin de variables

Eliminando dgitos al inicio y final de una variable

En ocasiones necesitaremos modificar una variable como ${EXTEN} y eliminar


algunos dgitos al principio del nmero ya que estos muchas veces son prefijos
telefnicos. Por ejemplo, si queremos marcar por un proveedor VoIP que termina
llamadas exclusivamente en USA puede ser que l necesite solamente que se le enve el
nmero en s, sin el prefijo internacional 001.

15
Este tipo de cosas se logran de manera sencilla usando cierta sintaxis que nos permite
eliminar estos dgitos iniciales.

La sintaxis usada para eliminar dgitos al inicio y/o al final de una variable es
${EXTEN:x:y}

Donde x representa el nmero de dgitos que se eliminarn al principio de la variable


y y representa el nmero de dgitos que se extraern de dicha variable.

Por ejemplo, supongamos que originalmente la variable ${EXTEN} contiene el nmero


telefnico 123456789. Por lo tanto la expresin ${EXTEN:2:4} nos devolver el
nmero 3456. Es decir que se eliminaron 2 (x) dgitos al principio y el nmero devuelto
debe contener 4 (y) dgitos.

Si se omite y en la expresin (lo cual es el caso ms comn) entonces se asume que se


devolvern todos los restantes dgitos contenidos en la variable. En el ejemplo del
nmero telefnico anterior con la expresin ${EXTEN:2} obtendramos 3456789.

Concatenacin de variables

Para concatenar dos o mas variables simplemente debemos escribirlas juntas. Por
ejemplo, para concatenar las variables VAR1, VAR2 y VAR3 podramos hacer algo
como lo siguiente.

exten => s,n,SetVar(VAR_CONCAT=${VAR1}${VAR2}${VAR3})

Expresiones

Una expresin es una combinacin de variables y operadores que producen un


resultado. Un uso comn de una expresin es el de realizar operaciones matemticas
como por ejemplo sumar dos valores. Una expresin tiene la siguiente sintaxis.

$[expresin]

Por ejemplo, para sumar dos variables llamadas VAR1 Y VAR2 podemos utilizar la
expresin $[${VAR1} + ${VAR2}]

16
Operadores

Los operadores los hay de diferentes tipos como booleanos, matemticos, para
comparar y para manipular expresiones regulares.

Operador Descripcin
Booleanos
expr1 | expr2 Operador OR. Retorna expr1 en caso de
que expr1 contenga una cadena no-vaca o
diferente de cero. Caso contrario retorna
expr2.
expr1 & expr2 Operador AND. Retorna expr1 siempre y
cuando tanto expr1 como expr2 contengan
cadenas no-vacas o diferentes de cero.
Caso contrario retorna cero.
!expr Operador de complemento.
Para comparar
expr1 = expr2 Devuelve 1 si la comparacin es cierta y 0
si es falsa
expr1 != expr2 Devuelve 1 si la comparacin es cierta y 0
si es falsa
expr1 < expr2 Devuelve 1 si la comparacin es cierta y 0
si es falsa
expr1 > expr2 Devuelve 1 si la comparacin es cierta y 0
si es falsa
expr1 <= expr2 Devuelve 1 si la comparacin es cierta y 0
si es falsa
expr1 >= expr2 Devuelve 1 si la comparacin es cierta y 0
si es falsa
Matemticos
expr1 + expr2 Suma dos valores
expr1 - expr2 Resta dos valores
- expr Niega un valor
expr1 * expr2 Multiplica dos valores
expr1 / expr2 Divide un valor para otro
expr1 % expr2 Devuelve el mdulo de un valor para otro
Para manipular expresiones regulares
expr1 : regexp Compara expr1 contra una expresin
regular contenida en regexp. La
comparacin asume un carcter de inicio
de cadena ^ implcito al inicio de
regexp.

17
expr1 =~ expr2 Similar al operador anterior excepto que
no se asume un carcter de inicio de
cadena implcito.

Sintaxis condicional

Cuando se necesita evaluar una expresin y tomar una decisin como resultado de
aquello podemos usar lo que se llama sintaxis condicional y que mostraremos a
continuacin.

expresin?destino1:destino2

Es decir que si la expresin es verdadera se retorna destino1 y si es falsa se retorna


destino2.

Se podra decir que los caracteres y : son operadores pero es mejor estudiarlos por
separado.

Esta sintaxis es la usada por aplicaciones como GotoIf.

17.3 Macros
Las macros no son otra cosa que aplicaciones definidas por el usuario. Una de las
grandes ventajas de esto es que nos permiten reutilizar cdigo de plan de marcado.

Para definir una macro simplemente escribimos el cdigo de plan de marcado como si
fuera un contexto cualquiera con el cuidado de que el nombre de este contexto debe
empezar con la palabra macro seguida de un guin y del nombre de nuestra macro.
Por ejemplo:

[macro-nohacenada]
exten => s,1,NoOp(No se hace nada)

Para invocar la macro lo hacemos a travs de una aplicacin especial llamada tambin
Macro, la cual tiene la siguiente sintaxis.

Macro(nombremacro,arg1,arg2...)

18
Como vemos anterior a la aplicacin Macro debemos pasarle el nombre de la macro y
los argumentos que toma la macro en caso de que hayan. Hay que tener cuidado de que
el nombre de la macro constituye todo lo que hemos escrito despus del prefijo macro-
cuando la definimos.

Si queremos que la macro manipule ciertos argumentos podemos acceder a ellos


automticamente a travs de las variables ${ARG1}, ${ARG2}, ${ARG3}, etc

Por ejemplo, para invocar la macro que creamos antes podemos proceder de la siguiente
manera.

exten => s,n,Macro(nohacenada)

Veamos a continuacin la definicin de una macro muy usada en el plan de marcado


propuesto por freePBX y que sirve para colgar una llamada.

; What to do on hangup.
[macro-hangupcall]
exten => s,1,ResetCDR(w)
exten => s,n,NoCDR()

Variables disponibles en la macro

Aparte de los argumentos del tipo ${ARGn} existen otras variables disponibles en el
contexto de una macro. Estas variables son las siguientes.

Nombre variable Descripcin


${MACRO_CONTEXT} El contexto de la extensin desde donde
se llam a la macro

${MACRO_EXTEN} La extensin desde donde se llam a la


macro
${MACRO_PRIORITY} La prioridad en la extensin donde se
llam a la macro

Otro ejemplo de macro

19
Un ejemplo de macro muy didctico y sencillo, aunque probablemente poco til en la
vida prctica, es el de un sumador que nos permita reproducir en audio la suma de dos
nmeros. A continuacin la macro.

[macro-suma]
exten => s,1,SetVar(TOTAL=$[ ${ARG1} + ${ARG2} ])
exten => s,n,SayNumber(${TOTAL})

17.4 AstDB
Asterisk cuenta con una pequea base de datos a la que se puede acceder desde el plan
de marcado a travs de algunas aplicaciones destinadas a este fin. Esta pequea base de
datos est basada en el motor Berkeley DB versin 1 que bsicamente es una
implementacin muy sencilla de base de datos con reducida funcionalidad.

AstDB reside en /var/lib/asterisk/astdb y se usa para almacenar


informacin de cualquier tipo a la cual se quiera tener acceso desde el dialplan.

En esencia AstDB permite agrupar informacin en familias que no son otra cosa sino
contenedores que nos servirn para categorizar la informacin. En cada familia
tendremos pares conformados por dos elementos llamados clave y valor. Donde cada
clave es un nombre nico dentro de cada familia. Dos familias importantes que son
mantenidas por freePBX son AMPUSER y DEVICE.

En el plan de marcado provisto por Elastix se usa AstDB debido a que freePBX tambin
la usa as que es buena idea revisar algunas aplicaciones que nos servirn para
manipular esta base de datos.

Aplicaciones para administrar AstDB

A continuacin algunas aplicaciones que nos servirn para administrar AstDB desde el
plan de marcado.

Aplicacin Descripcin
DBdel Elimina una clave de la base de datos
DBdeltree Elimina una familia de la base de datos
DBget Obtiene un valor de la base de datos. Para
esto debemos proporcionarle la clave
correspondiente.
DBput Almacena un valor en la base de datos

20
17.5 El plan de marcado de freePBX
El plan de marcado escrito por freePBX reside principalmente en los archivos
extensions.conf y extensions_additional.conf. El primero contiene
informacin fija que no cambia cuando se hacen cambios desde la interfase Web de
freePBX y el segundo contiene informacin variable que s cambia cuando se hacen
cambios desde la interfase Web.

extensions.conf

El archivo extensions.conf es donde Asterisk buscar primero el plan de


marcado. Este archivo a su vez incluye el extensions_additional.conf.

Podramos decir a nivel general que este archivo se encuentra dividido en dos tipos de
contextos: macros y puntos de acceso.

Macros de apoyo

El primer tipo constituye un conjunto de macros que sirven de apoyo en la codificacin


del plan de marcado y que permiten la reutilizacin de cdigo y organizacin del
mismo. Algunas de las macros ms importantes que podemos encontrar aqu son:

Macro Descripcin
[macro-dial] Se usa para timbrar a una o ms extensiones. Toma
como argumentos las variables $DIAL_TIMER,
$DIAL_OPTIONS, $EXT1, $EXT2, $EXT3, etc
[macro-exten-vm] Timbra a una extensin y si dicha extensin est
ocupada o no contesta enva la llamada al casillero de
voz (voicemail)
[macro-vm] Llama sistema de casillero de voz y permite acceder a
un IVR personal
[macro-rg-group] Timbra grupos de telfonos (ring groups)
[macro-outisbusy] Informa al cliente que los canales de salida estn
ocupados
[macro-hangupcall] Cuelga una llamada. Bsicamente resetea los CDRs
antes de colgar.
[macro-dialout] Permite marcar hacia afuera y elimina el prefijo.
[macro-record-enable] Revisa si una llamada tiene habilitada la grabacin de
llamadas y procede a la grabacin de ser el caso

21
Puntos de acceso al dialplan

El segundo tipo de contextos est constituido por lo que podramos llamar puntos de
acceso al plan de marcado o contextos from. Es decir los lugares por donde la
comunicacin se inicia, ya que una llamada podra originarse en diferentes lugares,
como extensiones internas, troncales SIP, dispositivos Zaptel, etc.

Contexto from Descripcin


[from-pstn] Por aqu ingresan las llamadas desde la
PSTN o tambin desde una troncal VoIP.
Este contexto es equivalente a from-
trunk; de hecho este ltimo es un alias
de from-pstn.
[from-sip-external] Responde a usuarios SIP externos un
mensaje de congestin y luego cuelga
[from-internal] Por aqu ingresan las llamadas realizadas
desde extensiones internas
[from-zaptel] Para llamadas que ingresan desde
dispositivos zaptel

extensions_additional.conf

Prcticamente cada entidad o caracterstica configurable desde la interfase Web de


freePBX est especificada aqu. Por ejemplo, en este archivo se definen los servicios,
las salas de conferencia, las extensiones mismas, los IVRs, los accesos DISA, las rutas
salientes, las rutas entrantes, las colas, los ring-groups, etc.

En conclusin se podra decir que este archivo contiene los parmetros configurables
por el usuario. Es el archivo donde freePBX hace su mayor trabajo.

Trataremos de dar una idea al lector de qu significan los diferentes contextos que aqu
se pueden encontrar. En ocasiones especificaremos slo el prefijo con el que empieza el
nombre del contexto para agrupar mejor.

Contexto Descripcin
globals En el contexto globals (recordemos que se trata de
un contexto de nombre reservado) se enlistan algunas
variables que define internamente freePBX para su
correcto funcionamiento.
app-* Este tipo de contextos corresponde a un servicio o
aplicacin como por ejemplo el servicio de dictado, el
servicio de directorio telefnico, el servicio de acceso al
voicemail, entre otros. Se encuentra en este archivo ya

22
que el usuario en cualquier momento puede cambiar el
nmero de acceso al servicio desde el men Feature
Codes de la interfase Web del freePBX
ivr-* Contiene la definicin de un IVR. Al prefijo ivr- se le
agrega un nmero que identifica internamente al IVR
macro-* Obviamente las macros de apoyo necesarias para
simplificar el cdigo. Una macro muy importante es la
macro dialout-trunk que es donde se decide por
cul ruta saldr la llamada.
ext-* En estos contextos encontraremos cualquier cosa que
pueda ser considerada como un nmero de extensin.
Tanto extensiones que correspondan a telfonos o
endpoints, como extensiones que podramos denominar
virtuales ya que no corresponden a telfonos
directamente relacionados con un usuario; como es el
caso de cuartos de conferencia, colas, grupos de paging,
entre otros, que son accesibles como si fueran nmeros
de extensin.
Un contexto de especial inters es ext-local que es
donde se encuentran las extensiones internas o locales.
from-internal- Este contexto es referenciado desde el contexto from-
additional internal que es un punto de acceso para extensiones
locales definido en el archivo extensions.conf. Es
realmente quien realiza la mayor parte del trabajo al
incluir a vez otros contextos donde podran ser ubicadas
las extensiones destino.
from-trunk-* Aqu se definen las rutas entrantes.
outrt-* Aqu se definen las rutas salientes
outbound-allroutes Aqu se enlistan todos los contextos que corresponden a
rutas salientes. Es decir los que empiezan con outrt-

17.6 Algunos conocimientos tiles


A continuacin algunos ejemplos de preguntas comunes o trucos que siempre es
interesante conocer.

Cmo verificar si una variable se encuentra vaca?

No existe en el plan de marcado una funcin como isNull, isEmpty o cosa por el estilo
que nos permita verificar si una variable se encuentra vaca, pero podemos valernos de
la aplicacin LEN para este fin y comparar su salida contra cero. Veamos un ejemplo de
esto.

23
exten => s,1,GotoIf($[${LEN(${VARIABLE_TEST})} > 0]?destino)

Cmo obtener la fecha actual en el plan de marcado?

Para obtener la fecha actual podemos hacer uso de la variable ${EPOCH} que contiene
un timestamp del instante actual. Para traducir este timestamp a una fecha ms
humanamente legible podemos utilizar la funcin STRFTIME. Veamos un ejemplo de
esto tomado del archivo extensions.conf

[macro-record-enable]
exten => s,1,GotoIf($[${LEN(${BLINDTRANSFER})} > 0]?2:4)
exten => s,2,ResetCDR(w)
exten => s,3,StopMonitor()
exten => s,4,AGI(recordingcheck,${STRFTIME(${EPOCH},,%Y%m%d-
%H%M%S)},${UNIQUEID})
exten => s,5,Noop(No recording needed)
exten => s,999,MixMonitor(${CALLFILENAME}.wav)

Cmo proceder si quiero realizar cambios en el


extensions.conf?

No es recomendado cambiar el archivo extensions.conf debido a que freePBX


podra sobrescribirlo durante una operacin de actualizacin. Qu hacer entonces?

Existe un archivo llamado extensions_override_freepbx.conf que puede


ser utilizado para este fin. Si un nombre de contexto dentro de este archivo coincide con
uno definido en el extensions.conf entonces dicho contexto ser sobrescrito por
el contenido en extensions_override_freepbx.conf.

Por lo tanto si se quiere modificar un determinado contexto del archivo


extensions.conf lo recomendable es escribir nuestra nueva versin de dicho
contexto en el extensions_override_freepbx.conf.

24
Elastix Email System
Todo derecho que no lleve consigo un deber, no merece que se luche por
defenderlo
-- Mahatma Gandi

18.1 Arquitectura del sistema de email


Un sistema de correo electrnico est conformado por varios componentes. Los
principales son el MUA (Mail User Agent), el MTA (Mail Transfer Agent) y el MDA
(Mail Delivery Agent)

Componentes de un sistema de correo electrnico

25
El MUA es el programa con el que se genera el correo electrnico y generalmente
reside en el computador del cliente, por ejemplo el Microsoft Outlook, el Mozilla
Thunderbird, entre otros. Tambin existen situaciones en las que el MUA reside en el
mismo servidor, como es el caso de los servicios de Webmail u otros programas que
generan correos electrnicos como los sistemas de Voicemail y de Fax.

El MTA es quin, mediante protocolo SMTP, recibe el mensaje de parte del MUA y
decide a quin entregarlo. Si el correo est destinado a otro dominio, el MTA tratar de
contactarse con el servidor de correo electrnico de dicho dominio y le transferir el
mensaje mediante el mismo protocolo SMTP. Si el correo est destinado para un
dominio local, el MTA transferir internamente el mensaje al MDA quien a su vez ser
el encargado de colocarlo en el buzn respectivo.

Los usuarios pueden acceder a sus buzones de correo utilizando el MUA, pero mediante
los protocolos POP y/o IMAP, los cuales deben estar activos en el servidor de correos.

Elastix utiliza como MTA al Postfix y como MDA al Cyrus IMAP, quien tambin
provee los servicios de POP e IMAP. As mismo, con el Elastix viene por defecto una
interfaz de webmail llamada RoundCube Mail, la misma que puede ser usada como
MUA.

18.2 Configurando el sistema de correo


electrnico de Elastix
Elastix facilita y simplifica las tareas de configuracin de un servidor de correos.
Utilizando la interfase Web administrativa se puede tener el servicio de correo
electrnico completamente funcional en unos cuantos minutos siguiendo el
procedimiento detallado a continuacin.

Primero se debe elegir el men Email y luego la opcin Domains, a continuacin


aparecer un listado de los dominios locales configurados. En Elastix el servicio de
correo electrnico es multi-dominio, por lo que se lo puede utilizar para recibir
mensajes para varios dominios diferentes. Inicialmente la lista estar en blanco.

26
Listado de dominios

Para crear un nuevo dominio se utiliza el botn Create Domain, con lo cual aparece
una nueva pantalla en la que se debe ingresar el nombre del nuevo dominio.

Creando un nuevo dominio

Luego se guarda la accin utilizando el botn Save y se retornar al listado de


dominios donde aparecer el que se acaba de crear.

El listado de dominios muestra ahora el dominio creado

El siguiente paso es crear las cuentas de correo electrnico. Para ello, en el mismo men
Email se debe elegir la opcin Accounts. En esta seccin aparecer una lista
desplegable donde se debe seleccionar el dominio con cuyas cuentas se trabajar y se
debe presionar el botn Show para mostrar las cuentas existentes en dicho dominio.

27
Listado de cuentas de email. An no se selecciona un dominio de la lista.

Para crear una cuenta nueva, se debe seleccionar el dominio en la lista desplegable y
luego utilizar el botn Create Account. Aparecer una pantalla donde se deben
ingresar los datos bsicos de la cuenta de correo.

Creando una nueva cuenta de correo electrnico

Una vez llenados todos los campos se procede a guardar la cuenta con el botn Save e
inmediatamente se retornar al listado de las cuentas creadas para el dominio
seleccionado anteriormente. Se debe repetir este procedimiento para crear todas las
cuentas de correo necesarias.

Cuentas de email para el dominio creado

Es importante resaltar el verdadero nombre de la cuenta creada. En el ejemplo anterior


se cre la direccin de correo info@elastix-book.org, sin embargo, como se puede ver
en el listado de las cuentas, el nombre real es info.elastix-book.org. ste es el nombre
de usuario o login que deber ser usado para acceder al buzn de la cuenta.

Este esquema se ha utilizado para poder implementar la caracterstica de multi-dominio,


puesto que de esta manera se permite que en el mismo servidor existan direcciones
como info@elastix-book.org e info@otro-dominio.com.

28
Si alguna de las cuentas de correo que han sido creadas ser utilizada en un cliente de
correo como Microsoft Outlook, Mozilla Thunderbird u otro similar, se le deber
indicar al servidor cuales son las direcciones de red a las que se les permitir enviar
correos hacia dominios que no han sido configurados como locales. Este proceso de
envo de correos a dominios externos se conoce como RELAY y para permitir nuevas
direcciones de red se debe elegir la opcin Relay en el men Email, aparecer un
listado de las direcciones que actualmente tienen el permiso mencionado.

Configuracin de las redes que pueden hacer RELAY

En esta lista se puede agregar las nuevas direcciones de red, una por lnea, asegurndose
de que se especifique la respectiva mscara de red. Tambin es importante recordar que
la direccin de localhost (127.0.0.1/32) deber estar siempre listada, de lo contrario se
pueden presentar problemas con ciertas funcionalidades de Elastix como voicemail, fax-
to-email, entre otras.

El siguiente paso es comprobar el funcionamiento del servicio, para ello se puede


utilizar una de las cuentas creadas y configurarla en un cliente de correo electrnico, sin
embargo la manera ms sencilla es utilizar la interface de webmail que viene incluida
con el Elastix llamada RoundCube WebMail. Para acceder a este servicio debemos
elegir la opcin Webmail del men Email e ingresar los datos de acceso de una de
las cuentas creadas anteriormente.

Ingreso al Webmail provisto a travs de RoundCube

29
Se debe tener cuidado respecto con el nombre de la cuenta y la respectiva clave. A
continuacin se debe usar el botn Login, con lo cual se acceder al buzn de entrada
de dicha cuenta.

Pantalla principal del Webmail

Por defecto, el RoundCube configura de manera incorrecta la identidad de la cuenta y


debe ser corregida antes de enviar mensajes, para esto se debe usar la opcin Personal
Settings del men que est situado en la parte superior derecha de la pantalla y luego
seleccionar la pestaa Identities, con lo cual aparecer lo siguiente:

Pantalla de configuracin de Identidades

Se puede observar que la direccin est en un formato incorrecto que incluye la palabra
@localhost lo cual debe ser cambiado. Al seleccionar la identidad actual
automticamente aparecer un formulario de edicin en el que podremos cambiar los
valores y escribir adecuadamente la direccin de correo electrnico.

30
Configuracin de parmetros

Se finaliza el procedimiento presionando el botn Save. Luego de esto se puede usar


la opcin E-Mail del men superior para regresar al buzn de entrada de la cuenta.
Para redactar un mensaje nuevo, se debe utilizar el cono de una hoja de papel con un
lpiz amarillo.

Para redactar un nuevo mensaje

El formulario par escribir un mensaje es bastante sencillo e intuitivo. Luego de redactar


el correo, se lo enva con el botn Send the message now que est en la parte inferior.

31
Escribiendo un nuevo email

Si se ha enviado el mensaje a otra cuenta del mismo dominio, se puede cerrar la sesin
actual e ingresar con la otra cuenta. Los mensajes nuevos en la bandeja de entrada lucen
as:

Nuevo mensaje en la bandeja de entrada

18.3 Configuraciones a bajo nivel


Como se mencion anteriormente, Elastix usa como MTA a Postfix que es un sistema
de correo electrnico sumamente potente, seguro y por sobre todo flexible para permitir
innumerables configuraciones avanzadas. Se puede obtener ms informacin acerca de
Postfix en el sitio Web oficial www.postfix.com, as mismo es comn utilizar un
buscador de Internet para encontrar documentacin respecto a configuraciones
especficas.

32
Una necesidad recurrente en sistemas de correo electrnico es la configuracin de un
Smart Relay, que consiste en indicarle al MTA (Postfix) que todos los mensajes que no
estn destinados a dominios locales se los enve a un servidor especfico que se
encargar a su vez de transferirlo a los servidores de destino. Esto es de gran utilidad
cuando el ISP (Proveedor de Servicios de Internet) ha restringido las conexiones SMTP
salientes y solo permite envos a traves de su propio servidor SMTP, algunas veces
llamado SMTP Gateway. En Postfix esta opcin se llama relayhost.

Postfix posee un archivo de configuracin principal llamado /etc/postfix/main.cf, en


el cual se especifican las diferentes opciones del mismo. Este archivo no muestra todas
las opciones, sino solamente las ms usuales y aquellas que han sido modificadas de su
valor por defecto. Para ver todas las opciones de configuracin actuales de Postfix se
debe utilizar el comando postconf, sin embargo, la salida es muy larga puesto que tiene
cerca de 525 opciones, por lo que se recomienda utilizarlo en conjunto con el comando
grep. Por ejemplo, para el caso del Smart Relay, se quiere verificar cual es el valor
actual de la opcin relayhost:

Ejecucin del comando postconf

Para cambiar una opcin del Postfix se debe editar el archivo /etc/postfix/main.cf y
buscar la opcin requerida, en caso de que no exista se la puede agregar. Se recomienda
que cuando se agrega una lnea se lo haga en la parte final del archivo pero antes de los
comentarios que dicen:

################################
#Ingresado por yb-webadmin

En el caso del ejemplo del Smart Relay, se configurar la opcin relayhost para que
tenga el valor smtp-gw.myisp.net, para ello se agregar la lnea:

relayhost = [smtp-gw.myisp.net]

33
Archivo /etc/postfix/main.cf

Luego de editado el archivo /etc/postfix/main.cf se debe aplicar los cambios


utilizando uno de los siguientes comandos:

# service postfix reload


# service postfix restart

18.4 Luchando contra el SPAM


Elastix tambin provee un filtro contra SPAM que, cuando est activado, verifica todos
los mensajes que ingresan al servidor de correos y les asigna un puntaje dependiendo de
ciertas caractersticas. Si el mensaje obtiene un puntaje superior a lo que se conoce
como Nivel de Rigurosidad, entonces el mensaje es marcado, es decir que se agregan
cabeceras indicando que es SPAM y tambin se le agrega en el asunto la palabra
[SPAM]

Es muy fcil configurar los clientes de correo para aplicar filtros y reglas que
redireccionen los SPAM a otras carpetas o incluso los eliminen.

Para activar esta caracterstica en el Elastix se debe elegir la opcin Antispam en el


men Email y seleccionar Active. En esta pantalla tambin se puede cambiar el
nivel de rigurosidad, se debe recordar que mientras ms bajo es el nmero escogido,
ms alta es la rigurosidad del filtro.

34
Configuracin de la rigurosidad del filtro anti-SPAM

No es recomendables especificar un nivel de rigurosidad menor a 3, puesto que se


incrementaran los casos de falsos positivos, que no son otra cosa que mensajes vlidos
que han sido catalogados como SPAM de manera errnea.

18.5 Instalando antivirus


En Elastix se podra instalar cualquier antivirus que trabaje con Postfix, para lo cual
habr que seguir las instrucciones provistas por el respectivo fabricante. A continuacin
se detalla el procedimiento para instala ClamAV que es un antivirus gratuito. Se
utilizar el paquete ClamSMTP para integrarlo con el Postfix.

Lo primero que hay que hacer es instalar el paquete rpm-build que permitir generar el
RPM del clamsmtp:

# yum install rpm-build

Luego de debe descargar la versin ms reciente del SRPM del clamsmtp desde el sitio
web http://www.inet.lt/clamsmtp/

# wget http://www.inet.lt/clamsmtp/clamsmtp-1.10-1.src.rpm

Generar el respectivo RPM, el paquete resultante ser almacenado en la carpeta


/usr/src/redhat/RPMS/i386/.

# rpmbuild --rebuild clamsmtp-1.10-1.src.rpm

Desde el sitio Web http://dag.wieers.com/rpm/packages/clamav/ se debe descargar las


versiones ms recientes de clamav, clamd y clamav-db para CentOS 5:

35
# wget http://dag.wieers.com/rpm/packages/clamav/clamav-0.92.1-
1.el5.rf.i386.rpm

# wget http://dag.wieers.com/rpm/packages/clamav/clamd-0.92.1-
1.el5.rf.i386.rpm

# wget http://dag.wieers.com/rpm/packages/clamav/clamav-db-0.92.1-
1.el5.rf.i386.rpm

Finalmente se deben instalar los 3 paquetes:

rpm -Uvh clamav-0.92.1-1.el5.rf.i386.rpm clamav-db-0.92.1-


1.el5.rf.i386.rpm /usr/src/redhat/RPMS/i386/clamsmtp-1.10-
1.i386.rpm

Se debe crear manualmente la carpeta /var/run/clamav/:

mkdir /var/run/clamav/

Editar el archivo de configuracin de /etc/clamsmtpd.conf y cambiar las siguientes


lneas:

ClamAddress: /var/run/clamav/clamd.sock
#User: clamav

Por estas dos:

ClamAddress: /tmp/clamd.sock et
User: clamav

Una vez instalado se debe iniciar los servicios del clamsmtp y clamd :

# service clamd start


# service clamsmtp start
# chkconfig level 3 clamd off
# chkconfig level 3 clamsmtp off

Luego hay que configurar el Postfix para que utilice el paquete instalado. Se debe editar
el archivo /etc/postfix/main.cf y agregar la siguiente lnea:

36
content_filter = scan:[127.0.0.1]:10025

Tambin se debe editar el archivo /etc/postfix/master.cf y agregar las siguientes


lneas:

# AV scan filter (used by content_filter)


scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
-o smtp_enforce_tls=no
# For injecting mail back into postfix from the filter
127.0.0.1:10026 inet n - n - 16 smtpd
-o content_filter=
-o
receive_override_options=no_unknown_recipient_checks,no_header_b
ody_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8

Y finalmente se debe reiniciar el servicio del Postfix:

# service postfix restart

37
Mensajera Instantnea
Nunca he encontrado una persona tan ignorante que no se pueda
aprender algo de ella
-- Galileo Galilei

Elastix basa su funcionalidad de mensajera instantnea en el software Openfire que


funciona en base al protocolo XMPP (originalmente conocido como Jabber).

19.1 Protocolo XMPP (Jabber)


El hecho de que se utilice XMPP en Elasix nos da una gran ventaja, debido a que
XMPP es un estndar y actualmente existen muchas aplicaciones cliente compatibles
con este protocolo. En resumen, tenemos muchas opciones al momento de escoger un
cliente de mensajera interna.

XMPP es un protocolo probado, abierto, extensible, generalmente aceptado, seguro y


basado en XML. Estas son algunas de las razones por las que fue escogido para formar
parte de Elastix.

No es el objetivo de este libro explicar el protocolo XMPP. Sin embargo, es


recomendable conocer un poco ms de l por lo que dejamos al lector con algunos
vnculos interesantes.

39
http://www.jabber.org Sitio Web oficial del protocolo XMPP
http://en.wikipedia.org/wiki/Jabber Pgina de Jabber en Wikipedia
http://www.jabberes.org Sitio Web en espaol

19.2 Openfire
Openfire es un completo sistema de mensajera instantnea que nos permite disponer de
un servicio de mensajera instantnea rico en caractersticas como transferencia de
archivos, mensajes broadcast, integracin con telefona, integracin con otros gateways
IM, entre otras.

Openfire se encuentra escrito en Java y su funcionalidad puede ser extendida en base a


plugins, los cuales pueden ser descargados del sitio Web del fabricante
(www.igniterealtime.org). Adems cuenta con una amigable interfase Web de
administracin que nos permite realizar las tareas administrativas de una manera
intuitiva.

Caractersticas destacables

A continuacin algunas de las caractersticas ms interesantes.

Interfase amigable de administracin Web


Funcionalidad expandible a travs de plugins
Posibilidad de integracin con Asterisk
Interaccin con otras redes de mensajera instantnea como Gtalk, Yahoo
Messenger, ICQ, entre otros
Soporte para mensajes broadcast
Transferencia de archivos
Puede guardar histrico de conversaciones
Soporte para clustering
Los usuarios pueden ser obtenidos de una base de datos LDAP
Permite crear diferentes grupos de trabajo

19.3 Usando Openfire en Elastix


Openfire viene por omisin desactivado en Elastix. Esto se hace as debido a que si el
usuario no lo necesita activar explcitamente es preferible que quede apagado para que
no consuma recursos innecesariamente.

40
Activacin de Openfire

Si lo queremos activar debemos dar clic en el vnculo que se muestra en la siguiente


figura.

Pantalla de activacin de Openfire

Lo primero que veremos es una pantalla donde se nos pide escoger un idioma.

Pantalla de seleccin de idioma en configurador de Openfire

Luego debemos especificar el nombre de dominio del servidor. Esto debera ser lo
mismo que se configur en los parmetros de red.

41
Configuracin de nombre de dominio en el configurador de Openfire

A continuacin escogemos la base de datos donde Openfire almacenar la configuracin


y la informacin que debe ir almacenando conforme su funcionamiento. Podemos usar
un motor de base de datos Standard (Ej. MySQL) o podemos usar una base de datos
embebida que trae Openfire y que nos facilita las tareas de configuracin si es que no
vemos ninguna ventaja en usar un motor Standard.

En la mayora de los casos es conveniente elegir la base de datos embebida.

42
A continuacin configuramos dnde se almacenarn los usuarios de Openfire. Una
opcin muy interesante aqu es el soporte LDAP.

Configuracin del sistema de almacenamiento de usuarios de Openfire

Para terminar configuramos la cuenta de administracin de Openfire. Con esta cuenta


podremos ingresar a la interfaz Web de Openfire y administrar sus parmetros de
funcionamiento.

43
Configuracin de cuenta de administrador

Interfaz Web de administracin de Openfire

Una vez activado Openfire ya podemos ingresar a la interfase de administracin, crear


algunos usuarios y comenzar a usar mensajera instantnea en Elastix. Lo primero que
haremos ser ingresar a la interfase como administrador usando la clave configurada
previamente.

44
Ingreso a la consola de administracin de Openfire

Una vez dentro lo primero que veremos ser una pantalla similar a la siguiente.

Pantalla inicial en la interfase Web de administracin de Openfire

Casi lo primero que querremos hacer ser crear un nuevo usuario de mensajera
instantnea. Esto lo podemos hacer en el men Users/Groups -> Create New User.
Los parmetros a ingresar son bastante intuitivos y se muestra un ejemplo en la
siguiente figura.

45
Creando un nuevo usuario de mensajera instantnea

Una vez creado el usuario ya ste se puede registrar desde su cliente de IM.

Integracin de Openfire con Asterisk

Openfire cuenta con un plugin que nos permite integracin con Asterisk.

Gracias a este plugin podemos efectuar algunas tareas de interaccin telefnica desde el
cliente de mensajera como por ejemplo generar una llamada, ser notificado cuando una
llamada llega al telfono o incluso poder ver si otro contacto se encuentra en medio de
una llamada telefnica. Es por esto que el cliente de mensajera no puede ser cualquiera
para que la integracin sea visible por el usuario. El plug-in funciona con el software de
mensajera llamado Spark, el cual tambin puede ser descargado gratuitamente desde el
sitio Web de Openfire.

El plugin para integracin con Asterisk recibe el nombre de Asterisk-IM y su


instalacin es muy sencilla. Nos dirigimos al men Plugins -> Available Plugins y
damos clic sobre el botn verde a la derecha de la fila correspondiente al plugin
Asterisk-IM. En unos segundos estar activo.

46
Instalacin del plugin Asterisk-IM desde la interfase de administracin de Openfire

Si el plugin se instal correctamente veremos aparecer automticamente un nuevo men


llamado Asterisk-IM. Desde aqu podremos configurar la integracin de Openfire con
Asterisk.

Configuracin del plugin Asterisk-IM

Openfire se integra con Asterisk a travs de AMI. Por lo tanto, antes de configurar el
plugin Asterisk-IM debemos haber creado un usuario AMI para este fin, pues en algn
momento de la configuracin vamos a necesitar ingresar estos datos. Recordemos que
los usuarios AMI se crean en el archivo /etc/asterisk/manager.conf.
Tambin podramos utilizar el usuario que viene creado por omisin en Elastix. Es
decir, el usuario admin, con clave elastix456

En todo caso para crear un nuevo usuario AMI podramos agregar las siguientes lneas
al manager.conf

47
[openfire]
secret = clavesecreta
displayconnects = yes
read = system,call,log,verbose,agent,user,config,dtmf
write = system,call,agent,user,config,command

Bueno, dicho lo anterior, iniciemos la configuracin del plugin. Comencemos por


habilitar el plugin seleccionando la opcin Enabled.

En la seccin Configure Phone Manager encontraremos algunos campos para


configurar. No es necesario llenarlos todos, sin embargo es importante llenar el campo
Asterisk Context con la palabra default. Este campo indica el contexto desde el cual
se generarn las llamadas telefnicas desde el cliente de mensajera instantnea.

Hasta ahora nuestra configuracin debe estar como la mostrada en la siguiente figura.

Avance de la configuracin del plugin Asterisk-IM

Ahora damos clic donde dice Add Server para aadir a nuestro servidor Asterisk.

Aqu es donde ingresamos los datos de la cuenta AMI de la que hablamos


anteriormente, es decir usuario y clave.

El parmetro Port debe llenarse con 5038, el cual es el puerto AMI por omisin.
Supongo que se acordaban, verdad?. En Server Name podemos poner cualquier
nombre que nos sirva para recordar al servidor y los dems parmetros son algo obvios.

48
Configuracin de servidor AMI

Finalmente tendremos nuestra configuracin debe lucir parecida a esta:

Final de la configuracin general del plugin Asterisk-IM

Bueno, hemos terminado de realizar la configuracin general del plugin pero nuestro
trabajo no ha terminado aqu, no no. Aun debemos mapear o relacionar los usuarios de
Openfire con las extensiones telefnicas creadas en Elastix.

Esto es lgico porque no existe manera de que Openfire sepa qu usuario de mensajera
instantnea usa una extensin telefnica determinada. Por esto se lo debemos decir
explcitamente en el men Asterisk IM -> Phone Mappings.

49
Mapeo de usuarios de Openfire a extensiones de telefona

Listo, una vez mapeadas las cuentas necesarias ya tendremos mensajera instantnea
integrada con telefona!

50
Fax en Elastix
El aspecto ms triste de la vida actual es que la ciencia gana en
conocimiento ms rpidamente que la sociedad en sabidura
-- Isaac Asimov

20.1 Hylafax e IAXModem


Elastix usa una particular combinacin de software para el manejo de documentos de
fax. En esta combinacin hay dos paquetes de software que destacan como Hylafax e
IAXModem. Los dos interactan entre s de tal manera que Asterisk puede recibir un
documento de FAX y enviarlo a una extensin IAX virtual donde reside IAXModem,
quien a su vez lo remite a Hylafax quien finalmente convierte el audio correspondiente
al FAX en una imagen.

Elastix aade a esta combinacin una intuitiva interfase Web de administracin donde
es posible configurar la caracterstica fax2email que nos permite que los documentos de
fax lleguen a direcciones de correo electrnico en formato PDF.

Hylafax

51
Hylafax es un popular servidor de fax que funciona sobre Linux. Segn su propio sitio
Web HylaFAX is an enterprise-class system for sending and receiving facsimiles as
well as for sending alpha-numeric pages.

Con Hylafax podemos recibir un alto volumen de documentos de fax sin problemas.

La arquitectura del software es cliente-servidor. Es decir que Hylafax abre un puerto de


red por donde escucha peticiones de clientes. Estos clientes pueden residir en mquinas
remotas desde donde pueden enviar faxes. Suena bien no?

Quiere decir que desde un lugar remoto me puedo conectar a mi servidor Elastix y
enviar como fax un documento de texto, PDF, imagen, etc, desde una aplicacin cliente.

Hay algunas aplicaciones cliente interesantes entre ellas se encuentra Winprint HylaFAX
que aade soporte para enviar faxes a travs del cuadro de dilogo de impresin que
usan las aplicaciones Windows. De esta manera enviar un fax es tan sencillo como
imprimir un documento.

IAXModem

Debido a que HylaFax se puede comunicar con modems y Asterisk con extensiones
IAX, necesitamos algn pegamento para unir ambas cosas y que puedan funcionar
juntas. Ese pegamento es IAXModem.

IAXModem es un paquete de software que simula ser una extensin IAX por el lado de
Asterisk y por el lado de HylaFax simula ser un modem serial. Es decir que incluso se
registra como una extensin IAX con su respectivo usuario y clave.

Como es de suponer, este telfono virtual, que simula ser el IAXModem, se ejecuta en
el mismo servidor Elastix y por tanto se conectar desde localhost (la direccin IP
127.0.0.1). Es fcil verificar si tenemos una extensin IAXModem conectada desde la
consola del CLI pues basta con examinar si existe alguna extensin IAX ejecutndose
desde localhost.

52
elastix*CLI> iax2 show peers
Name/Username Host Mask Port Status
620 127.0.0.1 (D) 255.255.255.255 40001 OK (2 ms)
660 (Unspecified) (D) 255.255.255.255 0 UNKNOWN
661 192.168.1.136 (D) 255.255.255.255 4569 OK (2 ms)
662 127.0.0.1 (D) 255.255.255.255 40000 OK (3 ms)
709 (Unspecified) (D) 255.255.255.255 0 UNKNOWN
712 192.168.1.126 (D) 255.255.255.255 4569 OK (5 ms)
7214 (Unspecified) (D) 255.255.255.255 0 UNKNOWN
7213 (Unspecified) (D) 255.255.255.255 0 UNKNOWN
723 (Unspecified) (D) 255.255.255.255 0 UNKNOWN
869 (Unspecified) (D) 255.255.255.255 0 UNKNOWN
966 (Unspecified) (D) 255.255.255.255 0 OK (9 ms)
964 (Unspecified) (D) 255.255.255.255 0 UNKNOWN
863 192.168.1.233 (D) 255.255.255.255 4569 OK (9 ms)

De la salida anterior podramos concluir que las extensiones 620 y 662 son extensiones
de FAX manejadas por IAXModem.

20.2 Configuracin de Fax en la interfase


Web de Elastix

Listado de Fax Virtual

La opcin Listado de Fax Virtual del Men FAX del Elastix nos permite verificar el
listado de todos los faxes virtuales, donde se muestra el estado de cada uno.

Listado de faxes virtuales

Adems al dar clic sobre el nombre del fax virtual podemos ver los datos del mismo:

53
Visualizacin de nueva extensin virtual de fax

En la parte superior se encuentran 2 botones, el primer botn Editar nos permite editar
los datos del fax virtual.

Y el segundo botn Eliminar nos permite eliminar el fax virtual.

Si procedemos a editar tendremos lo siguiente:

Edicin de fax virtual

Una vez modifiquemos los valores, damos clic sobre el botn Aplicar Cambios para
guardar los cambios o sobre Cancelar para regresar sin guardar.

Nuevo Fax Virtual

La opcin Nuevo Fax Virtual del Men FAX del Elastix nos permite crear un
nuevo fax virtual. Previamente debe haberse creado la extensin de fax de tipo IAX,
para mayor informacin acerca de como crear una extensin dirjase a Creacin de
nueva extensin.

54
Formulario de creacin de una nueva extensin de fax virtual

Para crear un nuevo fax virtual ingrese nombre, email, extensin y clave secreta para el
fax virtual, estos son campos requeridos. Adems de esto existen 2 campos adicionales
que son el nombre y nmero del Caller ID. Una vez ingresados estos datos de clic en el
botn Guardar para ingresar el nuevo fax virtual o Cancelar para salir sin guardar.

Note que la extensin del fax virtual ser usada para recibir un fax.

Los datos a ingresar se describen a continuacin:

Nombre Descripcin
Nombre de Fax Virtual Nombre para identificar el fax virtual
Extensin Fax (IAX) Extensin usada como servicio de fax. Esta
extensin debe haber sido previamente
creada como tipo IAX en el mdulo
Extensiones del Men Configuracin
PBX
Email Destino Email al cual se enviarn notificaciones por
parte de la central de los faxes recibidos y de
los errores en caso de haberlos
Secreto (IAX) Debe ser la misma que la ingresada al crear
la extensin de fax en el men de
Configuracin PBX
Nombre Caller ID El nombre de quien llama. Este campo no es
obligatorio, si no se llena quien reciba un fax
de esta extensin no podr ver el nombre
Nmero Caller ID Nmero de quien llama. Al igual que el
anterior no es obligatorio, y si no se llena
quien reciba el fax no podr ver el nmero.

Fax Master

55
La opcin Fax Master del Men FAX del Elastix nos permite ingresar la direccin
de email del administrador del Fax al cual le llegarn las notificaciones de los mensajes
recibidos, errores y la actividad del Servidor de Fax.

Configuracin del Fax Master

Proceda a ingresar el email del administrador de fax y luego de clic en el botn Aplicar
Cambios.

Clientes de Fax

La opcin Clientes de Fax del Men FAX del Elastix nos permite ingresar las IPs
que tendrn permiso para enviar faxes por medio de Elastix.

Configuracin de IPs de clientes de fax

Proceda a ingresar las IPs, una IP por fila y luego de clic en el botn Aplicar
Cambios.

Se recomienda ingresar la IP 127.0.0.1 y localhost en la configuracin debido a que


algunos procesos pueden necesitarlas.

Visor de Fax

La opcin Visor de Fax del Men Fax del Elastix nos permite visualizar un listado
con el detalle de las faxes recibidos.

56
Visor de faxes. Si se da clic en alguno se lo visualiza en formato PDF.

Adems tenemos la opcin de descargar el fax en formato PDF, dando clic sobre el
archivo deseado de la lista de faxes recibidos.

Nombre Descripcin
Nombre de Compaa Nombre de la compaa que enva el fax
Fax de Compaa Nmero de Fax de la compaa que enva
el fax
Fecha de Fax Fecha de envo del fax

20.3 Enviando un FAX desde una estacin de


trabajo
Una gran ventaja del esquema de FAX de Elastix es que permitir a los usuarios enviar
documentos de FAX desde la misma computadora, eliminando la necesidad de imprimir
el documento y pasarlo a travs de la maquinita de FAX.

Lo anterior es posible hacerlo incluso desde la misma aplicacin en la que se genera el


documento, como el software de procesador de texto u hoja de clculo. Para esto
usaremos un programa que simular ser una impresora. Es decir que podemos enviar a
imprimir a esta impresora virtual cualquier documento y este en lugar de imprimirse se
enviar por FAX. Sin duda esto aadir comodidad a los usuarios y nos proporcionar
un inherente ahorro de papel que siempre viene bien.

Veamos qu hacer para estaciones de trabajo con sistema operativo Windows que puede
ser el caso ms comn.

Lo primero que debemos hacer es descargar el software llamado WinPrint HylaFAX y


esto lo podemos hacer desde la pgina del proyecto ubicada en
http://winprinthylafax.sourceforge.net

Configurar WinPrint HylaFAX es una tarea que podramos dividir en dos partes. La
primera es aadir una nueva impresora y la segunda es configurar los parmetros del
servidor HylaFAX.

57
Comencemos por aadir la nueva impresora. Para esto debemos seguir una serie de
pasos que se relatan a continuacin.

1) Debemos ir al panel de control y aadir una nueva impresora. En el primer cuadro de


dilogo hay que escoger que se trata de una impresora local pero des-seleccionar donde
dice que se detecte la impresora con plug-n-play ya que no se trata de una impresora
real.

2) Luego aparecer una nueva ventana que nos preguntar a qu puerto se encuentra
conectada la impresora y debemos crear un nuevo puerto del tipo Winprint Hylafax

Configurando WinPrint HylaFAX

3) A continuacin se nos preguntar el nombre del puerto. Podemos poner cualquier


identificador aqu pero el nombre por omisin est bien.

4) Una ventana aparecer pidindonos especificar el tipo de impresora. Podemos


escoger aqu cualquier impresora Postscript. El fabricante recomienda escoger Apple
LaserWriter 12/640 PS

5) El resto de pasos son triviales y terminaremos con la configuracin de la nueva


impresora. Lo nico importante es no elegir compartir esta impresora pues ya sabemos
que no se trata de una impresora.

58
Hemos terminado con la primera parte, ahora configuremos los parmetros del servidor
HylaFAX que reside en nuestro Elastix.

1) En el panel de control damos clic derecho en la impresora que acabamos de crear y


escogemos Propiedades. All nos aparecer una ventana con varias pestaas, debemos
elegir la que dice Puertos.

2) En esta nueva ventana debemos configurar el puerto que aparece sealado por
omisin. Aparecer un cuadro de dilogo donde debemos ingresar los datos de nuestro
servidor HylaFAX. Debemos configurar aqu la direccin IP de nuestro servidor Elastix.

Configuracin de los parmetros del servidor HylaFAX

3) No debemos olvidar que para que HylaFAX permita a este computador enviar un
FAX el IP del computador debe estar autorizada por HylaFAX y esto lo podemos
configurar desde la interfase Web del Elastix en el men FAX -> Clientes de FAX.
Ya vimos cmo configurar esto antes, en este mismo captulo.

Finalmente nos encontramos listos para enviar un FAX desde cualquier aplicacin como
si enviramos el documento a imprimir. Al enviar el trabajo a la impresora virtual nos
aparecer un cuadro de dialogo donde debemos ingresar el nmero de telfono al que
queremos enviar el FAX.

59
20.4 Procesamiento interno de un documento
de FAX en Elastix
Algunas cosas interesantes suceden internamente en Elastix desde el momento en que
llega una transmisin de FAX. El esquema de manejo de FAX en Elastix ha demostrado
ser una solucin robusta y escalable pero que involucra algunos componentes y es
importante conocer como se relacionan entre s.

Desde el momento en que un usuario marca a nuestro Elastix con la intencin de


enviarnos un FAX sucede ms o menos lo siguiente.

1) Asterisk contesta como su fuera una llamada normal y el usuario selecciona la


extensin de FAX
2) El usuario sin saberlo est marcando una extensin IAX controlada por el
software IAXmodem que simula ser un telfono IAX y contesta la llamada
3) IAXmodem mantiene la llamada y todo el stream de FAX lo escribe en un
dispositivo virtual ubicado en /var/spool/hylafax/FIFO.tty* que simula ser un
MODEM
4) Por otro lado Hylafax se encuentra escuchando el mismo dispositivo pensando
que en realidad se trata de un MODEM y de esta manera recibe la seal de FAX
5) Internamente Hylafax transforma este stream a un formato humanamente legible
llamado PostScript
6) Este archivo PostScript es pasado a una aplicacin que llamaremos Emailer
Script quien a su vez transforma este archivo a un formato ms legible, como el
formato PDF. Luego construye un mensaje de correo electrnico y enva el PDF
adjunto.

Antes de enviar el email el Emailer Script consulta una base de datos interna de Elastix
para recabar informacin del cuerpo del mensaje y el destinatario del email ya que como
recordaremos esto fue configurado desde la interfase Web y fue almacenado en esta
base de datos interna.

Para hacer ms grfico el procesamiento interno del FAX observemos la siguiente


figura.

60
Comunicacin entre los componentes del sistema de FAX en Elastix

20.5 Protocolo T.38


Si vamos a trabajar con tecnologas de FAX en algn momento nos toparemos con el
trmino T.38. El protocolo T.38 es un protocolo recomendado por la ITU que sirve para
transportar FAX sobre redes IP.

Si nos ponemos a pensar, una manera de transportar fax sobre redes IP sera transportar
la seal de FAX como si fuera audio o voz a travs de los protocolos de Voz sobre IP ya
existentes en la actualidad, y en efecto esta es una manera de hacerlo. Sin embargo, esta
no es la manera ms adecuada en algunos casos pues, a diferencia de la voz, el FAX es
mucho ms sensible a errores de transmisin y por ejemplo una red con un nivel de
prdida de paquetes que pueda sonar aceptable para la transmisin de voz es probable
que resulte en inaceptable para la transmisin de FAX pues el documento podra llegar
ilegible o simplemente no llegar.

61
El protocolo T.38 es quien resuelve estos problemas usando algunas tcnicas
interesantes como la redundancia de paquetes. Es decir que por cada paquete enviado a
travs de la red es probable que se enven algunas copias por si alguno se pierde en el
camino.

No entraremos en ms detalles acerca de T.38 sino ms bien nos dedicaremos a explicar


el soporte actual que existe de T.38 en Asterisk ya que es un tema frecuente de
discusin. En caso de que el lector sienta curiosidad por conocer ms detalles de este
protocolo le recomendamos visitar http://en.wikipedia.org/wiki/T.38

A partir de Asterisk 1.4 se introdujo soporte limitado para el protocolo T.38. Decimos
limitado porque Asterisk no es capaz de terminar una transmisin T.38, es ms no esta
en capacidad de entender el protocolo. Lo nico que puede hacer Asterisk con T.38 es
pasar la comunicacin de un lado a otro. O sea que T.38 puede pasar a travs de
Asterisk y a esta modalidad de funcionamiento se le llama passthrough.

En su versin 1.6, Asterisk aadir ms soporte para T.38 y estar en la capacidad de


entender el protocolo un poco ms y por lo tanto hacer algunas cosas interesantes. Sin
embargo el soporte no ser completo aun.

Para aquellos que requieren soporte T.38 y no pueden esperar a nuevas versiones de
Asterisk les dejamos con la noticia de que existen soluciones comerciales para aadir
soporte T.38 como la ofrecida por la empresa http://www.attractel.com

20.6 AvantFAX, un GUI alternativo


Muchas sugerencias han existido en los foros de Elastix acerca de soportar AvantFAX
en la distro. AvantFAX nos ofrece una interfase Web para administrar faxes usando
HylaFAX.

En busca de una solucin recientemente hemos lanzado un instalador RPM de


AvantFAX que puede ser descargado del repositorio de Extras de Elastix.

Para ms informacin de AvantFAX visite http://www.avantfax.com

62
Sintetizacin y reconocimiento
de voz
Si he logrado ver ms lejos, ha sido porque he subido a hombros de
gigantes
-- Isaac Newton

Las tecnologas de sintetizacin y reconocimiento de voz han sido ideas algo futuristas
hasta hace relativamente poco tiempo. En la actualidad es posible usar estas tecnologas
en la prctica con resultados muy interesantes.

En Elastix se puede habilitar el soporte para ambos conceptos permitindonos con esto
obtener un Servidor de Comunicaciones de vanguardia.

21.1 Sintetizacin de voz


Sintetizacin de voz es la tecnologa que permite convertir el texto a audio. Tambin se
conoce como TTS debido al trmino Text-To-Speech (texto-a-habla en ingls).

Auque parezca inslito su historia se remonta a algunos siglos atrs cuando se intent
sintetizar voz mecnicamente con aparatos que simulaban el aparato vocal humano. En
ese entonces no fueron ms que juguetes. Ya en la dcada de los 30 laboratorios Bell

63
desarrollaron el famoso VOCODER, que era al mismo tiempo un aparato de
reconocimiento de voz que utilizaba electrnica y que poda producir sonido inteligible.
Su finalidad original era la de reconocer voz para luego poder transmitirla de manera
codificada por un medio y sintetizarla en el otro extremo.

El uso de la computacin de all en adelante hizo que fuera posible desarrollar


tecnologa de sintetizacin de voz que fuera prctica y que pudiera estar al alcance de
cualquiera que pudiera pagar por ella. Debido a que en un principio muchas de estas
tecnologas desarrolladas fueron propietarias y su oferta limitada sus precios fueron
elevados y orientados a grandes empresas o bancos.

Actualmente ya existen alternativas de sintetizacin de voz de relativo bajo costo e


inclusive de libre uso como Festival o FreeTTS. En breve explicaremos cmo hacer uso
del motor de sintetizacin de voz Festival desde nuestro servidor Elastix.

Veamos un poco de cmo funciona la tcnica de sintetizacin de voz moderna como la


usada por Festival.

Podemos dividir al proceso de convertir el texto a voz en 3 partes

Anlisis de texto

Esta etapa es la que se encarga de normalizar el texto, es decir traducirlo a un formato


de palabras estndar y por lo tanto ms entendible para ser manipulado en la siguiente
etapa. El texto crudo o sin manipular puede contener palabras mezcladas con nmeros o
abreviaciones que no son aptas para la conversin a audio. Por ejemplo, una frase como
Me debes $100 mil dlares y debes pagarme el 10% ahora se podra escribir como
Me debes cien mil dlares y debes pagarme el diez por ciento ahora para fines de
sintetizarla a voz.

Nota: El ejemplo anterior tiene la finalidad de ilustrar el concepto de


normalizacin del texto, no necesariamente muestra el lenguaje real de un texto
normalizado.

Anlisis lingstico

Esta etapa es la que se encarga de convertir el texto normalizado en fonemas. Los


fonemas son las unidades fonticas que componen un lenguaje hablado. Son sonidos
nicos y diferentes entre s.

Una palabra est compuesta por uno o varios fonemas.

64
Para traducir el texto normalizado en fonemas hace falta bastante trabajo pues se
requiere entre otras cosas conocer la entonacin de la palabra pues no es lo mismo si se
trata de un contexto de pregunta o exclamacin.

Nota: En el caso de Festival se trabaja con difonos ms que con fonemas.

Generacin de audio

Una vez que tenemos el texto en una representacin de fonemas nos falta traducir esos
fonemas a audio. Habr que unir o concatenar el audio correspondiente a cada fonema e
intercalarlo con los silencios que van entre las palabras.

Sin embargo, no es tan sencillo como suena pues el simple hecho de unir los fonemas
audibles puede resultar en un audio de baja calidad que suene robtico o inhumano.

Existen algunas tcnicas o algoritmos que se pueden usar para resolver este problema y
hacer que la transicin entre fonemas sea lo ms suave posible. El algoritmo por
omisin usado por Festival se llama Residual Excited Linear Prediction o simplemente
RELP o RE-LPC. Sin embargo existen otros algoritmos que pueden ser utilizados por
Festival como es el caso de MBROLA.

Nota: La tcnica de concatenar fonemas no es la nica para generar audio a


partir de fonemas pero es la que usa Festival. Para ser ms especficos Festival
usa una tcnica de concatenacin de difonos.

Conversin de texto a voz con Festival

Festival

Ya hemos visto algo del funcionamiento de Festival pues ha sido tomada como ejemplo
para ilustrar el proceso de conversin de texto a voz en el apartado pasado.

65
Festival es un sistema de sintetizacin de voz desarrollado por la Universidad de
Edimburgo utilizando lenguaje de programacin C++.

Festival puede soportar varios lenguajes, viene instalado por omisin en Elastix y
podemos utilizarlo desde Asterisk; lo que lo convierte en una alternativa atractiva si
estamos pensando en hacer sintetizacin de voz.

Festival puede trabajar como cliente y como servidor. Como cliente puede trabajar en
dos modos: lnea de comandos y tts (text-to-speech).

Modo lnea de comandos

En el modo lnea de comandos Festival ejecutar un intrprete de comandos. Para entrar


a este modo basta ejecutar el comando festival sin opciones.

[root@elastix ~]# festival


Festival Speech Synthesis System 1.95:beta July 2004
Copyright (C) University of Edinburgh, 1996-2004. All rights
reserved.
For details type `(festival_warranty)'
festival>

Como vemos obtenemos un prompt que dice festival> y desde el cual se pueden
ejecutar comandos de Festival en formato similar al del editor de texto Emacs. Para ms
informacin se puede tipear la palabra help.

Bueno, ya que estamos en la lnea de comandos aprovechemos para reproducir nuestro


primer audio sintetizado en la tarjeta de sonidos. Obviamente tendremos que conectar
unos audfonos all para escuchar algo.

festival> (SayText "Hola Mundo")


#<Utterance 0xb7132578>

Tambin podramos sintetizar el contenido entero de un archivo de texto desde la lnea


de comandos.

festival> (tts "content.txt" nil)


nil
festival> (quit)

66
Finalmente salimos de la lnea de comandos con el comando (quit). Tambin
podemos salir con la combinacin de teclas Ctrl+D.

Modo tts

En el modo tts podemos sintetizar texto a audio sin entrar en la lnea de comandos.
Para activar el modo tts simplemente hay que pasar el parmetro --tts cuando se
ejecuta el comando festival.

Por ejemplo, para sintetizar un archivo de texto podemos ejecutar el siguiente comando
en modo tts:

[root@elastix ~]# festival --tts archivo1.txt

Si queremos ejecutar un texto arbitrario sin utilizar un archivo de por medio podemos
hacerlo mediante una invocacin con una tubera (pipe).

[root@elastix ~]# echo Hola Mundo, este es un ejemplo |


festival --tts

Por omisin Festival tratar de enviar el audio al dispositivo o tarjeta de sonido, pero
muchas veces no es prctico hacerlo de esta manera por lo que veremos cmo enviar la
salida de audio a un archivo para escucharlo despus.

Para realizar lo anterior Festival nos proporciona un comando para facilitar las cosas
llamado text2wave. El uso del comando text2wave es sumamente sencillo.

[root@elastix ~]# text2wave archivo.txt -o archivo.wav

Donde archivo.txt contiene el texto a ser sintetizado y archivo.wav representa


el archivo de audio donde se guardar la salida.

Cmo interactuar con Festival desde el plan de marcado

Asterisk nos provee de una aplicacin de plan de marcado llamada Festival. Esta
aplicacin funciona internamente conectndose a un servidor Festival a travs de la red
y reproduciendo la salida de audio en el canal en uso (o corriente) en el plan de
marcado.

67
Esto nos brinda la flexibilidad de ejecutar un servidor Festival inclusive en un equipo
diferente al servidor Elastix. En algunos casos esto es conveniente si nos encontramos
en un ambiente con alto volumen de llamadas y queremos descongestionar la carga del
servidor. Explicaremos ms adelante cmo ejecutar Festival como servidor de red.

La sintaxis de la aplicacin Festival es la siguiente.

Festival(text[|intkeys])

Donde text es el texto que se desea sintetizar (y reproducir) e intkeys es un


parmetro opcional que especifica las teclas telefnicas que pueden interrumpir la
ejecucin del comando. Si el parmetro intkeys toma el valor de any quiere decir
que el usuario puede interrumpir la ejecucin del comando con cualquier tecla.

Veamos un ejemplo de utilizacin de la aplicacin Festival en el plan de marcado.

exten => 5333,1,Answer


exten => 5333,n,Festival('Hola, esto es un ejemplo de conversin
de texto a audio','any');
exten => 5333,n,Hangup()

Con el ejemplo anterior hemos creado una extensin 5333. Si se llama a esa extensin
escucharemos el mensaje tipeado.

Ejecutando Festival como servidor de red

Festival viene con un script llamado festival_server que sirve para arrancar
Festival como servidor de red. Por omisin levantar un servicio de red en el puerto
1314.

Para arrancar el servidor Festival debemos ejecutar el siguiente comando.

[root@elastix ~]# festival_server &

Nota: Una manera sencilla de hacer que este comando se ejecute cada vez que
el servidor Elastix se reinicie es incluyndolo en el archivo /etc/rc.local

68
Sin embargo, antes de iniciar el servidor Festival debemos hacer unas modificaciones a
la configuracin de Festival pues Asterisk necesita que el servidor Festival entienda
cierto comando y que le enve audio en un formato particular.

Para configurar Festival para que funcione adecuadamente con Asterisk debemos editar
el archivo festival.scm ubicado en /usr/share/festival/

(define (tts_textasterisk string mode)


"(tts_textasterisk STRING MODE)
Apply tts to STRING. This function is specifically designed for
use in server mode so a single function call may synthesize the
string.
This function name may be added to the server safe functions."
(let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string)))))
(utt.wave.resample wholeutt 8000)
(utt.wave.rescale wholeutt 5)
(utt.send.wave.client wholeutt)))

Las podemos aadir cerca del inicio del archivo luego de los comentarios iniciales.

Luego de esto podemos arrancar Festival como servidor (como ya explicamos antes) y
reiniciar Asterisk. Finalmente marcamos la extensin 5333 y listo!

En caso de que el archivo festival.scm no haya sido modificado veremos un error


como el siguiente en la salida del CLI.

elastix*CLI> SIOD ERROR: unbound variable : tts_textasterisk

Por omisin todo debe funcionar bien. Sin embargo, es necesario explicar que los
parmetros de conexin de Asterisk con el servidor Festival se pueden modificar en el
archivo /etc/asterisk/festival.conf. Un cambio comn en este archivo es
cuando se desea ejecutar el servidor Festival en un servidor separado. Para esto
deberemos cambiar el parmetro host por el IP del equipo donde se encuentra
ejecutndose el servidor Festival.

Sintetizando voz desde la interfase Web de Elastix

Elastix viene equipado con una bonita interfase Web que nos permite sintetizar texto a
voz. Est basada en Festival y se puede encontrar en el men de Extras -> Texto a
Wav.

69
La salida puede obtenerse en formato wav o gsm y podra incluso servir para crear
promts de voz en caso.

Interfase Web para conversin de texto a wav

21.2 Reconocimiento de voz


Existes algunas definiciones de lo que es el reconocimiento de voz, por ejemplo se
define como el proceso en el un sistema computacional reconoce lo que un ser humano
le dice. Generalmente, este reconocimiento representa una orden que deber ejecutar el
computador.

El reconocimiento de voz, hoy en da tiene muchas aplicaciones que las vemos en los
telfonos celulares, en la domtica (o control de artefactos domsticos por medio de la
voz), procesadores de texto que reciben dictado, en los mbito de la salud existen
aplicaciones ms especficas para personas discapacitadas que le permiten abrir y cerrar
puertas, as como tambin en el mundo de la telefona hay implementaciones en las que
cuando se llama a una empresa, el sistema telefnico le pedir decir el nombre de la
persona con la que se desea hablar y el sistema reconocer el nombre que usted ha dicho
y lo redireccionar a la extensin deseada.

El trmino reconocimiento de voz es muchas veces utilizado para referirse al


reconocimiento del habla. El reconocimiento de voz se entiende como identificar una
voz en particular para un individuo. Esto se aplica a sistemas de seguridad que asocian
la voz con una persona.

En un sistema telefnico lo que se usa es el reconocimiento del habla. Un sistema muy


utilizado para sistemas telefnicos IP basados en Asterisk es LUMENVOX.

Lumenvox

70
LUMENVOX aunque usa algunos de los fundamentos del reconocimiento de voz, es
diferente ya que no trata de identificar a individuos, ms bien trata de identificar lo que
ste dice. La mayora de los sistemas de reconocimiento de frases palabras siguen el
siguiente procedimiento:

1. Cargar una lista de palabras para ser reconocidas. Esta lista de palabras se llama
gramtica.
2. El SRH carga el audio del altavoz. Este audio se representa como una forma de
onda, esencialmente la representacin matemtica del sonido.
3. El SRH compara la forma de onda a sus propios modelos acsticos. Estas son las
bases de datos que contienen informacin sobre las formas de onda de cada uno
de los sonidos y es lo que permite al sistema reconocer del habla.
4. El SRH comparan las palabras en la gramtica a los resultados obtenidos a partir
de su bsqueda de modelos acsticos.
5. Por ltimo, determina qu palabras en la gramtica de audio concuerda y
devuelve un resultado.

Instalando LumenVox en Elastix

Dividiremos el proceso de instalacin en algunas etapas.

Descargar e instalar LumenVox

1. El primer paso en el proceso de instalacin es bajar la llave GPG desde:


http://www.lumenvox.com/packages/FC6/i386/RPM-GPG-KEY-LumenVox.gpg

2. Crear el archivo llamado LumenVox.repo en /etc/yum.repos.d/

3. Editar el archivo e ingresar la siguiente informacin:

###################################################
[LumenVox]
name=LumenVox Products $basearch
baseurl=http://www.LumenVox.com/packages/EL5/i386/
#baseurl=http://www.LumenVox.com/packages/EL4/i386/
enabled=1
gpgcheck=0
###################################################

71
4. Grabar y cerrar el archivo

5. Desde la
lnea de comandos tipear yum install
LumenVoxLicenseServer

6. Luego tipear yum install LumenVoxSRE

Instalar la Licencia

1. Lo primero que hay que hacer es generar un archivo llamado Info.bts que guarda
informacin acerca de su sistema.
Para realizar esto es necesario ejecutar el siguiente comando:

/usr/bin/lv_license_manager -g path donde path es la ruta


completa del archivo server ID. Por ejemplo, si deseo crear el
archivo server ID en el directorio root/LumenVox, debera
tipear: /usr/bin/lv_license_manager -g /root/LumenVox/Info.bts

2. Cargar el archivo Info.bts y bajar la licencia

Para esto es necesario ir a http://www.lumenvox.com/customers/. Ingresar con


el usuario y clave respectivo.

Luego ir al Link View Licenses y veremos un listado de las licencias


disponibles inicialmente en estado Upload License. Hay que hacer clic en
Upload License y cargar el archivo Info.bts que generamos.

Una vez hecho esto el estado de licencia cambiar a Download License. Hacer
clic all y obtener la licencia que ser un archivo con nombre LicenseXXXX.bts
donde XXXX son cuatro dgitos.

3. Instalar la licencia.

Para esto hay que tipear el comando /usr/bin/lv_license_manager -


m Licensefile donde Licensefile es el archivo de la licencia que nos
descargamos en el paso anterior.

Verificar que la instalacion fue exitosa

72
1. Para verficar que la instalacin fue exitosa es necesario correr el comando ps
ax|grep -i LV, la salida de este comando nos debe mostrar si los procesos
lv_license_server y lv_sre_server est ejecutndose tal como se muestra a continuacin:

[root@elastix yum.repos.d]# ps ax|grep -i "LV"


2023 ? Ssl 0:07 lv_license_server -console
2118 ? Ssl 0:35 lv_sre_server -console
13956 pts/5 S+ 0:00 grep -i lv
[root@elastix yum.repos.d]#

Descargar e instalar el asterisk/lumenvox connection

1. Ir a http://www.lumenvox.com/customers/ e ingresar con el usuario y clave


respectivo.

2. Hacer click en Download.

3. Descargar el archivo etiquetado como Asterisk 1.4 Connector.

4. Extraer el archivo tar ejecutando tar -xzvf y el nombre del archivo descargado.

5. Esto crea un nuevo directorio, entrar en ese directorio y copiar el archivo


llamado res_speech_lumenvox.so en /usr/lib/asterisk/modules/.

6. Copie el archivo llamado lumenvox.conf en /etc/asterisk/

7. Modificar /etc/asterisk/modules.conf y asegurarse de que la lnea de preload =>


res_speech.so est all y aadir la lnea de load => res_speech_lumenvox.so

Probando LumenVox en Asterisk

1. Editar el archivo extensions_custom.conf y adicionar el siguiente contexto:

73
[lumenvox-test]
exten => 1234,1,Answer
exten => 1234,n,Wait(1)
exten => 1234,n,SpeechCreate
exten => 1234,n,SpeechActivateGrammar(llamar_extension)
exten => 1234,n,Set(TIMEOUT(response)=8)
exten => 1234,n,Background(custom/ivrventas3)
exten => 1234,n,SpeechBackground(beep)
exten => 1234,n,Verbose(1|Result was ${SPEECH_TEXT(0)})
exten => 1234,n,Macro(user-callerid,)
exten => 1234,n,Dial(SIP/${SPEECH_TEXT(0)})
exten => 1234,n,Hangup()

2. Adicionar la lnea include => lumenvox-test debajo del contexto from-internal-


custom.

3. Conectarse a Asterisk con asterisk -r

4. Tipear el comando reload

5. Probar marcarndo 1234

74
Desempeo y
dimensionamiento
Yo no hablo de venganzas ni perdones, el olvido es la nica venganza y
el nico perdn
-- Jorge Luis Borges

22.1 Desempeo de Elastix


El desempeo de un servidor Elastix es un asunto muy complejo de analizar. En muchos
casos interesa conocer los resultados y recomendaciones principalmente desde el punto
de vista de una PBX, es decir de desempeo de Asterisk, puesto que es uno de los
componentes ms populares.

En este captulo no haremos recomendaciones de hardware a utilizar pues esto hara que
la presente obra quedara desactualizada en muy corto tiempo ya que el hardware
evoluciona rpidamente. Ms bien explicaremos los factores que afectan el desempeo
en un servidor Elastix a nivel general.

Factores que afectan el desempeo de Elastix

75
Hay muchos factores que pueden afectar el desempeo de Elastix de alguna manera.
Aqu explicaremos los ms comunes.

Nmero de llamadas concurrentes

Sin duda este es un parmetro muy importante, el nmero de llamadas concurrentes


afecta directamente el consumo de CPU del servidor.

El siguiente es un grfico de pruebas realizadas (sin transcoding) en un computador con


un CPU de 2.2 GHz con 512 MB de RAM. Vemos que se han superado las 200
llamadas concurrentes con menos del 50% de CPU. En el computador se us Elastix
1.3.

Grfico CPU vs. Llamadas concurrentes

Transcoding

El Transcoding se da cuando por un lado la llamada llega con un codec determinado y


sucede que la llamada tiene que ir hacia un punto donde se utiliza otro codec distinto.
Por lo tanto, Asterisk que est en el medio tiene que hacer las veces de traductor para
que los dos puntos se entiendan. Esto es lo que se denomina transcoding.

El transcoding requiere de muchos clculos matemticos pues se est decodificando y


codificando informacin con algoritmos complejos y por lo tanto esta operacin
requiere mucho CPU.

76
Una llamada con transcoding puede tomar 4, 5, 10 o incluso ms veces ms CPU que
una llamada regular por lo que en escenarios con transcoding el desempeo se reduce
significativamente. Por lo tanto, siempre que se pueda se debe evitar usar codecs
distintos.

Openfire

Openfire es un software escrito en Java que hace un muy buen trabajo como un servidor
de Mensajera Instantnea. Sin embargo tambin es un gran consumidor de memoria.
Por lo tanto si no es realmente necesario y el servidor est limitado de recursos es mejor
dejarlo apagado.

Por omisin Openfire inicia apagado en Elastix.

Flash Operator Panel

En instalaciones grandes, cuando existe mucha actividad telefnica el FOP puede


comenzar a consumir recursos fuera de los niveles deseados. Esto es porque el FOP se
comunica con Asterisk a travs de ARI y por lo tanto se encuentra escuchando toda la
actividad telefnica a travs del puerto de red que levanta Asterisk para este fin. Cuanto
ms actividad, ms informacin tiene que procesar el FOP.

En instalaciones grandes, en caso de que el uso del FOP no sea requerido es mejor
apagarlo.

Herramientas

Hay algunas herramientas que nos permitirn analizar el rendimiento de nuestro


servidor Elastix.

top

Para hacer un anlisis breve de los servicios que nos estn consumiendo recursos basta
con ejecutar un comando top y ordenar su salida por consumo de memoria y tambin
por consumo de CPU. Para hacer lo primero debemos topear la letra M (Mayscula) y
para lo segundo la letra P.

En algunas ocasiones podemos observar el proceso java liderando las estadsticas de


consumo. Normalmente esto tiene que ver con Openfire debido a que se encuentra
implementado sobre java.

77
sipp

Sipp es una herramienta de cdigo abierto que sirve para generar trfico SIP. En otras
palabras nos servir para generar llamadas SIP hacia nuestro servidor Elastix mientras
tomamos muestras para entender cmo reaccionan los recursos del sistema (CPU,
memoria) en escenarios de altos volmenes de llamadas.

22.2 Dimensionamiento telefnico

Determinando el nmero de lneas telefnicas necesarias

Cuando a un ingeniero le encomiendan la tarea de planificar un nuevo proyecto


telefnico casi siempre el primer parmetro que necesita calcular es cuntas lneas se
necesitarn para satisfacer la demanda prevista?

En instalaciones grandes esto es importante puesto que no se quiere tener muchas ms


lneas de las necesarias pues esto podra significar un desperdicio de recursos y por otro
lado no se quiere pedir tan pocas que quedemos cortos y los usuarios consigan tono de
ocupado muy seguido.

El clculo por tanto debe basarse en criterios tcnicos y no ser tomado a la ligera.

En este apartado estudiaremos una aproximacin estadstica llamada modelo Erlang


para calcular cuntas lneas telefnicas necesitaremos en una instalacin determinada
para satisfacer una demanda prevista con cierta calidad.

Agner Krarup Erlang

Erlang fue un ingeniero y matemtico dans quien desarroll a principios del siglo 20
las tcnicas de Ingeniera de Trfico y Teora de Colas. No estudiaremos estos
conceptos aqu en detalle pero los exploraremos vagamente para darle al lector cierto
conocimiento bsico y prctico de estas tcnicas sin llegar al rigor matemtico que ellas
demandan. Estas importantes tcnicas nos permitirn dimensionar cuntas lneas
telefnicas necesitaremos en una instalacin.

La unidad Erlang

Antes de ir a las frmulas es necesario introducir un nuevo trmino llamado la unidad


Erlang. Un Erlang es una unidad adimensional comnmente utilizada para medir el
trfico telefnico por hora.

78
Tambin se puede decir que un Erlang representa la utilizacin continua de un circuito.
Es decir que 1 Erlang equivaldra a la utilizacin de un circuito continuamente durante
una hora en un lapso de una hora de tiempo o lo que es lo mismo que el circuito estuvo
siempre en uso. As mismo 0.5 Erlangs quiere decir que en el lapso de una hora el
circuito se utiliz solo 30 minutos.

Para calcular el trfico en Erlangs se puede proceder de la siguiente manera:

1. Encontrar el trfico total en horas: Es decir, sumar el tiempo de todas las


llamadas durante un lapso de tiempo cualquiera y convertir este valor a horas
2. Encontrar el trfico por unidad de tiempo (en horas): Es decir, dividir el
total anterior para el lapso de tiempo en horas

Algo confundido? Veamos un ejemplo para clarificar un poco ms las cosas:

Supongamos que en una empresa cualquiera entre las 9H00 y 12H00 de un da


determinado se realizaron 300 llamadas con un promedio de 6 minutos por llamada y se
quiere medir el trfico en Erlangs.

1. Trfico Total = Trfico en 3 horas = 300 x 6 = 1800 minutos = 1800 minutos /


60 minutos = 30 horas (quiere decir que se hablaron 30 horas en ese lapso de
tiempo)
2. Trfico por hora = Trfico Total / Lapso de Tiempo = 30 horas / 3 horas = 10
Erlangs

Hemos obtenido una medida de trfico de 10 Erlangs.

Modelos Erlang

Ahora s vamos a lo que nos interesa, o sea el clculo del dimensionamiento telefnico.

En esencia existen dos modelos en las teoras de Erlang que se utilizan mucho en
telefona y son el modelo B y el modelo C. En la presente obra estudiaremos el modelo
B pero recomendamos al lector recabar informacin del modelo C. El modelo C se
utiliza para calcular probabilidades en llamadas que entran a colas as que si el lector
est pensando en administrar un call center sera til que indagara en el modelo Erlang
C.

Erlang B

79
El modelo Erlang B es el ms comn y es el que usaremos en la mayora de escenarios
pues es el que se usa para determinar el nmero de lneas necesario. Bsicamente
necesitamos alimentar a la frmula con un par de parmetros y podemos obtener el
nmero de lneas que necesitamos. Estos parmetros son: el trfico pico (el trfico en la
hora de mayor actividad) y el Grado de Servicio (o GOS por sus siglas en ingls).

Nota: La frmula Erlang B asume que una llamada bloqueada es realmente


bloqueada, es decir que no entra a una cola. O sea que si todas las lneas se
encuentran ocupadas el llamante obtendr tono de ocupado en lugar de
ingresar a una cola. Esto es verdad para la mayora de PBXs.

El Trfico pico se obtiene sumando todo el trfico en la hora de ms actividad


telefnica. Es til tomar muestras no solo de un da sino de algunos das o semanas para
que la informacin sea ms exacta.

El Grado de Servicio representa la probabilidad de que una llamada sea rechazada. Su


valor va de 0 a 1. Donde 1 significa el 100% de rechazo de llamadas. Algunos criterios
comunes que he observado en la prctica son.

GoS Percepcin del servicio por parte del


llamante
De 0 a 0.02 De excelente a muy bueno, casi no se
rechazan llamadas. El valor 0 no es
posible.
De 0.03 a 0.06 De normal a aceptable. Un valor de 0.03 a
0.04 es el ms comnmente usado.
De 0.07 a 0.10 Malo
De 0.10 en adelante Psimo, Terrible. Quiere decir que el 10%
de llamadas obtendrn ocupado.

Los valores anteriores de ninguna manera constituyen una regla sino ms bien una gua
aproximada basada en la mayora de los casos. El Grado de Servicio va en funcin de la
importancia de perder una llamada y esto muchas veces va en funcin del tipo de
negocio. Por ejemplo, la importancia de perder una llamada es diferente en una clnica
que en una compaa regular.

Tambin podra depender del departamento o unidad de negocios de una empresa. En


general, el cliente, que conoce muy bien su negocio ser el termmetro que nos
permitir determinar este parmetro.

A continuacin la frmula propuesta por el modelo Erlang B.

80
Donde,

E es el valor del trfico pico (en Erlangs)


N es el nmero de lneas telefnicas

Como vemos no es algo precisamente sencillo calcular el valor de GoS y peor an


despejar N que es lo que realmente buscamos para calcular el nmero de lneas
necesarias. Pero no hay por qu preocuparnos porque actualmente hay muchas
herramientas que nos permiten calcular el valor de N de manera sencilla, desde hojas de
clculo hasta calculadoras gratuitas online. La idea de presentar la frmula aqu es para
que el lector sepa los fundamentos del clculo de la misma lo cual siempre es til.

As que bueno, ya que sabemos los conceptos bsicos al menos sabremos lo que hacen
internamente estas herramientas que vamos a usar. Veamos algunas de ellas disponibles
de manera gratuita a travs del Web.

http://www.erlang.com/calculator/erlb/
http://personal.telefonica.terra.es/web/vr/erlang/
http://www.cs.usyd.edu.au/~dcorbett/erlang.cgi

22.3 Cuando un slo servidor no alcanza


Muchas veces una instalacin es tan grande que rebasa la capacidad de un solo equipo.
Para estos casos tambin existe una solucin que nos permite dividir un Elastix en uno o
ms servidores. Es lo que se llama balanceo de carga.

Existen dos esquemas que se usan en la prctica.

Distribuir el trabajo en equipos especializados

81
Este podra ser un primer acercamiento para liberar de carga al servidor Elastix. Este
esquema funciona siempre y cuando la carga no sea excesiva puesto que si lo es
entonces vamos a tener que irremediablemente dividir el plan de marcado en otros
equipos.

La idea consiste en migrar ciertos servicios a otros servidores. Algunos de los servicios
que se pueden migrar son los siguientes.

MySQL: Esto incluye los CDRs ya que estos se almacenan tambin en MySQL
Antispam: Se puede levantar el servidor antispam en otro equipo y dejar el
servidor de correo en el servidor Elastix principal si el volumen de emails es
tolerable
Postfix: Si el volumen de correos electrnicos es elevado incluso se puede
mover Postfix
Openfire: Incluso con Openfire en otro equipo es posible integrarlo con
Asterisk con el plugin Asterisk-IM

La migracin de estos servicios a otros equipos requiere trabajo y entendimiento de los


componentes utilizados. Por ejemplo, para migrar el antispam deberemos hacer cambios
al archivo master.cf que es el archivo de configuracin de Postfix y migrar MySQL
requerir incluso modificar algunos archivos PHP usados por la interfase Web de
Elastix. En caso de que se decida por este esquema asegrese de entender bien el
funcionamiento de los componentes o servicios involucrados.

Distribuir el plan de marcado

En ocasiones, cuando la instalacin es bastante grande, es deseable dividir el plan de


marcado en ms de un servidor. Para lograr esto nos podemos valer del protocolo
DUNDi.

82
Seguridad
Las revoluciones se producen, generalmente, en los
callejones sin salida
-- Bertolt Brecht

La disponibilidad de Elastix as como la privacidad de la informacin que maneja como


llamadas, emails, faxes, etc, son aspectos cruciales para su correcto funcionamiento.
Estos aspectos pueden ser afectados por personajes inescrupulosos con fines contrarios
a los nuestros.

Por estas razones la seguridad de este tipo de equipos se vuelve un aspecto fundamental
que debemos estudiar en detalle. En este captulo revisaremos los tpicos ms
importantes.

23.1 Algo de historia


All por los aos 60s unas cuantas personas, entre ellas unos famosos hackers, se dieron
cuenta que si generaban una seal audible a la frecuencia exacta de 2,600 Hertz
producan que las llamadas telefnicas se colgaran. Se cuenta que uno de ellos,
conocido bajo el pseudnimo de Joybubbles, descubri el hecho a la edad de siete aos
mientras silbaba, y era capaz de reproducir esta frecuencia a su antojo solo silbando con
la boca.

83
Aos despus se conoci que esta frecuencia era parte de la sealizacin que usaba Bell
para resetear las llamadas telefnicas. Algunos hackers se pusieron a estudiar y
entender la sealizacin telefnica y no pas mucho tiempo antes de que alguien se
diera cuenta que poda utilizar este hecho para realizar llamadas de larga distancia de
manera gratuita lo cual era como haber descubierto oro pues en ese entonces las
llamadas de larga distancia eran mucho ms caras que en la actualidad.

Una de estas personas fue conocida como John Capitn Crunch pues descubri que un
silbato que vena como obsequio dentro de una caja de cereal de una conocida marca
llamada Captain Crunch produca coincidentalmente la dichosa frecuencia de 2,600 Hz.

El truco consista en soplar el silbato para resetear la lnea y luego reproducir


silbidos cortos para marcar el nmero telefnico. As un silbido corto significaba uno,
dos silbidos el nmero dos y as. De repente muchas personas conocan como realizar
este fraude telefnico y no tuvo que pasar mucho para que algunos tecnificaran este
principio y fabricaran cajas electrnicas que producan las seales audibles con solo
marcar un teclado.

A estas cajas electrnicas se las denomin Bluebox en relacin al color de la primera


caja encontrada.

El hecho cobr tanto vuelo que en algn momento se comenta que Steve Wozniak y
Steve Jobs, quienes despus fundaran Apple Computers, se dieron a la tarea de fabricar
Blueboxes. Vaya detalle! En la siguiente figura se muestra el modelo de Wozniak, el
cual se encuentra en exposicin en el museo de ciencias de la computacin en USA.

84
Bluebox fabricado por Steve Wozniak expuesto en el Computer History Museum

Incluso hay una leyenda que cuenta que Wozniak en una ocasin llam al Vaticano
hacindose pasar por Henry Kissinger y pidi hablar con el Papa.

Sucedi en verdad o no? Habra que preguntarle a Wozniak. En todo caso as fue como
comenzaron los primeros trucos para burlar los sistemas telefnicos. No es de
extraarse que en la actualidad existan miles de maneras de burlar un sistema de
comunicaciones y por lo tanto debemos estar muy entrenados para cuidarnos de que
esto no suceda.

23.2 Seguridad fsica


La seguridad fsica tiene que ver con aspectos tangibles como por ejemplo si alguien
desconecta el cable de poder del servidor o alguien derrama agua sobre el equipo,
deliberadamente o no.

Muchos pensarn que esto es algo obvio a lo cual no hay que dedicarle un apartado
especial, pero es importante recordar que muchos de los problemas de seguridad caen en
este tipo de categora ya que no se necesita ser un experto para vulnerar el equipo, basta
con la mala intencin o peor an con el error humano involuntario.

85
Limitacin del acceso al servidor

Para evitar en gran medida los problemas de seguridad fsica es muy importante limitar
el acceso fsico al servidor Elastix. Esto se logra principalmente aislando el servidor en
un ambiente controlado y limitando su acceso a unas poqusimas personas.
Normalmente esto se logra mediante llave o un sistema de autenticacin electrnico con
acceso a una o dos personas.

Es muy importante complementar esto con un procedimiento riguroso de uso del acceso
pues de nada sirve que la llave la tenga una sola persona si esta persona deja la llave
siempre olvidada en el comedor de la empresa.

En algunos casos tambin puede ser til llevar una bitcora de accesos y los tiempos de
mantenimiento para de esta manera llevar un mejor control y esforzar los
procedimientos. Una manera automtica de hacer esto es utilizar sistemas electrnicos
que cuentan el tiempo desde la autenticacin al ingreso hasta la salida.

No usar el usuario root

El uso habitual del usuario root puede constituir un problema potencial, aparte de los
problemas de seguridad nos hace ms proclives a que un error humano termine daando
nuestro computador o al menos el software instalado, inclusive mucha informacin
puede quedar irrecuperable.

NO dejar sesiones de consola abiertas

Es muy comn ver que hasta los mismos administradores de sistemas suelen dejar las
sesiones de consola abiertas incluso durante das. En ocasiones hasta con informacin
crtica visible en la pantalla del computador (por ejemplo el comando top
ejecutndose) o con una consola del CLI abierta. Esto es anlogo a dejar las puertas del
automvil abiertas de par en par.

Por ms confiado que uno se encuentre en principio nunca debe dejar una consola
abierta si se va a alejar del servidor peor como root porque le estamos dando total
acceso a cualquiera que se siente frente al computador.

Si se nos hace muy incmodo cerrar todo lo que estamos haciendo y salir de la consola
solo porque vamos a una pequea reunin de 10 minutos entonces podemos hacer uso
de la aplicacin screen que nos permite cerrar la consola pero conservar nuestra
sesin activa. As que no hay excusa seores!

86
Para instalar screen basta con ejecutar el comando yum.

# yum install screen

Bloquear el reinicio

Algunos BIOS nos permiten configurar una contrasea de arranque. En muchas


ocasiones esto puede frenar intentos de hackers que podran querer reiniciar el
computador para usar nuevos kernels, entre otras cosas.

Nota: Esta medida puede ser til en la mayora de los casos, pero hay que tener
en cuenta que esto tambin nos impedir reiniciar el equipo remotamente a
nosotros tambin. Claro est, a menos que tengamos un equipo KVM sobre IP
que nos permita ingresar la contrasea del BIOS remotamente.

Cambiar las claves por omisin en Elastix

Es muy importante cambiar las claves por omisin en Elastix pues en caso de no hacerlo
cualquiera puede acceder a nuestro equipo libremente y eso sin duda es altamente
peligroso.

Algunas claves muy importantes de cambiar son las siguientes.

Sistema Valor por omisin Dnde cambiar


usuario/clave
Administrador interfase admin/palosanto Interfase Web men
Web Elastix Sistema ->Usuarios
freePBX admin/admin Interfase Web de freePBX
FOP admin/eLaStIx.2oo7 /etc/amportal.conf
MySQL root/eLaStIx.2oo7 Comando mysqladmin
SugarCRM admin/password Interfase Web de
SugarCRM
vTiger admin/admin Interfase Web de vTiger

87
23.3 Ataques y vulnerabilidades a nivel de
red IP

Denegacin de servicio

En seguridad informtica, un ataque de denegacin de servicio, tambin llamado ataque


DoS (de las siglas en ingls Denial of Service), es un ataque a un sistema de
computadoras o red que causa que un servicio o recurso sea inaccesible a los usuarios
legtimos. Normalmente provoca la prdida de la conectividad de la red por el consumo
del ancho de banda de la red de la vctima o sobrecarga de los recursos computacionales
del sistema de la vctima.

Se genera mediante la saturacin de los puertos con flujo de informacin, haciendo que
el servidor se sobrecargue y no pueda seguir prestando servicios, por eso se le dice
"denegacin", pues hace que el servidor no de abasto a la cantidad de usuarios. Esta
tcnica es usada por los llamados crackers para dejar fuera de servicio a servidores
objetivo.

El llamado DDoS (siglas en ingls de Distributed Denial of Service, denegacin de


servicio distribuida) es una ampliacin del ataque DoS, se efecta con la instalacin de
varios agentes remotos en muchas computadoras que pueden estar localizadas en
diferentes puntos. El invasor consigue coordinar esos agentes para as, de forma masiva,
amplificar el volumen del flood o saturacin de informacin, pudiendo darse casos de
un ataque de cientos o millares de computadoras dirigido a una mquina o red objetivo.
Esta tcnica se ha revelado como una de las ms eficaces y sencillas a la hora de
colapsar servidores, la tecnologa distribuida ha ido sofisticndose hasta el punto de
otorgar poder de causar daos serios a personas con escaso conocimiento tcnico.

En ocasiones, esta herramienta ha sido utilizada como un notable mtodo para


comprobar la capacidad de trfico que un ordenador puede soportar sin volverse
inestable y perjudicar los servicios que desempea. Un administrador de redes puede as
conocer la capacidad real de cada mquina.

Ataques de inundacin SIP (SIP Flooding)

SIP Flooding o inundacin de SIP es un tipo de ataque de denegacin de servicio que


consiste en bombardear un servidor SIP como Asterisk de paquetes INVITE. Como ya
vimos antes estos paquetes sirven para iniciar una llamada y por lo tanto el servidor SIP,
al recibir uno de estos paquetes, se quedar esperando respuesta del supuesto usuario.
Mientras el servidor espera recibir una respuesta que nunca llegar muchas ms falsas
llamadas intentan hacer ms conexiones.

88
Si un alto volumen de estas falsas llamadas ingresa al equipo pueden ocasionar una
Denegacin de Servicio.

Hay que tener mucho cuidado con esto pues generar un ataque de SIP flooding no es tan
difcil. Existen herramientas que fueron creadas con buenas intenciones (ej. generadores
de trfico para pruebas o para hacer anlisis de carga) que pueden ser utilizadas con
fines equivocados. Una de estas herramientas es SIPP que se encuentra disponible
gratuitamente desde el sitio http://sipp.sourceforge.net y que normalmente se usa para
generar trfico SIP para pruebas.

SIPP puede configurarse para generar miles de llamadas hacia un servidor SIP.

Aplicacin SIPP en accin

Sniffing

Sniffing es una prctica que consiste en escuchar los paquetes que circulan por la red. En
algunos casos (por ejemplo si usamos un Hub en lugar de un switch) un atacante puede
incluso escuchar el trfico entre otros equipos ajenos al equipo donde se tiene acceso.

Para poder capturar el trfico se utiliza una aplicacin llamada Sniffer y existen algunas
alternativas disponibles en Internet por lo que esta prctica se ha convertido en una tarea
no tan difcil de llevar a cabo por hackers.

Luego de capturar el trfico el atacando lo analizar dependiendo de lo que quiera


hacer. Por ejemplo si el trfico corresponde a una llamada telefnica SIP es probable
que el atacante analice la informacin de sealizacin para recabar informacin de

89
Caller IDs principalmente. Tambin es posible que decodifique las tramas RTP y con
esto logre inclusive reproducir la llamada y escucharla.

Nota: Una manera de verificar si existe un sniffer ejecutndose en nuestro


servidor Elastix es verificar si la tarjeta de red se encuentra en modo
promiscuo. Esto se puede hacer de manera sencilla analizando la salida del
comando ifconfig.

Escuchas de llamadas a nivel de VoIP

En algunos casos es posible escuchar trfico VoIP que circula por la red con las
herramientas adecuadas. Despus de todo, los paquetes RTP se encuentran codificados
con codecs conocidos y por lo tanto la decodificacin de los mismos no es una tarea que
complique la vida a un hacker experimentado. Adems, los codecs de audio no fueron
concebidos con el objetivo de encriptar la comunicacin sino ms bien de comprimir la
voz y evitar errores de transmisin.

Si podemos capturar los paquetes RTP de una llamada podemos utilizar herramientas
para convertir estos paquetes en audio que podamos escuchar.

Adicionalmente recordemos que el protocolo SIP es un protocolo de texto o sea que si


logramos capturar paquetes SIP de la red podremos ver informacin como Caller IDs,
comandos y respuestas SIP.

Existen aplicaciones especializadas que facilitan la vida de los hackers cuando se


pretenden hacer escuchas de llamadas VoIP desde equipos intrusos. Citaremos las ms
conocidas segn mi punto de vista.

- VoIPong
- Wireshark (con el plugin de anlisis VoIP)
- Oreka

VoIPong rastrea la red en busca de llamadas VoIP y una vez detectadas permite guardar
las llamadas en formato wav. VoIPong soporta g.711. El sitio oficial de VoIPong es
http://www.enderunix.org/voipong

Wireshark (el antiguo proyecto Ethereal) ahora trae soporte para anlisis de llamadas
VoIP y nos permite grabar el payload (la voz) de los paquetes RTP en formato de audio
crudo. Vale decir que Wireshark tambin constituye una herramienta de anlisis
poderosa y muy til que no debe faltar en el maletn del Ingeniero de VoIP.

Finalmente Oreka es un proyecto algo ms complejo pero que nos permite incluso
decodificar codecs como GSM e iLBC. Oreka nos puede proveer incluso de una

90
interfase Web para administrar las llamadas. Para ms informacin el sitio de Oreka se
encuentra en http://oreka.sourceforge.net/

En todos estos casos estamos suponiendo que se quieren capturar llamadas externas al
equipo donde se encuentran estas herramientas. Muchas veces esto es posible debido a
que se utilizan HUBs en lugar de Switches para conectar los equipos de voz o a malas
configuraciones del Switch.

23.4 Encriptando la VoIP


Para evitar escuchas o pichazos telefnicos a nivel de VoIP tenemos la alternativa de
encriptar la comunicacin. Existen algunas opciones que explicaremos a continuacin.

SRTP

El protocolo SRTP (Secure RTP) no se encuentra soportado oficialmente en Asterisk


1.4. Es decir la versin ms reciente de Asterisk que trae Elastix. Sin embargo, el
cdigo de Asterisk puede ser parchado para aadirle este soporte. Adicionalmente
existen planes de incorporar soporte SRTP en versiones futuras de Asterisk (parece que
puede ser posible en la rama 1.6) por lo que en un futuro SRTP se convertir en una
alternativa viable y por lo tanto merece una explicacin en este apartado.

Detalles del protocolo

El Secure Real-time Transport Protocol (o SRTP) define un perfil de RTP (Real-time


Transport Protocol), con la intencin de proporcionar cifrado, autenticacin del
mensaje e integridad, y proteccin contra reenvos a los datos RTP en aplicaciones
unicast y multicast. Fue desarrollado por un pequeo grupo del protocolo IP y expertos
criptogrficos de Cisco y Ericsson incluyendo a David Oran, David McGrew, Mark
Baugher, Mats Naslund, Elisabetta Carrara, Karl Norman, y Rolf Blom. Fue publicado
por primera vez por el IETF en marzo de 2004 como el RFC 3711.

Dado que RTP est muy relacionado con RTCP (RTP control protocol), que puede ser
usado para controlar una sesin RTP, SRTP tambin tiene un protocolo hermano
llamado Secure RTCP (or SRTCP). SRTCP proporciona las mismas caractersticas
relacionadas con la seguridad a RTCP, al igual que hace SRTP con RTP.

El empleo de SRTP o SRTCP es opcional al empleo de RTP o RTCP; pero incluso


utilizando SRTP/SRTCP, todas las caractersticas que estos protocolos proporcionan
(tales como cifrado y autenticacin) son opcionales y pueden ser habilitadas o
deshabilitadas por separado. La nica excepcin a esto ltimo es la autenticacin de los
mensajes, que es obligatoria cuando se est usando SRTCP.

91
Activando SRTP en Asterisk

Si se desea activar soporte SRTP en Asterisk debemos tener en cuenta dos escenarios:
comunicaciones entre dos servidores y comunicaciones entre servidor y endpoint.

En el ltimo caso deberemos asegurarnos que el telfono elegido tambin soporte SRTP
ya que de nada nos servir activar soporte SRTP en Asterisk si el telfono no entiende
el protocolo.

En fin, esta tarea no es trivial y demanda muchos conocimientos de desarrollador puesto


que la compilacin de Asterisk podra fallar en nuevas versiones de la rama 1.4 si el
parche no se encuentra actualizado, por lo que habra que hacer correcciones manuales.

Para activar el soporte SRTP en Elastix podemos seguir los siguientes pasos:

- Obtener el SRPM de Asterisk de los repositorios de Elastix e instalarlo


- Obtener el cdigo de libSRP e instalarlo. El proyecto se encuentra alojado en
http://srtp.sourceforge.net/download.html
- Parchar Asterisk. Existen algunas guas tiles en estos enlaces:
o http://www.voip-info.org/wiki/view/Asterisk+SRTP
o http://www.e164.org/wiki/AsteriskSRTP
- Hacer las modificaciones pertinentes en el plan de marcado ya que se necesitan
aadir ciertas variables antes de la llamada a la aplicacin Dial. Ver enlaces de
arriba.
- Compilar Asterisk va el comando rpmbuild. Previamente incrementar la
versin del RPM desde el archivo asterisk.spec
- Actualizar el rpm en Elastix

Nota: Este hilo en la herramienta de seguimiento de bugs de Digium muestra el


estatus actual del soporte SRTP en Asterisk.

VPNs

Al momento esta es mi manera preferida de encriptar la comunicacin IP, al menos


hasta observar la evolucin de SRTP sobre Asterisk.

Las VPNs son ampliamente usadas y existe un proyecto de cdigo abierto a mi parecer
muy bueno llamado OpenVPN que funciona sobre Linux y por ende sobre Elastix.

92
Una VPN (Virtual Private Network) o Red Privada Virtual es un concepto que nos
permite simular una red privada sobre una red pblica como el Internet. Para poner un
ejemplo una Empresa X tiene oficinas en varias ciudades llamadas A, B y C, y estas
ciudades se encuentran conectadas entre s a travs de Internet. Sucede que esta empresa
desea que todos los computadores y equipos de red de todas estas ciudades se
encuentren dentro del mismo segmento de red privada 192.168.100.X. De esta manera
se podrn compartir impresoras entre ciudades pues VIRTUALMENTE estas
impresoras se encontraran en la misma ubicacin o segmento de red. Adicionalmente
las ciudades B y C podrn alcanzar el servidor Elastix que se encuentra en la ciudad A
desde un IP interna (no pblica).

Todo suena muy bonito pero enviar las comunicaciones internas o privadas a travs de
un medio pblico como el Internet suena algo riesgoso verdad?. Bueno, para que esto
sea posible de manera segura existe un concepto llamado tunneling que nos permite que
estas comunicaciones transiten por la red pblica de manera encriptada de tal forma que
se asocia esta tecnologa con un tnel virtual ya que se encuentra aislado del exterior.
Para establecer el tnel virtual se utilizan protocolos seguros.

En concreto se puede establecer una VPN para meter en dicha red todos los dispositivos
de voz y de esta manera hacer que las comunicaciones de voz viajen seguras. Existen en
la actualidad algunos modelos de telfono que soportan incluso VPNs por lo que los
podramos conectar directamente con el servidor Elastix. Por ejemplo:

- Snom 370
- ATCOM 530

En caso de que usemos softphones podemos establecer una VPN entre el PC donde se
encuentra el softphone y el servidor Elastix.

Encriptacin IAX

Esta es muy probablemente la manera ms sencilla de encriptar la comunicacin entre


dos servidores Asterisk.

Cuando IAX fue concebido se pens en estos problemas de violacin a la privacidad y


se aadi soporte nativo para encriptacin de llamadas. Habilitar este soporte es
sumamente sencillo pues consiste en aadir un parmetro en la configuracin IAX.

; El siguiente parmetro habilita encriptacin IAX.


; Tambin se puede usar el parmetro encryption=yes
encryption=aes128

93
Nota: Pese a que este mtodo activa encriptacin IAX y por ende puede ser til
en comunicaciones entre 2 o ms servidores Asterisk; no conozco an de
telfonos que implementen esta caractersticas. Si el lector conoce de alguno le
agradecera que me lo haga saber para actualizar esta informacin.

23.5 Auditoras de seguridad


Las auditoras de seguridad se suelen realizar cuando se sospecha que un servidor ha
sido hacheado. Sin embargo, lo recomendable es que sea una prctica constante que se
realice peridicamente para detectar a tiempo problemas de seguridad que podran
poner en riesgo nuestros equipos.

Existen algunas prcticas comunes indispensables en una auditora de seguridad.


Explicaremos algunas de ellas que considero importantes.

Escaneo de puertos de red

En muchas ocasiones un equipo atacado es instalado con software que ejecuta servicios
de red. Es til verificar esto y se puede realizar fcilmente desde el mismo equipo
atacado mediante el comando netstat. Sin embargo en algunos casos este comando
no nos ayudar mucho pues el atacante puede haber modificado el comando para que
nos muestre lo que a l le interesa que pensemos o sea que el equipo est limpio.
Por lo tanto es necesario tambin inspeccionar el equipo desde fuera y para esto
podemos usar el comando nmap ejecutado desde un equipo remoto.

Un puerto sospechoso en equipos vulnerados suele ser el 6666 o 6667 que son puertos
relacionados con servidores IRC pues sucede que una costumbre de los hackers es
instalar un servidor IRC para, a travs de una simple aplicacin de chat IRC, controlar
el servidor mediante comandos.

Veamos cmo luce la salidas de un nmap en un equipo Elastix sano desde la red interna
y no protegido por firewall.

94
[root@remote ~]# nmap elastix34.example.com

Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2008-11-16


23:18 ECT
Interesting ports on elastix34.example.com:
(The 1647 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
110/tcp open pop3
143/tcp open imap
443/tcp open https
993/tcp open imaps
995/tcp open pop3s
2000/tcp open callbook
3306/tcp open mysql
4559/tcp open hylafax
7070/tcp open realserver
9090/tcp open zeus-admin

Nmap finished: 1 IP address (1 host up) scanned in 4.556 seconds

Revisin de logs del sistema

Revisar los logs del sistema siempre es til aunque en muchas ocasiones el hacker
tratar de borrarlos para que no veamos su actividad. En todo caso ver un log borrado
tambin puede ser til pues puede confirmar nuestras sospechas de que el equipo ha
sido vulnerado.

Algunos logs que son interesantes de revisar:

- /var/log/messages Por informacin general como nuevos usuarios


creados por el hacker o mensajes de ERROR inusuales
- /var/log/maillog Por si el hacker intent ingresar por el servidor de
correos
- /var/log/httpd/error_log* - Por si el hacker intent ingresar por el
servidor Apache
- La salida del comando dmesg
- El historial de comandos ejecutados. Para el usuario actual se puede ejecutar el
comando history

95
Revisin de rootkits

Muchas veces es difcil darnos cuenta si un hacker ha ingresado al equipo pues estas
personas suelen instalar un conjunto de herramientas solo con el fin de hacerlos ms
invisibles a nuestras inspecciones. Entre esas herramientas constan versiones alteradas
de comandos del sistema que muestran salidas modificadas para que los procesos
ejecutados por el hacker queden ocultos a nuestra vista.

Tambin suelen instalar programas para inspeccionar nuestro equipo o para controlarlo
(como los servidores IRC de los que hablamos antes).

En general a este conjunto de utileras y herramientas que el hacker instala en nuestro


servidor se le denomina rootkit.

Por suerte existe un antdoto para este mal y se llaman buscadores de rootkits.

Un buscador de rootkits es un paquete de software que ejecuta una serie de revisiones


por rootkits conocidos o patrones tpicos de incursiones de hackers, permitindonos
descubrir el tipo de ataque realizado y en ocasiones hasta la manera de eliminar al
hacker del sistema.

Normalmente un buscador de rootkit contiene su propio set de comandos de sistema


para no utilizar los comandos disponibles en el servidor porque estos pueden estar
adulterados.

A continuacin un par de buscadores de rootkits conocidos y de libre uso:

- Chkrootkit (http://www.chkrootkit.org)
- Rkhunter (http://www.rootkit.nl)

Auditora avanzada con Nessus

Nessus es un scanner que rastrea un equipo en busca de vulnerabilidades. Existen listas


pblicas de vulnerabilidades mantenidas por algunas organizaciones y Nessus se basa
en ellas.

Primero trata de determinar a travs de la red los servicios que ejecuta el equipo
examinado abriendo conexiones a sus puertos (de manera similar a nmap) y si encuentra
uno trata de determinar el software que se encuentra corriendo detrs y su versin. Para
esto usa una base de datos interna de lo que llama huellas puesto que la manera como
un software responde por la red puede darnos informacin de la versin del mismo. Por
ejemplo tratemos de iniciar una sesin al puerto 25 de un servidor Elastix.

96
[root@apps ~]# telnet elastix.example.com 25
Trying elastix.example.com...
Connected to elastix.example.com.
Escape character is '^]'.
220 elastix.example.com ESMTP Postfix

Como podemos ver solo con el simple hecho de abrir una conexin ya nos hemos
enterado de que Postfix se encuentra all. Sin embargo, esto es algo evidente. Nessus
conoce hechos menos obvios que le permite conocer en muchos de los casos la versin
que estamos ejecutando.

Finalmente, conociendo el software y su versin, Nessus tratar de buscar en su base de


datos de vulnerabilidades si existen vulnerabilidades para estas versiones de software.
En caso de encontrarlas nos alertar.

Este proceso toma su tiempo pero al final Nessus nos preparar de manera automtica
un reporte de los paquetes de software que presentan problemas y que deberamos
actualizar. Tener a Nessus trabajando para nosotros es como haber contratado un
experto de seguridad en nuestra organizacin.

Para ms informacin de Nessus el lector puede seguir este link http://www.nessus.org

23.6 Algunas soluciones a los problemas de


seguridad

Apagando los servicios que no vamos a usar

Elastix es una distro rica en funcionalidad. Para proveer toda esta funcionalidad muchos
paquetes de software son empaquetados juntos con la distro.

Sin embargo, en muchos casos no necesitamos de todos ellos para lograr lo que
queremos con Elastix. Es por esto que una de las primeras tareas luego de instalar
Elastix consiste en apagar los servicios que no vamos a usar. Algunos servicios tpicos
que podramos apagar podran ser lo siguientes.

Si no se va a usar servidor de Email:

- postfix
- cyrus-imapd

97
- spamassassin
- mailman
- saslauthd

Si no se va a usar mensajera instantnea:

- Openfire

Otros servicios:

- Vsftpd (Servidor FTP)


- Tftp (este servicio trabaja bajo xinetd y es necesario en caso de utilizar
provisionamiento en algunos modelos de telfonos como Polycom)

Firewalls

Un firewall bsicamente es un componente de software que nos permite establecer


ciertas polticas de bloqueo a puertos de red que no queremos que sean visibles del otro
lado, normalmente desde Internet. Bueno realmente un firewall es mucho ms que
eso, pero lo vamos a mantener simple aqu.

Elastix trae incorporado un poderoso firewall llamado iptables. Iptables se ha vuelto el


firewall de facto en la mayora de distribuciones Linux ya que se encuentra incorporado
en el kernel mismo.

En el presente apartado configuraremos un firewall bsico residente en el mismo


servidor Elastix. En realidad siempre es recomendable que el firewall sea un
componente aparte del servidor Elastix, pero si no tenemos esa opcin instalarlo en el
propio Elastix es un excelente plan B.

Ejecutando reglas de Iptables

No entraremos en detalles del uso del comando Iptables. Dejamos al lector la importante
tarea de adquirir esos conocimientos adicionales. Lo que s haremos es copiar algunas
reglas bsicas que se pueden usar para proteger nuestro servidor de comunicaciones.
Recordar que el orden de las reglas es importante as como tambin ejecutar todas las
reglas, en especial la ltima que es la regla que bloquea todos los dems puertos.

Nota: Si no hemos configurado un firewall a travs de Iptables antes es


recomendable que nos encontremos frente al servidor. Si lo hacemos
remotamente y ejecutamos las reglas incorrectamente podramos perder
conexin con el equipo.

98
En fin, vamos a mostrar las reglas. En los siguientes ejemplos se ha supuesto que la
tarjeta de red pblica es la eth0. Si esto no es as en el caso del lector se deber
modificar este parmetro.

Aceptando el trfico SIP:

# iptables -A INPUT -p udp -m udp -i eth0 --dport 5060 -j ACCEPT

Aceptando el trfico IAX2:

# iptables -A INPUT -p udp -m udp -i eth0 --dport 4569 -j ACCEPT

Aceptando el trfico RTP (Suponiendo que no se ha alterado el archivo rtp.conf):

# iptables -A INPUT -p udp -m udp -i eth0 --dport 10000:20000 -j


ACCEPT

Aceptando trfico MGCP (solo aplicar si es que se va a usar. En la mayora de los casos
no es necesario):

# iptables -A INPUT -p udp -m udp -i eth0 --dport 2727 -j ACCEPT

Aceptando el trfico de mensajera instantnea (si es que se va a acceder desde fuera):

# iptables -A INPUT -p tcp -i eth0 --dport 9090 -j ACCEPT

Aceptando el trfico del servidor de correo y POP/IMAP:

# iptables -A INPUT -p tcp -i eth0 --dport 25 -j ACCEPT


# iptables -A INPUT -p tcp -i eth0 --dport 110 -j ACCEPT
# iptables -A INPUT -p tcp -i eth0 --dport 143 -j ACCEPT

Aceptando trfico Web (HTTP y HTTPS) para poder visitar la interfase administrativa
de Elastix:

# iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT


# iptables -A INPUT -p tcp -i eth0 --dport 443 -j ACCEPT

Finalmente denegando el acceso a todo lo dems:

99
iptables -A INPUT -p all -i eth0 -j DROP

Ya habiendo visto el patrn de las reglas de Iptables dejamos al lector la tarea de


predecir cmo abrir otros puertos como SSH (puerto 22), MySQL (puerto 3306), entre
otros servicios que podran ser tiles. Claro est, la premisa es que mientras menos
puertos expuestos a los hackers mejor.

Al final es deseable verificar si las reglas se aplicaron bien. Para hacer esto podemos
ejecutar el comando iptables con la opcin L.

[root@localhost ~]# iptables -L


Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:sip
ACCEPT udp -- anywhere anywhere udp dpt:iax
ACCEPT udp -- anywhere anywhere udp dpts:ndmp:dnp
ACCEPT tcp -- anywhere anywhere tcp dpt:websm
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3
ACCEPT tcp -- anywhere anywhere tcp dpt:imap
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
DROP all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)


target prot opt source destination

Chain OUTPUT (policy ACCEPT)


target prot opt source destination

La salida que obtengamos debera verse algo similar a la anterior. Si vemos que algo
anda mal podemos evacuar todas las reglas con el comando iptables -F y empezar de
nuevo.

IDSs e IPSs

Un tipo ms avanzado de estrategia para bloquear ataques de hackers es lo que se llama


IDS o Intrusin Detection System. Un concepto similar es el de IPS o Intrusin
Prevention System. La diferencia entre los dos es que mientras el IDS solo detecta
intrusos el segundo toma medidas para evitar que el ataque contine.

Bsicamente estas tecnologas tratan de ir ms all de un simple bloqueo de puertos


como vimos en el apartado de firewalls y se dedican a observar la actividad de red en
busca de patrones de ataques conocidos. Estos patrones han sido almacenados

100
previamente en lo que se conoce como bases de datos de patrones (fingerprint
databases). Como los patrones cambian da a da se deben actualizar de cuando en
cuando para que estas aplicaciones estn al tanto de patrones nuevos.
Un IDS nos notificar cuando encuentre un patrn de ataque conocido mientras que un
IPS ir ms all y podra ejecutar automticamente una regla de firewall especfica para
el ataque recibido con el objetivo de bloquear al posible intruso.

Estos sistemas eran normalmente utilizados por grandes empresas pues las pequeas no
podan costear su precio. Todo esto cambi con la aparicin de una alternativa libre
llamada Snort.

Snort funciona sobre Linux y puede ser instalado sobre Elastix para monitorear la red en
busca de patrones de ataques. Snort puede detectar algunos tipos de trucos o intentos de
ataques a nivel de VoIP tanto como a nivel de otros servicios o protocolos que podran
comprometer la seguridad del servidor.

Al lector interesado le recomendamos visitar http://www.snort.org

Actualizaciones

Cuando una nueva versin de un paquete de software es lanzada al pblico se pone al


anlisis de personas que tratan de vulnerarla. Ms an si se trata de una aplicacin que
puede ser alcanzable a nivel de red como es el caso de Asterisk, Postfix, Cyrus, etc.

Cuando se descubre una de estas vulnerabilidades los desarrolladores sacan nuevas


versiones y recomiendan la actualizacin del software. Por lo general los bugs que
comprometen la seguridad del equipo se marcan como crticos y conllevan a que se
disponga de la correccin de manera expedita.

Es por esta razn que es muy importante actualizar los servicios de red de cuando en
cuando y de esta manera estar prevenido de posibles fallos de seguridad que puedan
contener los paquetes de software. Tambin es muy til estar al tanto de las alertas de
seguridad que publican los distintos fabricantes de software. Por ejemplo, Asterisk
publica las suyas en http://www.asterisk.org/security

No entraremos en mucho detalle aqu de cmo proceder con las actualizaciones pero les
recomendamos utilizar la interfase Web para actualizacin de paquetes que viene con
Elastix en su defecto utilizar los comandos de YUM explicados en el captulo 3 de la
presente obra.

Monitoreo

101
El monitoreo constante de un servidor Elastix puede marcar la diferencia en cuanto a
seguridad. Es una accin preventiva que nos puede ahorrar un dolor de cabeza.

Existe una aplicacin bastante til para automatizar este proceso y su nombre es Nagios.
Nagios es un proyecto de cdigo abierto que puede configurarse para monitorear
diversos parmetros como uso de ancho de banda, uso de memoria, carga de CPU,
temperatura del CPU, uso de disco duro, carga de la cola de emails e inclusive, con la
configuracin adecuada, parmetros de Asterisk como nmero de llamadas
concurrentes, etc.

De qu me sirve esto?

Bueno, muchas veces los ataques de hackers van acompaados del uso excesivo de
recursos como por ejemplo el ancho de banda.

En ocasiones a los hackers no les interesa si el equipo es un servidor de VoIP, base de


datos o cualquier otra cosa. Basta con que tenga un buen acceso Internet para que el
fulano lo vea atractivo pues lo puede utilizar de plataforma para vulnerar a su vez a
otros equipos. Recordemos que muchos ataques DoS se consiguen enviando grandes
cantidades de informacin.

Por lo dicho, en muchos casos resulta til monitorear algunos recursos del servidor y en
caso de que el uso de estos recursos crezca de manera inusual se puede configurar
Nagios para que nos enve una alerta va email y poder tomar medidas correctivas para
evitar daos mayores.

Usar un Switch en lugar de un HUB

A simple vista un HUB y un Switch son dispositivos bastante parecidos pero esa no es
la realidad.

Un HUB es un dispositivo de red bastante sencillo cuya misin es repetir cada paquete
de datos que llega por un puerto determinado en todos los dems puertos. Por esta razn
muchas personas tambin lo llaman repetidor. Como es de esperar este comportamiento
genera muchas colisiones por lo que adicionalmente un HUB es capaz de enviar una
seal de colisin a sus puertos para indicarles que dejen de transmitir por un momento.

Un Switch en cambio es un dispositivo un poco ms inteligente y cuando un equipo


conectado en uno de sus puertos trata de enviar paquetes a otro, en lugar de repetir el
paquete en todos los dems puertos crea una conexin nicamente entre los dos equipos
involucrados en la comunicacin. Esto parece algo simple pero es una gran ventaja pues
mejora enormemente el rendimiento de la red pues ya no es necesario enviar
informacin innecesaria. Evidentemente se consigue una reduccin en el consumo de
ancho de banda de la red.

102
Foto de HUB marca NETGEAR de 4 puertos

Sin embargo la ventaja de usar un Switch no solo radica en el ahorro de ancho de banda.
Por su naturaleza un HUB enva informacin adicional no necesaria a todos los equipos
de la red, o sea comunicaciones de otros equipos de red que no deberan caer en manos
de otros equipos no involucrados en la conversacin. Normalmente un equipo
determinado desecha o filtra esa informacin innecesaria y all acaba el problema PERO
cuando los hackers entran en escena esa informacin que antes era indeseable se vuelve
valiosa informacin en manos de estas personas ya que de all pueden tratar de obtener
textos de email, mensajes de IM e incluso pueden grabar llamadas telefnicas de
terceros!

En resumen, la recomendacin aqu es no utilizar HUBs en implantaciones de VoIP!

103
Debugging Avanzado
Yo he preferido hablar de cosas imposibles, por que de lo posible se sabe
demasiado
-- Silvio Rodriguez

24.1 Introduccin
Muchas veces encontramos un bug o comportamiento poco usual en Asterisk (o
cualquier otro paquete de software) y luego de tratar de rastrear el problema por mucho
tiempo sin encontrar la respuesta caemos en la desazn.

En ese momento tal vez quisiramos meternos dentro del software y entender qu est
ocurriendo. La buena noticia es que en cierto modo eso es posible ya que existen
herramientas de software que nos permiten lograr en parte ese cometido. En el presente
captulo estudiaremos estas herramientas llamadas depuradores.

Un depurador es un programa que nos permite examinar la ejecucin de un programa a


un nivel de detalle mayor que el habitual, permitindonos con esto encontrar errores que
de otro modo resultaran difciles de hallar. Inclusive nos brindan la posibilidad de
examinar qu estuvo ocurriendo en el momento en que un programa se colg.

105
En el presente captulo presentaremos bsicamente dos alternativas de herramientas de
depuracin como lo son strace y gdb. La primera es una herramienta ligera de uso
relativamente fcil que puede ser usada en primera instancia mientras que la segunda es
una herramienta mucho ms completa cuyo uso requiere un poco ms de estudio.

A pesar de que el objetivo primario de este captulo es la depuracin de Asterisk los


conceptos aqu descritos pueden ser aplicados a cualquier programa.

Qu hacer cuando Asterisk se comporta de mal?

Cuando ocurren problemas con un servidor de comunicaciones en produccin podemos


caer en la desesperacin pues se trata de una aplicacin crtica en una empresa.
Trataremos de explicar aqu una serie de pasos para que los podamos seguir en esos
momentos en los que la adrenalina corre por nuestras venas.

Identificar el componente que est causando problemas

Es probable que muchas veces no sea un problema de Asterisk sino de sistema


operativo o de otros componentes de software o incluso hardware as que es importante
diferenciar si lo que tenemos es un bug de Asterisk. Este apartado se enfocar en
explicar un procedimiento para tratar de solucionar un bug de Asterisk.

Tambin es importante notar que un bug es un error en el cdigo de un programa.


Muchas personas creen haber encontrado un bug de Asterisk para luego darse cuenta
que borraron sin querer un archivo importante de configuracin o cosa por el estilo y
por esa ocasin Asterisk no arrancaba.

Reproducir el bug

Uno de los problemas ms inquietantes es cuando un programa se cae inesperadamente


y no sabemos por qu.

Imagnense que un cliente nos llama y nos dice que Asterisk se colg durante la noche y
amaneci apagado. El problema dice que se presenta un par de veces a la semana y ha
ocurrido incluso durante el da.

Qu hacer en estos casos donde no hay pistas de qu pueda estar ocurriendo?

Bueno, no hay una solucin ideal pero al menos la siguiente gua podra servir.

106
Examinar los logs en busca de la actividad minutos antes de que ocurriera el
problema y tratar de reproducir la misma actividad o al menos la inusual para
ver si as gatillamos el bug. En ocasiones cosas como la simple recepcin de un
fax podra gatillar un bug.

Consultar a los usuarios telefnicos si tienen alguna idea de lo que podra estar
ocasionando el problema. Nunca hay que subestimar el poder de los usuarios
pues se encuentran viviendo la situacin telefnica muy de cerca.

Aunque suene drstico en ocasiones es necesario montar guardia en las


instalaciones del cliente y recorrer las instalaciones tratando de esperar a que el
problema ocurra. Es posible que veamos a alguien tratando de enviar un paging
justo antes de que la central se cuelgue.

A pesar de todo lo que podamos hacer hay ocasiones en donde no podremos encontrar
la situacin que genera el bug. En ese caso debemos seguir con los siguientes pasos.

Buscar si se trata de un bug ya se encuentra identificado

Hay tantos usuarios utilizando Asterisk en el mundo que es probable que si encontramos
un bug no seamos los nicos que lo hayamos notado.

Por lo tanto si encontramos la situacin que gatilla el bug lo siguiente que podemos
hacer son dos cosas:

1. Verificar si ya fue solucionado en recientes versiones de Asterisk. Esto lo


podemos hacer examinando el archivo Changelog (o log de cambios) que se
incluye con cada lanzamiento de Asterisk. Podemos descargar la versin ms
reciente de Asterisk para ver el log de cambios ms actualizado o podemos
consultarlo en el repositorio SVN. Por ejemplo, para la versin 1.4.22 el
Changelog se encuentra en la ruta
http://svn.digium.com/view/asterisk/tags/1.4.22/ChangeLog

2. Verificar si al menos ha sido reportado en la interfase de seguimiento de bugs


de Asterisk. La cual se encuentra disponible en http://bugs.digium.com.
Tommonos un buen tiempo para buscar.

Depurar

Esto se explicar con ms detalle en el transcurso de este captulo.

107
Reportar el bug

Esto se explicar al final del presente captulo.

Errores de programacin que provocan cadas, colgados o


comportamientos indeseados

Es til conocer estos conceptos para hacer una mejor depuracin e inclusive estar ms
capacitados para corregir el cdigo de darse el caso.

Un programa se puede caer, colgar o funcionar errticamente por diversas causas, aqu
les dejamos con algunas de las ms comunes.

Falla de segmentacin (Segmentation Fault)

Esto sucede cuando un programa utiliza mal la memoria y pretende ocupar un segmento
de memoria que no le corresponde o lo pretende utilizar de una manera no permitida.

En ese momento el kernel, que est vigilante, se da cuenta de ello y para preservar la
estabilidad del sistema remueve al programa de memoria y termina su ejecucin.

Si no existiera este control de parte del kernel el programa mal escrito podra
sobrescribir el espacio de memoria de otras aplicaciones o inclusive del sistema
operativo.

Deadlock

Un deadlock o bloqueo mutuo ocurre cuando dos procesos (o hilos) de un programa


pretenden utilizar un mismo recurso. El primer proceso adquiere permisos sobre el
recurso y lo bloquea de tal manera que el segundo proceso no puede accederlo y queda
esperando a que se libere. Del mismo modo el segundo proceso ha bloqueado un
recurso que necesita el primer proceso de tal modo que los dos procesos quedan
bloqueados esperando que los recursos se liberen, cosa que no suceder.

Esto provoca que estos procesos queden en un estado de espera sin poder ejecutar ms
acciones.

Divisin para cero

108
Este es un error comn. Cuando esto ocurre se puede observar un error del tipo
Floating exception. El programa se detiene.

Buffer overflow

Ocurre cuando el programa trata de escribir en bferes de memoria adyacentes. Esto


provoca un comportamiento errtico de la aplicacin.

Cuando se encuentra un problema de buffer overflow los fabricantes tienden a


solucionarlo rpidamente pues aparte de los problemas obvios de inestabilidad que esto
representa existen hackers que se encuentran en busca de estos errores para explotarlos
en busca de poder ejecutar cdigo propio malicioso en el equipo atacado mediante
varias tcnicas.

24.2 strace
strace es un depurador para Linux muy fcil de usar que monitorea las llamadas a
sistema que realiza un programa determinado y todas las seales que este recibe.

Una llamada a sistema es una peticin que realiza un programa al kernel para que ste
realice una tarea. Esto funciona as porque existen algunas tareas que por cuestin de
privilegios una aplicacin no puede realizar directamente, entonces tiene que solicitarle
dicha tarea al kernel. Un ejemplo es el uso de dispositivos de sistema como la tarjeta de
red o manipulacin de archivos.

Algunas llamadas a sistema comunes en Linux son open, read, write,


close, wait, exec, fork, exit, kill, entre otras.

El trabajo de strace es posible gracias a una caracterstica del kernel llamada ptrace que
le permite a un programa cualquiera monitorear las llamadas a sistema de cualquier
programa hijo. Para ms informacin se puede ejecutar el comando man ptrace en el
servidor Elastix.

La manera ms sencilla de usar strace es ejecutar el comando seguido por el programa


que se desea monitorear. Veamos el siguiente ejemplo sencillo monitoreando el
comando cat /proc/cpuinfo

109
[root@elastix ~]# strace cat /proc/cpuinfo
execve("/bin/cat", ["cat", "/proc/cpuinfo"], [/* 20 vars */]) = 0
brk(0) = 0x975c000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or
directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=37776, ...}) = 0
mmap2(NULL, 37776, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fe9000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
[...]
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=56417648, ...}) = 0
mmap2(NULL, 2097152, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7de7000
close(3) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 4), ...}) = 0
open("/proc/cpuinfo", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(3, "processor\t: 0\nvendor_id\t: Genuin"..., 4096) = 1076
write(1, "processor\t: 0\nvendor_id\t: Genuin"..., 1076) = 1076
read(3, "", 4096) = 0
close(3) = 0
close(1) = 0
exit_group(0) = ?

La salida anterior puede confundirnos un poco al principio pero si prestamos atencin


veremos que cada lnea representa una llamada de sistema. Podemos ver entre otras
cosas que se est tratando de abrir el archivo /proc/cpuinfo en modo slo lectura.

open("/proc/cpuinfo", O_RDONLY|O_LARGEFILE) = 3

El nmero tres al final significa el cdigo de salida de la llamada de sistema. Salidas


negativas como -1 generalmente corresponden a errores. Se puede observar esto en el
ejemplo anterior cuando se trata de acceder al archivo /etc/ld.so.preload.

En general la sintaxis de uso de strace es sencilla.

strace [opciones] programa [argumentos]

Algunas opciones interesantes son las siguientes.

Parmetro Descripcin
-o Escribe la salida a un archivo
-p Monitorea un proceso especificado por su
PID. De esta manera se puede monitorear

110
un programa en ejecucin
-c Muestra un reporte donde se puede
observar un resumen del nmero de
apariciones de las diversas llamadas de
sistema
-e Nos permite filtrar la salida por tipo de
llamada de sistema o seal

Un ejemplo sencillo de depuracin de Asterisk

Hay ocasiones donde es importante monitorear un proceso de Asterisk en ejecucin. Por


ejemplo en el caso de que nos demos cuenta que nuestro servidor se encuentra tomando
mucho CPU y queramos averiguar qu est ocurriendo.

Nota: En el caso anterior es probable que GDB sea una mejor opcin para
averiguar qu est ocurriendo.

Para depurar un programa en ejecucin con strace primero debemos averiguar el PID
del proceso que queremos monitorear. En nuestro caso monitorearemos Asterisk as que
primero enlistaremos los procesos que contengan la palabra Asterisk y tomaremos el
menor PID.

[root@elastix ~]# ps aux | grep asterisk


asterisk 1619 0.5 1.9 290568 19564 ? Sl Dec10 3:13
/usr/sbin/asterisk -f -U asterisk -G asterisk -vvvg -c
asterisk 4298 0.0 1.4 297492 15024 ? S Dec09 0:00
/usr/sbin/asterisk -f -U asterisk -G asterisk -vvvg -c
root 8656 0.0 0.0 4472 700 ? S Nov07 0:00
/bin/sh /usr/sbin/safe_asterisk -U asterisk -G asterisk
asterisk 17198 0.0 1.4 297332 14864 ? S Dec09 0:00
/usr/sbin/asterisk -f -U asterisk -G asterisk -vvvg c
[...]

En el ejemplo anterior el menor PID es el 1619.

Nota: Una manera alternativa de avergiruar este PID es usando el comando


pstree -p | grep asterisk

Ahora que sabemos el PID podemos monitorearlo con strace de manera sencilla.

[root@elastix ~]# strace -p 1619


Process 1619 attached - interrupt to quit

111
En caso de que estemos experimentando con strace sobre un Asterisk que no posea
actividad podemos ejecutar el siguiente comando para probar la salida de strace.

[root@elastix ~]# asterisk -rx "module reload"

Veremos ahora lo siguiente.

[root@elastix ~]# strace -p 1619


Process 1619 attached - interrupt to quit
read(0, 0xbf83cc3b, 1) = ? ERESTARTSYS (To be
restarted)
--- SIGURG (Urgent I/O condition) @ 0 (0) ---
rt_sigaction(SIGURG, {0x80652e0, [URG], SA_RESTART}, {0x80652e0,
[URG], SA_RESTART}, 8) = 0
sigreturn() = ? (mask now [])
--- SIGURG (Urgent I/O condition) @ 0 (0) ---
rt_sigaction(SIGURG, {0x80652e0, [URG], SA_RESTART}, {0x80652e0,
[URG], SA_RESTART}, 8) = 0
sigreturn() = ? (mask now [])
read(0, 0xbf83cc3b, 1) = ? ERESTARTSYS (To be
restarted)
--- SIGURG (Urgent I/O condition) @ 0 (0) ---
rt_sigaction(SIGURG, {0x80652e0, [URG], SA_RESTART}, {0x80652e0,
[URG], SA_RESTART}, 8) = 0
sigreturn() = ? (mask now [])
--- SIGURG (Urgent I/O condition) @ 0 (0) ---
rt_sigaction(SIGURG, {0x80652e0, [URG], SA_RESTART}, {0x80652e0,
[URG], SA_RESTART}, 8) = 0
sigreturn() = ? (mask now [])
--- SIGURG (Urgent I/O condition) @ 0 (0) ---
rt_sigaction(SIGURG, {0x80652e0, [URG], SA_RESTART}, {0x80652e0,
[URG], SA_RESTART}, 8) = 0
sigreturn() = ? (mask now [])
--- SIGURG (Urgent I/O condition) @ 0 (0) ---
rt_sigaction(SIGURG, {0x80652e0, [URG], SA_RESTART}, {0x80652e0,
[URG], SA_RESTART}, 8) = 0
sigreturn() = ? (mask now [])
[...]

Para salir basta con ejecutar Ctrl+C

112
24.3 GDB
GDB es un completo depurador desarrollado y mantenido por la Free Software
Foundation.

GNU nos permite hacer seguimiento de la ejecucin de un programa insertando pausas


cuando creamos necesario; tambin nos permite observar lo que un programa estaba
haciendo cuando se colg. Inclusive nos permite cambiar ciertas cosas dentro del
programa para ver los efectos que se producen con dichos cambios.

GDB es una opcin ms completa que strace pero tambin su uso requiere un tanto ms
de conocimiento.

Con GDB podemos depurar programas escritos en C o C++ como es el caso de


Asterisk. Sin embargo, GDB tambin soporta otros lenguajes.

Ejemplos simples de uso de GDB

Existen tres maneras de usar gdb. Para depurar un programa ejecutndolo desde el
propio depurador, para depurar un programa que ya se encuentra en ejecucin o para
hacer depuracin de un archivo core dejado por una aplicacin cada.

Depurando un programa desde el depurador

El depurador gdb puede encargarse de arrancar el programa y ejecutarlo. Para esto


podemos utilizar la sintaxis.

gdb programa

Depuracin sobre Asterisk en plena ejecucin

Podemos depurar un programa en plena ejecucin si conocemos su PID. Encontrar el


PID no es muy difcil y podemos usar el comando ps para ello.

Para depurar un programa en plena ejecucin debemos especificar primero el nombre


del proceso seguido por el PID.

gdb programa PID

113
Depuracin haciendo backtrace sobre un Asterisk cado

Tambin es posible depurar un programa despus de cado siempre y cuando ste haya
dejado un archivo core. Para depurar un archivo core debemos especificar el nombre
del programa que gener dicho archivo y la ubicacin del archivo core.

gdb programa core

Comandos bsicos

A continuacin una lista con los comandos ms bsicos de GDB. Para ms informacin
puede recurrir al comando man gdb.

run

Ejecuta un programa

bt

Hace un backtrace, es decir muestra la pila de memoria del programa

break nmero-lnea

Inserta una parada en una lnea dada del programa que se va a ejecutar. Cuando se llega
a esa lnea se detiene la ejecucin del programa en ese punto.

break nombre-funcin

Inserta una parada antes de la primera lnea de la funcin especificada. Del mismo
modo que el comando anterior, cuando se llega a esa lnea se detiene la ejecucin del
programa en ese punto.

cont

Si el programa se encuentra detenido, contina con la ejecucin del programa. Por


ejemplo, cuando se ha llegado a una parada con el comando break.

114
list

Enlista la fuente del programa en las cercanas de donde se encuentra detenido.

step

Ejecuta el programa lnea por lnea, despus de que ha sido detenido.

next

Igual que step pero no ingresa a las funciones.

status

Imprime una lista de las paradas (breakpoints)

delete

Elimina una parada (breakpoint)

quit

Nos permite salir de GDB

24.4 Archivos core y backtraces


Muchas aplicaciones dejan archivos core cuando terminan inesperadamente, lo que nos
permite hacer una depuracin post-mortem del software.

En el caso de Asterisk esto es posible cuando se lo inicia con la opcin g. En el caso de


Elastix, Asterisk se inicia por defecto con dicha opcin.

Si no se est seguro que Asterisk haya sido iniciado con la opcin g se puede verificar
con el siguiente comando.

115
[root@elastix ~]# ps aux | grep asterisk
root 8656 0.0 0.0 4472 696 ? S Nov07 0:00
/bin/sh /usr/sbin/safe_asterisk -U asterisk -G asterisk
asterisk 8715 0.6 2.4 297488 25412 ? Sl Nov19 188:55
/usr/sbin/asterisk -f -U asterisk -G asterisk -vvvg -c
asterisk 17198 0.0 1.4 297332 14864 ? S Dec09 0:00
/usr/sbin/asterisk -f -U asterisk -G asterisk -vvvg c
[...]

Un archivo core no es otra cosa que el contenido de memoria del programa en el


momento en que se detuvo. Es el sistema operativo quien guarda ese contenido de
memoria pues la aplicacin no est en capacidad de hacerlo puesto se encuentra
detenida.

Este contenido de memoria, combinado con la tabla de smbolos que se genera cuando
el programa es compilado hacen que gdb nos pueda mostrar informacin ms legible.

Un backtrace (o seguimiento hacia atrs) es un reporte de las llamadas a funciones que


se encontraban en memoria en un momento dado.

Desde gdb es posible realizar backtraces sobre un archivo core. Es decir obtener un
reporte de las llamadas a funciones en el momento en que el programa se cay. Para
hacerlo existen dos comandos, el bt y el bt full.

El bt full es un backtrace ms detallado que el normal que se consigue con bt y muestra


adems parmetros y variables locales usados por las funciones que estn siendo
invocadas.

Veamos un ejemplo de esto. Primero identificamos el archivo core que necesitamos


examinar, por lo general se trata del ltimo.

[root@elastixtest ~]# ll /tmp/ | grep core


-rw------- 1 asterisk asterisk 301694976 Oct 17 14:02 core.34543
-rw------- 1 asterisk asterisk 280817664 Oct 23 10:07 core.45433
-rw------- 1 asterisk asterisk 323821568 Nov 7 16:44 core.54333
-rw------- 1 asterisk asterisk 323416064 Nov 14 10:30 core.54654
-rw------- 1 asterisk asterisk 292384768 Nov 19 16:28 core.63222

En nuestro caso examinaremos el archivo llamado core.63222. Iniciamos el depurador y


realizamos un backtrace.

116
[root@elastix ~]# gdb asterisk /tmp/core.63222
[...]
Reading symbols from /usr/lib/asterisk/modules/chan_mgcp.so...done.
Loaded symbols for /usr/lib/asterisk/modules/chan_mgcp.so
Reading symbols from /usr/lib/asterisk/modules/format_gsm.so...done.
Loaded symbols for /usr/lib/asterisk/modules/format_gsm.so

Core was generated by `/usr/sbin/asterisk -f -U asterisk -G asterisk -


vvvg -c'.
Program terminated with signal 11, Segmentation fault.
#0 0x080ecfd7 in c_hmatch ()
(gdb) set logging on
Copying output to gdb.txt.
(gdb) bt
#0 0x080ecfd7 in c_hmatch ()
#1 0x00000001 in ?? ()
#2 0x00000064 in ?? ()
#3 0xbfab4b80 in ?? ()
#4 0xa9610c08 in ?? ()
#5 0x09989cf0 in ?? ()
#6 0xbfab4b78 in ?? ()
#7 0x080ed371 in parse_line ()
Previous frame inner to this frame (corrupt stack?)
(gdb) bt full
#0 0x080ecfd7 in c_hmatch ()
No symbol table info available.
#1 0x00000001 in ?? ()
No symbol table info available.
#2 0x00000064 in ?? ()
No symbol table info available.
#3 0xbfab4b80 in ?? ()
No symbol table info available.
#4 0xa9610c08 in ?? ()
No symbol table info available.
#5 0x09989cf0 in ?? ()
No symbol table info available.
#6 0xbfab4b78 in ?? ()
No symbol table info available.
#7 0x080ed371 in parse_line ()
No symbol table info available.
(gdb) thread apply all bt
[...]

117
Cmo reportar un backtrace a Digium?

Si determinamos que tenemos un bug de Asterisk en nuestras manos sea que lo


resolvamos o no, el siguiente paso lgico es reportar ese bug al fabricante.

Digium dispone de una interfase Web para esta finalidad ubicada en:

http://bugs.digium.com

Cuando se reporta un bug es de mucha ayuda para los desarrolladores de Asterisk contar
un backtrace para poder entender mejor lo que ocurri a nivel interno.

Los lineamientos generales para reportar backtraces se encuentran en el siguiente sitio:

http://www.asterisk.org/doxygen/trunk/AstDebug.html

Bsicamente se pide no subir archivos core sino solo la salida del comando bt y bt full
conseguidos con gdb.

Adicionamente es importante al reportar un bug de Asterisk mencionar que se est


utilizando Elastix porque esto permitir a los desarrolladores de Digium conocer que se
trata de un Asterisk compilado con parches y funcionalidad adicional.

118
DUNDI
Afirmaciones extraordinarias requieren siempre de evidencia
extraordinaria
-- Carl Sagan

25.1 Introduccin
DUNDi (Distributed Universal Number Discovery) es un sistema de localizacin de
gateways para el acceso a los servicios de telefona. Utiliza un esquema punto a punto y,
a diferencia de ENUM que es estrictamente jerrquico por que se basa en DNS, DUNDi
no requiere ninguna arquitectura de red en particular ni un esquema jerrquico cliente-
servidor.

En otras palabras DUNDI es capaz de consultar los contextos de otros equipos para
encontrar una ruta hacia determinado nmero.

DUNDi en realidad no realiza una llamada como tal, ya que no es un protocolo de


sealizacin VoIP; mas bien el recibe y proporciona la informacin necesaria para
poder contactar a los equipos independientemente del protocolo VoIP que sea usado.

119
DUNDi fue inventado por Mark Spencer, quien tambin desarroll Asterisk, ncleo de
la telefona en Elastix, por lo tanto es de esperar que la integracin con este ultimo sea
completamente transparente as como su compatibilidad impecable.

Para que DUNDi funcione se debe conocer al menos un peer quien a su vez, si no puede
responder al requerimiento, puede delegar la consulta a un peer conocido por el, y as
hasta que se encuentre a un peer que tenga una respuesta al numero consultado (aunque
este parmetro es configurable con TTL).

Un ejemplo tpico de la utilidad de DUNDi es en una empresa multi-sede, en la cual


cada sede tiene su propio equipo con Elastix. Cada equipo puede publicar sus
extensiones y si uno de los equipos pregunta, por ejemplo, donde esta el numero 456?
la consulta se enviara directa o indirectamente a todos los servidores, y el servidor que
tenga esa extensin responder algo como IAX2/usuario:clave@1.2.3.4/456.

Aunque cada equipo tenga asignado un rango de extensiones o una serie de nmeros,
DUNDI resultar til, ya que no intentara comunicarse con el equipo si la extensin no
esta creada, aunque este en su rango de extensiones.

25.2 Ejemplo de configuracin


La mejor manera de explicar DUNDi es ilustrando con un ejemplo, as que eso es lo que
haremos a continuacin. Mostraremos un ejemplo de cmo distribuir el plan de marcado
en 3 equipos utilizando DUNDi.

Escenario

En el presente ejemplo se configurarn tres equipos con los siguientes datos.

Nombre de equipo Direccin IP MAC


SRV01 192.168.255.201 00:21:5A:49:24:98
SRV02 192.168.255.202 00:21:5A:49:7E:9E
SRV02 192.168.255.203 00:22:64:08:F4:FE

Certificados de encriptacin

DUNDi usa certificados de encriptacin RSA para compartir los planes de marcado,
adems por que las respuestas a una consulta incluyen las claves de las troncales
(aunque es dinmico).

120
Usaremos la misma clave para la comunicacin entre todos los servidores, as que el
primer paso es generar los certificados de encriptacin uno de los equipos (en este
ejemplo en SRV01):

SRV01:

cd /var/lib/asterisk/keys
astgenkey -n SERVERS-DUNDI

Ahora necesitamos compartir los certificados entre los dos servidores; esto es para que
cada uno pueda des-encriptar al otro.

Copiar hacia SRV02:

[root@elastix ~]# scp /var/lib/asterisk/keys/SERVERS-DUNDI.* \


192.168.255.202:/var/lib/asterisk/keys

Copiar hacia SRV03:

[root@elastix ~]# scp /var/lib/asterisk/keys/SERVERS-DUNDI.* \


192.168.255.203:/var/lib/asterisk/keys

dundi.conf

Vamos a generar este archivo desde el principio, seccin por seccin:

Seccin [general]

En esta seccin del archivo definimos nuestra propia identificacin en la nube DUNDi,
as como las opciones globales, debemos rellenar los campos con los datos reales de
nuestros equipos (MAC, etc.):

Para SRV01:

121
[general]
;
department=SERVER01
organization=AlgunaOrganizacion
locality=Quito
stateprov=Pichincha
country=EC
email=info[at]elajonjoli.org
phone=+593-0000000
;
; Aqui podemos definir en que red va a escuchar dundi
;bindaddr=0.0.0.0
; El puerto en el que va a escuchar, por defecto 4520
port=4520
; Aqui nos identificamos con nuestra MAC address
entityid=00:21:5A:49:24:98
; El numero de consultas que har DUNDI hasta alcanzar una extensin
ttl=12
; Finaliza las conexiones fallidas
autokill=yes

Para SRV02:

[general]
;
department=SERVER02
organization=AlgunaOrganizacion
locality=Quito
stateprov=Pichincha
country=EC
email=info[at]elajonjoli.org
phone=+593-0000000
;
;Aqui podemos definir en que red va a escuchar dundi
;bindaddr=0.0.0.0
; El puerto en el que va a escuchar, por defecto 4520
port=4520
; Aqui nos identificamos con nuestra MAC address
entityid=00:21:5A:49:7E:9E
; El numero de consultas que har DUNDI hasta alcanzar una extensin
ttl=12;
; Finaliza las conexiones fallidas
autokill=yes

122
Para SRV03:

[general]
;
department=SERVER03
organization=AlgunaOrganizacion
locality=Quito
stateprov=Pichincha
country=EC
email=info[at]elajonjoli.org
phone=+593-0000000
;
;Aqui podemos definir en que red va a escuchar dundi
;bindaddr=0.0.0.0
; El puerto en el que va a escuchar, por defecto 4520
port=4520
; Aqui nos identificamos con nuestra MAC address
entityid=00:22:64:08:F4:FE
; El numero de consultas que har DUNDI hasta alcanzar una extensin
ttl=12;
; Finaliza las conexiones fallidas
autokill=yes

Seccin [mappings]

Bsicamente aqu definimos nuestra respuesta a una consulta hacia determinado nmero
que tengamos localmente.

Para SRV01:

[mappings]
priv => dundi-priv-
canonical,0,IAX2,dundi:${SECRET}@192.168.251.251/${NUMBER},nopartial
priv => dundi-priv-
customers,100,IAX2,dundi:${SECRET}@192.168.251.251/${NUMBER},nopartial
priv => dundi-priv-via-
pstn,400,IAX2,dundi:${SECRET}@192.168.251.251/${NUMBER},nopartial

Para SRV02:

123
[mappings]
priv => dundi-priv-
canonical,0,IAX2,dundi:${SECRET}@192.168.251.252/${NUMBER},nopartial
priv => dundi-priv-
customers,100,IAX2,dundi:${SECRET}@192.168.251.252/${NUMBER},nopartial
priv => dundi-priv-via-
pstn,400,IAX2,dundi:${SECRET}@192.168.251.252/${NUMBER},nopartial

Para SRV03:

[mappings]
priv => dundi-priv-
canonical,0,IAX2,dundi:${SECRET}@192.168.251.253/${NUMBER},nopartial
priv => dundi-priv-
customers,100,IAX2,dundi:${SECRET}@192.168.251.253/${NUMBER},nopartial
priv => dundi-priv-via-
pstn,400,IAX2,dundi:${SECRET}@192.168.251.253/${NUMBER},nopartial

Los valores de ${NUMBER} y ${SECRET} se reemplazaran automticamente, segn


el numero que se consulte y la clave aleatoria que se haya generado en ese momento.

Peers

Adicionalmente debemos definir los PEERS que consultaran y sern consultados (con la
opcin symmetric), esto lo hacemos as:

Para SRV01:

124
; Identificamos al servidor 2 (SRV02) por su entityid
[00:21:5A:49:7E:9E]
;permitir y realizar conexiones
model=symmetric
; IP ser servidor SRV02
host=192.168.255.202
inkey=SERVERS-DUNDI
outkey=SERVERS-DUNDI
; Incluimos el contexto antes definido en la seccin mappings
include=priv
permit=priv
qualify=yes
order=primary

; Identificamos al servidor 3 (SRV03) por su entityid


[00:22:64:08:F4:FE]
;permitir y realizar conexiones
model=symmetric
; IP ser servidor SRV03
host=192.168.255.203
inkey=SERVERS-DUNDI
outkey=SERVERS-DUNDI
; Incluimos el contexto antes definido en la seccin mappings
include=priv
permit=priv
qualify=yes
order=primary

Para SRV02:

125
; Identificamos al servidor 1 (SRV01) por su entityid
[00:21:5A:49:24:98]
;permitir y realizar conexiones
model=symmetric
; IP ser servidor SRV01
host=192.168.255.201
inkey=SERVERS-DUNDI
outkey=SERVERS-DUNDI
; Incluimos el contexto antes definido en la seccin mappings
include=priv
permit=priv
qualify=yes
order=primary

; Identificamos al servidor 3 (SRV03) por su entityid


[00:22:64:08:F4:FE]
;permitir y realizar conexiones
model=symmetric
; IP ser servidor SRV03
host=192.168.255.203
inkey=SERVERS-DUNDI
outkey=SERVERS-DUNDI
; Incluimos el contexto antes definido en la seccin mappings
include=priv
permit=priv
qualify=yes
order=primary

Para SRV03:

126
; Identificamos al servidor 1 (SRV01) por su entityid
[00:21:5A:49:24:98]
;permitir y realizar conexiones
model=symmetric
; IP ser servidor SRV01
host=192.168.255.201
inkey=SERVERS-DUNDI
outkey=SERVERS-DUNDI
; Incluimos el contexto antes definido en la seccin mappings
include=priv
permit=priv
qualify=yes
order=primary

; Identificamos al servidor 1 (SRV01) por su entityid


[00:21:5A:49:24:98]
;permitir y realizar conexiones
model=symmetric
; IP ser servidor SRV01
host=192.168.255.201
inkey=SERVERS-DUNDI
outkey=SERVERS-DUNDI
; Incluimos el contexto antes definido en la seccin mappings
include=priv
permit=priv
qualify=yes
order=primary

iax_custom.conf

Aqu debemos definir la configuracin de la troncal; como DUNDI va a hacer todo el


trabajo de enviar la cadena exacta de como contactarlos solo creamos un usuario que
recibe las llamadas autenticadas de la nube DUNDi:

En SRV01 y en SRV02

127
[dundi]
type=user
dbsecret=dundi/secret
context=ext-local
; Podemos restringir ciertos codecs para mejorar la calidad
; de voz, o dar prioridad al ancho de banda (con gsm o g729)
; disallow=all
; allow=ulaw

extensions.conf

Para lograr la integracin con freePBX debemos modificar un poco el contexto "from-
internal" que es el contexto que usa freePBX para las extensiones.

Teniendo en cuenta que cuando un nmero no es encontrado en el plan de marcado


local se usa el contexto [bad-number] es all donde debemos modificar y la
configuracin debe ser exactamente la misma en los tres servidores:

En el archivo extensions.conf buscamos la seccin:

[from-internal]
include => from-internal-xfer
include => bad-number

Comentamos la lnea include => bad-number (poniendo un punto y coma


adelante) y agregamos otra que diga include => dundi-priv-lookup.

que es un contexto que crearemos luego en el archivo extensions_custom.conf,


quedando as:

[from-internal]
include => from-internal-xfer
;include => bad-number
include => dundi-priv-lookup

extensions_custom.conf

Aqu definimos los contextos personalizados para que DUNDI mapee nuestra
extensiones, as como una macro para hacer las bsquedas en otros equipos (lo que evita
loops) y la sentencia para redirigir las llamadas (switch).

128
Debemos aadir las siguientes lneas al final del archivo extensions_custom.conf en los
dos servidores:

; ********************************************
; CONFIGURACION PARA DUDNi
[dundi-priv-canonical]
; Aqui incluimos el contexto que contiene las extensiones.
include => ext-local
; Aqui incluimos el contexto que contiene las colas de atencin
include => ext-queues

[dundi-priv-customers]
; Si tenemos clientes (o revendemos servicios) podemos listarlos aqui

[dundi-priv-via-pstn]
; Aqu podemos incluir contexto con nuestras troncales hacia la PSTN,
; si queremos que los dems equipos puedan usar nuestras troncales
; include => outbound-allroutes

[dundi-priv-local]
; En este contexto unificamos los tres contextos, este lo podemos
; usar como contexto de la troncal iax de dundi
include => dundi-priv-canonical
include => dundi-priv-customers
include => dundi-priv-via-pstn

[dundi-priv-lookup]
; Este contexto se encarga de hacer la busqueda de un numero por dundi
; Antes de hacer la busqueda definimos apropiadamente nuestro
; caller id. ya que si no tendremos un caller id como "device<0000>".
exten => _X.,1,Macro(user-callerid)
exten => _X.,n,Macro(dundi-priv,${EXTEN})
exten => _X.,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?100)
exten => _X.,n,Goto(bad-number,${EXTEN},1)
exten => _X.,100,Playtones(congestion)
exten => _X.,101,Congestion(10)

[macro-dundi-priv]
; Esta es la macro que llamamos desde el contexto [dundi-priv-lookup]
; Tambien evita que hayan loops en las consultas dundi.
exten => s,1,Goto(${ARG1},1)
switch => DUNDi/priv
; ********************************************

129
Aplicar la configuracin

Para que los cambios se hagan efectivos podemos ejecutar el comando:

asterisk -rx "restart when convenient"

O si no queremos esperar:

asterisk -rx "restart now"

Conclusin

Ahora cada extensin que creemos desde freePBX se aadir al contexto [ext-local] el
cual esta incluido en dundi-priv-canonical que va a usar DUNDi para indicar
que extensiones tenemos localmente.

Si nosotros tenemos la extensin responderemos con los datos para la comunicacin


hacia esa extensin; esos datos a su ves los interpreta el servidor que esta preguntando y
usa la funcin switch que pusimos en el archivo extensions_custom.conf para
comunicarse con la extensin local.

25.3 Integrando IVRs con DUNDi


Cuando tenemos varios equipos y troncales de la PSTN que ingresan a uno de ellos, es
muy posible que queramos que el IVRs que recibe esas lneas pueda llamar
directamente a las extensiones de la red DUNDi.

Para lograrlo, lo primero que hay que hacer es localizar el contexto de IVR que hemos
creado desde freePBX, este ltimo siempre los crea as con un formato [ivr-N], donde N
es un numero incremental que asigna automticamente.

Tenemos que revisar en el archivo


/etc/asterisk/extensions_additional.conf y buscar el contexto
adecuado.

Suponiendo que el contexto del IVR es [ivr-2] tendramos que definir la siguiente
configuracin en el archivo
/etc/asterisk/extensions_additional.conf:

130
[dundi-priv-lookup-ivr]
exten => _XXXX,1,Macro(dundi-priv,${EXTEN})
exten => _XXXX,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?100)
exten => _XXXX,n,Goto(ivr-2,i,1)
exten => _XXXX,n,Hangup()
exten => _XXXX,100,Playtones(congestion)
exten => _XXXX,101,Congestion(10)
exten => _XXXX,102,Hangup()
[ivr-2-custom]
include => ext-local
include => ext-queues
include => dundi-priv-lookup-ivr

Esto teniendo en cuenta que nuestras extensiones internas tienen 4 dgitos, si no


debemos modificar el contexto [dundi-priv-lookup-ivr] y en vez de _XXXX poner el
numero de dgitos que usamos.

131
Mdulo de Call Center
Hace ms ruido un slo hombre gritando que cien mil callados
-- Jos de San Martn

26.1 Introduccin
El mdulo de CallCenter de Elastix es un paquete de software diseado para asistir en la
implementacin de centros de llamadas masivas con interaccin entre operadores
contratados por el administrador de la central telefnica (de aqu en adelante llamados
"agentes") y personas contactadas a travs de llamadas telefnicas (de aqu en adelante
llamados "abonados"). En este captulo, se usa el trmino "campaa" para designar la
ejecucin de un conjunto de llamadas atendidas por un grupo de agentes, durante un
intervalo de fechas especfico.

26.2 Funcionalidad bsica

Modelo de funcionamiento

El mdulo del CallCenter (en su versin actual) est implementado alrededor del
soporte de colas de Asterisk. El diseo del mdulo asume que cada una de las colas
alberga a uno o ms agentes, los cuales pueden estar "registrados" (o tambin
"logoneados") como presentes en una cola, o ausentes. Adems se asume que cada

133
campaa utiliza exactamente una cola de Asterisk. Actualmente se reconocen dos
modos principales de funcionamiento: campaas salientes, y campaas entrantes. Estos
dos modos de funcionamiento se diferencian en quin origina las llamadas.

En una campaa saliente, al sistema se lo alimenta con un archivo que contiene los
nmeros telefnicos a marcar. Al activarse la campaa, y si hay agentes registrados
como presentes en la cola asignada, el sistema marca los nmeros telefnicos, tantos
como agentes libres se encuentren en la cola. El mtodo por medio del cual se coloca
una llamada, une la cola (no un agente especfico) con el nmero del abonado al cual se
llama, y por lo tanto la llamada realizada, si es exitosa, entra a la cola y es atendida por
el siguiente agente libre (segn la poltica de asignacin). Al conectarse la llamada, el
sistema registra el agente que el Asterisk ha elegido para atender la llamada, y escribe
esta informacin en la base de datos, para que sea recogida por la porcin Web. Esta
informacin tambin permite asociar una llamada con una respuesta a un formulario
asociado a la campaa. Al terminar la llamada, el agente pasa al estado ocioso, y est de
nuevo disponible para recibir una llamada. Este proceso contina hasta recorrer toda la
lista de nmeros. Segn el parmetro de reintentos especificado por la campaa, se
vuelven a intentar marcar nmeros que fallaron en ser contactados, hasta terminar con el
nmero de reintentos o cuando cada nmero haya sido correctamente contactado.

En una campaa entrante, se define una cola a la cual ingresan los agentes, pero el
marcador no inicia llamada alguna. En lugar de ello, se debe organizar que los abonados
llamen al sistema, y que resulten ruteados a la cola configurada para la campaa. Como
en el caso de la campaa saliente, se registra a qu agente fue asignada la llamada.
Opcionalmente se puede alimentar al sistema con datos sobre nmeros especficos, de
forma que cuando este nmero llama, el agente tenga la informacin correspondiente al
abonado disponible en su pantalla de informacin.

Funcionalidad implementada

La versin 1.3 del mdulo CallCenter tiene las siguientes funcionalidades


implementadas:

Llamado automtico a partir de una lista de nmeros


Ejecucin de mltiples campaas simultneas, cada una con su propia cola
asignada
Seguimiento de agente asignado para atender una llamada
Marcador predictivo. Esta caracterstica intenta predecir, en base a la duracin
observada de las llamadas realizadas durante una campaa, la probabilidad de
que una llamada actualmente en curso sea terminada en un intervalo
determinado. Si la llamada se considera a punto de terminarse, se colocan
llamadas adicionales con la esperanza de que el agente est disponible cuando la
llamada llegue a conectarse.
Almacenamiento de guin de atencin. Esta caractertica permite asociar la
campaa con un discurso que el agente debe seguir para atender ptimamente al

134
abonado. Este discurso est disponible en la cejilla que aparece en la consola de
agente.
Ingreso de formulario. Si la campaa saliente es realizada para hacer una
encuesta, el sistema puede almacenar un formulario que el agente llena con las
respuestas del abonado. Las respuestas de todos los nmeros marcados en una
campaa son recuperables como un archivo CSV a travs de la interfaz Web.
Auditora de tiempos de descanso
Capacidad de poner una llamada en "hold"
Reportes de actividad de llamadas

Limitaciones conocidas

El ingreso de formulario no est implementado en la versin 1.3 del CallCenter para


campaas entrantes. Esta funcionalidad se planea ser implementada en versiones
futuras del mdulo CallCenter.

El marcador del mdulo CallCenter no controla cul agente termina atendiendo un


nmero especfico que ha sido marcado, o que ha sido recibido. Esto es una limitacin
fundamental del modelo de agentes de Asterisk como miembros de una cola de
atencin. Debido a que las llamadas son colocadas entre la cola y el nmero marcado, el
marcador no puede decidir a cul agente se le asignar la llamada colocada. Esto
excluye el marcador para su uso en situaciones en las que un agente debe atender a un
subconjunto definido de nmeros. Esta caracterstica podr ser implementada en una
versin futura de CallCenter, aunque requiere volver a plantear la interaccin registro
del agente con el sistema.

El marcador del mdulo CallCenter no est diseado para reproducir mensajes grabados
en llamadas no atendidas. Esto no es exactamente una limitacin, sino una consecuencia
del objetivo para el cual fue escrito el mdulo CallCenter. El mdulo de CallCenter est
pensado para mediar llamadas que luego son atendidas por agentes humanos. Por lo
tanto, no coloca llamadas en una cola sin agentes. Es posible que se implemente esta
caracterstica en una versin futura, como un tipo especial de campaa que no requiere
de agentes.

26.3 Componentes del Elastix Dialer

Marcador predictivo

El marcador predictivo es la porcin del CallCenter que interacta directamente con las
llamadas. El marcador est implementado como un servicio residente (daemon) escrito
en PHP, e iniciable como un servicio a travs del comando 'service elastixdialer
stop|start'. Para las campaas salientes, el marcador tiene la tarea de iniciar cada una de

135
las llamadas hacia los abonados, mediante el uso del comando Originate de Asterisk. El
marcador lleva la cuenta de las llamadas que han sido colocadas, pero no han sido
informadas de xito o fracaso a travs de un evento OriginateResponse enviado por
Asterisk. Cuando una llamada es respondida, el marcador recibe eventos
OriginateResponse, Join y Link que informan caractersticas de la llamada colocada, en
particular el agente al cual termin siendo asignada. Al recibir estos eventos, el
marcador escribe la informacin de la llamada en la base de datos para su uso por parte
de la porcin Web del mdulo.

El marcador interroga regularmente (cada 3 segundos) el estado de la cola (para las


campaas salientes), para averiguar cuntos agentes estn logoneados y libres. El
nmero de agentes libres (ms el lmite por campaa, vase Resolucin de problemas)
regula cuntas llamadas son iniciadas simultneamente cada vez que se revisa el estado
de la campaa. Si el nmero de llamadas colocadas en la historia de la campaa es
suficientemente grande, el marcador intenta usar las estadsticas de duracin media de la
llamada, para intentar predecir si una llamada en curso est a punto de terminar, para
colocar proactivamente llamadas adicionales. El modelo para prediccin es una
distribucin Erlang acumulada.

Distribucin Erlang acumulada

La interfaz Web permite iniciar y detener el servicio de marcador, y adems permite


activar y desactivar la depuracin de problemas en el marcador, incluso si el marcador
est corriendo. La ruta por omisin del log del marcador, donde aparecen las
operaciones realizadas por ste, es el archivo /opt/elastix/dialer/dialerd.log. Cuando la

136
depuracin est desactivada, slo los errores se escriben a este log. Al activar la
depuracin, tambin se escriben reportes regulares sobre el estado interno del marcador,
as como los parmetros que se usan para generar llamadas, los eventos que recibe el
marcador, y la interpretacin de cuntos agentes estn libres.

Consola de agente

La consola de agente es el componente del CallCenter que administra la interaccin del


agente con el sistema. Esta consola de agente es esencialmente una pgina Web que
revisa regularmente el estado de llamadas asignadas al agente, y consulta la informacin
relevante a esta llamada para ser mostrada. Por medio de la consola de agente se
informa cul nmero est siendo atendido, la informacin de contacto para el nmero
marcado (si est disponible), y adems se interacta con el formulario para la encuesta
asociada al agente (si existiese alguna). La consola de agente tiene integrados comandos
para iniciar y finalizar una pausa (break), para poner a la llamada en espera, y para
realizar transferencias de llamadas.

Administracin de campaas

La administracin de campaas permite crear nuevas campaas, para su ejecucin al


logonearse los agentes. Aqu se implementa tambin la creacin de formularios, y la
administracin de breaks. Adicionalmente se proporciona una interfaz para la creacin
de agentes en el sistema que son capaces de recibir llamadas de campaas, y una
pantalla de configuracin que permite iniciar, detener y configurar el marcador
predictivo, incluyendo la activacin de depuracin.

Reportes

Los reportes implementados incluyen:

Reporte de los descansos tomados por los agentes


Detalle de las llamadas colocadas, filtrable por periodo de tiempo, cola y agentes
Histograma de las llamadas colocadas en cada hora, por fecha y estado
Reporte de las llamadas contestadas por cada agente, filtrable por periodo
Histograma de tiempo de espera para las llamadas
Intervalo total que cada agente pasa logoneado en el sistema
Eficiencia de colas de llamadas entrantes, como porcentaje de llamadas entrantes
que son abandonadas

137
26.4 Procedimientos para el uso del Elastix
Dialer

Administrador - Configuracin de agentes

Para configurar nuevos agentes para la realizacin de campaas, se debe de ir a la


pantalla de CallCenter-->Agents. La pgina mostrada es un listado de los agentes
existentes en el sistema (una lista vaca si no se ha creado ninguno). Al seleccionar el
botn de Nuevo Agente, se muestra un dilogo que pide para el nuevo agente, el
nombre, el nmero de agente, y una contrasea que se usa para el login del agente. Una
vez ingresado esto, el agente se crea en el sistema y puede ser usado para nuevas
campaas.

Administrador - Creacin de campaas

Para la creacin de una campaa saliente, primero se debe crear, desde alguna fuente
externa, un archivo de texto que contenga todos los nmeros que sern contactados en
una tabla. Este archivo debe de estar en formato CSV (archivo separado por comas) y
debe de tener la columna de nmeros de telfono como primera columna. [TODO: cul
es la columna de los nombres?] A continuacin se debe de elegir una cola que no est
siendo todava utilizada.

Una campaa debe tener adems un formulario asociado para que sea llenado con las
respuestas del abonado. Si no se ha creado un formulario todava, se debe ir a la pantalla
de Formularios, y pulsar en el botn de Nuevo Formulario. Esto inicia el editor de
formularios, en el cual se especifica una serie de campos. Cada campo tiene un nombre,
una etiqueta y un widget que se mostrar para el ingreso del campo. [TODO: confirmar
esto] El formulario definido se guarda con un nombre simblico, el cual se usar como
referencia en pasos futuros. Es posible reusar el mismo formulario para varias
campaas.

Una vez hecho esto, se debe ir a la pantalla de CallCenter-->Outgoing Calls, donde se


muestra un listado de las campaas que se han creado en el sistema. Se pulsa el botn
de Nueva Campaa, y aparece un dilogo en el que se ingresa el intervalo de fechas en
que se realiza la campaa, el horario en que se realiza la campaa en cada da, el
formulario que se usa para la campaa, la cola que se usar para la campaa, y el guin
que el agente debe de usar para interactuar con el cliente, entre otros valores. Tambin
se requiere en el mismo formulario, la carga del archivo CSV creado como primer paso.
Al pulsar el botn Guardar, se crea la nueva campaa.

Administrador - Reportes

138
Para todos los reportes, se requiere elegir las opciones de filtrado requeridas.

Operador - interaccin con consola de agente

Todo agente debe tener a mano un telfono IP configurado para que se conecte a la
central Elastix usada para las campaas. Para esto se puede usar cualquier telfono VoIP
fsico, o un programa de softphone que corra en la PC del agente.

Para empezar a atender llamadas, el agente debe ingresar a la pgina Web de Elastix con
su usuario de operador, y luego elegir la opcin CallCenter-->Agent Console. Esto
muestra una segunda peticin de login, que muestra una lista desplegable con los
agentes creados, y otra lista desplegable con las extensiones disponibles. El agente debe
elegir de las listas su propio cdigo y extensin, y pulsar el botn de Aceptar. Entonces
la interfaz Web ordena al Asterisk que inicie una llamada de login hacia la extensin del
agente. El agente debe de contestar el telfono, y escuchar una grabacin que indica
que ingrese la clave de acceso del agente. El agente debe usar el teclado numrico del
telfono para ingresar la clave, y si es correcta, el sistema admite al agente como
logoneado y disponible para recibir llamadas.

Si hay una campaa activa en la cola donde el agente est logoneado, el agente
eventualmente recibir una llamada a travs de la cola. Entonces la interfaz Web
muestra la informacin del nmero marcado, y posiblemente la informacin ingresada
segn la campaa. El agente debe entonces hablar con el abonado, usando si es
necesario el guin disponible en la cejilla marcada como Script. Si la campaa se realiza
para encuesta, y se tiene un formulario, el formulario aparece en otra cejilla, para que el
agente lo llene con la informacin proporcionada con el abonado. Si el abonado cierra la
llamada, la informacin de la llamada desaparece, y el agende queda disponible para
atender la siguiente llamada.

26.5 Resolucin de problemas


A continuacin se detallan algunos problemas que podran ocurrir durante el
funcionamiento del marcador, junto con sugerencias sobre posibles soluciones a tales
problemas. Para cualquier problema relacionado con el marcador, es de suma utilidad
examinar el archivo de log del marcador (/opt/elastix/dialer/dialerd.log). Se puede
activar la emisin de mensajes de depuracin al archivo de log, a travs de la interfaz
Web del Elastix CallCenter-->Configuration.

Marcador no marca (ningn agente recibe llamadas):

Si ningn agente de una campaa recibe llamadas, pueden haber dos escenarios
principales: el que no se estn generando llamadas en primer lugar, o el que todas las

139
llamadas estn fallando en ser colocadas. Si ninguna llamada est siendo generada,
puede ocurrir que

a) la campaa est en estado inactivo (verificable a travs del listado de campaas


en la pgina Web)

b) la campaa est fuera de horario. Se puede verificar esto con la opcin Ver
(View) del listado de campaas. Versiones viejas de la interfaz Web tenan un
problema de usabilidad en el cual la fecha de inicio de la campaa y la hora de
inicio de la campaa en cada da se introducan con el mismo control, as como
con la fecha final y la hora de fin de actividad diaria. Resultaba frecuente que se
eligiera la hora igual para inicio y fin de la banda diaria de actividad por error, lo
cual conduca a que la campaa nunca se activara. Aunque la interfaz actual fue
rediseada para evitar este error, hay que tenerlo en cuenta, especialmente con
campaas creadas con versiones antiguas de la interfaz.

Si todas las llamadas fallan en ser colocadas (lo cual se puede averiguar examinando el
log detallado), se debe verificar si se pueden colocar llamadas a travs de un telfono
ordinario o un softphone, a travs de la troncal que se debe usar para la campaa. Si se
puede hacer esto, se debe verificar que la troncal est correctamente especificada. Las
versiones recientes del marcador corrigen un problema con troncales que requieren
prefijos antes del nmero marcado, cuando tal prefijo se guarda en el FreePBX. Si su
central usa una troncal personalizada, verifique que la plantilla de marcado especifica
un $OUTNUM$ (todo en maysculas) para que el marcador sepa cmo construir la
cadena de marcado.

2008/10/03 13:14 : (DialerProcess) DEBUG: generando llamada


Destino..... 9832855147
Cola........ 3000
Contexto.... from-internal
Trunk....... SIP/IPCOM
Plantilla... SIP/IPCOM/84162352$OUTNUM$
Caller ID... (no definido)
Cadena de marcado SIP/IPCOM/841623529832855147

En el ejemplo de arriba, el programa de marcado emite (con depuracin activada) el


trunk usado, la plantilla que usa para marcar, y la cadena que se usa para especificar el
marcado al Asterisk.

Marcador slo marca a un nmero pequeo de agentes


(subutilizacin):

La causa ms frecuente de la subutilizacin de agentes es que se haya dejado en su valor


por omisin al mximo nmero de canales a usar para la campaa. Por omisin se usan

140
3 canales como mximo para el trunk de la campaa. Si usted tiene ms agentes, y la
troncal admite una capacidad mayor, se debe aumentar el valor a un nmero consistente
con la naturaleza de la troncal. La interfaz ISDN soporta 23 canales de voz en T1 y 30
en E1, y las troncales VoIP como IAX y SIP no tienen lmite superior, excepto por
ancho de banda.

Si usted usa una troncal VoIP como SIP o IAX, y luego de aumentar el mximo nmero
de canales los agentes siguen subutilizados, es posible que las llamadas estn tardando
demasiado en ser colocadas. Esto puede deberse a congestin de la red o del proveedor
del otro lado de la troncal SIP. La depuracin en versiones recientes del CallCenter
indica cunto tiempo tardan las llamadas en ser colocadas:

2008/10/02 04:32 : (DialerProcess) DEBUG: (cola 501) todavia quedan 1


llamadas pendientes de OriginateResponse!
2008/10/02 04:32 : (DialerProcess) DEBUG: llamada 32065-14-18429
espera respuesta desde hace 28 segundos.

Otro motivo frecuente por el que los agentes estn subutilizados es que un porcentaje
muy alto de las llamadas est fallando en la colocacin. Esto tambin se puede revisar
en el log del marcador.

Marcador deja de generar llamadas luego de funcionar


correctamente por un intervalo:

Se conoce de un bug en la versin de Asterisk 1.4.22 en la cual el estado de un agente


(como lo reporta el comando 'queue show') es inconsistente con el estado verdadero del
agente. Especficamente, 'queue show' reporta que el agente est en uso (estado InUse)
cuando realmente est libre. Las versiones de CallCenter posteriores a 1.3 contienen un
rodeo que consulta tambin el estado segn el comando 'agent show' el cual no es
afectado por el bug. Si no puede obtener una versin actualizada del CallCenter, se
puede usar una versin anterior de Asterisk.

26.6 Usando la interfase Web de


administracin de campaas
Bueno, vamos ahora a explicar brevemente cmo se usa la interfase Web de
administracin de campaas. Esto es muy importante de conocer para el administrador
del call center.

Desde esta interfase podremos administrar Agentes, Formularios, Campaas y Breaks.

141
Administracin de Agentes

La administracin de agentes se realiza desde el men de Agentes. Aqu se nos permite


ingresar los datos de las personas que van a operar el sistema y que se les ha
denominado agentes. Cada agente debe tener un nmero y clave asignado, para que por
medio de esta se registre y reciba o realice llamadas.

Dentro del men de agente tenemos las siguientes pantallas o funcionalidad.

Listado de Agentes

Muestra la lista de los agentes que han sido creados previamente.

Pantall de listado de agentes

Para cada agente se muestra la siguiente informacin.

Nombre Descripcin
Desconectar Desconecta a un agente, que posee la
sesin activa en la consola de agente.

Configuracin Si hay un visto:


El agente se encuentra registrado en la
base de datos y en el archivo de
configuracin de Asterisk

Si hay una equis:


Indica que hay un error con este agente y
los errores pueden ser los siguientes:
Registrado en la base de datos pero
no en el archivo de configuracin
de Asterisk
Registrado en el archivo de

142
configuracin de Asterisk pero no
en la base de datos

Nmero Nmero asignado al agente. Es con este


nmero que deber ingresar a la consola
de agente.
Nombre Nombre del Agente
Estado Puede ser: Conectado o Desconectado
Opciones Ver:
Muestra la informacin del agente, el
agente podr ser Modificado Eliminado.

Reparar:
Un agente ser reparado si se encuentra en
la siguientes situaciones:
1. No se registr en el archivo de
configuracin de Asterisk, as que
ser tomado de la base de datos y
agregado.
2. No se registr en la Base de Datos
en tal caso se elimina del archivo
de configuracin de Asterisk

Ingreso de Agentes

Para agregar un nuevo Agente, dar click en el botn Nuevo Agente. Se mostrar un
formulario en cual se ingresarn los siguientes campos:

Formulario para la creacin de nuevo agente

Nombre del campo Descripcin


Nmero de Agente Nmero asignado a un agente. Tener en
cuenta que este nmero es la

143
identificacin para ingresar a la interfase
Web
Nombre Nombre del Agente
Contrasea Contrasea del Agente
Confirmar Contrasea

Visualizar, Editar y Eliminar

Al dar clic sobre la palabra View se nos conducir a una pantalla donde se mostrar los
datos del agente.

Viendo los datos de un agente

Para eliminar un agente de clic en el botn Eliminar. Se puede adems modificar los
datos del agente en el botn Editar. Los datos que puede cambiar son: Nombre y
Contrasea.

Editando un agente

Administracin de Formularios

Esta ventana nos permite la creacin de formularios, los cuales se crean con el objetivo
de recolectar datos al momento de ejecutar una campaa y realizar llamadas desde la
consola de agente.

En este men tenemos dos opciones Listado de Formularios y Diseo de Formularios.

144
Listado de Formularios

Muestra la lista de formularios existentes, con el objetivo de hacer una vista preliminar
de estos, antes de que sean usados en una campaa. Los datos que se pueden apreciar en
el listado son los siguientes:

Listado de formularios

Nombre del campo Descripcin


Nombre Nombre del Formulario
Descripcin Descripcin del Formulario
Estado Estado del Formulario, que puede ser
Activo o Inactivo
Opciones Vista Previa:
Visualizacin de los campos que posee el
formulario de forma Grfica.

Para hacer una vista preliminar de los formularios se debe hacer clic sobre la palabra
preview. Esto nos conducir a una pantalla donde se mostrar: el Nombre, Descripcin
y los campos que contiene un formulario en forma grfica.

Es importante tomar en cuenta que desde esta opcin no se puede ingresar ningn dato.

Vista preliminar del formulario

145
Diseo de Formularios

Al igual que la opcin anterior se muestra el listado de formularios existentes y las


columnas que se muestran estn explicadas en la tabla de ms abajo:

Diseador de formularios

Nombre del campo Descripcin


Nombre Nombre del Formulario
Descripcin Descripcin del Formulario
Estado Estado del Formulario, puede ser Activo o
Inactivo
Opciones Ver:
Visualizacin de los campos que posee el
formulario de forma Textual. El
formulario podr ser: Editado,
Desactivado, Eliminado.

Activar:
Activa los formularios, cuyo estado es
Inactivo.

Para agregar un nuevo Formulario se debe dar clic en el botn Crear Nuevo Formulario.
Se mostrar una pantalla que se encuentra dividida en dos secciones. La seccin
superior o cabecera sirve para ingresar informacin general del formulario como el
nombre del mismo y una descripcin.

146
Creacin de nuevo formulario

La seccin inferior sirve para definir los campos que conformarn el formulario. Se
puede aadir un nmero arbitrario de campos.

Estos campos son agregados desde la seccin que dice Nuevo Campo. La informacin
que se debe ingresar para cada campo es la siguiente.

Nombre Descripcin
Nombre del Campo Nombre del campo
Orden El orden con que se presentar el campo
en el formulario Web
Tipo Los tipos de campos soportados hasta el
momento son los siguientes :

Label: Etiqueta
Text: Caja de Texto
List: ComboBox
Date: Campo tipo fecha
Text Area: Ingreso de Texto
extenso

Nota: Si se selecciona el tipo List se debe indicar las posibles opciones


separadas por coma en el cuadro de texto Opciones.

Visualizar, Editar y Eliminar formularios

Al dar clic sobre en la palabra View, se nos conducir a una pantalla donde se mostrar
los campos que contiene un formulario en forma textual.

147
Visualizacin de formulario

Para Desactivar o Eliminar un formulario haga uso de los botones que se encuentran en
la parte superior.

Puede adems modificar el nombre, descripcin del formulario as como tambin se


puede aadir, editar y eliminar sus campos definidos.

Edicin de formulario

Administracin de campaas salientes

En esta pantalla se puede crear lo que se conoce como campaas salientes, que son
informacin de cundo y cmo se va a generar una serie de llamadas de manera
automtica a nmeros telefnicos que se deben subir en un archivo CSV desde esta
misma opcin.

Listado de Campaas Salientes.

148
En esta opcin se muestran todas las campaas salientes que se han creado en el
sistema. Los datos que se visualizan en forma de columnas son:

Listado de campaas salientes


Nombre Descripcin
Nombre Nombre de la Campaa
Fecha Inicio Fecha de inicio en que se va a encontrar
vigente la Campaa
Hora Inicio Hora de inicio en que se va a encontrar
vigente la Campaa
Fecha Fin Fecha de fin de la Campaa. Luego de
esta fecha no se realizarn ms llamadas
aunque hayan quedado nmeros
telefnicos pendientes.

Hora Fin Hora de fin de la Campaa. Luego de esta


hora no se realizarn ms llamadas aunque
hayan quedado nmeros telefnicos
pendientes.

Intentos Nmero de Intentos de las llamadas a


realizar
Troncal Salida de la llamadas de una campaa
Cola Cola asignada para realizar la campaa
Llamadas Completadas Nmero de llamadas completadas.
Promedio Promedio de duracin de las llamadas
realizadas en una campaa
Estado Estado de una campaa, puede estar
Activa o Inactiva
Opciones Ver:
Datos de la Campaa. Adems la campaa
saliente podr ser: Editada, Desactivada,
Eliminada.

Activar:

149
Cuando la campaa est desactivada.

Datos CSV:
Datos en formato CSV de los formularios
recolectados en las respectivas campaas.

Ingreso de Campaas Salientes

Desde esta pantalla se van a especificar todos los datos necesarios para la creacin de
una campaa. Hay que tomar en cuenta que estos datos son importantes al momento que
se generan las llamadas. A continuacin se describe cada uno de ellos:

Formulario de ingreso de nueva campaa

Nombre Descripcin
Nombre Nombre de la Campaa
Fecha Inicio Fecha de inicio en que se va a encontrar

150
vigente la Campaa
Fecha Fin Fecha de fin de la Campaa. Luego de
esta fecha no se realizarn ms llamadas
aunque hayan quedado nmeros
telefnicos pendientes.
Formulario Seleccionar los formularios de los cuales
se va a hacer uso durante la campaa
telefnica, para recolectar datos.
Troncal Troncal por la que las llamadas telefnicas
salen.
Contexto Nombre del contexto a utilizar en una
campaa. Por defecto se utiliza:
frominternal
Cola Cola que se ha creado en el IVR con los
agentes que van a realizar las llamadas y
que es asignada para realizar la campaa
Intentos Nmero de veces que se reintenta ejecutar
una llamada que no se ha ejecutado con
xito.
Archivo de Llamadas Archivo formato CSV que contiene los
nmeros de telfonos de las personas a las
cuales se realizar las llamadas. A ms de
los telfonos tambin se pueden cargar
ms datos.
Script Script o Guin es un mensaje de gua para
los agentes en el momento que estn
realizando las llamadas, es decir, que este
podra servir en el momento que una
llamada es realizada y el agente tiene un
saludo cargado en este script

Archivo de Llamadas

En el archivo de llamadas se colocarn los nmeros de telfonos, los cuales sern


marcados por el call center para efectuar una campaa. Tambin es posible especificar
en el archivo ms columnas que contengan datos como Nombre, Direccin, Cdula, etc.
Estas columnas se pueden definir arbitrariamente y pueden ser referenciadas luego
desde el guin.

Existen algunas restricciones de formato del archivo de llamadas:

Debe estar en formato CSV


La primera columna debe ser el nmero telefnico.

151
Si se especifica en la primera fila las cabeceras, esta debe iniciar con una coma
(,).

En general un archivo de llamadas puede estar constituido nicamente por los nmeros
telefnicos a los que van a llamar.

Formato bsico del archivo de llamadas

Como explicamos antes tambin se puede incluir un nmero arbitrario de columnas


separadas por comas conteniendo cualquier informacin que se necesite mostrar en el
guin.

152
Archivo de llamadas con columnas arbitrarias

Nota: El nmero de telfono, no tendr cabecera alguna, los dems campos se


colocarn separados por (,) comas.

Visualizar, Editar y Eliminar campaas

Al dar clic sobre la palabra View, se nos conducir a una pantalla donde se mostrar los
datos de la campaa.

Visualizacin de los datos de una campaa

Para editar, desactivar o eliminar una campaa haga uso de los botones que se
encuentran en la parte de arriba de la informacin.

Los datos que puede cambiar son: Nombre, Fecha Inicial, Fecha Final, Formularios,
Troncal, Contexto, Cola, Nmero de Intentos, Script.

153
Editando una campaa

Administracin de llamadas entrantes

Aqu se nos permite asignar aquellas colas que sern destinadas para recepcin de
llamadas en un call center, facilitando realizar un monitoreo de la llamadas recibidas por
un agente, para determinar cuales se realizaron con xito y cuales no lograron
contestacin.

Listado de Colas

Muestra la lista de las Llamadas Entrantes, con los siguientes datos.

154
Listado de colas para manejar llamadas entrantes

Nombre Descripcin
Nombre de cola Nmero de la Cola
Estado Puede ser Activa o Inactiva
Opciones Ver:
Muestra informacin de la cola, tal como:
Script detallado, cul es el mensaje
observado por los agentes.
La cola seleccionada podr ser: Editada o
Desactivada.

Activar:
Activa una cola posee el estado de
Inactiva

Seleccionar una Cola

Para seleccionar una cola, dar clic en el botn de Seleccionar una cola. Se mostrar un
formulario en cual se ingresarn los siguientes campos:

155
Formulario para seleccionar una cola y asociarle un guin

Nombre Descripcin
Seleccionar una cola Selecciona de un combo una cola
previamente creada
Script Guin o mensaje visualizado por Agente

Visualizar, Editar y Eliminar

Al dar clic sobre la palabra View, se nos llevar a una pantalla donde se mostrar los
datos de la cola.

Visualizacin de una cola

Para eliminar una cola de clic en el botn Eliminar. Se puede adems modificar los
datos de la cola clic en el botn Editar. El dato que puede cambiar es: el Script.

156
Edicin de una cola

Administracin de Breaks

La opcin Administrador de Breaks nos permite crear instantes de tiempos predefinidos


en los cuales los agentes no receptarn o realizarn llamadas, un ejemplo de Break, es el
tiempo de lunch de un agente, muy importante prefijar los tiempos de break para de esta
forma poder determinar la productividad de los agentes y reconocer cual fue el tiempo
en el que estuvo ausente del call center.

Listado de Breaks

Muestra la lista de Breaks, con los siguientes datos:

Pantalla de listado de breaks

157
Nombre Descripcin
Nombre Nombre del Break
Descripcin Descripcin del Break
Estado Puede ser Activo o Inactivo
Opciones Ver:
Muestra informacin del break.
El break podr ser: Editado o
Desactivado.

Activar:
Activa un break cuyo estado es Inactivo

Insertar nuevo Break

Para crear un break, dar clic en el botn de Crear Nuevo Break. Se mostrar un
formulario como el de la siguiente figura.

Formulario de creacin de nuevo break

Visualizar, Editar y Eliminar

Al dar clic sobre la palabra View, se nos llevar a una pantalla donde se mostrar los
datos del break.

Visualizacin de los datos de un break

Para desactivar un break de clic en el botn desactivar.

158
Puede adems modificar los datos del break clic en el botn Editar. Los datos que se
pueden cambiar son: Nombre y Descripcin.

Editando un break

159
Extendiendo la interfase Web
de Elastix
Aunque supiera que el mundo se desintegrar maana, igual plantara
mi manzano
-- Martin Luther King

27.1 El framework Neo


El framework Elastix para la interfaz Web desde sus inicios ha estado en constantes
mejoras tanto en estndares de desarrollo Web, codificacin y arquitectura, con la
finalidad de proveer la mejor interaccin tanto a los usuarios y desarrolladores.

Entre las caractersticas tenemos:

Arquitectura Web basada en MVC2


Desarrollo POO
Concepto e implementacin modular
Mantenimiento de lenguajes
Mantenimiento de la ayuda embebida
Patrones de desarrollo

161
Soporte ACLs

Para entender un poco de las premisas de diseo de la interfase de Elastix explicaremos


un poco de qu se trata MVC2.

Arquitectura Web basada en MVC2

El modelo MVC2 es una arquitectura ampliamente usada para Web, en donde M se


refiere al modelo, V de vista y C de Control, el numero dos se refiere a la versin
del mismo.

Esta arquitectura se encuentra compuesta por cuatro capas principales en donde se


encapsula el concepto modular, obteniendo as tres caractersticas claves de diseo y
desarrollo que son: Mantenibilidad, Modularidad y Reutilizacin; consiguiendo con esto
un modelo escalable lo cual es sumamente til para Web.

Framework Neo basado en arquitectura MVC2

Capa de Vista

Esta capa esta compuesta por el cdigo HTML (tags), por los estilos (CSS) y los scripts
(como javascript).

162
El estndar recomienda que los estilos y scripts estn como archivos externos para que
el recurso de los mismos (como archivos) se encuentren siempre en la cach del
servidor.

Esto produce ahorro de espacio en disco al no repetir estilos y scripts por pgina.

Nota: El estndar no acepta tablas para diseo, se deben usar capas (layers).

Capa de Control

Esta capa es la encargada de recoger y entregar los datos a la capa de vista. Para esto se
usan sesiones y una librera de manejo de plantillas llamada Smarty.

Para recoger los datos se usan los mtodos GET y POST establecidos en los formularios
HTML (etiquetas form). Otra opcin de recoger datos es por sesiones.

Esta capa se encuentra mayormente constituida por archivos de clases.

Capa de Modelo

La participacin de esta capa es para realizar las transacciones y/o obtener y enviar
datos a la capa de datos.

Hay que notar que aqu se ha dividido lo que es consultas (sentencias SELECT) y las
inserciones, actualizaciones y eliminaciones. Esto se hace para poder hacer reportes
bajo cualquier criterio.

Para las consultas no es necesario realizar stored procedures.

Una innovacin es el concepto de hibernate que realiza consultas, eliminaciones,


inserciones y actualizaciones bajo xml y programacin orientada a objetos.

Capa de Datos

En esta capa se encuentra la metadata y los datos de un modelo de negocios, encargada


de dar soporte a mltiples usuarios concurrentes (dependiendo de la base de datos).

El esquema para MVC2 es la capa de repositorios de datos en donde se encuentran


tambin los stored procedures.

163
Recomendacin es realizar completamente bien el anlisis del modelo de negocios para
que la base de datos sea altamente flexible y robusta a cambios.

Desarrollo POO

Este es uno de los mas recientes paradigmas para programacin y sus siglas significan
Programacin Orientada a Objetos; su mtodo de abstraccin es elevada, muy
organizador que la parte lgica de los desarrollos puede ser resuelto en gran parte con el
diagramado de clases.

En Elastix esta parte est relacionada con los archivos dentro de las carpetas libs y
estas pueden ser tanto para el framework como para un modulo.

La programacin POO es usada en la Capa Modelo de MVC2.

Implementacin modular

Elastix es un software que se mantiene en constante innovacin y tener el desarrollo en


forma modular es la solucin para esto. Actualmente un modulo de Elastix tiene
aplicado en si MVC2 o sea una recursividad entre el framework y un modulo.
Se establece un estndar en el contenido o dentro de una carpeta:

Carpeta Descripcin
themes/ Estn la definicin de plantillas (html,
javascript, css)
index.php El punto de entrada comn para todas las
pantallas de la interface de Elastix. Es
quien decide qu pantalla mostrar
dependiendo de los parmetros recibidos
libs/ Aqu se encuentran las libreras (cdigo
reciclable)
configs/ Archivos de configuracin
langs/ Definicin de los lenguajes, actualmente
se soportan 22 idiomas
images/ Imgenes que sern usadas tanto en la
ayuda como en el modulo
help/ Ayuda del modulo

Podemos notar que la carpeta themes define la capa vista, la carpeta libs define la
capa modelo y el archivo index.php define la capa control.

164
27.2 Creacin de un mdulo de Elastix

Creando el Men

Los mens en Elastix se dibujan automticamente de la informacin extrada de la base


de datos de mens. Por lo tanto para crear un nuevo men debemos ingresar una nueva
fila en la tabla men de la base de datos menu.db en formato sqlite 3.

$ sqlite3 /var/www/db/menu.db

sqlite> insert into menu values ('module_id', 'id_parent',


'link', 'module_name', 'module_type');

Donde,

Nombre Etiqueta Descripcin


module_id Identificador del mdulo. Normalmente se
trata de un identificador de tipo texto.
id_parent Id del mdulo padre. En caso de que sea
un men de primer nivel se usa 0
link Si el men es de tipo framed este campo
se llena con un link a la aplicacin que se
quiere vincular. Si el men es de tipo
module se deja vaco.
module_name Nombre del mdulo. Por ejemplo
Hardware Detector
module_type Un mdulo puede ser de dos tipos: framed
y module. El primero se usa cuando se
quiere embeber en un frame otra
aplicacin. Por ejemplo este es el caso de
VTigerCRM.

Ejemplo:

sqlite> insert into menu values ('example', 'extras','',


'Example', 'module');

Una vez creado el nuevo men en la tabla menu, procedemos a hacer que ste men sea
accesible para los usuarios de Elastix.

165
Elastix maneja un sistema de ACLs (Access Control List) o Lista de Control de Acceso,
el cual es un concepto que permite manejar permisos de acceso de una manera ms
organizada.

La informacin de ACLs se almacena en una base de datos SQLite llamada acl.db. Esta
base de datos contiene algunas tablas que se enlistan a continuacin.

[root@elastix ~]# sqlite3 /var/www/db/acl.db


SQLite version 3.3.6
Enter ".help" for instructions
sqlite> .tables
acl_action acl_membership acl_user
acl_group acl_profile_properties acl_user_permission
acl_group_permission acl_resource acl_user_profile

A continuacin explicaremos para qu sirven las tablas ms importantes.

Tabla Descripcin
acl_action Pueden haber algunas acciones que se
realicen sobre un recurso (en nuestro caso
men) como por ejemplo tener acceso de
lectura, poderlo modificar, poderlo
eliminar, etc. Esta tabla almacena las
acciones posibles sobre un recurso.
acl_group Los usuarios se pueden asociar en grupos
para facilitar la asignacin de permisos.
De esta manera es ms fcil modificar los
permisos de un grupo de usuarios en lugar
de estar cambiando permisos a cada
usuario.
acl_group_permission Matriz de permisos de un grupo dado.
Bsicamente aqu se almacenan qu
acciones puede realizar un determinado
grupo sobre un determinado recurso.
acl_membership Esta tabla almacena la relacin usuario vs
grupo. Es decir que nos dice qu usuarios
pertenecen a cada grupo.
acl_resource En el caso de Elastix un recurso significa
un men. Un recurso es la entidad que es
objeto de los permisos.
acl_user Aqu se almacenan los usuarios de Elastix.
Por omisin se encuentra aqu el usuario
admin, caso contrario no se podra
ingresar a la interfase de Elastix por
primera vez.

166
acl_user_permission Esta tabla contiene la matriz de permisos
para cada usuario

Veamos qu contiene por ejemplo la tabla acl_resource y veremos algunos mens


conocidos all. La salida de la tabla ha sido truncada pues no es necesario mostrar toda
la salida.

[root@elastix ~]# sqlite3 /var/www/db/acl.db


SQLite version 3.3.6
Enter ".help" for instructions
sqlite> select * from acl_resource;
1|sysinfo|System Info
2|network|Network
3|network_parameters|Network Parameters
4|dhcp_server|DHCP Server
5|usermgr|User Management
6|grouplist|Group List
7|userlist|User List
8|group_permission|Group Permission
9|load_module|Load Module
10|shutdown|Shutdown
11|hardware_detection|Hardware Detection
12|updates|Updates
13|packages|Packages
14|repositories|Repositories
15|backup_restore|Backup/Restore
16|preferences|Preferences
17|language|Language

Ahora ingresemos nuestro men en la tabla acl_resource.

$ sqlite3 /var/www/db/acl.db

sqlite> insert into acl_resource (name, description) values


('example', 'Example');

Si revisamos la interfaz Web en este punto ya veremos que un nuevo men sale
enlistado aunque sin nombre. Este es nuestro men. Sale sin nombre por ahora puesto
que no hemos modificado los archivos de lenguaje todava pero al menos ya podemos
asignarle permisos de manera ms cmoda desde la interfase Web en lugar de
manipular las tablas directamente.

Vayamos a System --> User Management --> Group Permission

167
Nuevo mdulo sale enlistado al final de la lista de recursos

En la figura anterior se observa que la hemos seleccionado para el grupo administrador.


Es decir que los usuarios de ese grupo ahora podrn tener acceso al nuevo men.

Ahora definamos la cuestin de los lenguajes para poder ver el nombre de nuestro men
en la pantalla anterior.

Definicin de lenguajes

Los lenguajes en Elastix se definen en la carpeta /var/www/html/lang

Esta carpeta contiene algunos archivos, uno por cada lenguaje. Las dos primeras letras
del nombre del archivo identifican el lenguaje. Por ejemplo, el archivo en.lang se usa
para el idioma ingls (english) mientras que el archivo es.lang se usa para el idioma
espaol.

Estos archivos son archivos de texto que podemos editar con el editor vim por ejemplo.
Sin embargo es importante notar que se encuentran en lenguaje PHP por lo que

168
debemos tener cuidado de no eliminar caracteres especiales como el punto y coma o los
parntesis.

Bueno, editemos el archivo en.lang para incluir nuestro nuevo men. Si su Elastix se
encuentra configurado en otro idioma debe editar el archivo correspondiente.

Vaya al final de este archivo y antes del smbolo que cierra el arreglo ); agrege el
nombre de su mdulo.

En este caso agregamos Example => Example, //nombre del mdulo.

Grabe el archivo y listo, ya podremos ver el nombre de nuestro mdulo en el listado


anterior.

Visualizando el nuevo mdulo

Ahora en System --> User Management --> Group Permission, ver que el nombre de
su modulo se visualiza, si no est marcado, mrquelo y aplique los cambios.

Listado de permisos de grupo. Ahora si se muestra el nombre del nuevo mdulo

169
Visitemos ahora nuestro nuevo mdulo que se encuentra dentro del men de Extras.

Veremos que al hacer clic en l, se presentar el siguiente error:

Error: the module modules/examples/index.php could not be found.

Visitando por primera vez nuestra nueva entrada en el men

Para solucionar esto veamos cmo llenar nuestro mdulo con cdigo til.

27.3 Programacin de un Mdulo


Bueno, ya hemos creado los permisos para poder acceder al nuevo mdulo y aparece ya
dibujado dentro del men de Extras. Ahora comencemos a codificar algo para que
nuestro mdulo sea til.

Cada mdulo reside dentro de una carpeta dentro de la ruta /var/www/html/modules/ y


el nombre de esta carpeta tiene que ser igual al module_id que se ingres en la tabla
menu. En nuestro caso el id era example por lo que creamos la carpeta de la siguiente
manera.

$ mkdir p /var/www/html/modules/example/

Es de esta manera como el framework Neo ubica al mdulo en el sistema de archivos en


base a la informacin que encuentra en la base de datos de mens.

Para facilitar las cosas solicite a su instructor un archivo tar.gz que contiene un mdulo
de ejemplo el cual deber copiar a la carpeta recin creada.

Es importante mantener los permisos de la carpeta creada bajo el usuario asterisk ya


que por el momento el servidor Web de Elastix se ejecuta bajo este usuario

170
$ chown R asterisk:asterisk /var/www/html/example/

27.4 Arquitectura Modular


A continuacin un esquema general de los componentes de un mdulo y cmo
interactan entre s. Vemos que el archivo index.php es el director de orquesta.
Explicaremos ms de este archivo ms adelante.

default.conf.php

...class.php module

...class.php libs configs


php file

...class.php
folder
...class.php

tpl 1 themes
index.php en.lang
lang
tpl 2
default fr.lang

tpl 3
es.lang

tpl ...
...lang

Componentes de un mdulo de Elastix

Archivo index.php

El archivo index.php dentro de la carpeta de un mdulo es el punto de entrada al


mdulo. Es decir que es lo primero que el framework tratar de ejecutar para invocar al
mdulo.

Este archivo bsicamente contiene una funcin llamada _moduleContent. Esta funcin
debe retornar el contenido HTML a ser dibujado por el mdulo.

Un ejemplo sencillo de mdulo hola mundo sera el siguiente:

171
<?php
function _moduleContent($smarty, $module_name)
{
return hola mundo;
?>

27.5 Elastix Developer Tools al rescate


Elastix Developer Tools no es otra cosa que un mdulo de Elastix que contiene una
serie de herramientas, que entre otras cosas, nos permiten construir mdulos. Suena
confuso al principio verdad?

Bueno, en todo caso es una herramienta muy til a la hora de construir un nuevo
mdulo pues nos permite crear el esqueleto inicial de cdigo necesario para elaborar un
mdulo de Elastix, lo que puede constituir un ahorro de horas en muchos casos.

El mdulo Elastix Develper Tools, tambin llamado simplemente Developer, se


encuentra dividido en tres submdulos. Ha sido desarrollado para realizar acciones de
creacin de mdulos, eliminacin de mdulos y mantenimiento de lenguajes. Su uso
est dirigido a desarrolladores que tienen un conocimiento bsico del framework Elastix
(Neo), lenguaje de programacin PHP y bases de datos MySQL y SQLite.

El uso de estas herramientas representan un ahorro en tiempo de codificacin y nos


otorga transparencia en procesos rutinarios al empezar a desarrollar un modulo para la
GUI de Elastix.

Instalando Elastix Developer Tools

La instalacin de este mdulo no es diferente a la de cualquier otro mdulo de Elastix.


Es decir que descargamos el mdulo va Internet y lo instalamos a travs del men
Sistema -> Cargar Mdulo.

Inmediatamente despus de su instalacin veremos un nuevo men llamado


Developer.

Este mdulo Developer puede ser descargado del sitio de descargas de Elastix y se
encuentra bajo el nombre de Developer. A la fecha de redaccin de este captulo, la
versin ms reciente se encuentra en la siguiente ruta:

http://downloads.sourceforge.net/elastix/developer_1.0-2beta.tar.gz

172
Construyendo un mdulo de Elastix con el Developer

Comencemos dando clic en el primer submdulo del Developer, llamado el constructor


de mdulos.

Este es el principal componente del Developer y su funcin es generar el esqueleto de


cdigo del nuevo mdulo que estamos creando, para luego continuar con el desarrollo
de la lgica.

Al crear un modulo desde aqu, se generarn lo siguiente:

El men (o los mens) y su correspondiente informacin de ubicacin dentro del


rbol de mens de la interfase Web de Elastix
El cdigo esqueleto, el cual se encontrar dentro de una carpeta cuyo nombre
ser igual al ID del mdulo. Esta carpeta ser ubicada a su vez dentro de la
carpeta /var/www/html/modules/ que es donde residen todos los
mdulos de Elastix.
Pantallas prototipo. Estas pantallas pueden ser de tres tipos: reporte (o grid),
formulario y framed. Ya hablaremos de estos tres tipos de pantalla ms adelanto.
Lo importante de conocer ahora es que esto facilita enormemente las tareas de
codificacin de formularios o reportes simples.

Veamos ahora cmo luce el constructor de mdulos.

El constructor de mdulos que forma parte de Elastix Developer Tools

173
Como podemos observar, el constructor de mdulos se encuentra esta seccionado en
tres partes:

Informacin General
Localizacin
Descripcin del mdulo

Informacin General

Esta seccin nos permite definir el nombre e identificador nico del mdulo, as como
tambin los datos de la persona que crea el modulo para comentarlas en las cabeceras de
cada archivo de programacin en PH. Tambin nos permite configurar el nivel de
accesabilidad que tendr el mdulo a travs del parmetro Group Permission

Seccin de Informacin general dentro del constructor de mdulos

Nombre campo Descripcin


Module Name Nombre del Mdulo. La primera letra de
cada palabra con mayscula.
Module Id Identificador del Mdulo. Debe ser en
minsculas y no se permiten espacios.
Group Permission Esta opcin permite elegir el grado de
accesibilidad de los usuarios.
Your Name El nombre de quien hizo el mdulo.
Your e-mail Direccin de correo electrnico de quien
hizo el mdulo.

Localizacin

En esta seccin se configura el lugar, dentro del men, donde vamos a ubicar el nuevo
mdulo. Elastix maneja tres niveles de mens por ende debemos tener un poco de
cuidado en el ingreso de los datos.

174
Seccin donde se configura la ubicacin del mdulo

Nombre campo Descripciin


Module Level Aqu definimos el nivel de jerarqua del
modulo. Este puede ser 2 3 ya que el
nivel 1 simplemente es de etiquetamiento.
Para clarificar, el nivel 1 es el conformado
por las pestaas Sistema, PBX, Fax,
Email, IM, Reportes, Extras, Agenda, etc.
Level 1 Parent Exists Aqu definimos si vamos a colocar el
mdulo bajo un men de nivel 1 existente
o se tendr que crear uno nuevo. Para
colocar el nuevo mdulo bajo un men
previamente existente escogemos S.

Si escogemos No crearemos un nuevo


men de nivel 1 sobre la marcha. Por esta
razn aparecern dos campos adicionales
para especificar el nombre y el ID.
Level 1 Parent Name Definimos el nombre del "Modulo Padre.
La primera letra con letra mayscula.
Level 1 Parent Id Definimos el identificador del "Modulo
Padre". Todo con minsculas y no se
permiten espacios.
Level 2 Parent Exists Esta opcin aparecer si escogimos un
nivel 3 en el campo Module Level ya
que obviamente en este caso debemos
especificar el men padre de nivel 2.
De manera similar a lo que ocurre con el
campo Level 1 Parent Exists, si se
escoge No aparecern dos campos ms.
Level 2 Parent Name Definimos el nombre del "Modulo Padre"
de nivel 2. La primera letra con letra
mayscula.
Level 2 Parent Id Definimos el identificador del "Modulo
Padre" de nivel 2. Todo con minsculas y
no se permiten espacios.

175
A continuacin algunas figuras de diversas disposiciones que puede tomar esta seccin
dependiendo de las opciones que vayamos eligiendo.

Creacin de un mdulo en un men de segundo nivel con padre de nivel 1 existente.

Creacin de un mdulo en un men de segundo nivel con padre no existente.

176
Creacin de un mdulo en un men de tercer nivel, tanto los padres de nivel 1 y nivel 2 existen.

Creacin de un mdulo en un men de tercer nivel. El padre de nivel 1 existe y el padre de nivel 2 no.

Descripcin del mdulo

Esta ltima seccin es la ms interesante pues es aqu donde se crea la pantalla del
mdulo.

Como mencionamos antes, esta pantalla puede ser de tres tipos: reporte, formulario o
framed.

Reporte: Un reporte muestra datos simplemente. Estos datos se los puede


visualizar como una tabla donde se incluyen automticamente algunos controles
tiles como botones para navegacin. Luego de generar el cdigo necesario con
el constructor de mdulos ya es ms sencillo enlazar el reporte con una base de
datos para mostrar informacin til.

177
Formulario: Sirve para recolectar datos del usuario. El constructor de mdulos
cuenta con soporte para los tipos de campos ms comunes como Text, Select,
Date, Textarea, Checkbox, Radio, Password, Hidden y File.
Framed: Embebe un URL arbitrario en la pantalla. Muy til cuando queremos
integrar aplicaciones externas en la interfase Web de Elastix. Un ejemplo de esto
es la integracin de vtigerCRM.

Creacin de una pantalla tipo Formulario

Con los botones ">>", "<<" podemos aadir o quitar los campos a insertar en nuestro
formulario.

Eliminacin de un mdulo a travs del Developer

El submen "Delete Module" del mdulo "Developer" nos permite eliminar mdulos en
todos sus niveles. Primero se tendrn que eliminar los submdulos que existan en el
mdulo padre para poder eliminarlo por completo.

Eliminacin de un mdulo

Nota: Es muy importante estar seguro antes de seleccionar la opcin Delete


Files pues esto eliminar todos los archivos relacionados con el mdulo en
cuestin del disco duro.

178
Administracin de lenguajes desde el Developer

El submdulo "Language Admin" del mdulo "Developer" nos permite administrar los
diferentes idiomas de los mdulos en Elastix.

Aqu podemos consultar si existe un lenguaje definido para un mdulo, tambin para el
framework y observar una lista de palabras con su respectiva traduccin como lo
podemos observar en la figura de abajo. Estos valores pueden ser modificados de
acuerdo al idioma que desee traducir y guardar los cambios presionando el botn "Save
all".

Administracin de lenguajes desde el mdulo Developer

27.6 Estndar de codificacin PHP en Elastix


Para mantener el cdigo legible es necesario establecer un estndar. De esta manera los
desarrolladores de Elastix no tendrn dificultad de entender el cdigo de nuevos
desarrolladores entusiastas en colaborar.

179
Indentacin

Usar una indentacin de 4 espacios, sin tabs.

Estructuras de control

Aqu se incluyen if, for, while, switch, etc. A continuacin se muestra un


ejemplo de la sentencia if:

<?php
if ((condicion1) || (condicion2)) {
accion1;
} elseif ((condicion3) && (condicion4)) {
accion2;
} else {
accionpordefecto;
}
?>

Las sentencias de control deberan tener un espacio entre la sentencia misma y el


parntesis abierto, para distinguirlas de las llamadas a funciones.

El uso de llaves es estricto y obligatorio aun en situaciones donde ellas son


tcnicamente opcionales. El hecho de usarlas incrementa la legibilidad y disminuye
probabilidad de errores de lgica introducidos cuando nuevas lneas son aadidas. Para
la sentencia switch por ejemplo:

180
<?php
switch (condicion) {
case 1:
accion1;
break;

case 2:
accion2;
break;

default:
accionpordefecto;
break;

}
?>

Llamadas a funciones

Las funciones deberan ser llamadas sin espacios entre el nombre de la funcin, el
parntesis de apertura y el primer parmetro; espacios entre comas y cada siguiente
parmetro, y no espacio entre el ltimo parmetro, el parntesis de cierre y el punto y
coma. A continuacin se muestra un ejemplo:

<?php
$var = foo($bar, $baz, $quux);
?>

Tal como se muestra arriba, debera haber un espacio a ambos lados del smbolo de
igual usado para asignar a una variable el valor retornado por la funcin. En el caso de
un bloque de asignaciones relacionadas, ms espacio puede ser insertado para promover
la legibilidad:

<?php
$short = foo($bar);
$long_variable = foo($baz);
?>

Definicin de funciones

181
La declaracin de funciones sigue la convencin one true brace:

<?php
function fooFunction($arg1, $arg2 = '')
{
if (condicion) {
statement;
}
return $val;
}
?>

Argumentos con valores por defecto van al final de la lista de argumentos. Siempre se
debe intentar retornar un valor significativo de una funcin si existe algn valor
apropiado. Aqu se muestra un ejemplo algo ms elaborado que el anterior:

<?php
function connect(&$dsn, $persistent = false)
{
if (is_array($dsn)) {
$dsninfo = &$dsn;
} else {
$dsninfo = DB::parseDSN($dsn);
}

if (!$dsninfo || !$dsninfo['phptype']) {
return $this->raiseError();
}

return true;
}
?>

Comentarios

La documentacin de clases debera seguir la convencin PHPDoc, similar a Javadoc.


Ms informacin acerca de PHPDoc puede ser econtrada aqu:

http://www.phpdoc.de

182
Comentarios de No-documentacin son permitidos y gratamente bienvenidos. Una regla
general es que si revisas una seccin de codigo y piensas Uuuy, no tengo ganas de
describir este alboroto ahora, tu necesitas comentarlo antes de olvidar cmo funciona.
Comentarios estilo C (\/* *\/) y estandar C++ (\/\/) estn bien. No es bienvenido el uso
de comentarios estilo Perl\/shell (#).

Cdigo de inclusin

En cualquier parte del cdigo en la que te encuentres incluyendo


INCONDICIONALMENTE un archivo de clase, usa require_once() y en cualquier
parte del cdigo en la que te encuentres incluyendo CONDICIONALMENTE un
archivo de clase (por ejemplo, el metodo de factora), usa include_once().

Cualquiera de estos dos asegurar que los archivos de clase sean incluidos solo una vez.
Ellos comparten la misma lista de archivos, as que tu no necesitas preocuparte aceca de
mezclarlos un archivo incluido con require_once() no ser incluido nuevamente por
include_once().

Nota: include_once() y require_once() son sentencias, no funciones. Tu no necesitas


parntesis alrededor de un nombre de archivo para ser incluido.
Etiquetas PHP

Siempre usa <?php ?> para delimitar cdigo PHP, no uses la etiqueta corta <? ?>. Esto
es requerido debido que hace el cdigo ms portable entre diferentes configuraciones y
sistemas operativos.

Comentarios de cabecera

Todos los archivos fuente concebidos por el grupo de desarrollo de PaloSanto Solutions
deben contener el siguiente bloque de comentarios en la cabecera (excepto
probablemente los archivos de configuracin modificables por el usuario):

183
/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
Codificacin: UTF-8
+----------------------------------------------------------------------+
| Elastix version 1.3 |
| http://www.elastix.org |
+----------------------------------------------------------------------+
| Copyright (c) 2008 Palosanto Solutions S. A. |
+----------------------------------------------------------------------+
| Cdla. Nueva Kennedy Calle E 222 y 9na. Este |
| Telfs. 2283-268, 2294-440, 2284-356 |
| Guayaquil - Ecuador |
| http://www.palosanto.com |
+----------------------------------------------------------------------+
| The contents of this file are subject to the General Public License |
| (GPL) Version 2 (the "License"); you may not use this file except in |
| compliance with the License. You may obtain a copy of the License at |
| http://www.opensource.org/licenses/gpl-license.php |
| |
| Software distributed under the License is distributed on an "AS IS" |
| basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See |
| the License for the specific language governing rights and |
| limitations under the License. |
+----------------------------------------------------------------------+
| The Original Code is: Elastix Open Source. |
| The Initial Developer of the Original Code is PaloSanto Solutions |
+----------------------------------------------------------------------+
$Id$ */

No hay una regla fija para determinar cundo un nuevo codificador debera aadir su
nombre a la lista de autores de un archivo fuente. En general, sus cambios deberan caer
en la categora de cambios sustanciales (significando aproximadamente de 10% a
20% de cambios en el cdigo). Excepciones podran ser hechas al reescribir funciones o
contribuciones de nueva lgica trascendente.

Simple reorganizacin de cdigo o correcciones de bugs no deberan justificar la


adicin de un nuevo nombre a la lista de autores.

Archivos que no hayan sido concebidos por PaloSanto Solutions deberan tener un
bloque similar mostrando sus licencias, copyright y autores. Todos los archivos
deberan incluir los comentarios de modo de linea para forzar la consistencia.

URL de ejemplo

Use example.com para todos los URLs de ejemplo, tal como lo sugerido por RFC
2606.

184
Convencin de nombres

Generalmente hablando, los nombres de clases, funciones y variables deberan ser


siempre lo suficientemente descriptivos para que el lector entienda fcilmente para que
estn siendo usadas (estas clases, funciones o variables) en el cdigo.

Clases

Las clases deben tener nombres descriptivos. Evita usar abreviaciones siempre que sea
posible. Los nombres de clases deben siempre comenzar con una letra mayscula. La
jerarqua debera estar tambien reflejada en el nombre de la clase, cada nivel de la
jerarquia separado con un underscore.

Ejemplos de buenos nombres de clases se muestran a continuacin:

Log
Net_Finger
HTML_Upload_Error

Funciones y mtodos

Las funciones y mtodos deberan ser nombradas usando el estilo Minsculas-


Maysculas (tambin conocido como studly caps, bumpy case o camel caps).
Las funciones deberan adicionalmente tener el nombre del paquete como prefijo, para
evitar colisiones de nombres entre paquetes. La letra inicial del nombre es minscula, y
cada letra que comienza una nueva palabra es debe ser mayscula. Algunos ejemplos
son:

Connect()
getData()
buildSomeWidget()
XML_RPC_serializeData()

Miembros privados de una clase y propiedades (significando miembros de clase y


propiedades que estn creadas para ser usadas slo desde dentro de la misma clase en la
cual fueron declaradas; PHP an no soporta funciones o mtodos privados) deben estar
precedidas por un underscore. Por ejemplo:

_sort()
_initTree()
$this->_status

185
Constantes

Nombres de constantes deben siempre estar escritos totalemente en maysculas, con


underscores para separar las palabras. Constantes dentro de una clase (esto es slo una
sugerencia) pueden tener como prefijo el nombre de la clase o paquete. Por ejemplo, las
constantes usadas por el paquete DB:: comienzan todas con DB_.

Variables Globales

Si tu paquete necesita definir variables globales, su nombre debera comenzar con un


underscore seguido del nombre del paquete y otro underscore. Por ejemplo:

$_PEAR_destructor_object_list.

Valores predefinidos true, false, null

Los valores predefinidos de PHP true, false y null deben ser escritos en minscula.

186
Virtualizacin
El hombre nunca debe avergonzarse de reconocer que se ha equivocado,
puesto que hacerlo corresponde a decir que hoy sabe ms que lo que
saba ayer
-- Alexander Pope

Existen situaciones donde resulta interesante virtualizar Elastix. Una de ellas, que se ha
vuelto algo popular en los ltimos tiempos, es la de permitir a los proveedores de
servicios de centros de datos el incluir un producto ms a su lista: Hosted PBX.

Sin duda resulta ms rentable ofrecer este servicio si se puede virtualizar Elastix en
lugar de disponer de un servidor por cliente.

Sin embargo, esta no es la nica situacin interesante. Existen algunos otros escenarios
donde el cliente puede encontrar productivo dividir un mismo hardware entre varias
mquinas virtuales, entre ellas Elastix.

28.1 Opciones de virtualizacin


En la actualidad existen algunas opciones de virtualizacin en el mercado, pero nos
limitaremos a explicar las siguientes.

187
VMWare
Virtualbox
XEN

28.2 Elastix sobre VMWare


Para facilitar las cosas el proyecto Elastix distribuye de cuando en cuando una imagen
para VMWare que se puede descargar del sitio Web oficial del proyecto.

La instalacin de Elastix sobre VMWare es sumamente sencilla y no necesita que


profundicemos en el tema.

Para ms informacin sobre VMWare visite http://www.vmware.com

28.3 Elastix sobre Virtualbox


Virtualbox es una herramienta de virtualizacin que permite ejecutar diversos sistemas
operativos en mquinas virtuales. De esta manera podramos utilizar para correr una
mquina de pruebas con Elastix o un servidor virtual con Elastix.

Existen 2 versiones de Virtualbox que podemos utilizar par virtualizar Elastix:

La versin libre que viene incorporada en la mayora de distribuciones Linux


La no libre pero que se puede descargar sin costo de su pgina Web y funciona
tambin para algunas plataformas, inclusive para Windows y Mac OS

La principal diferencia entre la versin libre y la no libre es el soporte para dispositivos


USB en las mquinas virtuales. Esto es algo que no vamos a necesitar para nuestros
propsitos por lo que la versin libre funcionar de excelente manera.

Por ejemplo en caso de utilizar una distribucin basada en Debian como por ejemplo
Ubuntu se debe ejecutar el siguiente comando:

sudo aptitude install virtualbox-ose virtualbox-ose-modules-


`uname -r`

188
Para el caso de Windows o Mac OS o distribuciones Linux que no tengan VirtualBox en
sus repositorios se puede descargar el instalador desde http://virtualbox.org y seguir el
wizard para instalacin

Virtualbox y Redes

Antes de poder utilizar Virtualbox para crear nuestra mquina virtual debemos
configurar la forma en la que Virtualbox manejar las redes. Virtualbox puede manejar
hasta cuatro interfases de redes virtuales por cada mquina virtual. Cada una de estas
tarjetas de redes puede tener una de las siguientes configuraciones:

No Conectado: en este caso la mquina virtual tiene una tarjeta de red pero
funcionar como si no tiene un cable de red conectado. Esta modalidad no ser
til para instalar Elastix ya que Elastix no tiene mayor uso si no esta conectado a
una red.
NAT: Esta es la configuracin por defecto y permite que nuestra mquina
virtual pueda ver nuestra red o salir a Internet, pero no puede ser vista por otras
mquinas en la red. Esta funcin tampoco nos sirve para Elastix ya que
necesitamos que nuestra mquina virtual sea vista por toda la red
Red Local: La configuracin de red local crea una red virtual entre nuestras
mquinas virtuales. De esta forma las mquinas virtuales solo podrn ver a
mquinas virtuales dentro de esta red virtual. Esto es til si se quiere poner a
servidores virtuales atrs de un firewall virtual. En el caso de Elastix se podra
utilizar pero para este caso particular queremos que nuestra mquina virtual sea
una ms en la red.
Interfase Anfitrin: Esta opcin permite que nuestra mquina virtual sea vista
por toda la red como si fuera una mquina real. Esta es la opcin que
utilizaremos para instalar la mquina virtual de Elastix.

Nota: La mquina virtual puede tener hasta 4 interfases virtuales por lo que se
podra tener una interfase de red interna y otra interfase anfitrin en una sola
mquina virtual.

Configuracin Interfase Anfitrin

Configuracin de Red Sistema Operativo MS Windows

Para crear una interfase de red virtual en Windows es necesario ejecutar el siguiente
comando:

VBoxManage createhostif "VM1 external"

189
Configuracin de Red en Sistema Operativo Linux

Para configurar la tarjeta de red de nuestra mquina virtual debemos crear un bridge a
nivel del sistema operativo anfitrin. Este bridge se podra decir que ser nuestro switch
virtual a donde se conectarn las mquinas virtuales.

Para crear el bridge se requiere instalar el paquete bridge til. Para distribuciones
basadas en Debian se debe ejecutar el siguiente comando para instalar:

sudo aptitude install bridge-utils

Ahora podremos crear nuestro bridge y utilizaremos la interfase eth0 para esto.

1.Configuramos la interfase eth0 para que funcione en modo promiscuo

sudo ifconfig eth0 0.0.0.0 promisc

2.Creamos el bridge y aadimos la interfase eth0 al mismo

sudo brctl addbr br0


sudo brctl addif br0 eth0

3.Asignamos el IP de nuestra mquina al bridge y ya no ser utilizado ms por la


interfase eth0

Con IP dinmico

sudo dhclient br0

Con ip esttico

sudo ifconfig br0 <mi ip> netmask <mascara de red>


sudo route add default gw <ip de mi gateway>

Con esto hemos creado el bridge y nos hace falta crear las interfases virtuales para las
instalaciones de Elastix. Para esto vamos a utilizar el utilitario que trae virtualbox

190
sudo VBoxAddIF vbox0 rafael br0

Con este comando hemos creado la interfase vbox0 que ha sido aadida al brige br0.
Si quisiramos aadir ms interfases ejecutamos el mismo comando pero cambiamos
vbox0 por vbox1, vbox2, etc.

Mantener la configuracin de manera permanente

De lo antes visto, lo nico que se conserva de manera permanente es la creacin de la


interfase vbox0, la configuracin del bridge y la tarjeta de red se perdern por lo que
sera muy til crear un script para esto que contenga la siguiente informacin

#!/bin/bash
sudo ifconfig eth0 0.0.0.0 promisc
sudo brctl addbr br0
sudo brctl addif br0 eth0

Para que el script sea accesible desde cualquier ruta es recomendable guardarlo en
/usr/local/sbin y darle permisos de ejecucin. Si vamos a crear mquinas
virtuales cada vez que arrancamos nuestro PC podramos pensar en ejecutar este script
de manera automtica cada vez que iniciamos nuestro computador.

Crear la mquina virtual

Tenemos todo el ambiente listo para crear nuestra mquina virtual y poder ejecutarla.
Para hacer la instalacin se pude usar un cdrom de Elastix o simplemente la imagen iso.
En este caso utilizaremos la imagen .iso.

Ejecutamos Virtualbox y seleccionamos la opcin de crear una nueva mquina virtual.


Aqu usted deber contestar algunas preguntas.

En la primera ventana se pedir el nombre de la mquina virtual y el sistema operativo


que se instalar en este. Ponga el nombre que usted desee y seleccione Red Hat como
sistema operativo.

En la segunda ventana se debe seleccionar la cantidad de memoria RAM que nuestra


mquina virtual utilizar. Para motivos de aprendizaje seleccionaremos 256 Mb pero si
estuviramos creando un servidor que utilizaremos deberamos seleccionar ms
memoria dependiendo de las necesidades.

191
En la tercera ventana se nos solicita seleccionar el disco duro. Lo ms probable es que
se tenga que crear un disco duro virtual.

Al crear el disco duro virtual se nos dar 2 posibilidades. Utilizar una imagen de tamao
fijo o utilizar una de tamao dinmico. La diferencia es que la de tamao fijo ocupar
todo el espacio asignado en la mquina real mientras que la dinmica ira creciendo en el
tiempo. En este caso seleccionaremos tamao fijo.

Se asigna el nombre del disco duro y el tamao deseado. Para fines didcticos 4 GB
puede ser un buen tamao, pero para produccin necesitaremos mucho ms. Damos
aceptar y hemos creado el disco duro virtual para nuestra mquina.

Con esta informacin ya estamos listos para terminar la creacin de nuestra mquina
virtual.

Configuracin Previa de la Mquina Virtual

Antes de encender nuestra mquina virtual, debemos decir a nuestro a Virtualbox que
configuracin de red utilizar. Para esto seleccionamos la mquina virtual creada y
seleccionamos configuracin. En la ventana de configuracin se debe seleccionar la
configuracin red.

Una vez en la ventana de configuracin de red configuraremos el adaptador 1 de red


para que funcione como interfase de anfitrin. Para esto se deben modificar 2 cosas:

Donde dice attached to se debe seleccionar Interfase Anfitrin.


Donde dice Interface Name debemos escribir vbox0 en el caso de Linux o
seleccionar de la lista desplegable la interfase en el caso de Windows.

Nota: pusimos el nombre vbox0 ya que anteriormente creamos esta interfase de red.
Si creramos ms mquinas virtuales deberamos crear vbox1, vbox3, etc.

Arrancar la Mquina Virtual por Primera Vez

La primera vez que arrancamos la mquina virtual se solicitar seleccionar el medio de


arranque. En en el caso de este ejemplo se utilizar una imagen iso guardada en el disco
duro. Para esto seleccionamos utilizar cdrom y utilizar archivo de imagen iso. Se
selecciona el archivo y damos siguiente. A continuacin seguiremos el procedimiento
normal de instalacin de Elastix.

192
Instalacin de Elastix en VirtualBox

Una vez terminada la instalacin podremos acceder a la interfase web administrativa de


Elastix desde cualquier pc en nuestra red, aadir telfonos ips, conectar troncales SIP o
IAX, etc.... como si fuera una mquina real. Lo nico que no podremos hacer es
acceder a las tarjetas de red pci.

Opciones Avanzadas

Clonar Mquinas Virtuales

Una de las ventajas de la virtualizacin es que se puede clonar un disco duro de una
mquina virtual y tener un respaldo completo de todo el sistema operativo. Si alguna
vez la mquina que esta en produccin deja de funcionar bastara con reiniciar nuestra
mquina virtual. Otro caso til sera si tenemos un servidor pre-configurado que
necesitamos replicar en varias instalaciones. Entonces se puede clonar varias veces esta
mquina virtual.

193
Los discos duros de las mquinas virtuales de VirtualBox se almacenan en archivos con
extensin .vdi. En el caso particular de Linux estos archivos se guardan en la siguiente
ruta:

/home/<usuario>/.VirtualBox/VDI

Donde <usuario> debe ser remplazado con el nombre de mi usuario.

Para clonar una imagen de disco duro se debe apagar la mquina virtual y ejecutar el
siguiente comando en la ruta donde se encuentran los archivos VDI:

VBoxManage clonevdi Elastix_Virtual.vdi Elastix_Virtual-clone.vdi

En este ejemplo se ha clonado la imagen Elastix_Virtual.vdi al archivo Elastix_Virtual-


clone.vdi. Si queremos utilizar el nuevo disco duro bastara con crear una nueva mquina
virtual y seleccionar este archivo como disco duro.

Arrancar Mquina Virtual sin Interfase Grfica

Podra darse el caso de que necesitemos iniciar VirtualBox sin Interfase Grfico, esto
puede ser til si se desea tener servidores cuya nica funcin es la de correr mquinas
virtuales por lo que no necesitan una interfase grfica. Al ejecutar Elastix sin interfase
grfica solo ser accesible a travs de la interfase Web o ssh. Existen casos en lo que
esto suele ser muy til para compaas de hosting que venden servidores virtuales de
Voz/IP con Elastix.

Para arrancar la mquina virtual sin interfase grfica basta con ejecutar el siguiente
comando:

VBoxHeadless --startvm "Elastix Virtual"

Donde Elastix Virtual es el nombre que hemos puesto a nuestra mquina virtual, si
deseramos arrancar una o varias mquinas virtuales al encender nuestro servidor,
bastara con ejecutar este comando cuando la computadora arranca.

28.4 Elastix sobre XEN


Desde mi punto de vista esta es la manera donde ms provecho le podemos sacar al
hardware de un servidor y por lo tanto ha sido la opcin ms popular para grandes

194
proyectos. Sin embargo, tambin es la alternativa que ms dolores de cabeza nos puede
ocasionar y requiere cierto nivel de conocimientos tcnicos por lo que para proyectos
pequeos muchas veces se elige otra opcin.

Breve introduccin a XEN

Con XEN existen dos tipos de virtualizacin: virtualizacin completa (full) y


paravirtualizacin.

La diferencia radica que en un esquema totalmente virtualizado se requiere un CPU con


soporte nativo para virtualizacin. Por lo tanto, si queremos usar este esquema debemos
revisar por las especificaciones de nuestro CPU. Si es Intel debemos revisar si su
arquitectura tiene soporte VT y si es AMD el soporte se llama AMD-V.

En cualquier caso no es difcil conseguir en la actualidad procesadores con soporte


nativo para virtualizacin.

En un esquema paravirtualizado, debido a que el CPU no nos ayuda, se debe usar una
versin modificada del sistema operativo Invitado (Guest).

Algunas ventajas que XEN nos provee son:

Gran desempeo
Migraciones en vivo. Es decir que no se requiere apagar equipos y la
interrupcin del servicio es casi imperceptible.
Es de licencia libre. Se puede descargar y usar sin costo.

Arquitectura de XEN

XEN se comunica directamente con el hardware de nuestro computador (CPU) a travs


de un componente llamado hipervisor (hypervisor). El hipervisor es quien coordina las
acciones entre las mquinas virtuales (tambin llamadas dominios) y el CPU.

Cuando XEN arranca se inicia el hipervisor y automticamente se arranca el primer


dominio llamado dominio cero o simplemente Dom0. Este es un dominio especial de
carcter administrativo. Es decir que si queremos iniciar o administrar otras maquinas
virtuales (otros dominios) debemos acceder a Dom0 primero.

Dom0 por tanto es un dominio Privilegiado ya que desde all se pueden administrar a
los otros dominios.

195
Los dems dominios que vayamos creando reciben el nombre de DomU, donde la letra
U viene de la palabra Unprivileged (no privilegiado, en ingls).

Explicaremos mejor estos conceptos con la siguiente figura.

Arquitectura de XEN

Algunos comandos XEN bsicos

Aunque existen productos que permiten administrar servidores virtuales XEN desde
interfaz grfica, la manera de hacerlo por omisin en Elastix es desde la lnea de
comandos.

Comando Descripcin
xm list Muestra un listado con las maquinas
virtuales que se estn ejecutando en ese
momento
xm create <maquina_virtual> Inicia una maquina virtual. Uno puede
confundirse y pensar que este comando
crea una nueva mquina virtual
xm shutdown <maquina_virtual> Apaga una maquina virtual
determinada de manera controlada
xm reboot <maquina_virtual> Reinicia una mquina virtual
determinada de manera controlada
xm destroy <maquina_virtual> Apaga una maquina virtual a la fuerza

196
Nota: En la anterior tabla de comandos la cadena maquina_virtual puede ser el
identificador numrico o el nombre de la maquina virtual

Ejemplo de salida del comando xm list

[root@virtual ~]# xm list


Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 386 2 r----- 78773.9
AntiSpam1-Centos51 5 920 2 -b---- 13953.1
Srv01-Centos51-TEST_234567 7 512 1 -b---- 797689.1
Srv02-Elastix-1.4beta_678 10 192 1 -b---- 25246.6
Srv03-Centos51-Test2 11 1024 1 -b---- 85855.3
Srv04-Fedora-Core9-test 12 256 1 ------ 2106.7

Instalacin de Elastix virtualizado utilizando XEN

En este apartado vamos a explorar la instalacin de uno o ms servidores Elastix,


funcionando bajo un esquema virtualizado, sobre un mismo hardware. De esta manera
podemos optimizar los recursos al mximo.

Nota: Vamos a suponer para efectos de los ejemplos aqu mostrados que no
necesitamos troncales Zap (o DAHDI).

Configuracin del servidor Host

Para comenzar debemos configurar el sistema operativo del servidor que servir de
Host. Por razones de desempeo y estabilidad es preferible que este sistema operativo
base contenga un mnimo nmero de aplicaciones instaladas as que hagamos la
instalacin ms simple posible.

Podemos utilizar CentOS o inclusive el mismo CD de Elastix para esta instalacin. Lo


importante es, como ya hemos mencionado, mantener los paquetes mnimos necesarios
para su funcionamiento.

Sobre esta instalacin base debemos instalar el soporte Xen a travs de los siguientes
comandos:

# yum install xen


# yum install kernel-xen

una vez finalizado esto debemos levantar el hypervisor con el comando:

197
# service xend start

En este punto el servidor Host se encuentra listo para recibir a nuestro invitado Elastix.

Configuracin del disco duro virtual

Antes de instalar al Elastix invitado vamos a crearle un disco duro virtual. Esto no es
otra cosa que una imagen de disco duro contenida en un solo archivo. Como ejemplo
vamos a suponer que necesitamos un disco duro de 15Gb.

El comando para realizar esta tarea en el servidor Host es el siguiente.

# dd if=/dev/zero of=<archivo_salida> bs=1M count=15360

Debemos reemplazar <archivo_salida> por el nombre que le queramos dar al archivo.


Por lo general estos archivos de disco duro se ubican en la ruta /xen/

Instalacin de Elastix como invitado

En este punto ya tenemos todo listo para que el invitado se instale sin problemas en el
Host que hemos creado.

Para instalar no lo haremos con un CD como se instala normalmente un servidor Elastix


sino que en este caso lo haremos a travs de una unidad de CDROM virtual. Entonces,
vasta con copiar la imagen ISO del instalador de Elastix en algn lugar del disco duro
del Host en lugar de quemarla fsicamente en un CD.

Luego de copiar el ISO en el disco duro creamos un archivo de configuracin


correspondiente a la mquina virtual que vamos a instalar. Este archivo por lo general se
copia en la ruta /etc/xen/

198
name = "<Nombre del domU>"
maxmem = 512
vcpus = 1
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
boot = "c"
pae = 1
acpi = 1
apic = 1
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
device_model = "/usr/lib64/xen/bin/qemu-dm"
extra = "3"
sdl = 0
vnc = 1
vncunused = 1
vncdisplay = "-5900"
disk = [ 'file:<ruta a disco duro>,hda,w' , 'file:<ruta a imagen
iso>,hdc:cdrom,r']
vif = [ "mac=<mac address>,bridge=xenbr0,type=ioemu" ]
serial = "pty"

Como podemos observar en el archivo anterior existen algunas variables que reemplazar
como por ejemplo <ruta a imagen iso> que debe ser reemplazada por la imagen ISO de
Elastix. Podemos guardar este archivo como /etc/xen/elastix_ejemplo.cfg

Una vez modificado el archivo de configuracin de la mquina virtual de acuerdo a


nuestras necesidades, procedemos a crear la mquina virtual con el siguiente comando.

# xm create -c /etc/xen/elastix_ejemplo.cfg

Esto nos dar una consola, ya que especificamos la opcin c, y a travs de esta
consola podemos comenzar el proceso de instalacin de nuestra mquina virtual. Las
pantallas que irn apareciendo lucirn como en una instalacin normal de Elastix.

199
Compilando Asterisk
La vida no es la que uno vivi, sino la que uno recuerda
-- Gabriel Garca Mrquez

Son muchas las situaciones en las que es til recompilar Asterisk. Por ejemplo si se
quiere parchar el cdigo para agregar funcionalidad o si se quiere optimizar Asterisk
para eliminar funcionalidad no necesaria y mejorar el rendimiento.

Como en cualquier compilacin de un paquete de software complejo esta es una tarea


que requiere relativo conocimiento para resolver cualquier posible problema que se
pueda presentar. Aqu trataremos de explicar brevemente los conocimientos bsicos.

29.1 Recompilando los SRPMs


La manera relativamente ms fcil de recompilar Asterisk si se est usando Elastix es
utilizando los SRPMs provistos por el proyecto Elastix. Estos se pueden descargar de
http://repo.elastix.org/centos/5/updates/SRPMS/repodata/

Un SRPM (o Source RPM) es un paquete que contiene la informacin necesaria para


construir un RPM como el cdigo fuente del paquete y las directrices usadas para
compilarlo e instalarlo en el sistema.

201
Estas directrices se especifican en un archivo llamado SPEC, que usualmente se
distingue por su extensin *.spec

No explicaremos aqu todos los detalles relacionados con la construccin de RPMs pero
explicaremos los pasos bsicos a continuacin.

Instalar un Elastix con los requisitos para construir el RPM

Este es el primer paso. Tambin uno pudiese utilizar un CentOS existente y adecuarlo
para la construccin del RPM de Asterisk.

En cualquier caso vamos a necesitar algunos RPMs necesarios para poder construir el
RPM de Asterisk a partir del SRPM.

Requerimientos

Segn el ltimo archivo asterisk.spec los siguientes RPMs son requeridos para
construir el RPM de Asterisk. Por lo tanto asegurmonos que tenemos esos paquetes
instalados antes de empezar.

gcc-c++
m4
openssl-devel
newt-devel
libtermcap-devel, ncurses-devel
postgresql-devel, zlib-devel
libpri-devel >= 1.4.0
zaptel-devel >= 1.4.0, libtiff-devel >= 3.5.7
libogg-devel, libvorbis-devel
unixODBC-devel, libtool, sqlite-devel
pwlib-devel > 1.10.5-2, opal-devel
alsa-lib-devel
gsm-devel
net-snmp-devel
spandsp-devel
curl-devel, wget
speex-devel >= 1.2

202
Algunos de ellos ya vienen instalados en una instalacin de Elasix normal, otros habr
que instalarlos. Se pueden instalar a travs del comando Yum.

Instalar el SRPM de Asterisk y modificar el SPEC de acuerdo


a nuestras necesidades

Luego de descargar el SRPM de Asterisk lo instalamos en la mquina concebida para


este fin. Esto se hace de manera sencilla con el comando rpm.

[root@elastix ~]# rpm -ivh asterisk-1.4*.src.rpm

Esta instalacin no instalar Asterisk como pudiera parecer sino que ms bien poblar el
directorio /usr/src/redhat que es donde se copiar el cdigo fuente de Asterisk,
el archivo SPEC y cualquier otra informacin nacida del SRPM.

A continuacin deberemos hacer los cambios en el archivo SPEC para personalizar


nuestro Asterisk. Aqu podremos hacer casi cualquier cosa como por ejemplo:

Eliminar parches para conseguir un Asterisk mnimo


Aadir funcionalidad nueva a Asterisk
Parchar contra bugs
Actualizar la versin de Asterisk

En este libro no explicaremos el formato del archivo SPEC y cmo se encuentra este
dividido. Si el lector se encuentra interesado le recomendamos el siguiente vnculo
http://www.rpm.org/max-rpm/

Nota: Es muy importante que la versin del RPM que generemos siempre sea
mayor que la que tenemos instalada en el sistema donde queremos instalar
dicho RPM puesto que si el RPM generado posee una versin menor o igual se
rehusar a instalarse.

Construir el RPM de Asterisk

Una vez realizados los cambios en el SPEC nos encontramos listos para recompilar
Asterisk o siendo exactos construir un nuevo RPM para Asterisk. Para lograr esto nos
valemos del comando rpmbuild, pasndole como parmetro la ruta del archivo SPEC
que hemos modificado.

203
[root@elastix ~]# rpmbuild -ba /usr/src/redhat/SPECS/asterisk.spec

Al final del proceso obtendremos los siguientes RPMs en la carpeta


/usr/src/redhat/RPMS/

asterisk
asterisk-devel
asterisk-sounds-es
asterisk-sounds-fr

Adems obtendremos un nuevo SRPM en la carpeta /usr/src/redhat/SRPMS/

204
La Certificacin Elastix
Aprender sin pensar es esfuerzo perdido; pensar sin aprender,
peligroso.
-- Confusio

30.1 Introduccin
Con la difusin de Elastix como plataforma de comunicaciones y su aceptacin y uso en
empresas alrededor del mundo, surgi el negocio de soporte tcnico relacionado con
dicha distribucin. Hoy en da muchas empresas o personas brindan soporte relacionado
con Elastix a empresas o terceros, e inclusive casa adentro; y junto con esto creci el
inters de validar esos conocimientos tcnicos de manera oficial.

Con el fin de proveer esta necesaria validacin naci el Programa de Certificacin


Elastix, el mismo que tiene como eje central el Examen de Certificacin Elastix. Este
examen certifica a la persona que lo aprueba que tiene los conocimientos necesarios
para implementar soluciones basadas en Elastix as como tambin resolver problemas
tcnicos relacionados con la distro.

30.2 El Curso de Certificacin Elastix

205
El Curso de Certificacin Elastix no es otra cosa que un programa de entrenamiento
oficial de preparacin para quien est interesado en rendir el Examen de Certificacin
Elastix.

La capacitacin dura 40 horas y es impartida durante 5 das, al final de los cuales el


alumno debera estar apto para rendir el Examen de Certificacin.

30.3 El Examen de Certificacin Elastix


El Examen de Certificacin Elastix es un examen objetivo, es su mayora de alternativas
mltiples, que tiene como objetivo calificar la idoneidad de un profesional Elastix.

El Examen se rinde a travs de un sistema especializado y nicamente puede ser tomado


en un Testing Center Elastix oficial.

Su duracin es de 2 horas y contiene 100 preguntas.

Tpicos y Pesos

Se han dividido los tpicos en tres grandes grupos. Cada grupo tiene un peso
equivalente a la tercera parte del peso total. Dentro de cada grupo se enlistan los tpicos
del examen ordenados de mayor a menor peso.

Linux, VoIP y Redes: Peso de 33.33%

Introduccin a la VoIP
Protocolos SIP y RTP
Introduccin a la telefona
Calidad de voz
Linux para administradores de Elastix
Configuracin de Hardware
Configuracin de telfono IP
Virtualizacin

Asterisk: Peso de 33.33%

Fundamentos de Asterisk
Plan de marcado avanzado

206
Diagnstico de problemas
AMI y AGI
Debugging
Seguridad
Desempeo
DUNDi
Compilacin de Asterisk
Sintetizacin y reconocimiento de voz

Elastix: Peso de 33.33%

Configuracin Bsica de Elastix (Extensiones, colas, IVR, conferencias, FOP)


Ruteo de llamadas
funcionamiento interno de freePBX
Interconexin con Elastix remotos
Elastix Overview
Fax
Instalacin de Elastix
Tarifacin y Reportacin en Elastix
Email System
Mdulo Call Center
Mensajera Instantnea
Extendiendo Elastix

30.4 Preguntas tpicas de examen


A continuacin algunas preguntas tpicas de examen.

Para qu se utiliza el cable MOLEX de suministro de poder en algunas tarjetas


analgicas?

a) No es necesario conectar las tarjetas a un cable de poder adicional. La tarjeta ya


se alimenta de poder a travs del bus PCI.
b) Para suministrar energa elctrica adicional a los mdulos FXS
c) Para suministrar energa elctrica adicional a los mdulos FXO
d) Esto slo es necesario en antiguas tarjetas ISA
e) Ninguna de las anteriores

207
En qu carpeta se almacenan los voicemails?

a) /usr/lib/asterisk/voicemail
b) /var/lib/asterisk/voicemails
c) /var/spool/asterisk/voicemail
d) En ninguna carpeta, los voicemails se almacenan en una base de datos interna de
Asterisk para facilitar su acceso
e) Ninguna de las anteriores

Cual es el rango de la escala MOS?

a) 1-5
b) 1-10
c) 0-100%
d) Empieza en el 0 pero no tiene tope
e) Ninguna de las anteriores

A travs de que comando inicializamos el marcador predictivo?

a) service elastix start


b) service dialer start
c) service dialerelastix start
d) service elastixdialer start
e) Ninguna de las anteriores

En qu se diferencian el mdulo PBX -> Conferencias que provee directamente


Elastix del mdulo PBX -> PBX Configuration -> Conferences provisto a travs
de freePBX?

a) No existen dos mdulos para administrar conferencias, slo uno


b) Existen dos mdulos pero en realidad son la misma cosa, ya que el mdulo
provisto por Elastix es solo un wrapper del mdulo de freePBX
c) El mdulo de freePBX administra cuartos de conferencia permanentes mientras
que el provisto por Elastix administra cuartos temporales
d) Los dos hacen prcticamente lo mismo pero son dos implementaciones
diferentes
e) Ninguna de las anteriores

Cules contextos se encuentran reservados en el plan de marcado de Asterisk?


Puede seleccionar ms de uno.

208
a) globals
b) general
c) default
d) reserved
e) Todos los anteriores

Cual de las siguientes NO es una estrategia de colas vlida?. Puede elegir ms de


una respuesta.

a) ringall
b) roundrobin
c) leastrecent
d) random
e) leastactive

Cul es la extensin de los archivos de temas que se encuentran dentro de la


carpeta themes y que sirven para dar el aspecto o look a la interfase Web de
Elastix?

a) .ini
b) .tpl
c) .htm
d) .conf
e) Ninguna de las anteriores

209
GNU Free Documentation
License
Version 1.3, 3 November 2008

Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
<http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license document,
but changing it is not allowed.

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other functional and
useful document "free" in the sense of freedom: to assure everyone the effective
freedom to copy and redistribute it, with or without modifying it, either commercially or
noncommercially. Secondarily, this License preserves for the author and publisher a
way to get credit for their work, while not being considered responsible for
modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document
must themselves be free in the same sense. It complements the GNU General Public
License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because
free software needs free documentation: a free program should come with manuals

211
providing the same freedoms that the software does. But this License is not limited to
software manuals; it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License principally for
works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice
placed by the copyright holder saying it can be distributed under the terms of this
License. Such a notice grants a world-wide, royalty-free license, unlimited in duration,
to use that work under the conditions stated herein. The "Document", below, refers to
any such manual or work. Any member of the public is a licensee, and is addressed as
"you". You accept the license if you copy, modify or distribute the work in a way
requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a
portion of it, either copied verbatim, or with modifications and/or translated into another
language.

A "Secondary Section" is a named appendix or a front-matter section of the Document


that deals exclusively with the relationship of the publishers or authors of the Document
to the Document's overall subject (or to related matters) and contains nothing that could
fall directly within that overall subject. (Thus, if the Document is in part a textbook of
mathematics, a Secondary Section may not explain any mathematics.) The relationship
could be a matter of historical connection with the subject or with related matters, or of
legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as
being those of Invariant Sections, in the notice that says that the Document is released
under this License. If a section does not fit the above definition of Secondary then it is
not allowed to be designated as Invariant. The Document may contain zero Invariant
Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover
Texts or Back-Cover Texts, in the notice that says that the Document is released under
this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may
be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in


a format whose specification is available to the general public, that is suitable for
revising the document straightforwardly with generic text editors or (for images
composed of pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or for automatic
translation to a variety of formats suitable for input to text formatters. A copy made in
an otherwise Transparent file format whose markup, or absence of markup, has been

212
arranged to thwart or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount of text. A copy
that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without
markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly
available DTD, and standard-conforming simple HTML, PostScript or PDF designed
for human modification. Examples of transparent image formats include PNG, XCF
and JPG. Opaque formats include proprietary formats that can be read and edited only
by proprietary word processors, SGML or XML for which the DTD and/or processing
tools are not generally available, and the machine-generated HTML, PostScript or PDF
produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following
pages as are needed to hold, legibly, the material this License requires to appear in the
title page. For works in formats which do not have any title page as such, "Title Page"
means the text near the most prominent appearance of the work's title, preceding the
beginning of the body of the text.

The "publisher" means any person or entity that distributes copies of the Document to
the public.

A section "Entitled XYZ" means a named subunit of the Document whose title either is
precisely XYZ or contains XYZ in parentheses following text that translates XYZ in
another language. (Here XYZ stands for a specific section name mentioned below, such
as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve
the Title" of such a section when you modify the Document means that it remains a
section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that
this License applies to the Document. These Warranty Disclaimers are considered to be
included by reference in this License, but only as regards disclaiming warranties: any
other implication that these Warranty Disclaimers may have is void and has no effect on
the meaning of this License.

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or
noncommercially, provided that this License, the copyright notices, and the license
notice saying this License applies to the Document are reproduced in all copies, and that
you add no other conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further copying of the copies
you make or distribute. However, you may accept compensation in exchange for
copies. If you distribute a large enough number of copies you must also follow the
conditions in section 3.

213
You may also lend copies, under the same conditions stated above, and you may
publicly display copies.

3. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of
the Document, numbering more than 100, and the Document's license notice requires
Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all
these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the
back cover. Both covers must also clearly and legibly identify you as the publisher of
these copies. The front cover must present the full title with all words of the title
equally prominent and visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve the title of the
Document and satisfy these conditions, can be treated as verbatim copying in other
respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the
first ones listed (as many as fit reasonably) on the actual cover, and continue the rest
onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100,
you must either include a machine-readable Transparent copy along with each Opaque
copy, or state in or with each Opaque copy a computer-network location from which the
general network-using public has access to download using public-standard network
protocols a complete Transparent copy of the Document, free of added material. If you
use the latter option, you must take reasonably prudent steps, when you begin
distribution of Opaque copies in quantity, to ensure that this Transparent copy will
remain thus accessible at the stated location until at least one year after the last time you
distribute an Opaque copy (directly or through your agents or retailers) of that edition to
the public.

It is requested, but not required, that you contact the authors of the Document well
before redistributing any large number of copies, to give them a chance to provide you
with an updated version of the Document.

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions
of sections 2 and 3 above, provided that you release the Modified Version under
precisely this License, with the Modified Version filling the role of the Document, thus
licensing distribution and modification of the Modified Version to whoever possesses a
copy of it. In addition, you must do these things in the Modified Version:

214
A. Use in the Title Page (and on the covers, if any) a title distinct from that of the
Document, and from those of previous versions (which should, if there were
any, be listed in the History section of the Document). You may use the same
title as a previous version if the original publisher of that version gives
permission.
B. List on the Title Page, as authors, one or more persons or entities responsible for
authorship of the modifications in the Modified Version, together with at least
five of the principal authors of the Document (all of its principal authors, if it
has fewer than five), unless they release you from this requirement.
C. State on the Title page the name of the publisher of the Modified Version, as the
publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications adjacent to the other
copyright notices.
F. Include, immediately after the copyright notices, a license notice giving the
public permission to use the Modified Version under the terms of this License,
in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections and required
Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add to it an item
stating at least the title, year, new authors, and publisher of the Modified
Version as given on the Title Page. If there is no section Entitled "History" in
the Document, create one stating the title, year, authors, and publisher of the
Document as given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for public access to
a Transparent copy of the Document, and likewise the network locations given
in the Document for previous versions it was based on. These may be placed in
the "History" section. You may omit a network location for a work that was
published at least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the
Title of the section, and preserve in the section all the substance and tone of each
of the contributor acknowledgements and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document, unaltered in their text and
in their titles. Section numbers or the equivalent are not considered part of the
section titles.
M. Delete any section Entitled "Endorsements". Such a section may not be
included in the Modified Version.
N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in
title with any Invariant Section.
O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as
Secondary Sections and contain no material copied from the Document, you may at

215
your option designate some or all of these sections as invariant. To do this, add their
titles to the list of Invariant Sections in the Modified Version's license notice. These
titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but
endorsements of your Modified Version by various parties--for example, statements of
peer review or that the text has been approved by an organization as the authoritative
definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up
to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified
Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be
added by (or through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or by arrangement
made by the same entity you are acting on behalf of, you may not add another; but you
may replace the old one, on explicit permission from the previous publisher that added
the old one.

The author(s) and publisher(s) of the Document do not by this License give permission
to use their names for publicity for or to assert or imply endorsement of any Modified
Version.

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License,
under the terms defined in section 4 above for modified versions, provided that you
include in the combination all of the Invariant Sections of all of the original documents,
unmodified, and list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical
Invariant Sections may be replaced with a single copy. If there are multiple Invariant
Sections with the same name but different contents, make the title of each such section
unique by adding at the end of it, in parentheses, the name of the original author or
publisher of that section if known, or else a unique number. Make the same adjustment
to the section titles in the list of Invariant Sections in the license notice of the combined
work.

In the combination, you must combine any sections Entitled "History" in the various
original documents, forming one section Entitled "History"; likewise combine any
sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You
must delete all sections Entitled "Endorsements".

216
6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released
under this License, and replace the individual copies of this License in the various
documents with a single copy that is included in the collection, provided that you follow
the rules of this License for verbatim copying of each of the documents in all other
respects.

You may extract a single document from such a collection, and distribute it individually
under this License, provided you insert a copy of this License into the extracted
document, and follow this License in all other respects regarding verbatim copying of
that document.

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent
documents or works, in or on a volume of a storage or distribution medium, is called an
"aggregate" if the copyright resulting from the compilation is not used to limit the legal
rights of the compilation's users beyond what the individual works permit. When the
Document is included in an aggregate, this License does not apply to the other works in
the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the


Document, then if the Document is less than one half of the entire aggregate, the
Document's Cover Texts may be placed on covers that bracket the Document within the
aggregate, or the electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of


the Document under the terms of section 4. Replacing Invariant Sections with
translations requires special permission from their copyright holders, but you may
include translations of some or all Invariant Sections in addition to the original versions
of these Invariant Sections. You may include a translation of this License, and all the
license notices in the Document, and any Warranty Disclaimers, provided that you also
include the original English version of this License and the original versions of those
notices and disclaimers. In case of a disagreement between the translation and the
original version of this License or a notice or disclaimer, the original version will
prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or


"History", the requirement (section 4) to Preserve its Title (section 1) will typically
require changing the actual title.

217
9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly
provided under this License. Any attempt otherwise to copy, modify, sublicense, or
distribute it is void, and will automatically terminate your rights under this License.

However, if you cease all violation of this License, then your license from a particular
copyright holder is reinstated (a) provisionally, unless and until the copyright holder
explicitly and finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means prior to 60 days
after the cessation.

Moreover, your license from a particular copyright holder is reinstated permanently if


the copyright holder notifies you of the violation by some reasonable means, this is the
first time you have received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after your receipt of the
notice.

Termination of your rights under this section does not terminate the licenses of parties
who have received copies or rights from you under this License. If your rights have
been terminated and not permanently reinstated, receipt of a copy of some or all of the
same material does not give you any rights to use it.

10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free
Documentation License from time to time. Such new versions will be similar in spirit
to the present version, but may differ in detail to address new problems or concerns.
See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document
specifies that a particular numbered version of this License "or any later version"
applies to it, you have the option of following the terms and conditions either of that
specified version or of any later version that has been published (not as a draft) by the
Free Software Foundation. If the Document does not specify a version number of this
License, you may choose any version ever published (not as a draft) by the Free
Software Foundation. If the Document specifies that a proxy can decide which future
versions of this License can be used, that proxy's public statement of acceptance of a
version permanently authorizes you to choose that version for the Document.

11. RELICENSING

218
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide
Web server that publishes copyrightable works and also provides prominent facilities
for anybody to edit those works. A public wiki that anybody can edit is an example of
such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site
means any set of copyrightable works thus published on the MMC site.

"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license


published by Creative Commons Corporation, a not-for-profit corporation with a
principal place of business in San Francisco, California, as well as future copyleft
versions of that license published by that same organization.

"Incorporate" means to publish or republish a Document, in whole or in part, as part of


another Document.

An MMC is "eligible for relicensing" if it is licensed under this License, and if all works
that were first published under this License somewhere other than this MMC, and
subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or
invariant sections, and (2) were thus incorporated prior to November 1, 2008.

The operator of an MMC Site may republish an MMC contained in the site under CC-
BY-SA on the same site at any time before August 1, 2009, provided the MMC is
eligible for relicensing.

219
220

Vous aimerez peut-être aussi