ElastixBook Comunicaciones Unificadas Con Elastix Beta
ElastixBook Comunicaciones Unificadas Con Elastix Beta
ElastixBook Comunicaciones Unificadas Con Elastix Beta
con Elastix
Edgar Landívar
Copyright (c) 2008 Edgar Landívar
2
A los que siempre creyeron y a otros gigantes que nos
mostraron el camino
3
4
Reconocimiento
La elaboración 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 más
sinceros agradecimientos a:
Licenciamiento
Este libro ha sido licenciado bajo FDL (Free Documentation License).
5
6
Indice
Introducción .................................................................................................................. 15
1. Introducción a la telefonía ....................................................................................... 17
1.1 Breve historia de la telefonía ................................................................................ 17
Los albores de la telefonía ...................................................................................... 17
Los dolores de cabeza de las famosas patentes ...................................................... 18
El desarrollo de la tecnología telefónica................................................................. 19
1.2 Principios y transmisión de la voz humana .......................................................... 20
Rango de frecuencias de la voz humana................................................................. 21
El micrófono ........................................................................................................... 21
Ancho de banda y capacidad de información......................................................... 23
1.3 Digitalización de la voz ........................................................................................ 23
Teorema de Nyquist................................................................................................ 24
1.4 Redes orientadas a circuitos ................................................................................. 24
1.5 Redes orientadas a paquetes ................................................................................. 25
1.6 Red Pública Telefónica (PSTN)............................................................................ 25
1.7 Circuitos analógicos ............................................................................................. 26
Señalización analógica ........................................................................................... 26
DTMFs ................................................................................................................... 29
El teléfono analógico .............................................................................................. 29
1.8 Circuitos digitales ................................................................................................. 31
La base DS-0 .......................................................................................................... 31
Circuitos T-carrier y E-carrier ................................................................................ 31
SONET y Circuitos Opticos ................................................................................... 31
1.9 Protocolos de Señalización Digital....................................................................... 32
Señalización Asociada al Canal (CAS) .................................................................. 32
Señalización de Canal Común (CCS)..................................................................... 33
2. Introducción a la VoIP............................................................................................. 35
2.1 Protocolo IP .......................................................................................................... 36
El Internet ............................................................................................................... 36
Qué es el protocolo IP?........................................................................................... 36
Dirección IP............................................................................................................ 36
Paquete IP ............................................................................................................... 37
Direccionamiento IP ............................................................................................... 38
2.2 Protocolos de transporte ....................................................................................... 39
Protocolo TCP ........................................................................................................ 39
Protocolo UDP........................................................................................................ 40
7
2.3 Codificación de la voz .......................................................................................... 40
Codecs .................................................................................................................... 41
3. Linux para Administradores de Elastix ................................................................. 43
3.1 Introducción.......................................................................................................... 43
3.2 Línea de comandos de Linux................................................................................ 44
3.3 Comandos básicos ................................................................................................ 45
3.4 Sistema de archivos .............................................................................................. 47
Organización........................................................................................................... 47
Permisos ................................................................................................................. 48
3.5 RPMs y actualizaciones vía Yum......................................................................... 52
Yum al rescate ........................................................................................................ 53
4. Asterisk Essentials .................................................................................................... 55
4.1 Qué es Asterisk? ................................................................................................... 55
4.2 Breve historia de Asterisk .................................................................................... 56
4.3 Funcionalidad provista por Asterisk..................................................................... 56
4.4 Funcionamiento de Asterisk ................................................................................. 62
Encendido y apagado.............................................................................................. 62
Directorios de Asterisk ........................................................................................... 63
Estructura modular ................................................................................................. 63
4.5 El proyecto Zaptel, ahora DAHDI........................................................................ 64
Breve historia del proyecto Zaptel.......................................................................... 65
4.6 Configuración de Asterisk .................................................................................... 66
Archivos de configuración ..................................................................................... 66
Comentarios en los archivos de configuración....................................................... 66
4.7 Plan de marcado (dial plan) .................................................................................. 67
Contextos ................................................................................................................ 67
Instrucciones........................................................................................................... 68
Variables................................................................................................................. 70
Aplicaciones más comunes..................................................................................... 71
4.8 Asterisk CLI ......................................................................................................... 73
Comandos del CLI.................................................................................................. 74
4.9 Asterisk AGI......................................................................................................... 76
Ejecución de scripts AGI........................................................................................ 76
Parámetros enviados al script AGI......................................................................... 77
Comandos AGI ....................................................................................................... 78
Librerías AGI.......................................................................................................... 80
4.10 Asterisk AMI ...................................................................................................... 80
Probando desde telnet............................................................................................. 81
Comandos AMI ...................................................................................................... 82
8
5. Instalando Elastix ..................................................................................................... 85
5.1 Instalando desde CD............................................................................................. 85
5.2 Instalando Elastix sobre un CentOS o Red Hat preinstalado ............................... 91
5.3 Instalando sobre un soft RAID ............................................................................. 91
6. Elastix Overview ....................................................................................................... 97
6.1 Breve historia del proyecto................................................................................... 98
6.2 Características de Elastix...................................................................................... 98
VoIP PBX ............................................................................................................... 99
Fax ........................................................................................................................ 100
General ................................................................................................................. 100
Email..................................................................................................................... 100
Colaboración......................................................................................................... 101
Extras .................................................................................................................... 101
Call Center............................................................................................................ 101
Mensajería instantánea ......................................................................................... 101
6.3 Licenciamiento ................................................................................................... 102
7. Elastix: Configuración Básica ............................................................................... 103
7.1 Reconociendo la interfase de administración Web ............................................ 103
System .................................................................................................................. 103
PBX ...................................................................................................................... 105
Fax ........................................................................................................................ 105
Email..................................................................................................................... 106
IM ......................................................................................................................... 106
Reports.................................................................................................................. 106
Extras .................................................................................................................... 107
Agenda.................................................................................................................. 107
Ingreso al Sistema................................................................................................. 108
7.2 Configuración de red .......................................................................................... 108
7.3 Creando una extensión ....................................................................................... 108
Configuración de teléfono softphone.................................................................... 111
7.4 Configuraciones generales.................................................................................. 111
Opciones del comando Dial (Dial command options).......................................... 113
7.5 Configuración de colas ....................................................................................... 113
7.6 IVR y sistema de grabación................................................................................ 117
Grabación de mensaje de bienvenida ................................................................... 118
Configurar un IVR de bienvenida ........................................................................ 119
7.7 Salas de conferencias.......................................................................................... 121
7.8 Parqueo de llamadas ..................................................................................... 123
7.9 Música en espera ................................................................................................ 125
9
7.10 Flash Operator Panel (FOP) ............................................................................. 126
7.11 Funciones de transferencia de llamadas ........................................................... 127
Transferencia ciega............................................................................................... 127
Transferencia atendida.......................................................................................... 127
8. Configuración de hardware................................................................................... 129
8.1 Tipos de tarjetería y fabricantes.......................................................................... 129
8.2 Instalando físicamente la tarjetería ..................................................................... 130
Hardware modular ................................................................................................ 131
8.3 Detección de hardware ....................................................................................... 131
8.4 Configuración de interfaces digitales a bajo nivel.............................................. 132
Configuración de los drivers de Zaptel ................................................................ 133
8.5 Configuración de troncales................................................................................. 134
zapata.conf............................................................................................................ 135
9. Configuración de teléfono IP ................................................................................. 139
9.1 Configuración de softphone................................................................................ 140
9.2 Configuración de teléfono físico ........................................................................ 143
Configuración de red ............................................................................................ 144
Registro del dispositivo con el servidor Elastix ................................................... 146
9.3 Utilizando el endpoint configurator ................................................................... 150
Configuración de un teléfono ATCOM, modelo AT-530 .................................... 152
Configuración de un teléfono Polycom SoundPoint IP 501................................. 154
Actualización por TFTP ....................................................................................... 156
Personalizando los archivos de configuración ..................................................... 156
10. Elastix: Configuración 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 Tarifación ......................................................................................................... 166
Visualizar, Editar y Eliminar ................................................................................ 167
Crear Tarifa .......................................................................................................... 167
Reporte de Facturación......................................................................................... 168
Distribución de Destinos ...................................................................................... 169
Configurar Facturación......................................................................................... 171
10.4 Reportes ............................................................................................................ 172
Reporte CDR ........................................................................................................ 172
10
Uso de Canales ..................................................................................................... 173
10.5 Configuración DISA......................................................................................... 174
10.6 Condiciones de tiempo ..................................................................................... 175
11. Funcionamiento interno de freePBX .................................................................. 179
11.0 Fundamentos de freePBX................................................................................ 179
11.1 Organización de archivos ................................................................................ 180
11.2 Configuración ................................................................................................... 181
amportal.conf........................................................................................................ 181
11.3 retrieve_conf: generador del plan de marcado ................................................ 182
11.4 dialparties.agi................................................................................................... 182
11.5 Estructura de un módulo de freePBX .............................................................. 183
12. Interconexión con Elastix remotos...................................................................... 185
12.1 A través de troncales SIP.................................................................................. 185
Definiendo la troncal ............................................................................................ 186
Definiendo la ruta saliente.................................................................................... 187
12.2 Conexión con proveedores de llamadas vía IP................................................. 187
Definiendo la troncal ............................................................................................ 188
Definiendo la ruta saliente.................................................................................... 188
13. Calidad de voz....................................................................................................... 191
13.1 Síntomas que afectan la calidad de voz ............................................................ 191
Eco ........................................................................................................................ 191
Bajo nivel o volumen............................................................................................ 193
Retardo ................................................................................................................. 193
Distorsión de la voz .............................................................................................. 193
Comunicación entrecortada .................................................................................. 194
13.2 Parámetros relacionados con la calidad de voz en redes de paquetes .............. 194
Retardo de red....................................................................................................... 194
Pérdidas de paquetes............................................................................................. 195
Jitter ...................................................................................................................... 195
13.3 Cómo medir la calidad de voz .......................................................................... 196
Escala MOS .......................................................................................................... 197
Modelo E .............................................................................................................. 198
13.4 Canceladores de eco ......................................................................................... 201
Cómo funciona un cancelador de eco? ................................................................. 201
El estándar G.168 ................................................................................................. 203
14. Protocolos SIP y RTP al descubierto .................................................................. 205
14.1 Protocolo SIP.................................................................................................... 205
Detalles del protocolo........................................................................................... 206
Señalización SIP: Métodos y respuestas .............................................................. 206
11
SIP y Asterisk ....................................................................................................... 207
14.2 Protocolo RTP .................................................................................................. 207
Estructura de un paquete RTP .............................................................................. 208
15. Diagnóstico básico de problemas ........................................................................ 211
15.1 Interpretando el log.......................................................................................... 211
El archivo /var/log/asterisk/full ............................................................................ 213
Qué información nos puede indicar el campo TEXTO? ...................................... 214
Número de proceso............................................................................................... 215
15.2 Diagnóstico a través del CLI ........................................................................... 215
15.3 Sniffing............................................................................................................. 215
Captura de llamadas.............................................................................................. 216
Apéndice A: Banco de preguntas de prueba ............................................................ 217
Preguntas .................................................................................................................. 217
Apéndice B: Archivos de configuración de Asterisk distribuidos con Elastix...... 221
Apéndice C: Lista de comandos de CLI ................................................................... 227
Apéndice D: GNU Free Documentation License ..................................................... 235
12
13
14
Introducción
Ya existían otros libros o manuales de Elastix cuando me vi en la misión de Escribir la
presente obra. Había leído ya Elastix Without Tears, un gran trabajo de Ben Shariff y
me parecía que ya estaban cubiertos los temas más importantes cuando nos reunimos en
mi oficina con otros colaboradores a planificar lo que sería nuestro nuevo producto de
entrenamiento para la certificación de Elastix.
Casi de inmediato nos dimos cuenta que pese a que las obras existentes cubrían muchos
tópicos importantes no servirían como material de estudio para un curso de
certificación. La obra que necesitábamos tenía que cubrir aspectos internos del
funcionamiento de Elastix y sus componentes, así como también cubrir posibles vacíos
de los alumnos en tópicos diversos como Asterisk y protocolos de comunicación como
SIP y RTP. No existía nada parecido en ese momento, una alternativa era usar diferentes
obras para cubrir la totalidad del entrenamiento pero eso sería un poco engorroso y se
vería algo desorganizado.
Ya iba por la mitad del primer libro cuando surgió la pregunta acerca del licenciamiento
de la obra. Elastix es software libre y no había pensado aún en el licenciamiento del
libro. Algunos pensaban en que no debería 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).
-- Edgar Landivar
Elastix Project Leader
16
Introducción a la telefonía
No importa si yo muero, otros terminarán mi trabajo…
-- Mark Twain
17
En 1849 Antonio Meucci, médico italiano considerado por muchos como el inventor del
teléfono, hace una demostración de un dispositivo capaz de transmitir voz en La
Habana. Pocos años después, en 1854, el mismo Meucci hace una nueva demostración
de su invención en la ciudad de Nueva York.
Mientras Meucci se las daba a las tareas de inventor, otros también perseguían la idea de
construir un “telégrafo parlante” y es así como en 1860 el alemán Johann Philipp Reis
construye un dispositivo capaz de transmitir voz basado en la idea original de Charles
Bourseul, quien a su vez describió la construcción de dicho dispositivo en 1854 pero
nunca lo construyó. Reis continuó mejorando su aparato y un año más tarde ya estaba
transmitiendo voz a más de 100 metros de distancia.
Teléfono de Reis
Un par de años más tarde Innocenzo Manzetti construye el esperado “telégrafo parlante”
que él mismo había visionado ya en 1844, pero no se interesa en patentarlo.
Hasta aquí ya existían algunos prototipos de teléfono pero nadie lo había patentado.
18
A Meucci no le fue muy bien que digamos pues no pudo vender su invento y alcanzar la
prosperidad.
Gracias a la patente Bell pudo hacer de la idea del teléfono un negocio rentable y tiene
el mérito de haber desarrollado la idea y convertirla en algo práctico para la sociedad.
Se cuenta que en determinado momento Bell trató de vender su patente a Western Union
por $100 mil dólares pero el presidente de Western Union se negó pues consideró que el
teléfono “era nada más que un juguete”. Tan solo dos años más tarde le comentó a sus
colegas que si pudiera conseguir la patente de Bell por $25 millones de dólares lo
consideraría una ganga.
Esto nos da una idea de cómo comenzaba a crecer el negocio de Bell. En 1886, ya
existían más de 150,000 abonados telefónicos en los Estados Unidos.
Ilustración de dos personas hablando por teléfono a fines del siglo IXX
19
Como sucede siempre con los avances tecnológicos la telefonía continuó
evolucionando. Al principio, para que un abonado se comunicara con otro este tenía que
solicitarle la llamada a una operadora, quien manualmente conectaba los cables para
conmutar un punto con otro. En 1891 se inventó un teléfono “automático” que permitía
marcar directamente.
La voz humana por tanto es de la misma naturaleza que el resto de ondas acústicas y
esto ya se conocía desde antes de la invención del teléfono.
Antes de la invención del teléfono también se conocía que existían otros tipos de ondas
llamadas ondas eléctricas y que estas podían ser transmitidas a través de un conductor
metálico como un cable de cobre. Este segundo tipo de ondas es de una naturaleza
diferente a las ondas acústicas y viaja a la velocidad de la luz, es decir aproximadamente
300,000 km/s. Es decir, más de lo que podamos imaginar, casi instantáneamente desde
un punto de vista terrenal. Adicionalmente podemos controlar la atenuación de estas
ondas y hacerlas viajar por grandes distancias.
20
Con estos hechos conocidos ya a mediados del siglo 19 es fácil comprender que muchos
persiguieran la idea de transformar las ondas acústicas en ondas eléctricas para así poder
transmitirlas a grandes distancias. La cuestión es que había que inventar un dispositivo
para hacer dicha transformación y allí estaba la clave del asunto. Este dispositivo,
conocido como micrófono en nuestros días es una parte importante de cualquier aparato
telefónico.
Otra característica 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 quiere decir que un
micrófono debe ser capaz de capturar y transmitir este rango de frecuencias. Hmmm....
bueno, casi. 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 transmisión como veremos
más adelante. Por lo tanto los teléfonos 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 oímos a alguien por teléfono su voz suena
ligeramente diferente que en la vida real pero aun así podemos entender la
conversación.
El micrófono
El micrófono fue un elemento clave en la invención del teléfono pues era el dispositivo
que realizaba la conversión de las ondas mecánicas a ondas eléctricas.
Hay muchos tipos de micrófonos que operan sobre diferentes principios. Uno que se usó
por mucho tiempo en teléfonos era el de carbón que consistía en una cápsula llena de
granos de carbón entre dos placas metálicas. Una de las placas era una membrana que
vibraba con las ligeras presiones de las ondas de voz; de esta manera la resistencia
eléctrica de la cápsula variaba con la voz y de esta manera se generaba una señal
eléctrica correspondiente.
21
Típico micrófono de carbón extraído de teléfono de disco
22
En la figura anterior podemos observar los componentes del micrófono electro-
magnético.
1 Ondas de voz
2 Diafragma
3 Bobina
4 Núcleo ferromagnético
5 Corriente inducida
Medidas comunes para expresar el ancho de banda son los bits por segundo. Esta
medida también equivale a bits/s, bps o baudios.
El ancho de banda es un término muy importante cuando se habla de VoIP pues las
comunicaciones en tiempo real necesitan un ancho de banda mínimo asegurado para
entregar una comunicación de calidad en destino.
Dicho fácil, digitalizar una señal de voz no es otra cosa que tomar muestras (a intervalos
de tiempo regulares) de la amplitud de la señal analógica y transformar esta información
a binario. Este proceso de denomina muestreo.
23
Teorema de Nyquist
En 1928 Henry Nyquist, un ingeniero Suizo que trabajaba par AT&T, resolvió el dilema
de cuánto es necesario muestrear una señal como mínimo para poder reconstruirla luego
a la original de manera exacta.
El teorema propuesto decía que como mínimo se necesita el doble de ancho de banda
como frecuencia de muestreo. Esto queda reflejado de mejor manera con la siguiente
expresión.
fm ≥ 2 BWs
Hagamos un breve cálculo mental acerca de cual sería la frecuencia de muestreo para
poder convertir una señal de voz humana a digital y luego poder reconstruirla en
destino.
Ya habíamos 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, según el teorema de
Nyquist como mínimo deberíamos muestrear al doble de la frecuencia mayor, es decir a
8,000Hz.
Una vez que se establece un circuito entre dos puntos que quieren comunicarse, el
resultado básicamente es el equivalente a conectar físicamente 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.
Este tipo de redes es el tradicionalmente usado por compañías telefónicas alrededor del
mundo y es el mismo que usó Bell en sus inicios; obviamente guardando las distancias
tecnológicas correspondientes.
24
Es común que ciertas personas confundan las redes de circuitos con las redes analógicas
pero es necesario aclarar que las redes de circuitos bien pueden transportar datos
digitalmente.
Un ejemplo de este tipo de redes son las redes IP como es el caso del Internet, donde
por una misma conexión pueden llegarnos distintos flujos de información. De esta
manera podemos estar haciendo video-conferencia al mismo tiempo que enviamos un
correo electrónico o navegamos por el Web. Inclusive por este tipo de redes pueden
circular simultáneamente flujos de información para diferentes destinos o direcciones
IP.
A diferencia de las redes orientadas a circuitos, en este tipo de redes el ancho de banda
no es fijo ya que depende del tráfico de la red en un momento dado. Adicionalmente
cada paquete de un mismo flujo de información 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.
Originalmente fue una red analógica pero actualmente es una red en su mayoría digital;
por tanto existen dos tipos de circuitos: analógicos y digitales.
25
1.7 Circuitos analógicos
Los circuitos analógicos son básicamente pares de cobre que llegan a los abonados del
servicio telefónico y por donde se transmite la señal eléctrica de la voz de manera
analógica. El mismo circuito lleva adicionalmente la señalización necesaria para
establecer, mantener y terminar una llamada. Estos circuitos analógicos se deben
conectar a un switch telefónico encargado de direccionar la comunicación entre los
abonados.
Como en el pasado era más común que los teléfonos pudieran estar ubicados en áreas
rurales donde no llegaba la electricidad se decidió que la red telefónica proveyera cierto
voltaje de alimentación. Es por eso que algunos modelos de teléfonos analógicos no
necesitan conectarse a la alimentación eléctrica.
En todo caso la OC genera 48 Voltios de corriente directa para alimentar a los teléfonos
de los abonados. Usando léxico estricto deberíamos decir -48 Voltios debido a que este
voltaje se mide con respecto a uno de los conductores. Sin embargo para ser prácticos
en este libro usaremos indistintamente 48V o -48V para referirnos a lo mismo.
Señalización analógica
Para que las llamadas telefónicas funcionen correctamente es necesario contar con
indicaciones o señales eléctricas que nos permitan intercambiar información entre el
abonado y la OC (Oficina Central). En breve veremos en qué consisten las señales más
comunes.
La diferencia entre loop start y ground start radica en la manera en la que el teléfono
requiere tono de marcado a la OC (proceso también llamado zeisure). Ground start
26
requiere tono de marcado aterrizando (de allí el término ground) uno de los conductores
de la línea telefónica mientras que loop start lo hace realizando un corto circuito entre
ambos conductores (es decir creando un lazo o loop).
Kewlstart es una evolución de loop start que le añade un poco más de inteligencia a la
detección de desconexiones (colgado de la llamada) pero básicamente sigue siendo un
loop start.
Debido a que ground start no es muy común en nuestros días, casi siempre nos veremos
usando loop start o kewlstart.
Colgado
Descolgado
Cuando el usuario descuelga el auricular el teléfono envía una señal a la OC. Esta señal
consiste en cerrar el circuito, es decir que internamente el teléfono conecta entre sí los
dos cables de la línea telefónica a través de una resistencia eléctrica.
En gran parte de América el tono de marcado consiste en dos ondas senoidales enviadas
simultáneamente. Estas ondas son de 350 Hz y 440 Hz. En Europa el tono de marcado
consiste en una sola onda de 425 Hz.
27
Marcación
La marcación puede ser por pulsos o por tonos. Los pulsos ya casi no se usan y fueron
populares en los tiempos de los teléfonos de disco. Los tonos son pares de frecuencias
asociadas con los dígitos telefónicos. Estas frecuencias se transmiten hasta la OC quien
traduce estos tonos a números.
Conmutación
Una vez recibido los dígitos la OC tratará de asociar este número marcado con el
circuito de un abonado. En caso de que el destinatario no fuere un abonado local,
enviará la llamada a otro switch telefónico para su terminación.
Timbrado o Ringado
Una vez que la OC encuentra al abonado destino tratará de timbrarlo (ringing). La señal
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 señal de
ring tiene una amplitud considerable de 90 Voltios. Además recordemos que la
línea ya tiene un componente adicional de Voltaje de 48 Voltios. Es por esta
razón que si manipulamos los cables telefónicos desnudos en el preciso
momento en el que llega una señal de ring podemos recibir una pequeña
descarga eléctrica y pasar un buen susto.
Todos los lectores sin duda han escuchado un ring-back y un tono de ocupado alguna
vez en sus vidas.
28
Hablando
DTMFs
Muchas veces es necesario enviar dígitos a través de la línea telefónica tanto para
marcar como en medio de una conversación. Con esta finalidad se pensaron los DTMFs.
DTMF es un acrónimo de Dual-Tone Multi-Frequency. Es decir que cada DTMF es en
realidad dos tonos mezclados enviados simultáneamente por la línea telefónica. Esto se
hace así para disminuir los errores.
A continuación una tabla ilustrando los pares de frecuencias para cada dígito.
Como se puede ver en la tabla también hay correspondencias para los signos * y # así
como también para los caracteres A, B, C y D.
El teléfono analógico
• Auricular
• Micrófono
29
• Switch para colgado/descolgado
• Convertidor de dos a cuatro hilos (también llamado híbrido)
• Marcador (dialer)
• Campana o dispositivo de timbrado
Convertidor de 2 a 4 hilos
En general no existe convertidor de 2 a 4 hilos perfecto ya que es muy difícil separar las
señales de ida y de regreso completamente. Es por eso que este dispositivo
30
históricamente ha sido una de las causas de eco en líneas telefónicas mal acopladas. Ya
hablaremos de esto en el capítulo de “calidad de voz”.
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 estándar que nos sirve para definir múltiplos mayores como los
circuitos que veremos a continuación.
Luego de los T1´s tenemos múltiplos mayores como T2, T3, T4 y T5.
Luego del OC-1 tenemos los OC-3, OC-12, OC-24, OC-48, entre otros.
31
1.9 Protocolos de Señalización Digital
Los protocolos de señalización se utilizan para transmitir información de estado del
canal de comunicaciones (como “desconectado”, “timbrando”, “respondido”),
información de control y otra información como DTMFs, caller ID, entre otros.
Los protocolos de señalización se pueden agrupar en dos tipos llamados CAS (Channel
Associated Sgnaling) y CCS (Common Channel Signaling). La diferencia es que
mientras CAS transmite la señalización en el mismo canal en que viaja la información,
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 comunicación ya que una parte
de él se está usando para señalización. Esa es una de las razones por las cuales las
compañías telefónicas han adoptado en su mayoría CCS.
Hay que notar de lo anterior que esto es posible debido a que la voz no es muy sensible
que digamos a la pérdida de ese bit de información ya que es el bit menos significativo,
pero cuando transportamos data la pérdida de un bit no puede pasar desapercibida y la
calidad de la transmisión se degrada de manera sensible.
Otro protocolo CAS que aún subsiste en nuestros días es R2. Se trata de un protocolo
que fue popular en los años 60s. En realidad R2 es una familia de protocolos en donde
cada implementación se denomina “variante”. Existen variantes dependiendo del país o
inclusive de la compañía telefónica que lo ofrece.
Al momento Elastix soporta este protocolo a través de la librería Unicall. Sin embargo
en el futuro se espera soportar la implementación del proyecto openR2 desarrollado por
el mexicano Moisés Silva.
32
Señalización de Canal Común (CCS)
ISDN
ISDN (Integrated Services Digital Network) nos permite transmitir voz y datos
simultáneamente sobre pares telefónicos de cobre con calidad superior a las líneas
telefónicas analógicas.
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 estuvo orientada a hogares. Un BRI supone 2 canales útiles (también llamados
canales B) de 64Kbit/s cada uno más un canal de señalización de 16Kbit/s (también
llamado canal D) que en total suman 144Kbit/s.
BRI estaba llamado a ser un estándar 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
situación fue diferente y es utilizado en muchos países de este continente.
PRI es la opción para usuarios de mayor envergadura como negocios o empresas pues
puede aglutinar más canales B. Actualmente es muy popular y se transmite sobre
circuitos T-carrier y E-carrier.
33
Introducción a la VoIP
Yo no hice nada por accidente, ni tampoco fueron así mis invenciones;
ellas vinieron por el trabajo
-- Thomas Edison
Dicho así puede sonar simple pero las redes IP fueron diseñadas principalmente para
datos y muchas de las ventajas de las redes IP para los datos resultan ser un problema
para la voz pues ésta es muy sensible a retardos y problemas de transmisión por muy
pequeños que estos sean.
Por tanto transmitir voz sobre protocolo IP es toda una empresa con muchos problemas
técnicos que resolver. Por suerte la tecnología 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 años me recuerdo haciendo uso de llamadas por Internet y puedo decir
que la mejora de unos 10 años para acá ha sido notable. Ahora podemos decir que ya es
una alternativa rentable al alance de la mayoría de nosotros.
35
2.1 Protocolo IP
El protocolo IP sin duda es uno de los más populares jamás implementados,
principalmente por el auge del Internet: La gran red de redes, que utiliza este protocolo
para su enrutamiento. Por esta razón, antes de entrar en detalles acerca del protocolo IP
emplearemos un par de párrafos a resumir los orígenes del Internet.
El Internet
Gracias a este enfoque ARPANet evolucionó hasta lo que hoy en día conocemos por
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 estarían leyendo esto ahora.
Dirección IP
Una dirección IP es un número único que provee además información de cómo ubicar al
equipo que la posee. Para que este número sea único existe una autoridad que controla
la asignación de direcciones IP llamada IANA (Internet Assigned Numbers Authority).
Una dirección IP es un número binario que consta de 32 bits. Sin embargo, para fines
prácticos y hacer que este número sea más entendible para los humanos casi siempre se
representa en un formato de 4 números decimales separados por puntos. Cada uno de
estos cuatro números puede tomar un valor de 0 a 255. Un ejemplo de dirección IP es
172.16.254.1
36
Traducción de notación decimal a binaria de una dirección IP
Paquete IP
Cabecera de un paquete IP
37
Direccionamiento IP
Los equipos que se encargan de enrutar los paquetes a su destino se llaman ruteadores y
básicamente contienen tablas de rutas con información de cómo alcanzar otras redes.
Por tanto, una vez que llega un paquete a un ruteador éste examina la dirección IP
destino y trata de determinar a qué red pertenece esa dirección IP.
Determinar la red donde quiere llegar un paquete dado no es muy difícil puesto que esa
información es parte de la dirección IP. Esto es porque cada dirección IP se podría
dividir en dos partes: una parte que identifica a la red y otra que identifica al equipo
(también llamado host).
Identificar cada una de estas partes no es tan trivial pues existen redes de diferentes
tamaños y por tanto el número de bits que corresponden a la parte de la red y el número
de bits que corresponden a la parte del host varían dependiendo del tamaño de la red y
se regulan mediante un parámetro adicional llamado máscara de red.
Veamos entonces cómo se obtiene la información de a qué red pertenece una dirección
IP para que un ruteador pueda encaminar correctamente un paquete a destino.
La máscara de red es un número de 32 bits al igual que una dirección IP. Se llama
máscara porque si se superpone a la dirección IP nos permite identificar cuál parte es la
que corresponde a la dirección de red.
38
Ahora podemos ver con más claridad que los números uno (1) en la máscara marcan el
límite entre la parte de la red y la parte del host por lo tanto la dirección de red es (en
binario):
10000010.00000101.00000101.00000000
10000010.00000101.00000101.00000000 Æ 130.5.5.0
Protocolo TCP
Como ya habíamos dicho el protocolo IP no garantiza que los datos lleguen a destino.
Solo hace su mejor esfuerzo para que lleguen.
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 información en el flujo de datos ya que hay
que enviar información de control adicional. Es por esto que TCP es un buen protocolo
para control de sesiones pero no tan bueno para transmisión de datos en tiempo real. Por
esta razón la voz en sí no se envía 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 abstracción
para poder relacionar los flujos de datos con servicios de red específicos (o protocolos
de más alto nivel). Por ejemplo, el puerto 80 se asocia con el servicio de Web o el
39
protocolo HTTP; el puerto 25 se asocia con el servicio de correo electrónico 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?
Es por esta razón que la voz en aplicaciones de VoIP es transmitida sobre este
protocolo.
40
conversión ADC desperdiciaríamos recursos de la red por lo que hace falta encontrar un
formato óptimo.
Nota: Los codecs realmente no son exclusivos de la VoIP pues también se usan
en otros tipos de comunicaciones digitales.
Codecs
G.711
G.711 es uno de los codecs más usados de todos los tiempos y proviene de un estándar
ITU-T que fue liberado en 1972. Viene en dos sabores llamados u-law y a-law. La
primera versión se utiliza en USA y la segunda se utiliza en Europa.
Una de sus características 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.
G.729
41
La ventaja en la utilización de G.729 radica principalmente en su alta compresión y por
ende bajo consumo de ancho de banda lo que lo hace atractivo para comunicaciones por
Internet. Pese a su alta compresión no deteriora la calidad de voz significativamente y
por esta razón ha sido ampliamente usado a través de los años 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.
GSM
Muchas personas preguntan si el codec GSM tiene algo que ver con el estándar de
comunicaciones celulares y la respuesta es que sí.
El estándar que define la tecnología celular GSM (Global System for Mobile
communications) incluye este codec.
42
Linux para Administradores
de Elastix
Sólo los débiles 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 Introducción
En este capítulo se repasarán algunos conceptos útiles de Linux para facilitar la vida de
los administradores de Elastix. Si usted ya conoce cómo administrar su Elastix desde la
línea de comandos de Linux, sáltese este capítulo y vaya directamente al siguiente.
Si al final de este capítulo aún siente que existen vacíos, le recomendamos capacitarse
en administración de Linux, sin duda le facilitará las tareas de administración de Elastix.
43
3.2 Línea de comandos de Linux
Una manera muy útil de administrar Elastix es desde la línea de comandos de Linux. La
línea de comandos de Linux nos permitirá explotar al máximo el potencial de nuestro
Servidor de Comunicaciones Unificadas.
44
Figura ejecutando PuTTY
Comando Descripción
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. También se lo usa para
renombrar archivos
rm Elimina un archivo
tail -f nombre_archivo Muestra las últimas líneas 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
45
procesos que se ejecutan en el sistema.
Puede ser ordenado por consumo de
memoria o CPU. Muy útil para
diagnóstico
find Permite buscar arhivos
vim Programa para ver y editar archivos de
texto plano
ifconfig Muestra información de las interfaces de
red y permite modificarlas temporalmente
ps -aux Muestra un reporte de los procesos que se
están ejecutando en el servidor
reboot Reincia el equipo
shutdown -h now Apaga el equipo
46
3.4 Sistema de archivos
En Linux es muy importante la organización del sistema de archivos.
Organización
Esta estructura de carpetas está ubicada en lo que se llama directorio raíz, o directorio
principal. Este directorio raíz es el directorio de más alto nivel en el sistema de archivos.
Directorio Descripción
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 también
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 prácticamente
todo es un archivo
etc Este directorio contiene básicamente
archivos de configuración 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 básicamente las librerías
compartidas que requieren los programas.
Algo análogo a los archivos .dll en
Windows
47
lost+found Cuando por alguna razón el sistema de
archivos se corrompe y hay que repararlo;
los resultados de esa reparación se
guardan en este directorio
mnt Este es un lugar común 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 instalación 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 más importantes directorios
y contiene información para ser
compartida como programas que pueden
ser usados por los usuarios del sistema, la
documentación de dichos programas y
hasta librerías relacionadas, etc.
Permisos
En Linux cada directorio o archivo tiene permisos de acceso y estos permisos pueden
ser de básicamente 3 tipos:
• lectura
• escritura
• ejecución
48
Cada archivo también tiene un dueño y un grupo al cual pertenece y para cada una de
estas entidades se pueden establecer permisos diferentes.
Por último, también 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 sería
válida para un determinado archivo del sistema:
Existe sin embargo una notación más sencilla para expresar la matriz de arriba. Esta
notación, compuesta de 10 caracteres, simplifica el despliegue de la información de
permisos y permite mostrarlos en una sola línea 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,
49
$ 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
Aparentemente vamos a complicar las cosas un poco más aquí pero ya veremos más
adelante la utilidad de poder representar la dichosa matriz de permisos de una forma
más condensada llamada representación numérica u octal de permisos.
La cuestión es que los 3 caracteres que definen los permisos para cada una de las tres
entidades involucradas (dueño, grupo y otros) pueden ser representados por un solo
número de tal manera que todos los permisos de un archivo pueden ser representados
por 3 de estos números. Por ejemplo, 755. Donde el primer dígito representa los
permisos del dueño, el segundo dígito los permisos del grupo y el tercer dígito los
permisos de otros usuarios.
Puede ser complicado entender al principio pero sin duda se trata de un formato más
condensado. De eso sí no cabe duda verdad?. Y vasta ver el siguiente ejemplo:
50
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 número binario,
luego este número binario se traduce a su equivalente decimal (realmente deberíamos
decir octal aquí). Veamos el ejemplo siguiente.
-rwxr-xr-x
755
En fin, para los que no les gusta calcular binario les dejo la siguiente tablita.
Ahora sí se estarán preguntando para qué nos sirve esta notación numérica?
Bueno, resulta que de esta manera es mucho más fácil manipular los permisos de los
archivos mediante comandos y eso es precisamente lo que veremos a continuación.
Las tareas de cambio de permisos y dueños de archivos pueden ser realizadas fácilmente
gracias a los comandos chmod y chown respectivamente.
chmod toma como parámetros los permisos en modo numérico y el nombre del archivo
al que se desea realizar el cambio. Por ejemplo:
51
$ 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 también se puede usar recursivamente para cambiar los permisos de
todos los archivos dentro de una carpeta. Esto se hace con la opción R. Por ejemplo:
“chmod –R 755 nombre_carpeta/”
Para cambiar el dueño 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
52
Actualización de un RPM rpm -Uvh nombre_del_paquete.rpm
Eliminación de un RPM rpm -e nombre_del_paquete.rpm
Obtener información 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 instalación 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 llevaría horas solucionar manualmente.
Yum es una utilidad que nos ayuda a instalar paquetes RPMs desde repositorios y
lo hace de una manera muy amigable.
Comando Descripción
yum update Actualizar TODO el sistema
yum update nombre_paquete Actualiza solo el paquete especificado y
todas sus dependencias
53
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 actualización manuales aquí descritos se dejarán para casos
excepcionales. Se recomienda en lo posible utilizar la interfase Web.
54
Asterisk Essentials
Si una idea no es absurda al principio, entonces no merece la pena.
-- Albert Einstein
Partiendo de este concepto muy básico Asterisk no es una central telefónica cualquiera;
se trata de una central telefónica rica en características 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 opción al
momento de planificar su proyecto telefónico y por esta razón Asterisk ha tenido gran
acogida a nivel mundial.
55
Asterisk es uno de los componentes más importantes de Elastix y quien provee la
mayoría de las características telefónicas de la distro.
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 código 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 telefónico y se topó con el proyecto Zaptel, un proyecto de código abierto
creado por Jim Dixon, que tenía el objetivo de crear drivers abiertos para tarjetas
telefónicas de computadora. A partir de allí Asterisk y Zaptel caminarían de la mano;
tanto así que en la actualidad los dos proyectos son mantenidos por la misma compañía.
A pesar de lo que se pueda pensar, Mark no era un novato en el mundo del software
libre. El ya había participado activamente en el desarrollo del cliente de mensajería
Gaim, actualmente llamado Pidgin, uno de los más populares en el ámbito del software
libre.
56
• Voicemail
• Conferencias
• Reportación de Llamadas
• Colas de atención
• Llamada en espera
• Identificador de Llamante
• Bloqueo por llamante identificado
• Recepción de Fax
• Listado Interactivo del directorio de extensiones
• Interactive Voice Response (IVR)
• Música en espera
• Manejo de coportamiento por tiempo (Time Conditions)
• Follow me
La contestadora responde a los dígitos marcados por el teclado de la persona que llama,
enruta las llamadas a extensiones específicas, provee acceso a información pregrabada y
toma mensajes 24 horas al día.
Transferencia de llamadas
Este método es el usual, es decir, la llamada que usted está atendiendo, es transferida a
una extensión, en donde primero la extensión a la cual es transferida contesta, usted
hace la presentación de la llamada y cuelga su extensión, en este caso la llamada queda
conectada a la nueva extensión.
57
original. Mientras el proceso de transferencia se completa, el llamante de la llamada
externa escuchará la música “Music On Hold”.
Para realizar una transferencia atendida, usted debe digitar un código predeterminado.
En ese momento un mensaje pedirá que le digite la extensión donde desea transferir la
llamada, una vez discada dicha extensión, usted escuchará el ringeado de la llamada
hacia la nueva extensión y podrá establecer una comunicación preliminar con esta
extensión. Cuelgue su teléfono y la llamada externa quedará conectada a la nueva
extensión.
Este método permite transferir una llamada sin establecer una comunicación previa con
la extensión a la cual se desea transferir la llamada.
Para transferir una llamada de manera no atendida, mientras atiende una llamada digite
en el teléfono un código predeterminado. Usted escuchará un mensaje pidiendo el
número de la extensión 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 extensión.
Opción de No Molestar
Esta opción permite a cualquier usuario configurar su extensión para que no reciba
llamadas por un período que el crea conveniente. Cualquier llamada entrante a esta
extensión será ruteada automáticamente al buzón de correos de la misma.
Para habilitar la opción de No Molestar y para deshabilitar esta opción, en el teclado de
su teléfono digite los respectivos códigos 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 extensión. Este tipo de acción
es útil en el siguiente ejemplo. Supongamos que el administrador de la red recibe una
llamada a su extensión 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 teléfono ubicado en el cuarto de equipos para que pueda hacer
la transferencia normal de la llamada. En este caso, la opción es enviar la llamada a un
cuarto temporal, donde mientras tanto el llamante escuchará la música en espera
configurada, hasta que el administrador llegue al cuarto de equipos y vuelva a tomar la
llamada.
58
para transferir. Un vez digitada la extensión, usted escuchará el número de extensión
que deberá marcar desde el otro teléfono para volver a recuperar la llamada. La llamada
quedará en espera por un lapso máximo de 2 minutos. Mientras la llamada esta
parqueada, el que está llamando escuchará la música configurada como “Music On
Hold”.
Esta característica permite atrapar una llamada que se encuentra timbrando en una
extensión que no es la suya de manera remota. Para atrapar la llamada timbrando en una
extensión, digite en su teléfono el predeterminado para esta función.
Esta característica de Asterisk permite dar seguimiento a las llamadas, por ejemplo para
fines de control de calidad del desenvolvimiento de los operadores telefónicos o de los
agentes de ventas. Para esto existe la facilidad de que a través de la digitación de un
código predeterminado se ejecute un comando que permita escuchar en línea la
conversación sostenida desde cualquier de las extensiones.
El buzón de mensajes de voz es una aplicación que permite escuchar mensajes dejados
por llamadas que no pudieron ser atendidas por la extensión.
Conferencias
Por defecto, cada extensión tiene asociado un cuarto de conferencias. Este cuarto de
conferencias puede ser utilizado por cualquier usuario que pida a sus compañeros que
ingresen a su cuarto y así, poder establecer una comunicación multiusuarios.
59
También es posible enviar una llamada externa a un cuarto de conferencias,
simplemente transfiriendo la llamada al cuarto de conferencias.
Si su extensión es 101 y el número para esta función es 8, usted tiene asociado el cuarto
de conferencias 8101, por lo que si usted desea establecer una llamada multiusuarios, en
su teléfono digite la extensión “8101”, e ingresará al cuarto de conferencias; pida a las
personas con las cuales desea establecer la conferencia que en sus teléfonos también
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 extensión 8101;
al usuario que usted envió al cuarto de conferencias se le indicará mediante un mensaje
que es el único usuario en el salón de conferencias. Ahora usted debe discar en su
teléfono el número del salón de conferencias e indicar al resto de participantes que
ingresen al mismo salón.
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é extensión llamó a qué número, si la llamada fue
contestada o no, cuánto duró la llamada, por qué puerto o línea se realizó la llamada
telefónica.
Colas de Atención
Llamada en espera
60
Esta característica permite que la persona que se encuentra atendiendo una llamada y
recibe otra pueda interrumpir temporalmente su primera conversación para atender la
segunda llamada y poder acordar un tiempo para devolver o atender su llamada.
Debemos recordar que esta característica afecta muchas veces a las conexiones
telefónicas para transferencia de datos, por lo que es común que los clientes la
deshabiliten.
Identificador de llamante
Esta señal es enviada entre las señales 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 líneas de la red
telefónica pública conmutada es el proveedor de estas quien debe habilitar o
proporcionar esta característica. Se la conoce también como Caller Display ó Calling
Line Identification Presentation.
Esta característica previene que alguien con identificador de llamante vea el número
desde el que usted llama. Esta facilidad de ocultar el ID puede ser completa o selectiva.
No todas las redes de telefonía pública soportan esta característica.
Así también Asterisk puede ser configurado como Fax Server para que los documentos
que son enviados a una cuenta de correo específica automáticamente sean enviados
como faxes.
61
persona que llama pueda digitar desde su teléfono los números 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 extensión de la persona
que quieren contactar pero conocen solo su apellido ó nombre.
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 también se deben sincronizar con el encendido y apagado de Asterisk.
Para apagarlo podemos ejecutar:
# amportal stop
Para encenderlo:
# amportal start
Para reiniciarlo:
# amportal restart
62
Directorios de Asterisk
Asterisk organiza sus archivos en algunos directorios. Entre los más importantes
tenemos a los siguientes.
Directorio Descripción
/etc/asterisk/ Aquí residen los archivos de
configuración de asterisk
/usr/lib/asterisk/modules/ Este directorio contiene los módulos 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
música 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 información 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
63
A continuación un fragmento del archivo modules.conf que viene con Elastix,
donde se puede observar cómo se le dice a Asterisk que no cargue algunos módulos en
el arranque.
;
; DON'T load the chan_modem.so, as they are obsolete in * 1.2
64
Diagrama explicativo de la interacción de Asterisk con Zaptel
En el año 2000 Jim Dixon lanzó el proyecto Zaptel cuyo nombre era una abreviación de
Zapata Telephony Project. Lo nombró así en honor a Emiliano Zapata, héroe de la
revolución mexicana.
Los drivers fueron lanzados bajo licencia GPL de tal manera que cualquiera pudo tener
acceso al código.
Inicialmente Zaptel contenía 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.
65
Luego de algunos años de mantener Zaptel, Digium cayó en cuenta de que Zaptel era
una marca registrada de Zapata Telecom y para evitar cualquier posible confusión futura
decidió cambiar de nombre a sus drivers. El nombre elegido es DAHDI.
DAHDI ya se encuentra disponible para descarga pero muchos continúan usando Zaptel
por razones históricas o esperando a que este nuevo paquete se estabilice un poco más.
Archivos de configuración
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 más importantes se explican en la siguiente tabla.
Archivo Descripción
extensions.conf Aquí reside el plan de marcado. En Elastix
este archivo incluye otros más 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 configuración de los canales
tipo ZAP. Aquí se puede troncalizar
dichos canales y configurar algunos
parámetros
66
Los archivos de configuración de Asterisk pueden contener comentarios. Un comentario
empieza con el carácter de punto y coma, y una vez escrito el resto de la línea 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 información relativa a la configuración
; que estamos escribiendo.
#include sip_general_custom.conf
#include sip_nat.conf
#include sip_registrations_custom.conf
#include sip_registrations.conf
Todos estos archivos de plan de marcado están escritos en texto plano en un formato
definido por Asterisk. Estos archivos se encuentran divididos en secciones llamadas
contextos.
Contextos
67
Básicamente los contextos sirven para agrupar lógica de plan de marcado. Los contextos
también pueden incluir otros contextos mediante la cláusula "include" o redirigir el hilo
de ejecución del plan de marcado a otros contextos dependiendo de condiciones. Por
ejemplo, un contexto puede contener la lógica necesaria para rutear una llamada hacia la
troncal correspondiente luego de examinar el prefijo del número telefónico marcado. Un
contexto también puede agrupar la lógica necesaria para la aplicación de reloj
despertador. También puede incluir lógica para acceder al voicemail o para autenticar
un número de PIN. En general prácticamente 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
símbolos [ y ]. A continuación 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,)
Contextos reservados
Hay dos nombres de contextos que están reservados para un propósito especial y son
[general] y [globals] .
Instrucciones
68
Estas instrucciones también son llamadas extensiones.
Nombre de Extensión
La extensión “s” significa cualquier extensión. La letra s viene de la palabra “start” que
significa inicio. Un ejemplo del uso de la extensión s es el siguiente.
[prueba]
exten => s, 1, Answer()
exten => s, 2, noOp(“Prueba”)
Prioridad
La prioridad indica el orden en el que debe ser ejecutada una instrucción 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.
69
Existen también dos prioridades especiales que son la prioridad s y la prioridad n. La
prioridad n significa que a la prioridad de la instrucción anterior se le debe sumar uno.
Esto es muy útil para facilitar la escritura del plan de marcado.
Aplicación
En las aplicaciones radica el verdadero poder del plan de marcado en Asterisk. Para
hacer una analogía, las aplicaciones son el equivalente a las funciones de un lenguaje de
programación. Las aplicaciones nos permitirán contestar una llamada o colgarla,
reproducir música en espera, saltar a otros contextos entre otras muchas cosas.
Las aplicaciones también pueden recibir parámetros. Por ejemplo a la aplicación Dial( )
habrá que indicarle qué número marcar para que pueda realizar su labor.
Más adelante en el presente capítulo se explicarán con más detalle las aplicaciones más
comunes en el plan de marcado.
Variables
${NOMBRE}
Donde nombre es el nombre de la variable. Las variables pueden ser de tres tipos:
Globales
De canal
Son las variables que se pueden definir usando el comando (o aplicación) "Set".
70
Pre-definidas
${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 versión
estable de Elastix disponible usa Asterisk 1.4
[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)
Answer
Sintaxis: Answer([delay])
71
Contesta un canal si este está timbrando. Puede recibir opcionalmente el parámetro
delay que le indica si debe esperar un número determinado de milisegundos antes de
contestar.
Background
Sintaxis:
Background(filename1[&filename2...][|opciones[|langoverride
][|context]])
Opción Descripción
s Saltarse la reproducción 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 dígito marcado coincide con una
extensión existente en el contexto destino
Playback
Sintaxis: Playback(filename1[&filename2...][,options])
Hangup
72
Sintaxis: Hangup()
Goto
Sintaxis: Goto([[context|]extension|]priority)
Dial
Este comando es el que hace la magia. Marca un canal especificado y lo vincula con el
canal corriente.
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 <[email protected]>
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.
73
El CLI también nos puede proveer información en tiempo real de la actividad de
Asterisk. Podemos controlar el grado de detalle con el que queremos ver dicha
información con algunos comandos. Los más usados son los siguientes.
Mientras más altos los niveles de las variables debug y verbose más detallada será
la información mostrada. Por omisión el grado nivel de verbose en Elastix se
encuentra en 3.
Nota: Debido al gran volumen de información que se puede generar con estos
comandos es importante reestablecer los valores de las variables debug y
verbose a los mínimos al finalizar nuestras tareas de diagnóstico. Caso
contrario Asterisk continuará generando esta información 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 desempeño de las llamadas.
A continuación una breve lista de los comandos de CLI más comunes. Para ver una lista
completa de comandos revisar el Apéndice C.
Comando Descripción
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 diagnóstico
core show channels Muestra información 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
74
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
información adicional como el IP desde
donde se conectan, el estatus, entre otros
datos
iax2 show registry Muestra información de registro IAX2 e
información como el estatus y el IP a la
que se trata de conectar
module reload Recarga todos los módulos de Asterisk.
Útil para aplicar los cambios hechos en
los archivos de configuración
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 producción donde no
tenemos otra opción que reiniciar la
central pero no queremos tampoco que se
corten llamadas
sip set debug ip Habilita debug de SIP a nivel de una
dirección IP específica
sip set debug peer Habilita debug de SIP a nivel de un peer
específico
sip show peers Muestra un listado con todos los peers SIP
configurados e información de cada uno
de ellos como el estatus
sip show registry Muestra un listado con los registros SIP e
información 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 producción donde no
tenemos otra opción que reiniciar la
central pero no queremos tampoco que se
corten llamadas
zap show channels Muestra un listado de los canales ZAP y
algunos parámetros de funcionamiento.
Ver ejemplo luego de esta tabla.
75
zap show status Muestra un listado de los dispositivos
ZAP y un reporte de alarmas y errores
La utilidad de AGI es enorme y nos permite desarrollar funcionalidad extra para nuestra
central telefónica. Un ejemplo muy común de esto es el desarrollo de aplicaciones de
consulta telefónica 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/
Los scripts AGI se comunican con Asterisk a través de STDIN, STDOUT y STDERR.
Esto quiere decir que deberían poderse ejecutar desde la misma línea de comandos.
76
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.
Luego de esto ya podemos ejecutar el script AGI desde el dialplan para que haga algo
útil. Esto se lo hace gracias a la función AGI(). A continuación un ejemplo.
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
extensión 6789. Por omisión 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.
77
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:
Ya veremos más adelante cómo diferenciar estos dos grupos de parámetros desde la
programación del script.
Comandos AGI
Comando Descripción
answer Answer channel
channel status Returns status of the connected channel
78
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
79
wait for digit Waits for a digit to be pressed
Librerías AGI
A pesar de que un programa AGI puede ser escrito en prácticamente cualquier lenguaje,
existen algunos lenguajes que ya cuentan con librerías para facilitar las labores de
desarrollo de scripts AGI. Algunos de estos lenguajes son los siguientes.
• Pearl
• PHP
• Python
• Ruby
• C
• .NET
Para ver información actualizada de las librerías o frameworks disponibles para estos
lenguajes recomendamos revisar el siguiente link: http://www.voip-info.org/wiki-
Asterisk+AGI
En nuestro caso utilizaremos una librería para PHP llamada phpAGI con la que
codificaremos un sencillo script AGI de ejemplo.
80
;
; 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
Primero nos conectamos al propio servidor Elastix a través de una sesión telnet. Para
esto ejecutamos lo siguiente desde la línea de comandos.
81
Como podemos ver el servidor nos ha contestado con un mensaje indicando que el AMI
está escuchando y nos dice también que se trata de la versión 1.0 del protocolo.
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 petición de
autenticación 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 envía a
nuestra sesión cada vez que ocurre un evento como por ejemplo cuando una llamada
cuelga o si una extensión está timbrando.
Comandos AMI
82
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
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
83
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
84
Instalando Elastix
Hay hombres que luchan un día y son buenos. Hay otros que luchan un año y son
mejores. Hay quienes luchan muchos años, y son muy buenos. Pero hay los que luchan
toda la vida, esos son los imprescindibles
-- Bertolt Bretch
Elastix se distribuye como un archivo ISO que puede ser quemado a un CD desde
cualquier software de grabación de CDs.
85
Pantalla de instalación inicial
86
Selección de tipo de teclado
Digite la contraseña que será usada por el administrador de Elastix. Recuerde que esta
es una parte crítica para la seguridad del sistema.
87
Escogiendo la contraseña de root
Luego se procede con la instalación, inicialmente usted verá algo como lo siguiente.
88
Inicio del proceso de instalación de paquetes
Luego de reiniciar el sistema usted podrá escoger entre las opciones de boot la distro
de Elastix.
89
Pantalla de GRUB para seleccionar una imagen de arranque
90
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 podrían ser las siguientes.
Para cumplir con este cometido se ha ideado un script llamado CentOS2Elastix. Este
script básicamente convierte un CentOS en un Elastix. CentOS es una popular
distribución de Elastix basada en la popular también Red Hat. Por lo dicho, al menos en
teoría, este script también debería funcionar sobre Red Hat.
Sin embargo, no todo es soplar y hacer botellas. Solo ciertas versiones de CentOS son
soportadas. La última versión 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.
# mkdir /testFolder
# mount -o loop ElastiXCorE-xxxx.iso /testFolder
# cd /testFolder
# ./install
En el ejemplo anterior debemos reemplazar las letras xxxx por la versión del script que
nos hemos descargado.
91
Una configuración muy útil que Elastix ha heredado de Linux es la posibilidad de
configurar arreglos de disco por software (Software RAID), permitiendo agregar un
nivel mínimo de redundancia a un bajo costo.
Aunque están 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 información 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.
92
Pantalla de instalación inicial: escogiendo opción “advanced”
93
El primer paso será crear todas las particiones de tipo RAID, para ello se elige la opción
“New”.
94
Se debe repetir este proceso por cada una de las particiones RAID y finalmente se
tendrá un listado como el que se muestra a continuación.
En este listado se aprecia que en el particionamiento es exactamente igual entre los dos
discos duros. El siguiente paso será la creación de los dispositivos RAID. Para ello se
selecciona la opción de “RAID”.
95
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 aparecerán en el listado de las particiones.
96
Elastix Overview
Los que dicen”imposible” no deberían interrumpir a los que están
intentando
-- Thomas Edison
• VoIP PBX
• Fax
• Mensajería Instantánea
• Email
• Colaboración
97
Esquema general de los componentes de Elastix
98
VoIP PBX
99
• 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 configuración de Asterisk
• Acceso interactivo desde el Web a la consola de Asterisk
Fax
General
100
• Administrable desde Web
• Interface de configuración de Relay
• Cliente de Email basado en Web
• Soporte para "cuotas" configurable desde el Web
Colaboración
Extras
Call Center
• Módulo de call center con marcador predictivo incluido. Más detalle de este
módulo más abajo.
Mensajería instantánea
101
• Soporta LDAP
• Soporta conexiones server-to-server para compartir usuarios
6.3 Licenciamiento
Elastix es software libre distribuido bajo licencia GPL versión 2.
102
Elastix: Configuración Básica
Educación es elevar al hombre al nivel de su tiempo
-- José Martí
System
103
un resumen de actividad en Elastix como
sus últimos emails, sus voicemails, sus
últimos faxes, si tiene algo agendado en el
calendario, etc
System Info Muestra información de sistema como uso
de memoria, CPU y disco duro
Network Menú de configuración de parámetros de
red
Network Parameters Aquí se pueden configurar parámetros de
red como dirección IP y máscara 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 administración de usuarios de
Elastix
Groups Permite configurar grupos de usuarios
Users Permite administrar usuarios y asignarlos
a grupos. También permite asociar cuentas
de email y extensiones telefónicas a
usuarios
Group Permission Aquí se configuran los permisos de acceso
a los diferentes módulos para un grupo
determinado
Load Module Permite cargar un módulo de Elastix
Shutdown Sirve para apagar el servidor
Hardware Detection Módulo de detección de hardware
telefónico
Updates Menú de actualizaciones
Packages Listado de paquetes con la opción 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 también para subir respaldos y restituir
información
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
104
look
PBX
Fax
105
que recibirá notificaciones del
funcionamiento del fax
Fax Clients Configuración de permisos de acceso para
aplicaciones clientes de fax
Fax Visor Visor de faxes que permite visualizar
faxes en formato PDF
Template Email Herramienta de configuración de plantilla
de email que se enviará cada vez que
arribe un fax
IM
Reports
106
telefónico
Billing Report Reporte de tarifación con filtrado por
fechas y campos. Básicamente se calcula
y muestra el costo de cada llamada
Destination Distribution Gráfico de pastel de la distribución por
destinos. Hay 3 criterios: por costo, por
número de llamadas y por tiempo de
duración de las llamadas
Billing Setup Configuración de las troncales habilitadas
para la tarifación. También se establece
aquí la tarifa por omisión
Asterisk Logs Interfase para ver el log de Asterisk con
filtrado por fechas y cadenas de texto
Extras
Agenda
107
Ingreso al Sistema
El usuario y contraseña por defecto para ingreso al sistema son los siguientes:
Usuario: admin
Contraseña: palosanto
La opción “Red” del Menú “Sistema” del Elastix nos permite visualizar y configurar los
parámetros de red del servidor.
108
Definir y corregir extensiones es probablemente la tarea más común realizada por un
administrador de PBX, y como tal, se encontrará muy al corriente de esta página. Hay
actualmente cuatro tipos de dispositivos o tecnologías soportadas: SIP, IAX2, ZAP y
“Custom”.
Para crear una “Nueva extensión” ingrese al Menú “PBX”. Por defecto se accede a la
sección “Configuración PBX”, en esta sección escogemos del panel izquierdo la opción
“Extensiones”. Ahora podremos crear una nueva extensión.
• Generic SIP Device: El SIP es el protocolo estándar para los teléfonos VoIP y
ATA. La mayoría de teléfonos IP soportan SIP.
• Other (Custom) Device: Custom nos permite escribir directamente una entrada
en los archivos de configuración y por ende esta entrada debe estar en formato
de extensión entendible por Asterisk. Puede también ser utilizado para “mapear”
una extensión a un número “externo”. Por ejemplo, para enrutar la extensión 211
a 1-800-555-1212, se puede crear una extensión “Custom” 211 y en la caja de
texto del “dial” se puede ingresar: Local/18005551212@outbound-allroutes.
109
Una vez haya escogido el dispositivo correcto, de clic en Ingresar.
Luego de escoger el tipo de dispositivo nos aparecerá un formulario que varía un poco
dependiendo de lo que hayamos escogido previamente. Nosotros supondremos que el
usuario ha escogido SIP pues es lo más común.
Como podemos observar se pueden configurar aquí muchas cosas interesantes pero no
todos los datos son necesarios para conseguir una extensión funcional así que
explicaremos aquí solo los más importantes.
• Extensión del Usuario: Debe ser único. Éste es el número que se puede marcar
de cualquier otra extensión, o directamente del recepcionista Digital si está
110
permitido. Puede ser cualquier longitud, pero convencionalmente se utiliza una
extensión de tres o cuatro cifras.
• Display Name: Es el nombre del Caller ID, para llamadas de este usuario serán
fijadas con su nombre. Sólo debe ingresar el nombre no la extensión.
Nota: Aquí explicaremos algo muy breve. Para más detalles visitar el capítulo
“Configuración de teléfono IP”.
• Zoiper: Este software nos permite trabajar con extensiones de tipo SIP e IAX,
además es multiplataforma, podemos descargarlo de la siguiente dirección:
http://www.asteriskguru.com
111
Formulario de modificación de configuraciones generales
112
Opciones del comando dial: Explicaremos esto más al detalle en breve.
Play extension number: En el mensaje que toca: “Por favor manténgase en la línea
mientras transfiero su llamada a la extensión XXX”. Es decir, menciona la extensión a
donde se va a transferir la llamada por lo tanto el llamante ya sabrá el número de
extensión para llamadas futuras.
Security Settings: Permite a anónimas llamadas SIP ser conectadas. El valor por
omisón es “no”.
Online updates: Permite revisar por actualizaciones disponibles. El valor por omisón
es “no”.
La mayoría 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 ningún audio
hasta la llamada sea contestada.
113
usuarios dinámicos, llamados agentes (es decir que pueden ingresar a la cola desde
cualquier extensión).
Una política o estrategia define la manera como se distribuyen las llamadas entrantes a
la cola entre los miembros o agentes. Las políticas de cola que soporta Asterisk al
momento son las siguientes:
Para configurar una cola en Elastix tenemos que ir al Módulo PBX y escoger en el
menú llamado “Queues”.
114
Formulario para añadir nueva cola
115
Queue Number:
Este es el número que puede ser marcado desde cualquier extensión para ser puesto en
la cola. Este también es el mismo número que se usa cuando se selecciona un destino.
En conclusión este número identifica a la cola y debe ser único.
Queue Name:
Un nombre corto para la cola. Este es usado únicamente para propósitos de
identificación.
Queue password:
A una cola se le puede poner una clave. Cuando un agente intenta conectarse, deberían
ser preguntados por la clave de la cola.
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 extensión, seguido del
número 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 teléfono y les avisa de una llamada
entrante.
Music On Hold:
Este es la música que es tocada al llamante mientras está en la cola por un agente que lo
atienda.
116
Max callers:
Es el máximo número de personas permitidas a esperar en la cola. Si este número 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 vacía (sin agentes), entonces hay que
setear este parámetro a “yes”. Esto no es recomendado.
Ring strategy:
Hay 6 tipos de estrategia de ringueado:
ringall: ringuean todos los agentes válidos hasta que alguno responda.
Roundrobin: ringuea en orden desde el primer agente válido
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 número de segundo que se espera para intentar nuevamente riguear a un agente.
Wrap-up-time:
Después de una llamada exitosa, indica el número de segundos antes de declarar al
agente libre y enviarle una nueva llamada, El valor por defecto es 0.
Call Recording:
Opción de grabar las llamadas entrantes a la cola.
117
Grabación 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 módulo diríjase al Menú “PBX”, aparecerá por defecto la sección
“Configuración PBX”, en el panel izquierdo escoja la opción “System Recordings”
(Grabaciones del Sistema).
La primera opción que tenemos es crear un anuncio grabándolo directamente, para esto
ingresamos el número de extensión desde el cual queremos realizar la grabación, en este
caso usaremos la extensión 201 y damos clic sobre el botón Go.
Luego de hacer esto, Asterisk estará esperando nuestra grabación en la extensión 201,
para continuar marcamos *77, grabamos nuestro mensaje y finalmente presionamos la
tecla # (numeral).
La segunda opción que tenemos es cargar una grabación creado en otro medio, para ello
debemos tener un archivo soportado por Asterisk, damos clic sobre el botón
“Examinar...”, buscamos nuestro archivo, luego procedemos a darle un nombre a esta
grabación. Finalmente damos clic en “Save” (Guardar).
118
Configurar un IVR de bienvenida
El IVR nos permite grabar un mensaje de bienvenida y además podemos tener un menú
controlado por teclado telefónico, a través de los 10 dígitos, y los símbolos # 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 módulo “IVR” diríjase al Menú “PBX”, aparecerá por defecto la sección
“Configuración PBX”, en el panel izquierdo escoja la opción “IVR”.
IVR: “Gracias por llamar a Elastix, si usted conoce el número de extensión puede
marcarlo ahora, caso contrario espere en la línea 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.
• Enable direct dial: Opción que permite a quien llama marcar una extensión
directamente en caso de que la conozcan sin tener que esperar al operador.
119
Formulario de creación de IVR
Entre las opciones del menú disponibles, en la parte izquierda existe un casillero donde
se debe ingresar la opción. Para la primera opción (cero) pondremos este valor en el
casillero, y asignamos alguna extensión configurada anteriormente, ésta extensión será
el operador.
120
la izquierda ingresamos la letra “t” lo que significa timeout y asignamos la extensión del
operador.
Los cuartos de conferencia no son otra cosa que una especie de extensión virtual en la
que se puede alojar varias llamadas al mismo tiempo, dando con esto la ilusión de estar
en una conferencia con muchas personas conversando al mismo tiempo.
Un cuarto de conferencia temporal se crea, como es obvio, para fines temporales. Por
ejemplo la empresa va a participar de una exposición 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 tópicos. 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. Lógicamente no queremos que estos cuartos sean
permanentes sino más bien que expiren luego de la feria ya que ellos no son
trabajadores permanentes de la compañía.
Listado de conferencias
121
En el presente apartado explicaremos cómo administrar conferencias temporales.
Para poder eliminar alguna o varias conferencias debemos seleccionarlas y dar clic
sobre el botón Eliminar.
Si desea agregar una nueva conferencia de clic sobre el botón “Nueva Conferencia”.
Para ver los detalles sobre una conferencia puede dar clic sobre el nombre de la
conferencia.
122
Si desea administrar una conferencia concurrente, de clic sobre el enlace de
participantes correspondiente a dicha conferencia.
Una vez haya invitado a alguien a la conferencia irán apareciendo en el reporte, si desea
Silenciar a uno o varios invitados selecciónelos en la columna “Callado” y de clic sobre
este botón (“Callado”).
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 botón “Actualizar”. Este botón también actualizará el
tiempo que lleva cada invitado en la conferencia.
Note que una vez de clic sobre el botón “Callado”, se actualizará el Estado del invitado,
los estados posibles son: Muted (Callado), UnMuted (No Callado).
Esta característica 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 música en espera. Claro, muchos dirán que
simplemente se lo pudo haber puesto on hold pero esto ocuparía la línea telefónica del
teléfono de recepción 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
conversación.
123
Configuración de un nuevo lote de parqueos
124
Enable Parking Lot Feature:
Seleccionando esta opción con un visto se habilitarán la funcionalidad de parqueo de
llamadas.
Number Slots:
Indica el número de slots disponibles para parquear llamadas.
Parking Timeout:
El período de tiempo que una llamada puede permanecer parqueada. Si se alcanza este
tiempo se intentará retornar la llamada al origen.
125
Formulario de administración de música en espera
126
Flash operador panel
Transferencia ciega
Para trasferir una llamada de una manera ciega se debe digitar: ## seguido del número
de extensión a donde se va a transferir la llamada.
Transferencia atendida
Para transferir una llamada de manera atendida se debe digitar: *2, seguido de la
extensión.
127
Configuración de hardware
No siempre podemos agradar, pero siempre podemos tratar de ser
agradables
-- Voltaire
• Analógico
o FXO
129
o FXS
• Digital
o E1/T1/J1
o BRI
Elastix ha sido probado el soporte para muchos modelos y fabricantes de tarjetería. Los
siguientes son los modelos soportados oficialmente a la fecha de redacción del presente
libro:
• Digium
• OpenVox
• Sangoma
• Rhino
• Yeastar
• Xorcom (con interface USB)
Tarjeta telefónica analógica de tipo modular con 3 puertos FXO y 2 FXS instalados
130
Luego encendemos el equipo y deberíamos verla enlistada a nivel de bus PCI
Hardware modular
Existen fabricantes que diseñan su hardware de manera modular, de tal forma que pueda
ser expandible. Por ejemplo, demos un vistazo a esta tarjeta analógica marca OpenVox
de 8 puertos poblada con módulos. Se puede observar que se ha extraído un módulo
FXS de su base.
Esta interfase se puede acceder desde el menú “System → Hardware Detector”. Para
detectar nuevo hardware basta con presionar el botón “Detectar Nuevo Hardware”.
131
Figura donde se observa 2 tarjetas detectadas
Esta detección 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
configuración por defecto ha sido escrita para dicho hardware.
A partir de esta configuración por defecto el usuario puede modificar ciertos parámetros
para que la tarjetería funcione cómo se desea. Estas configuraciones a bajo nivel se
explicarán más adelante en este mismo capítulo.
La herramienta de detección 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 parámetros
que pueden diferir de la realidad. Para corregir esto debemos realizar modificaciones a
bajo nivel, es decir cambios en los archivos de configuración.
132
Configuración de los drivers de Zaptel
span=(spannum),(timing),(LBO),(framing),(coding)
spannum
Es un identificador numérico único para etiquetar el span. Se debe empezar con el
número 1 e ir incrementando este identificador secuencialmente de uno en uno.
Timing
Es un dígito que define la forma en la cual se manejará la sincronización del span. Los
posibles valores son los siguientes.
Valor Significado
0 NO usar el span (telco) como fuente de sincronización. Zaptel
proveerá la sincronización y la enviará al otro lado. Esto es
más común cuando se conecta a través de este span una PBX
antigua a la cual hay que proveerle sincronización.
Normalmente si nos conectamos a una compañía telefónica
no deberíamos tener ningún span con este valor de timing
1 Usar el span (telco) como fuente primaria de sincronización
2 Usar el span (telco) como fuente secundaria de sincronización
3,4,5,……,n Usar el span (telco) como fuente de sincronización tercera,
cuarta, quinta, etc…
Nota: Solo el valor 0 puede ser repetido. Los demás valores del uno en adelante
NO se deben repetir.
133
Es un dígito que representa la longitud del cable entre la tarjeta y el equipo (modem)
provisto por la compañía telefónica. Casi siempre se puede dejar en 0 sin problemas.
Sin embargo si tenemos un cable muy largo habrá que revisar la tablita siguiente.
Framing
Como recordaremos, los protocolos de comunicación digital T-Carrier y E-Carrier
dividen la información en frames, donde cada frame transporta un número 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 información enviada para hacerla menos susceptible a errores.
Esto es así porque la propia data se suele usar como fuente de sincronización (o reloj) y
si se transmiten tramas largas de ceros (largos segmentos sin variación de voltaje) se
puede perder dicha sincronización. Para evitar esto se codifica la data para evitar
transmitir estas tramas largas de ceros. Por ejemplo la codificación 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 también se puede necesitar añadir chequeo de errores crc4 (Control de Redundancia
Cíclica 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 aún encontramos
errores puede ser que el cable no esté conectado o algún error de parte del proveedor.
134
Hasta este momento el hardware que hemos instalado no se encuentra relacionado con
Asterisk de ninguna manera (a menos que se haya presionado el botón de sobrescribir
zapata.conf).
zapata.conf
Asterisk cuenta con un módulo llamado chan_zap que sirve para conectarse con los
drivers de Zaptel y de esta manera conectar Asterisk con hardware telefónico. Este
módulo se configura a través de un archivo llamado zapata.conf
Veamos primero un archivo zapata.conf sencillo para ver los parámetros más
importantes y después continuaremos explicando algunos de estos parámetros.
135
[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 numérico. Por lo general se empieza con
el número cero.
Dentro de cada troncal se pueden repetir los valores globales (es decir los que se
encuentran en el encabezado, fuera de la definición de las troncales) y estos valores
sobrescriben a los anteriores. Por ejemplo, se podría sobrescribir la señalización para
una troncal específica.
signaling
136
Este parámetro define la señalización de cada canal o grupo de canales. Lo más común
que veremos para circuitos analógicos será fxs_ls y para circuitos digitales pri_cpe. Sin
embargo a continuación la tabla completa.
137
• 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 parámetro es para circuitos digitales y especifica el tipo de switch PRI usado. Lo
más común es national y euroisdn, dependiendo de en qué país nos encontremos claro
está. Este dato lo debe proporcionar la compañía telefónica así que sintámonos en la
libertad de preguntar. Los valores posibles son los siguientes.
138
Configuración de teléfono IP
Es difícil despertar a aquel que simula estar dormido
-- Provervio navajo
139
9.1 Configuración de softphone
Los teléfonos 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 teléfonos físicos.
El ahorro es mayor mientras más extensiones se tengan y es por eso que esta solución es
muy popular en call centers.
Por supuesto antes de empezar a configurar el softphone habrá que crear una extensión
desde Elastix. Ya hemos explicado esto anteriormente en este libro así que omitiremos
los detalles. En este ejemplo se supondrá la extensión 5678 con tecnología SIP y secret
5678.
El softphone que vamos a configurar será el Zoiper que está disponible en versión
gratuita y comercial. La versión gratuita es suficiente para que podamos hablar
cómodamente de un punto a otro así que basaremos nuestro ejemplo en esta versión.
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.
140
Configurando una cuenta SIP
A continuación volvemos a la pantalla inicial del Zoiper y allí debemos registrarnos con
la extensión que creamos. Para esto debemos seleccionar la extensión creada en el
combo de la parte inferior y dar clic en el botón “Register”.
141
Antes de registrar la cuenta SIP
Listo, ahora voy a llamar desde otro teléfono para ver si se puede alcanzar a mi nueva
extensión 5678 y podemos mantener una conversación.
142
Llamada ingresando a nuestro softphone
1. Configuración de red
2. Registro del dispositivo con el servidor Elastix
143
El teléfono Polycom 330 que configuraremos
Configuración de red
Al final del proceso conoceremos la dirección IP del dispositivo y con este dato
podremos acceder a la interfase de configuración Web que nos ofrece este modelo de
teléfono.
DHCP
144
servidor DHCP. Elastix viene con un servidor DHCP embebido que se puede activar
fácilmente desde la interfase Web.
Aquí aparecerá la dirección IP. Anotémosla para luego poder acceder al teléfono desde
la interfase Web.
IP estática
Esta opción le será útil si desea contar con un registro exacto de las direcciones IP de
sus teléfonos y/o si desea colocar sus dispositivos IP en segmentos específicos de su
red. En esta opción, necesitará ingresar la siguiente información.
Dirección IP
Recuerde que la IP que le vaya a asignar a este equipo no la debe tener ningún otro
equipo, debe ser única en su red. Vamos a suponer que el teléfono estaba previamente
configurado con DHCP ya que así viene de fábrica.
Presionar "Menu -> Settings -> Advanced -> (ingresar clave. Por omisión es 456) ->
Admin Settings -> Network Configration -> DHCP Client -> Editar -> Disabled ->
Phone IP Addres"
Máscara de red
Si usted no ingresa una máscara de red adecuada, su teléfono IP no podrá registrarse con
su central Elastix. Esos problemas ocurren con mayor frecuencia cuando los teléfonos
IP están dentro de diferentes segmentos de redes que la central Elastix, es ahí donde se
debe seleccionar la máscara adecuada.
Puerta de enlace
145
Seleccionar "IP Gateway -> (Ingresar la IP de la puerta de enlace)
La interfaz Web nos pedirá el usuario y la clave del teléfono para poderlo configurar. El
usuario y clave de fábrica son “Polycom” y “456” respectivamente.
146
Aquí podremos configurar algunos parámetros SIP como el servidor SIP, es decir
nuestra central Elastix, así como también el “Outbound Proxy” que viene a ser lo mismo
en nuestro caso. La configuración adecuada se muestra en la siguiente figura, donde se
supone que la dirección IP del servidor Elastix es la 192.168.1.66
Debemos tomar en cuenta de que la dirección 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 pública externa).
147
En esta pantalla también podemos configurar el puerto SIP donde se registrará nuestro
teléfono. Por omisión en Elastix este valor es 5060.
Extensión
148
Configuración Opcional
En esta sección veremos cómo configurar el Polycom para que muestre la fecha y hora
del Elastix.
149
Cambiando el mapa de dígitos
La distro Elastix está preparada para estos y cuenta con una interfase que nos permitirá
configurar muchos teléfonos de una manera más sencilla. Esta herramienta recibe el
nombre de Endpoint Configurator.
150
Rastreando la red en busca de endpoints
Es una lista de todos los teléfonos que se han encontrado en el segmento de red dado y
que el Elastix conoce o podrá configurar según su base de datos. Hay que recalcar que
actualmente Elastix en este módulo 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 teléfono IP se trata y con esto podremos relacionar
mentalmente su ubicación física.
151
Vista acercada de campos MAC, dirección IP y Fabricante
Luego hay dos columnas Phone type y User extension para una configuración rápida de
la extensión para el teléfono. En Phone type podrá elegir el modelo del teléfono y solo
se listaran aquellos que Elastix sabe configurar y reconocer. Tener en cuenta que para
configurar los teléfonos se deben haber creados previamente extensiones desde el menú
PBX->PBX Configuration.
Otra limitante es que las extensiones deben ser SIP, no están soportadas extensiones de
ningún otro protocolo.
152
A continuación explicaremos paso a paso cómo configurar un teléfono marca ATCOM,
modelo AT-530. Este es un modelo de teléfono de bajo costo que soporta tanto SIP
como IAX.
Luego del proceso vamos a ver que el reporte se actualizó y el estatus del teléfono es
“Configured without incident”. Esto indica que la central Elastix hizo varias cosas.
• Tercero, mediante conexión telnet (solo para los ATCOM), realizó acciones de
cargar el archivo de configuración al teléfono, guardar al archivo y reiniciar. Por
ello usted podrá notar que el teléfono se va ha reiniciar.
153
Hay que tener ciertas consideraciones en cuanto a la conexión telnet en los teléfonos
ATCOM y es que para poder establecerse es necesario de un usuario y contraseña que
por efectos de simplicidad en Elastix se usan los que vienen por omisión de fábrica.
Para el caso del modelo AT-530 son usuario admin con clave admin y para el caso del
AT-320 la clave es 12345678.
Nota: Existe el botón “Unset”. La acción que ejecuta éste es sólo a nivel del
módulo. La central Elastix borra el registro histórico relacionado con el
teléfono IP de la base de su base de datos interna y borra los archivos de
configuración relacionados en la ruta /tftpboot/. Esto indica que el teléfono en
si mantiene la configuración que tuvo.
154
En la parte izquierda vamos a elegir la casilla, y luego presionamos el botón “Set”.
Inmediatamente aparece la ventana de confirmación en la cual si esta seguro se acepta y
el proceso de configuración empezará. Esto puede tomar algo de tiempo dependiendo
del número de teléfonos que haya elegido, en este caso por tratarse de un ejemplo hay
solo un teléfono a configurar.
Luego del proceso vamos a ver que el reporte se actualizó y el estatus del teléfono es
“Configured without incident”, esto indica que la central Elastix hizo varias cosas.
Archivo Descripción
0004f2131470.cfg El 0004f2131470 representa la dirección MAC y este
archivo es un encabezado que le indica al teléfono lo que
se va a hacer durante el proceso de actualización y
configuración
0004f2131470reg.cfg Contiene información de la (o las) extensiones que va ha
poseer el teléfono
polycom Realmente es una carpeta que posee a su vez otras
carpetas llamadas contacts, logs y overrides
server.cfg Configuración relacionada con servidor de proxy y SIP
sip.cfg Todos los parámetros adicionales que se deseen
configurar. Para esto es bueno revisar un manual de
Usuario Polycom
155
Estos pasos son iguales en todos los modelos Polycom que Elastix soporta. Así mismo
como en el caso de los teléfonos marca ATCOM se genera un historial en la base de
datos interna de Elastix acerca de la configuración del teléfono Polycom.
Archivo Descripción
atcom.cfg.php Se encuentra configuración para los modelos AT-530 y AT-
320. Para cambiar alguna configuración se recomienda revisar
manuales del archivos de configuración 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 también tienen formato XML
156
cisco.cfg.php, Estos archivos son versiones aun no terminadas, para la
aastra.cfg.php configuración de Cisco y Aastra en un futuro cercano
Al hacer estos cambios en estos archivos plantilla, la próxima vez que use el módulo
Endpoint Configuration su personalización de configuración será reflejada al configurar
o actualizar los teléfonos.
157
Elastix: Configuración avanzada
Si espero perderé la audacia de la juventud…
-- Alejandro Magno
Rutas Entrantes
Esta opción 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 número de la troncal en caso
de que sea una de tipo ZAP con la información de la llamada entrante.
159
Formulario de creación 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 número de cuenta. Por ejemplo si su cuenta es
'85679432', poniendo este dato en el campo DID, las llamadas entrantes deberían
“matchear” esta información 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 fácilmente “spoofable”. Al dejarlo en blanco “matchea” cualquier Caller ID.
Zaptel Channel:
En está opción se puede colocar el número de la troncal zap que se quiere que se
matchee con el número de troncal por donde asterisk recibe una llamada. Esta opción es
excluyente con el la opción de DID Number.
Fax Handling:
Con esta opción se pueden administrar la forma en que los faxes son recibidos.
Immediate Answer:
Esta característica hace que se conteste la llamada tan pronto como este renguea (con las
líneas zaptel, esto ocurre después de que el Caller-ID es recibido, lo cual puede ser
después de 3 rings). Si estamos usando g729 ó GSM, los rings debería sonar divertido
al llamador.
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 extensión, 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.
Route Name:
En este campo se especifica un nombre descriptivo para la troncal para poder facilitar la
administración 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 opción podemos especificar que la ruta es para llamadas de emergencia. Se
puede especificar un diferente caller ID.
Dial Patterns:
El patrón de marcado es el conjunto de dígitos ó patrón de dígitos que Asterisk usa para
verificar el “match” con los dígitos marcados por un llamador para determinar el canal
por donde debe enviar la llamada.
Existen reglas de cómo especificar los patrones de marcados, las cuales indicamos a
continuación:
Patrón Descripción
X Representa cualquier dígito de 0-9
Z Representa cualquier dígito de 1-9
N Representa cualquier dígito de 2-9
[1237-9] Representa cualquier dígito entre corchetes
. Representa uno o más caracteres
| Separa el número ubicado a la izquierda del número
marcado. Por ejemplo: 9|NXXXXXX debería
representar los números marcados como “92234567”
pero sólo debería pasar “2234567”
Trunk Sequence:
Se lista e indica el orden en que se debe intentar el uso de las troncales. Cuando un
número digitado por un llamador es “matcheado” por el patrón de marcado especificado
antes, Asterisk intentará realizar la llamada por las troncales especificadas en esta
opción 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
164
Si no se quiere usar un caller ID dejar en blanco esta opción
Maximum channels:
Esta opción limita el número de canales que pueden ser usados en una troncal. Al decir
canales se refiere al número de llamadas simultáneas que se pueden hacer, tanto
entrantes como salientes.
Dial Rules:
Las reglas de marcado indican como asterisk debería marcar para hacer la llamada en
una troncal. Esta opción puede ser usada para adicionar ó remover prefijos. Si un
número marcado no matchea con patrones colocados en estas reglas, es marcado como
fue digitado.
Patrón Descripción
X Representa cualquier dígito de 0-9
Z Representa cualquier dígito de 1-9
N Representa cualquier dígito de 2-9
[1237-9] Representa cualquier dígito entre corchetes
. Representa uno o más caracteres
| Separa el número ubicado a la izquierda del número
marcado. Por ejemplo: 9|NXXXXXX debería
representar los números marcados como “92234567”
pero sólo debería pasar “2234567”
+ Adiciona un prefijo al número marcado. Por ejemplo:
001+NXXNXXXXXX debería agregar el 001 al
número 3058293438 cuando este es marcado
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
Además es posible que se requiera una cadena de registro que tiene la siguiente sintaxis:
myusername:mypassword@host
Las troncales de tipo zap son las asociadas a hardware de telefonía instalado en la
máquina y usa el módulo 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 número asociado a la posición del canal en
el hardware.
Troncales personalizadas.
Estas troncales son creadas cuando se usan protocolos no estándares como h323,
Unicall, etc.
Unicall/XXXXXXX
10.3 Tarifación
166
La opción “Tarifas” del Menú “Facturación” del Elastix nos permite visualizar y
configurar las tarifas que se usarán para la facturación de llamadas.
El enlace Ver nos llevará a una pantalla donde se mostrará los datos de la tarifa.
Puede además modificar los valores de la tarifa dando clic en el botón Editar. Los
únicos valores que puede cambiar son: Nombre, Tarifa y Tarifa de Conexión.
Crear Tarifa
Para agregar una nueva tarifa dar clic en el botón Crear Nueva Tarifa. Se mostrará un
formulario en el que se ingresarán los siguientes campos:
167
Creación de nueva tarifa
Reporte de Facturación
La opción “Reporte de Facturación” del Menú “Facturación” del Elastix nos permite
visualizar el detalle de las llamadas con su respectivo costo y tarifa aplicada.
168
Reporte de tarifación
Distribución de Destinos
La opción “Distribución de Destinos” del Menú “Facturación” del Elastix nos permite
visualizar mediante un gráfico la distribución de las llamadas salientes agrupadas por
tarifa. El gráfico cambiará dependiendo de los valores de filtrado:
169
La opción de distribución por tiempo muestra un gráfico de pastel del tiempo traficado
para cada troncal. Además muestra una lista de las troncales que más tiempo han
traficado.
Muestra un gráfico de pastel del número de llamadas para cada troncal. Además muestra
una lista de las troncales con más número de llamadas traficadas.
170
Distribución por Costo
Muestra un gráfico 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 cálculo de
costo está basado en las tarifas ingresadas en el menú “Tarifas” (rates).
Configurar Facturación
La opción “Configuración de Tarifa por Omisión” del Menú “Facturación” del Elastix
nos permite determinar el costo por minuto y de conexión para la ruta por omisión o
dicho de otra manera la tarifa que se aplicará cuando no se encuentre otra tarifa que
aplicar a una llamada.
El listado muestra todas las troncales registradas, deberá seleccionar las que se usarán
para la facturación y luego dar clic en el botón “Habilitar para Facturar”.
171
Centrales habilitadas para tarifación seleccionadas con visto
10.4 Reportes
Reporte CDR
La opción “Reporte CDR” del Menú “Reportes” del Elastix nos permite visualizar un
listado con el detalle de las llamadas.
172
Reporte de CDRs
Nota: Este reporte es exportable a formato CSV (separado por comas). Este
formato se puede abrir desde una hoja de cálculo para realizar las manipulaciones
matemáticas que se estime conveniente como por ejemplo sacar promedios de
tiempo de llamada por extensión.
Uso de Canales
La opción “Uso de Canales” del Menú “Reportes” del Elastix nos permite visualizar
gráficamente el número de llamadas simultáneas para cada canal.
173
Reporte de uso de canales
Normalmente el soporte DISA no está disponible para todos los empleados de una
compañía y es necesaria una clave para poder obtener el tono "interno". Para poder
ingresar la clave algunas compañías proveen de una opción oculta en el IVR principal
de la compañía. En todo caso hay que tomar las precauciones para que el acceso DISA
no pueda ser quebrantado por usuarios indeseados, quienes podrían aprovecharlo para
hacer llamadas a costa de la compañía.
174
Para configurar un acceso DISA debemos ir al menú "PBX -> PBX Configuration ->
DISA" y obtendremos una pantalla como la siguiente.
Luego, para que éste acceso DISA esté disponible desde el IVR principal debemos
modificar dicho IVR y asociar una opción con el acceso DISA recientemente creado.
175
El uso de condiciones de tiempo es una característica muy útil para muchos negocios
que quieren modificar el comportamiento de su PBX dependiendo de la hora del día o
día de la semana. Por ejemplo, la compañía 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 atención y diciendo también que pueden contactar a un número alternativo
para casos urgentes; o también la compañía Z que quiere reproducir un IVR de
bienvenida distinto al habitual durante los fines de semana ya que tienen promociones
de fin de semana.
176
Añadiendo una nueva condición de tiempo
177
Funcionamiento interno de
freePBX
La libertad no se implora, se conquista
-- Eloy Alfaro
179
2. Luego convierte esa información almacenada en MySQL principalmente en
archivos de configuración a través de una herramienta de parsing llamada
retrieve_conf
Directorio Descripción
/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
configuración 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 simbólicos a
las carpetas de los módulos
/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.2 Configuración
amportal.conf
Por ejemplo, aquí se encuentra información de acceso a la base de datos como usuario y
clave así como también el tipo de autenticación que freePBX usará para con sus
usuarios Web.
Es un archivo bien documentado por lo que no se nos hará difícil entender las opciones
o directivas de configuración.
181
11.3 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 información almacenada en la base de datos. Este programa
puede ser invocado inclusive desde la línea de comandos aunque usualmente se ejecuta
desde el Web a través de un script PHP cada vez que damos clic en la famosa barrita
roja de freePBX (la que dice “aplicar cambios”).
11.4 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
extensión a la que se está tratando de alcanzar, así como también ciertas opciones que
pudieran estar configuradas en dicha extensión (como call waiting, call forward, do not
disturb) y retorna dicha información para que se pueda tomar una acción acorde como
por ejemplo devolver al llamante un tono de ocupado en el caso de DND o rutar la
llamada a otra extensión en el caso de call forward. Si la extensión está disponible y no
se encuentran opciones activadas la llamada transcurre sin inconvenientes.
Nota: Este script puede ser sobrescrito por el propio freePBX por uno nuevo
por lo que si se realizan cambios en su código se debe tener este hecho en
cuenta. dialparties.agi está ubicado en la ruta /var/lib/asterisk/agi-
bin/dialparties.agi.
182
11.5 Estructura de un módulo de freePBX
La idea de este apartado no es proveer de los conocimientos para que podamos construir
un módulo de freePBX sino más bien para que podamos entender cómo solucionar
posibles problemas y para entender mejor cómo funciona freePBX.
183
Interconexión con Elastix
remotos
Cualquier poder, si no se basa en la unión, es débil
-- Jean de la Fontaine
185
1. La troncal
2. Las rutas salientes en cada Elastix
Definiendo la troncal
Luego definimos los detalles del peer que en este caso serán los siguientes:
host=dynamic
secret=welcome
trunk=yes
type=friend
euio:[email protected]
egye:[email protected]
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 configuración es como sigue:
context=from-internal
host=192.168.1.240
insecure=very
type=friend
• En tercer lugar escogemos la troncal por la cual debe irse la llamada. En este
caso escogemos por la troncal SIP/egye
En este apartado implementaremos una conexión SIP con un proveedor que nos
permitirá hacer llamadas dentro de los Estados Unidos.
1. La troncal
187
2. Las rutas salientes en cada Elastix
Definiendo la troncal
Luego definimos las características del peer. Esta información 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
myusername:[email protected]
188
• En tercer lugar escogemos por que troncal debe irse la llamada en este caso
escogemos por la troncal SIP/VP-SIP-NYC
189
Calidad de voz
Calidad es hacer las cosas bien cuando nadie está controlando
-- Henry Ford
Eco
El eco es uno de los síntomas más comunes y es muy fácil reconocerlo. Se produce
cuando una parte de la señal de ida se refleja en la señal de vuelta.
Hay algunas causas del eco pero una de las más comunes se produce en las líneas
analógicas cuando se combinan las señales en el convertidor híbrido o convertidor de 2
4 hilos ya que es muy difícil separar las señales de ida y de vuelta de manera eficaz.
191
El problema se agrava cuando la impedancia de la línea telefónica varía mucho. Mucha
de la tarjetería telefónica disponible para Asterisk no dispone de un buen mecanismo
dinámico de ajuste de la impedancia de la línea con la impedancia de la tarjeta. Por esta
razón una parte de la onda se refleja.
Nota: hay que recordar que para que un receptor absorba eficientemente la
potencia de la señal recibida su impedancia debe coincidir con la de la línea.
Sin embargo, existe una forma de acoplar estas impedancias lo mejor posible. Esto se
puede realizar con la utilería llamada fxotune disponible en Elastix.
Lamentablemente esta utilería se debe ejecutar manualmente y con el servicio Asterisk
apagado. Para líneas 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 señal pura por
la línea y escuchando el retorno. Esto lo hace muchas veces para cada línea hasta
encontrar el mejor valor de ganancia, el cual escribe en un archivo ubicado en
/etc/fxotune.conf
Al finalizar su ejecución 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 líneas no se deben configurar las variables txgain o rxgain en el
zapata.conf ya que sobrescribirán el trabajo del fxotune.
Otra causa del eco es el eco acústico provocado cuando la señal de sonido se
retroalimenta desde el micrófono al audífono. Esto es más notable cuando hablamos por
altavoz. Por supuesto el diseño del teléfono tiene mucho que ver aquí y hay modelos
que introducen menos eco acústico que otros.
192
Bajo nivel o volumen
Retardo
Retardos mayores a 500 ms provocan que la conversación se pise, es decir que los
interlocutores se interrumpan y la conversación se traslape. Esto es irritante para la
conversación.
Cuando existe retardo es casi imposible eliminarlo a nivel del servidor pues en la gran
mayoría de los casos el retardo es un síntoma 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.
Distorsión de la voz
En esta categoría recaen diferentes problemas. Sin embargo uno común es el de los
usuarios que reportan algo como “se escucha robotizado”.
193
información en el proceso de codificación. Si a esto se le agregan problemas con el
ancho de banda el problema empeora.
La solución en este caso en particular es cambiar de codec pero hay que tener presente
que eso podría disparar otro problema peor si es que se usa un codec mas consumidor
de ancho de banda y el enlace se satura.
Comunicación entrecortada
Un problema muy molestoso por cierto que normalmente está relacionado con la
pérdida de paquetes. A su vez la pérdida de paquetes puede ser causada por diferentes
problemas en la red, siendo el más común el de redes con una latencia elevada o ancho
de banda limitado. La comunicación entrecortada también puede ser ocasionada por un
elevado jitter en la red. Estudiaremos esto último más adelante.
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 comunicación entrecortada no nos quitarán el sueño.
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.
Aquí podemos ver algunos parámetros como el retardo mínimo, máximo, promedio y
desviación.
194
Pérdidas de paquetes
Las pérdidas son ocasionadas por paquetes que no llegaron a su destino. Pueden haber
muchas razones para esto como equipos defectuosos o saturados, pérdidas en el medio
de transmisión (cables mal ponchados, ruido ambiente elevado), etc.
En el reporte del comando ping examinado hace poco vemos que también se nos reporta
porcentualmente las pérdidas de paquetes. Lo deseable es que no existan pérdidas de
paquetes en lo absoluto. Si existen, hay que averiguar el por qué.
Inclusive pérdidas de menos del 1% pueden afectar a las conversaciones de voz sobre
IP. Más aun si usamos codecs con gran compresión.
Jitter
Este parámetro 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é?
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 señal de voz para enviarla al teléfono del destinatario) a lo mejor lleguen
una buena parte de los paquetes extraviados y la comunicación sufra menos las
consecuencias.
El problema es que con esta acción estamos también aumentando el retardo, que es otro
problema desagradable. Sin embargo la idea es buena y si esperamos lo sólo lo justo es
probable que lleguen una buena parte de los paquetes perdidos sin afectar
significativamente el retardo.
Si se quiere estar seguro de que el jitter buffer está habilitado se puede añadir las
siguientes opciones en los archivos de tecnología. 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
obtener. Un ejemplo de esto es que nuestra mente le da más importancia a eventos más
recientes que a los pasados por lo que si la voz se distorsiona justo antes de terminar la
conversación 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. También 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 teléfonos celulares (al menos de primera
generación) en pro de la ventaja de la movilidad. Sin embargo, si la misma calidad la
escucharan en una línea fija es probable que llamen a la compañía telefónica a quejarse
porque su línea suena raro o con mala calidad. Dicho de otra manera inconscientemente
estamos justificando esa falta de calidad y haciéndola “justificable”.
En fin, esto es solo la punta del iceberg pues hay una serie de parámetros subjetivos un
tanto difíciles de cuantificar. Lo importante es ilustrar la difícil tarea que se tiene al
tratar de cuantificar la calidad de voz.
Escala MOS
Para hablar claro se reúne 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 comparación
de la conversación telefónica con una señal referencial y pensándolo bien así es como
sucede en una llamada telefónica real.
197
Calificación MOS Calidad Esfuerzo
5 Excelente No hace falta esfuerzo alguno
4 Buena Es necesario prestar atención pero no es
necesario un esfuerzo apreciable
3 Aceptable Esfuerzo moderado
2 Pobre Gran esfuerzo
1 Mala No es posible entender la conversación
Modelo E
R = R0 – IS – Id – Ie + A
Donde,
198
Simplifiquemos las cosas un poco
Para los impacientes que ya quieren comenzar a hacer cálculos matemáticos les diré que
la recomendación ITU nos provee de una fórmula más simplificada para calcular el
parámetro R, aunque obviamente menos precisa que la primera pues supone algunos
valores por omisión. Esta fórmula es la siguiente.
R = 94,2 – Id – Ie
Nota: Si somos observadores notaremos que el valor máximo que podría tomar
R es de 94,2.
Finalmente hay que calcular Ie para poder reemplazar este valor en la fórmula y calcular
el dichoso R. Como dijimos antes Ie depende de algunos factores pero básicamente de
las pérdidas de paquetes y del codec usado. Para mantener las cosas relativamente
simples usaremos un gráfico con el cual podremos determinar de manera aproximada el
valor de Ie dependiendo de, precisamente, el porcentaje de pérdida de paquetes y el
codec usado. La tabla es la siguiente.
199
Gráfico Ie vs Pérdida de paquetes
Este gráfico fue generado a partir de la siguiente tabla de valores aproximados. El eje
horizontal representa la pérdida de paquetes y el eje vertical representa el parámetro Ie.
MOS = 1 R<0
MOS = 1 + 0.035 · R + 7 · R · (R – 60) · (100 – R) · 10 -6 0 < R < 100
200
MOS = 4.5 R > 100
Ahora ya tenemos una manera práctica y objetiva de medir la calidad de voz de una
instalación de voz sobre IP y de esta manera hacer ajustes correspondientes para
mejorar la satisfacción de los usuarios telefónicos.
Ejemplo práctico
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 pérdida de paquetes llega al 7%. Cuál sería la medida de calidad de voz según la
escala de MOS?
No entraré en detalles del desarrollo del problema aquí pero en algún momento
llegaremos a la siguiente expresión.
R = 83.57
MOS = 4.15
Es muy importante saber cómo funcionan los canceladores de eco para entender cómo
sacarles el máximo provecho y quién sabe, para tener las bases para diseñar el nuestro
propio o modificar alguno existente. A fin de cuentas estamos hablando de código
abierto verdad?
201
Un cancelador de eco parte de un principio lógico muy sencillo. Si se refleja una parte
de la señal de ida en la de regreso, entonces para eliminar el eco debería bastar con
restar la señal de ida (en cierta proporción) a la señal de regreso.
Debido a que el eco es una señal reflejada que se encuentra atenuada, la clave está en
estimar adecuadamente dicha atenuación. Por ejemplo, supongamos que la señal de eco
es un 20% de la señal original. Entonces si podemos predecir que debemos restar a la
señal de regreso un 20% de la señal de ida, habremos eliminado el eco completamente.
Al menos en teoría claro está.
Esta “predicción” del factor de atenuación es una parte clave de todo algoritmo de
cancelación 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.
Sin embargo, no todo es tan sencillo como se explica aquí. El eco no es solo una señal
reflejada atenuada sino que también puede estar desplazada en el tiempo con cierto
retardo. Ese retardo también hay que predecirlo para poder restar la indeseable señal 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 señal en busca de retardo por grandes lapsos de tiempo.
202
Nota: Hay que hacer un pequeño paréntesis aquí y recordar que los
canceladores de eco deben funcionar a tiempo real y por lo tanto no pueden
perder el tiempo en cálculos muy tediosos ya que dejarían de ser veloces y
retrazarían el envío de la voz.
Valores típicos 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 términos de uso de CPU) pero mayor podría ser la imprecisión. Este tiempo máximo
de retardo que un cancelador de eco puede tolerar se denomina comúnmente cola o tail.
El estándar G.168
Hace algunos años el ITU lanzó una especificación que define los parámetros de lo que
debe ser un cancelador de eco. Podríamos decir que el documento es una
recomendación. Por lo tanto, si un cancelador de eco está en concordancia con dicha
recomendación se dice que es G.168 compatible (compliant with G.168). Sin embargo,
G.168 es una especificación técnica compleja y no es cosa fácil 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.
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 técnicos 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.
203
Protocolos SIP y RTP 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
205
Es un protocolo peer-to-peer. Es decir que prácticamente toda la lógica es almacenada
en los endpoints.
Métodos
Método Descripción
INVITE Invita a un usuario a una llamada
ACK Facilita el intercambio de mensajes
confiables
Respuestas
206
• 6xx Global Failure (e.g. 603 Decline)
SIP y Asterisk
Algunos detalles a tener en cuenta cuando se usa el protocolo SIP con Asterisk son los
siguientes:
• Por omisión se usa el puerto 5060, pero este parámetro se puede modificar en el
archivo sip.conf
• En Asterisk es posible hacer diagnóstico del protocolo SIP. Se verá esto más
adelante.
RTP trabaja sobre UDP y por lo tanto no hay mucho control de transmisión. Es decir
que el equipo emisor envía la voz hacia el otro extremo con la esperanza de que llegue,
pero no espera recibir confirmación 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
pierde en el camino simplemente se rellenará ese espacio con un silencio. Lo que
técnicamente se llama ruido confortable (comfort noise).
Es por esta necesidad de transmitir la información en tiempo real que resulta obvio que
RTP sea un acrónimo 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 estadísticas e información de control que le permiten a Asterisk o al otro
207
extremo tomar decisiones para mejorar la transmisión en caso de ser posible. Por lo
tanto, los paquetes RTCP se transmiten periódicamente para comunicar dicha
información a los equipos de voz involucrados.
RTP se define en el documento RFC 3550 así que veamos qué dice al respecto:
Para tener una mejor visión de lugar que ocupa un paquete RTP en el modelo TCP/IP
veamos la siguiente figura.
208
• 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.
• Número de Secuencia (sequence number) es un número 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 sincronización ya que el mismo equipo puede estar
“hablando” con diferentes fuentes de paquetes RTP. Es un número aleatorio de
32 bits por lo que hay la posibilidad (aunque la probabilidad es baja) de que este
número se repita entre dos fuentes. Existen mecanismos para resolver este
problema.
• CSRC es un número de 32 bits que identifica las fuentes contribuyentes para el
payload
209
Diagnóstico básico de
problemas
Si hubiera preguntado a mis clientes qué necesitaban, habrían dicho un
caballo mejor
-- Henry Ford, fundador de Ford Motor Company
Antes que nada es necesario conocer que tanto el nivel de detalle, así como el tipo de
información 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 información. Para cada uno de estos archivos
se tiene que especificar también el nivel de detalle que se escribirá en ellos. Esto se hace
en una sola línea, la sintaxis es la siguiente.
211
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.
212
El archivo /var/log/asterisk/full
Como vimos en el último ejemplo, por omisión en Elastix tenemos un archivo de log
llamado full donde Asterisk escribe información de su funcionamiento. Cada línea de
este archivo tiene el siguiente formato.
Veamos un ejemplo de cómo lucen algunas líneas del archivo de log de Asterisk.
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 añadir el siguiente filtro.
213
Si queremos además ver los WARNINGs podemos modificar ligeramente el filtro de la
siguiente manera.
En este ejemplo vemos que cuando se escribió esta línea en el log nos encontrábamos
dentro del contexto macro-dial (una macro, ya que empieza con la palabra macro), la
extensión era la extensión s y la prioridad era la 7. También podemos observar que se
está tratando de marcar mediante la aplicación Dial y podemos ver los parámetros que
214
se le pasaron como por ejemplo la cadena "trTWuwM(auto-blkvm)". En fin, podemos
observar en todo caso que hay mucha información útil que podemos obtener de cada
línea escrita en el log.
Número de proceso
Con el comando anterior estamos filtrando la salida por el proceso 38484. Por supuesto
también podremos haber capturado alguna cadena de caracteres que coincida con el
patrón 38484 como por ejemplo algún número de teléfono de algún usuario, pero estas
líneas irrelevantes se las pueden eliminar manualmente.
Decíamos que gracias a este procedimiento podremos filtrar un poco más el hilo de una
llamada. Esto es particularmente útil puesto que Asterisk escribe mucha información en
el archivo de log y si nos encontramos en ambientes con muchas llamadas concurrentes
ubicar información de una llamada específica en el log puede resultar un verdadero
dolor de cabeza.
Nota: Algo importante a tener en cuenta es que una llamada puede tener más de
un proceso involucrado.
15.3 Sniffing
215
En el ámbito de networking el término sniffing significa capturar paquetes de red en su
formato original para su posterior análisis. Existen herramientas especializadas para este
fin y algunas cuestan una verdadera fortuna. Por suerte hay una de código abierto que
hace un gran trabajo y se llama Wireshark.
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 más de una. Cuando
ya estemos seguros la captura es sencilla, colocamos la laptop en la misma tarjeta
Finalizada la captura lo más 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 práctica
aprenderemos a filtrar estos paquetes irrelevantes, eso se lo dejamos de tarea al
estudiante.
216
Banco de preguntas de prueba
Este apéndice contiene una pequeña prueba compuesta por preguntas típicas de un
examen de certificación de Elastix. El presente conjunto de preguntas no corresponden a
la totalidad de tópicos requeridos por el examen de certificación Elastix sino los
cubiertos hasta el primer curso de preparación. Debe notarse que no necesariamente
todas estas preguntas han sido desarrolladas en el presente libro pues la presente obra es
solo una parte integrante de todo el material didáctico provisto en nuestro plan de
entrenamiento. Algunas de ellas pueden haber sido desarrolladas en las prácticas de
laboratorio, diapositivas, lecturas recomendadas, deberes enviados por el instructor o
cualquier otro material expuesto durante el entrenamiento.
Preguntas
1) Supongamos que se encuentra trabajando remotamente en el servidor Elastix de un
cliente y de repente se da cuenta que ha perdido la conexión ssh y necesita acceder al
equipo por esta vía para obtener la salida de un comando del CLI. Se da cuenta de que
es tarde y que lo que sucedió es que el firewall del cliente aplicó una regla programada
para luego de las 7 de la noche que bloquea el acceso al puerto ssh desde redes
remotas. El cliente ya se ha ido a su casa y no es posible contactarlo para que revierta la
configuración del firewall. Qué haría?
2) Que se puede hacer si en cierto punto se tienen demasiados botones en el FOP que
dificultan la usabilidad de la herramienta?
217
3) Dibuje una señal de RING de una línea analógica (voltaje vs. tiempo)
218
información. Qué comandos usaría a través de una conexión ssh y qué cálculos haría
luego para determinar una medida de calidad de voz?
12) Cómo puedo hacer que mi cuenta de Webmail este mapeada con mi cuenta de
usuario elastix?
15) Un cancelador de eco con una cola de 128 ms es mejor que uno con una cola de 256
ms? Justifique su respuesta con un comentario.
16) Cuales son los archivos de configuración relacionados con los drivers de tarjetería
Sangoma?
18) Qué RPMs dependen del kernel en la distro Elastix? Enliste todos.
19) Si tengo una tarjeta T1, qué tipo de framing y señalización podría configurar?
20) Necesito ejecutar el script genzaptelconf. Cuáles son las opciones que debo
poner para detectar, configurar y crear los archivos de configuración zaptel.conf y
zapata.conf si se tiene una tarjeta OpenVox de 8 puertos FXO?
21) Qué significa la frase “In Use” en la salida del comando lszaptel?
25) Si encuentro un bug en Asterisk. Qué debería hacer antes de reportarlo a Digium?
219
26) Cómo o donde puedo ver un log para saber si un fax fue enviado al correo
electrónico destino?
27) Tengo un servidor Elastix con troncales SIP y de repente todos lo teléfonos se des-
registran de forma periódica que debo revisar primero?
29) Un cliente reporta que su FOP se encuentra parpadeando. Qué podría ser?
31) Qué servicios importantes en Elastix no vienen por encendidos por omisión?
33) Cómo podría capturar una conversación telefónica desde la línea de comandos
ssh?
35) Dibuje una señal de ocupado de una línea analógica (voltaje vs. tiempo)
40) Qué quiere decir que la aplicación Background de Asterisk devuelve el control de
ejecución?
220
Archivos de configuración de
Asterisk distribuidos con
Elastix
Archivo Descripción
a2billing.conf Archivo general de configuración de
a2billing
additional_a2billing_iax.conf Configuración de IAX para a2billing
additional_a2billing_sip.conf Configuración de SIP para a2billing
adsi.conf Archivo de configuración para ADSI
(Interfase Análoga para servicios de
Display por sus siglas en Inglés). Con
ADSI se puede interactuar entre Asterisk
y los displays de teléfonos análogos
adtranvofr.conf Archivo de configuración que permite
tener soporte de Voz sobre Frame Relay
agents.conf Archivo de configuración que permite
manejar los agentes de las colas.
alarmreceiver.conf Sirve para configurar la aplicación
AlarmReciever()
alsa.conf Configura el driver de sonido con los
drivers de ALSA
amd.conf Se utiliza para cuando se hace llamadas y
221
estas detectan una contestadora
automática
applications.conf Básicamente 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 configuración de
Asterisk. Aquí se configuran los
directorios de trabajo de Asterisk así como
algunas opciones generales
cbmysql.conf Archivo de configuración del módulo 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 través del AMI (Asterisk
Manager Interface)
cdr_mysql.conf Archivo de configuración del módulo
cdr_mysql que permite registrar los CDRs
en la base de datos MySQL
cdr_odbc.conf Aquí se configura el módulo que permite
registrar CDRs a través del driver ODBC
de base de datos
cdr_pgsql.conf Aquí se configura el módulo que permite
registrar CDRs en la base de datos
PostgreSQL
cdr_tds.conf Con este archivo podemos configurar el
módulo que permite registrar CDRs a
través de los drivers de freeTDS. Por
ejemplo, con este módulo podemos
registrar CDRs en la base de datos MS-
SQL
cdr.conf El archivo principal de configuración de la
reportación 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 cuánto tiempo
dundi.conf Archivo de configuración de DUNDI
(Distributed Universal Number
Discovery)
222
enum.conf Archivo de configuración de ENUM
extconfig.conf Permite configurar lo que se llama
“configuración externa”. Es básicamente
una funcionalidad que permite mapear
cualquier archivo de configuración con
una entidad externa como una base de
datos
extensions_a2billing.conf Plan de marcado adicional para la
aplicación A2Billing
extensions_additional.conf Archivo de configuración de Asterisk
modificado por FreePBX donde no se
debe editar a mano porque los cambios se
perderán
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 configuración que incluye a
extensions_additional.conf y a
extensions_additional.conf
features_applicationmap_additional.conf
features_applicationmap_custom.conf
features_featuremap_additional.conf
features_featuremap_custom.conf
features_general_additional.conf
features_general_custom.conf
features.conf
festival.conf Arhcivo de configuración de Festival
followme.conf Configuración de la funcionalidad
followme
func_odbc.conf
globals_custom.conf
gtalk.conf Archivo de configuración para que
Asterisk funcione como cliente del
servicio Google Talk
h323.conf Archivo de configuración para protocolo
H.323 según la implementación basada en
el proyecto Open H.323. Existen otras
implementaciones.
http.conf Configuración de mini servidor Web
embebido en Asterisk. Por omisión este
servicio está apagado así que tener
223
cuidado de no levantarlo en el mismo
puerto que el servidor Apache que viene
integrado en el Elastix
iax_additional.conf Configuración de IAX generada por
FreePBX no se debe editar
iax_custom_post.conf
iax_custom.conf Configuración de IAX que se puede editar
ya que no la sobrescribe FreePBX
iax_general_additional.conf
iax_general_custom.conf
iax_registrations_custom.conf
iax_registrations.conf
iax.conf Archivo principal de IAX que incluye a
los otros
iaxprov.conf
indications.conf
jabber.conf
localprefixes.conf
logger.conf
manager_additional.conf
manager_custom.conf
manager.conf
meetme_additional.conf
meetme.conf Configuración de los cuartos de
conferencia permanentes
mgcp.conf
misdn.conf
modem.conf
modules.conf
musiconhold_additional.conf
musiconhold_custom.conf
musiconhold.conf
muted.conf
osp.conf
oss.conf
parking_additional.inc
phone.conf
phpagi.conf
privacy.conf
224
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
queues_custom.conf Archivo de configuración de colas que
puede ser modificado por los usuarios sin
que FreePBX lo borre
queues_general_additional.conf
queues_post_custom.conf
queues.conf Archivo general de configuración 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
configuración de la base de datos MySQL.
El concepto se denomina Asterisk
Realtime
res_odbc.conf
res_pgsql.conf
res_snmp.conf
rpt.conf
rtp.conf Configuración del protocolo RTP. Aquí se
puede configurar el rango de puertos RTP
que Asterisk utilizará
say.conf Define ciertos parámetros de
internacionalización
sip_additional.conf Configuración de SIP generada por
FreePBX y que no se debe editar
sip_custom_post.conf
sip_custom.conf Configuración de SIP que se puede
modificar y no es sobre escrita por
FreePBX
sip_general_additional.conf
sip_general_custom.conf
sip_nat.conf Configuración para trabajar con SIP a
través de nat
sip_notify.conf
sip_registrations_custom.conf
sip_registrations.conf
sip.conf Archivo de configuración de sip que
incluye a los otros
225
skinny.conf
sla.conf
smdi.conf
udptl.conf
unicall.conf Aquí se puede configurar el módulo
chan_unicall
users.conf
vm_email.inc
vm_general.inc
voicemail.conf Archivo de configuración de los casilleros
de voz
vpb.conf
zapata_additional.conf
zapata-channels.conf
zapata.conf Configuración de las tarjetas de telefonía
que usan los drivers de zaptel.
226
Lista de comandos de CLI
La siguiente lista de comandos ha sido generada en base al comando help sobre la
versión de Asterisk 1.4.21.2.
Comando Descripción
! 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
227
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
228
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
229
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
230
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
231
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)
232
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
233
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
235
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.
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.
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.
236
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.
237
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:
238
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
239
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".
240
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.
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.
8. TRANSLATION
241
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.
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.
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
242
"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.
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.
243
245
246
247
248
249
250
251
252
253
254
255
256