Está en la página 1de 530

Departamento de Lenguajes y

Sistemas Informticos

Lengoaia eta Sistema


Informatikoak Saila

Estudio y Montaje a
medida de Centralita
Telefnica VoIP Asterisk

Autor:

David Escauela Alonso

Directores:

Pablo Gonzlez Nalda y


Mikel Garca Cantabrana
(Yet Informtica S.L.)

Proyecto Fin de Carrera, Enero 2010

Agradecimientos

Gracias a mi familia que me ha estado apollando continuamente y que ha aguantado


mi constante mal humor.
Gracias a mis amigos por preocuparse cada poco por el avance del proyecto.
Gracias a mis dos directores de proyecto, por una parte a Pablo por prestarme su
atencin y ayuda cuando lo he requerido y por otra parte a Mikel y a la empresa Yet
Informtica S.L. y es que he aprendido a valerme por mi mismo, ha sido una
experiencia muy positiva.
Gracias tambin al foro Asterisk-ES, donde escriben los autenticos cracks de este
mundo en Espaa, los cuales contestan a todas tus dudas desde la ms bsica a la ms
tcnica.Y ms personalmente gracias a Nicols Gudio por atenderme en todo
momento y a Jean Chassoul , Ivan Lpez y Angel Elena por la ayuda efectuada.
i

Resumen y Organizacin del Proyecto

Resumen
En este trabajo, por una parte, se realiza un estudio sobre las centralitas telefnicas
Asterisk, as como, su ventaja frente a cualquier centralita por su flexibilidad, potencia
y proteccin de la inversin.
Mientras que por otra parte, se trata la implantacin de estas centralitas en empresa
con el diseo, montaje y configuracin a medida para la empresa Yet Informtica S.L.

ii

Organizacin
La documentacin del proyecto se divide en dos partes no establecidas.
Una primera parte la forman los antecedentes, en los que se da informacin sobre la
empresa en la que se sita el proyecto, as como, la necesidad de realizacin de dicho
proyecto, los objetivos, a partir de los que se decide qu problema se quiere solucionar
y cmo hacerlo y la viabilidad del proyecto, que refleja las panificaciones inicial y real
del proyecto y el presupuesto del mismo.
La segunda parte est constituida por la memoria del proyecto, la bibliografa, los
anexos, el glosario, la conclusin y lneas futuras.
La memoria del proyecto est dividida en 4 captulos:





Introduccin a la VoIP: Conceptos bsicos de la telefona y la VoIP.


Asterisk, el futuro de la telefona: Adentramiento en el mundo Asterisk.
Prcticas realizadas: Pruebas hechas durante las prcticas.
Centralita Asterisk para Yet Informtica S.L.: Diseo, montaje, configuracin e
implantacin de centralita Asterisk.

Como ayuda se incluye un glosario en el que se aclaran los significados de las siglas. Los
anexos permitirn conocer ms sobre algunos temas especficos, as como, disponer
de algunos manuales de instalacin.
Por ltimo, se comparten los resultados generales que resuelven los objetivos, se
elaboran las conclusiones y se plantea el trabajo futuro.

iii

ndice de Contenidos

AGRADECIMIENTOS................................................................................................... I
RESUMEN Y ORGANIZACIN DEL PROYECTO............................................................. II
RESUMEN ......................................................................................................................................II
ORGANIZACIN ............................................................................................................................. III

NDICE DE CONTENIDOS .......................................................................................... IV


NDICE DE FIGURAS ................................................................................................ XII
PLANIFICACIN DEL PROYECTO........................................................................................................ XII
CAPITULO 1 ................................................................................................................................ XIV
CAPITULO 2 ................................................................................................................................. XV
CAPITULO 3 ................................................................................................................................ XVI
CAPITULO 4 ................................................................................................................................ XVI
ANEXOS ...................................................................................................................................... XX

iv

NDICE DE TABLAS ................................................................................................ XXII


PLANIFICACIN DEL PROYECTO...................................................................................................... XXII
CAPITULO 1 ............................................................................................................................... XXII
CAPITULO 2 ............................................................................................................................... XXII
CAPITULO 3 .............................................................................................................................. XXIII
CAPITULO 4 .............................................................................................................................. XXIII
ANEXOS ................................................................................................................................... XXIII

ANTECEDENTES ........................................................................................................ 1
EMPRESA EN LA QUE SE SITA EL PROYECTO ....................................................................................... 1
CMO SURGE LA NECESIDAD DEL PROYECTO A REALIZAR ....................................................................... 2

PLANIFICACIN DEL PROYECTO ................................................................................ 3


OBJETIVOS DEL PROYECTO............................................................................................................... 3
VIABILIDAD DEL PROYECTO .............................................................................................................. 4
Planificacin Inicial Temporal................................................................................................ 4
Planificacin Real Temporal .................................................................................................. 4
Desvio Temporal.................................................................................................................... 6
Planificacin real del proyecto y herramientas a utilizar en su elaboracin ........................ 6
Estructura de Descomposicin del Trabajo....................................................................... 6
Fases, Tareas y Entregables............................................................................................... 9
Recursos Humanos y Materiales Amortizables ................................................................... 26
Agenda del proyecto ........................................................................................................... 29
Agenda de recursos: ........................................................................................................ 29
Diagrama de GANTT: ....................................................................................................... 48
Estimacin de Costes del Proyecto: .................................................................................... 51
Recursos Humanos de Trabajo:.................................................................................... 51
Recursos Materiales Amortizables: ............................................................................... 51
Presupuesto .................................................................................................................... 54

INTRODUCCIN A VOIP .......................................................................................... 56


QU ES VOIP (VOICE OVER INTERNET PROTOCOL)? ........................................................................ 56
POR QU DEBERAMOS PASARNOS A VOIP Y NO SEGUIR USANDO SERVICIOS GRATUITOS COMO SKYPE? .... 57
HISTORIA DE VOIP ....................................................................................................................... 58
CARACTERSTICAS PRINCIPALES ...................................................................................................... 59
VENTAJAS DE VOIP ...................................................................................................................... 59
Funcionales.......................................................................................................................... 59
De Gestin ........................................................................................................................... 59
Econmicas.......................................................................................................................... 60
PROBLEMAS ................................................................................................................................ 60
ELEMENTOS FUNDAMENTALES DE UNA RED VOIP .............................................................................. 60
CMO SE TRANSMITE VOIP POR LA RED? ....................................................................................... 61
CONCEPTOS PRINCIPALES DE VOIP .................................................................................................. 62
PBX ...................................................................................................................................... 62
ASTERISK (PBX avanzada) .................................................................................................... 63
PSTN-RTB ............................................................................................................................. 63
Sealizacin en telefona tradicional .................................................................................. 63
Sealizacin analgica..................................................................................................... 63
Sealizacin digital .......................................................................................................... 65
v

Sealizacin entre centrales telefnicas ......................................................................... 66


Sealizacin en telefona IP................................................................................................. 66
Protocolo H.323 .............................................................................................................. 66
Protocolo MGCP (Media Gateway Control Protocol)...................................................... 67
Protocolo SIP (Session Initiation Protocol)...................................................................... 68
Servidores Proxy SIP ........................................................................................................ 70
Protocolos en tiempo real y el NAT................................................................................. 72
SIP vs NAT ........................................................................................................................ 72
Protocolo IAX (Inter-Asterisk Exchange) ......................................................................... 73
EQUIPAMIENTO PARA VOIP............................................................................................................ 75
Telfonos IP ......................................................................................................................... 75
SoftPhones (Telefona con Software) .................................................................................. 78
X-Lite................................................................................................................................ 79
Zoiper .............................................................................................................................. 80
Ekiga ................................................................................................................................ 80
Otros SoftPhones ............................................................................................................ 81
Adaptadores IP .................................................................................................................... 82
Gateways VoIP..................................................................................................................... 83
PARMETROS DE VOIP ................................................................................................................. 84
Calidad de Servicio .............................................................................................................. 84
Codecs ................................................................................................................................. 84
Latencia ............................................................................................................................... 85
Jitter (Fluctuaciones de velocidad)...................................................................................... 85
RETOS AL IMPLEMENTAR VOIP ....................................................................................................... 86
RECOMENDACIONES ..................................................................................................................... 86

ASTERISK, EL FUTURO DE LA TELEFONA ................................................................. 87


QU ES ASTERISK? ..................................................................................................................... 87
QU NO ES ASTERISK? ............................................................................................................... 89
CUL ES EL PAPEL DE DIGIUM? ..................................................................................................... 89
CUNDO USAR ASTERISK? ........................................................................................................... 90
POR QU ASTERISK? ................................................................................................................... 90
VENTAJAS COMPETITIVAS .............................................................................................................. 92
DESVENTAJAS DE LAS CENTRALITAS ASTERISK .................................................................................... 92
HISTORIA DE ASTERISK .................................................................................................................. 93
ESTRUCTURA DE DIRECTORIOS DE ASTERISK: ................................................................................... 103
FUNCIONALIDAD DE ASTERISK ...................................................................................................... 103
Funciones bsicas .............................................................................................................. 103
Funciones de llamada........................................................................................................ 103
Funciones avanzadas ......................................................................................................... 105
Modificacin de funciones ................................................................................................ 106
Funcionalidad en servidores SIP........................................................................................ 106
ARQUITECTURA DE ASTERISK ....................................................................................................... 107
Esquema ............................................................................................................................ 107
Partes de Asterisk ............................................................................................................. 107
Arquitectura de Asterisk ................................................................................................... 108
Descripcin de las APIs .................................................................................................. 108
CONCEPTO DE CANAL ................................................................................................................. 109
DIALPLAN DE ASTERISK ............................................................................................................... 110
vi

La Sintaxis del Dialplan ...................................................................................................... 110


Contextos ...................................................................................................................... 110
Extensiones ................................................................................................................... 112
Prioridades .................................................................................................................... 113
Aplicaciones................................................................................................................... 114
Uso de variables ................................................................................................................ 115
Tipos de variables ......................................................................................................... 115
Coincidencia de patrones .................................................................................................. 116
Sintaxis .......................................................................................................................... 116
Usando la variable de canal $ (EXTEN) .......................................................................... 117
Manipulacin de expresiones y operadores ..................................................................... 118
Expresiones bsicas ....................................................................................................... 118
Operadores.................................................................................................................... 118
Funciones del Dialplan ...................................................................................................... 119
Configuracin para canales de VoIP: SIP e IAX2 ................................................................ 119
Buzones de voz (Voicemail)............................................................................................... 121
Creacin de mailbox ...................................................................................................... 121
Aadir el voicemail al Dialplan ...................................................................................... 122
Acceso al voicemail ....................................................................................................... 122
Marcacin por nombre de directorio............................................................................ 122
Audio en Asterisk .............................................................................................................. 123
Reproduccin ................................................................................................................ 123
Msica en Espera .......................................................................................................... 123
Aplicacin Festival ......................................................................................................... 123
Codecs y carga de CPU .................................................................................................. 125
Grabacin ...................................................................................................................... 127
Macros ............................................................................................................................... 128
Definicin de macros..................................................................................................... 129
Llamadas a macros ........................................................................................................ 129
Utilizacin de argumentos en macros ......................................................................... 129
Uso de la base de datos de Asterisk (AstDB)..................................................................... 130
Almacenamiento de datos en AstDB............................................................................. 130
Recuperacin de datos de AstDB .................................................................................. 130
Borrado de datos de AstDB ........................................................................................... 131
Transferencias de llamadas ............................................................................................... 131
CallParking ......................................................................................................................... 131
CallPickup .......................................................................................................................... 133
Manejo de Colas ................................................................................................................ 134
Registro de llamadas(CDR) ................................................................................................ 137
Sala de conferencias .......................................................................................................... 138
IVR (Interactive Voice Response) ...................................................................................... 139
Discado automtico (Auto-dial out) .................................................................................. 142
Sistema de logs .................................................................................................................. 143
ENUM y Asterisk ................................................................................................................ 144
DUNDI ................................................................................................................................ 146
Aspectos avanzados de Asterisk: ...................................................................................... 150
Qu es AGI? ................................................................................................................. 150
Qu es AMI? ................................................................................................................ 151
Qu es AJAM?.............................................................................................................. 152
vii

Qu es AEL2? ............................................................................................................... 153


Qu es ARA? ................................................................................................................ 154
ADMINISTRACIN DE ASTERISK .................................................................................................... 155
Interfaces web para Asterisk: ............................................................................................ 155
Asterisk GUI: .................................................................................................................. 155
FreePBX: ........................................................................................................................ 156
Lnea de comandos de Asterisk: CLI .................................................................................. 161
VERSIONES ENTERPRISE DE ASTERISK: ........................................................................................... 164
Asterisk Appliance ............................................................................................................. 164
Asterisk Business Edition ............................................................................................... 165
DISTRIBUCIONES LINUX CON ASTERISK:.......................................................................................... 168
AsteriskNOW ..................................................................................................................... 169
TrixBox ............................................................................................................................... 171
Elastix ................................................................................................................................ 176
CASOS DE USO DE UNA CENTRALITA ASTERISK: ............................................................................... 180
Centralita nueva con conexiones y extensiones de varios tipos. ...................................... 181
Pasarela para dotar a una centralita tradicional de servicios nuevos............................... 181
Pasarela para dotar a una centralita tradicional de nuevas extensiones. ........................ 182
Varias Oficinas con un Asterisk Centralizado. ................................................................... 182
Varias Oficinas con Sistemas Asterisk interconectados. ................................................... 183
AMPLIACIN DEL SISTEMA DE TELEFONA DE UNA EMPRESA............................................................... 184
SOLUCIONES DE ASTERISK PARA SISTEMAS DE TELEFONA ENTRE SEDES REMOTAS.................................. 185
Sistema Centralizado ......................................................................................................... 185
Sistema Distribuido ........................................................................................................... 186
LA REVOLUCIN ASTERISK ........................................................................................................... 186
EJEMPLOS DE USO DE ASTERISK: ................................................................................................... 187
Ejemplo 1: Centros mdicos Llamada recordatoria ....................................................... 187
Ejemplo 2: Centros de telemarketing Integracin con sistemas CRM ........................... 188
Ejemplo 3: Agencias de viajes (Self service) ...................................................................... 188
LA COMPLEJIDAD ASTERISK .......................................................................................................... 188
Y EL FUTURO? ......................................................................................................................... 189
CONCLUSIONES ......................................................................................................................... 189
PRUEBAS REALIZADAS ............................................................................................. 190
INICIACIN EN LINUX .................................................................................................................. 190
KUBUNTU & ASTERISK ................................................................................................................ 192
ELECCIN DEL SERVIDOR ADECUADO PARA ASTERISK ........................................................................ 193
Qu hay que tener en cuenta en la eleccin del servidor Asterisk? ............................... 193
Cul es la mejor distribucin para instalar Asterisk? ...................................................... 193
PUESTA A PUNTO DEL SERVIDOR ANTES DE LA INSTALACIN DE ASTERISK: ............................................ 194
Servidor HTTP Apache ....................................................................................................... 194
Servidor DHCP (DHCPD) .................................................................................................... 194
Servidor TFTP (TFTPD) ...................................................................................................... 197
Servidor MySQL (MySQLD) ................................................................................................ 198
phpMyAdmin..................................................................................................................... 198
Servidor SNMP (SNMPD) ................................................................................................... 199
Acceso al Servidor: PUTTY ................................................................................................. 201
Acceso al Servidor: WinSCP .............................................................................................. 202
INSTALACIN DE ASTERISK:.......................................................................................................... 203
viii

Asterisk 1.4.xx (de 1.4.0 a 1.4.21) ..................................................................................... 203


Asterisk 1.4xx (de 1.4.22 a 1.4.27) y 1.6.x ......................................................................... 206
ELECCIN DE LA VERSION ASTERISK: .............................................................................................. 208
Diferencia entre los Asterisk 1.4 (hasta 1.4.21) y los Asterisk 1.4.22 (y superiores) y 1.6 en
telefona analgica: De Zaptel a DAHDI ............................................................................ 208
Configuracin DAHDI......................................................................................................... 209
Pruebas de llamada al canal DAHDI en Asterisk 1.4.26.1 ................................................. 213
Pruebas bsicas realizadas en Asterisk 1.4.21 .................................................................. 214
Pruebas SoftPhones ...................................................................................................... 214
Pruebas telfonos IP (SipuraSPA) .................................................................................. 218
Pruebas de funcionamiento de buzones de voz ........................................................... 220
Pruebas utilizacin de las aplicaciones Goto() y GotoIf() y de variables de canal ........ 222
Pruebas de funcionamiento colas y registro de miembros........................................... 225
OTRAS PRUEBAS: ....................................................................................................................... 229
Pruebas de uso de conferencias en Asterisk 1.4.26.2: ...................................................... 229
Pruebas Proveedor VoIP: Gizmo5 ..................................................................................... 234
Pruebas Trunk IAX entre dos servidores Asterisk ............................................................. 236
Qu es un Trunk?......................................................................................................... 236
Trunk IAX Local entre dos servidores Asterisk .............................................................. 236
Trunk IAX entre dos servidores Asterisk ....................................................................... 239
Pruebas extensin remota ............................................................................................ 239
Prueba con Adaptador Telefnico Analgico SPA 3000.................................................... 241
CENTRALITA ASTERISK PARA YET INFORMTICA Y PRUEBAS REALIZADAS....................... 245
DESCRIPCIN DE LA CENTRALITA NUEVA: ASTERISK .......................................................................... 245
Esquema Conceptual del Demo realizado antes de la implantacin ................................ 246
Explicacin del Plan de llamadas de la Centralita (Dialplan) ............................................. 247
Llamadas entrantes ....................................................................................................... 247
Accesos Directos a usuarios de la Empresa................................................................... 252
Gestin de Buzones de Voz ........................................................................................... 253
Gestin de las Colas de la aplicacin............................................................................. 253
Funcionamiento de la Funcionalidad CallBack .............................................................. 255
Uso de Conferencias en la aplicacin ............................................................................ 256
ltima llamada recibida ................................................................................................ 256
ltima llamada realizada ............................................................................................... 257
Funcionamiento de la Funcionalidad DISA.................................................................... 258
Funcionamiento del desvo de las llamadas de usuarios internos a otro telfono ...... 259
Pruebas generales ............................................................................................................. 260
Prueba 1) Llama a la centralita en un horario no laborable un usuario VIP. ................ 260
Prueba 2) Llama a la centralita en un horario no laborable un usuario no VIP. ........... 262
Prueba 3) Llama a la centralita en un horario laboral un usuario VIP. ........................ 263
Prueba 4) Llama a la centralita en un horario laboral un usuario no VIP. ................... 266
Prueba 5) Comportamiento en el men ....................................................................... 268
Configuracin de ficheros ms utilizados.......................................................................... 269
Tabla de descripcin de ficheros de configuracin ....................................................... 269
Fichero de configuracin: EXTENSIONS.CONF, SIP.CONF, IAX.CONF ............................ 270
Fichero de configuracin: FEATURES.CONF .................................................................. 270
Fichero de configuracin: MANAGER.CONF ................................................................. 271
Fichero de configuracin: MEETME.CONF .................................................................... 271
ix

Fichero de configuracin: QUEUES.CONF ..................................................................... 271


Fichero de configuracin: VOICEMAIL.CONF ................................................................ 272
Bases de datos empleadas ................................................................................................ 273
Tabla de descripcin de las bases de datos utilizadas .................................................. 273
Conocimiento de las tablas de cada base de datos mostrando parte de su contenido 274
Explicacin terica y prctica de funcionalidades extra: .................................................. 280
Agenda de Contactos: YetBook ..................................................................................... 280
Integracin con Google Calendar .................................................................................. 297
Chan_Sebi ...................................................................................................................... 303
Flash Operator Panel 2 (FOP 2) ..................................................................................... 309
Asternic Call Center Stats .............................................................................................. 331
Asternic CDR Reports .................................................................................................... 340
Verbio ............................................................................................................................ 348
Skype ............................................................................................................................. 372
Skype para Asterisk (SfA)............................................................................................... 373
Nagios ............................................................................................................................ 385
Actualizacin de firmware del Telfono Cisco 7941 de SCCP a SIP................................... 393
Actualizacin de firmware del Telfono Cisco 7905 de SCCP a SIP................................... 398
DESCRIPCIN BREVE DE LA CENTRALITA ACTUAL: CISCO Y MEJORAS REALIZADAS EN LA NUEVA. ................ 401
Esquema Conceptual de la centralita actual: Cisco........................................................... 401
Mejoras de la nueva centralita Asterisk ............................................................................ 402
Agenda de clientes ........................................................................................................ 402
Usuarios o extensiones remotas ................................................................................... 402
Gestin de horarios y festivos con calendarios............................................................. 402
Conferencias .................................................................................................................. 402
Sistema de Colas............................................................................................................ 402
Grabaciones por defecto ............................................................................................... 402
Reporting de llamadas y estadsticas de Colas.............................................................. 402
Implantacin en la empresa .............................................................................................. 403
Esquema Conceptual de la centralita para Yet Informtica S.L. ................................... 403
Tipo de Implantacin y Anlisis de Riesgos ................................................................... 404
Hardware y Software necesario para la implantacin de la centralita ......................... 404
LNEAS FUTURAS Y CONCLUSIN .................................................................................................. 405

ANEXOS ............................................................................................................... 407


ANEXO A: SECURITY.TXT ........................................................................................................... 407
ANEXO B: APLICACIONES DE ASTERISK ......................................................................................... 409
ANEXO C: FUNCIONES DE ASTERISK ............................................................................................. 423
ANEXO D: FICHEROS DE CONFIGURACIN DE ASTERISK .................................................................. 428
ANEXO E: INSTALACIN DE CENTOS 5 ......................................................................................... 459
ANEXO E: GUA DE GOOGLE CALENDAR ....................................................................................... 466
ANEXO F: MANUAL DE USUARIO DE FOP 2 .................................................................................. 472
ANEXO G: CDIGO DE LAS PRUEBAS DE ENVIO DE SMS .................................................................. 479
sms_send.php ................................................................................................................... 479
enviaSMS.sh ...................................................................................................................... 481
EnviaSMS.java ................................................................................................................... 481
ANEXO H: DIALPLAN DE LA APLICACIN (EXTENSIONS.CONF, SIP.CONF, IAX.CONF) .............................. 482
extensions.conf ................................................................................................................. 482
sip.conf .............................................................................................................................. 497
x

iax.conf .............................................................................................................................. 501


GLOSARIO.............................................................................................................. 502
BIBLIOGRAFA ........................................................................................................ 502

xi

ndice de Figuras

Planificacin del Proyecto

PlanFig1
PlanFig2
PlanFig3
PlanFig4
PlanFig5
PlanFig6
PlanFig7
PlanFig8
PlanFig9
PlanFig10
PlanFig11
xii

PlanFig12
PlanFig13
PlanFig14
PlanFig15
PlanFig16
PlanFig17
PlanFig18
PlanFig19
PlanFig20
PlanFig21
PlanFig22
PlanFig23
PlanFig24
PlanFig25
PlanFig26
PlanFig27
PlanFig28
PlanFig29
PlanFig30
PlanFig31
PlanFig32
PlanFig33
PlanFig34
PlanFig35
PlanFig36
PlanFig37
PlanFig38
PlanFig39
PlanFig40
PlanFig41
PlanFig42
PlanFig43
PlanFig44
PlanFig45
PlanFig46
PlanFig47
PlanFig48
PlanFig49
PlanFig50
PlanFig51
PlanFig52
PlanFig53
PlanFig54
xiii

PlanFig55
PlanFig56
PlanFig57
PlanFig58
PlanFig59
PlanFig60
PlanFig61

Capitulo 1

Cap1Fig1
Cap1Fig2
Cap1Fig3
Cap1Fig4
Cap1Fig5
Cap1Fig6
Cap1Fig7
Cap1Fig8
Cap1Fig9
Cap1Fig10
Cap1Fig11
Cap1Fig12
Cap1Fig13
Cap1Fig14
Cap1Fig15
Cap1Fig16
Cap1Fig17
Cap1Fig18
Cap1Fig19
Cap1Fig20
Cap1Fig21
Cap1Fig22
Cap1Fig23
Cap1Fig24
Cap1Fig25
Cap1Fig26
Cap1Fig27
Cap1Fig28
Cap1Fig29
Cap1Fig30
Cap1Fig31
Cap1Fig32
Cap1Fig33
xiv

Cap1Fig34
Cap1Fig35
Cap1Fig36
Cap1Fig37
Cap1Fig38
Cap1Fig39
Cap1Fig40
Cap1Fig41
Cap1Fig42
Cap1Fig43
Cap1Fig44

Capitulo 2

Cap2Fig1
Cap2Fig2
Cap2Fig3
Cap2Fig4
Cap2Fig5
Cap2Fig6
Cap2Fig7
Cap2Fig8
Cap2Fig9
Cap2Fig10
Cap2Fig11
Cap2Fig12
Cap2Fig13
Cap2Fig14
Cap2Fig15
Cap2Fig16
Cap2Fig17
Cap2Fig18
Cap2Fig19
Cap2Fig20
Cap2Fig21
Cap2Fig22
Cap2Fig23
Cap2Fig24
Cap2Fig25
Cap2Fig26
Cap2Fig27
Cap2Fig28
Cap2Fig29
xv

Cap2Fig30
Cap2Fig31
Cap2Fig32
Cap2Fig33
Cap2Fig34
Cap2Fig35

Capitulo 3

Cap3Fig1
Cap3Fig2
Cap3Fig3
Cap3Fig4
Cap3Fig5
Cap3Fig6
Cap3Fig7
Cap3Fig8
Cap3Fig9
Cap3Fig10
Cap3Fig11
Cap3Fig12
Cap3Fig13
Cap3Fig14
Cap3Fig15
Cap3Fig16
Cap3Fig17
Cap3Fig18
Cap3Fig19
Cap3Fig20
Cap3Fig21
Cap3Fig22
Cap3Fig23
Cap3Fig24
Cap3Fig25
Cap3Fig26
Cap3Fig27
Cap3Fig28
Cap3Fig29

Capitulo 4

xvi

Cap4Fig1
Cap4Fig2
Cap4Fig3
Cap4Fig4
Cap4Fig5
Cap4Fig6
Cap4Fig7
Cap4Fig8
Cap4Fig9
Cap4Fig10
Cap4Fig11
Cap4Fig12
Cap4Fig13
Cap4Fig14
Cap4Fig15
Cap4Fig16
Cap4Fig17
Cap4Fig18
Cap4Fig19
Cap4Fig20
Cap4Fig21
Cap4Fig22
Cap4Fig23
Cap4Fig24
Cap4Fig25
Cap4Fig26
Cap4Fig27
Cap4Fig28
Cap4Fig29
Cap4Fig30
Cap4Fig31
Cap4Fig32
Cap4Fig33
Cap4Fig34
Cap4Fig35
Cap4Fig36
Cap4Fig37
Cap4Fig38
Cap4Fig39
Cap4Fig40
Cap4Fig41
Cap4Fig42
Cap4Fig43
xvii

Cap4Fig44
Cap4Fig45
Cap4Fig46
Cap4Fig47
Cap4Fig48
Cap4Fig49
Cap4Fig50
Cap4Fig51
Cap4Fig52
Cap4Fig53
Cap4Fig54
Cap4Fig55
Cap4Fig56
Cap4Fig57
Cap4Fig58
Cap4Fig59
Cap4Fig60
Cap4Fig61
Cap4Fig62
Cap4Fig63
Cap4Fig64
Cap4Fig65
Cap4Fig66
Cap4Fig67
Cap4Fig68
Cap4Fig69
Cap4Fig70
Cap4Fig71
Cap4Fig72
Cap4Fig73
Cap4Fig74
Cap4Fig75
Cap4Fig76
Cap4Fig77
Cap4Fig78
Cap4Fig79
Cap4Fig80
Cap4Fig81
Cap4Fig82
Cap4Fig83
Cap4Fig84
Cap4Fig85
Cap4Fig86
xviii

Cap4Fig87
Cap4Fig88
Cap4Fig89
Cap4Fig90
Cap4Fig91
Cap4Fig92
Cap4Fig93
Cap4Fig94
Cap4Fig95
Cap4Fig96
Cap4Fig97
Cap4Fig98
Cap4Fig99
Cap4Fig100
Cap4Fig101
Cap4Fig102
Cap4Fig103
Cap4Fig104
Cap4Fig105
Cap4Fig106
Cap4Fig107
Cap4Fig108
Cap4Fig109
Cap4Fig110
Cap4Fig111
Cap4Fig112
Cap4Fig113
Cap4Fig114
Cap4Fig115
Cap4Fig116
Cap4Fig117
Cap4Fig118
Cap4Fig119
Cap4Fig120
Cap4Fig121
Cap4Fig122
Cap4Fig123
Cap4Fig124
Cap4Fig125
Cap4Fig126
Cap4Fig127
Cap4Fig128
Cap4Fig129
xix

Cap4Fig130
Cap4Fig131
Cap4Fig132
Cap4Fig133
Cap4Fig134
Cap4Fig135
Cap4Fig136
Cap4Fig137
Cap4Fig138

Anexos

AnexoFig1
AnexoFig2
AnexoFig3
AnexoFig4
AnexoFig5
AnexoFig6
AnexoFig7
AnexoFig8
AnexoFig9
AnexoFig10
AnexoFig11
AnexoFig12
AnexoFig13
AnexoFig14
AnexoFig15
AnexoFig16
AnexoFig17
AnexoFig18
AnexoFig19
AnexoFig20
AnexoFig21
AnexoFig22
AnexoFig23
AnexoFig24
AnexoFig25
AnexoFig26
AnexoFig27
AnexoFig28
AnexoFig29
AnexoFig30
AnexoFig31
xx

AnexoFig32
AnexoFig33
AnexoFig34
AnexoFig35
AnexoFig36
AnexoFig37
AnexoFig38
AnexoFig39
AnexoFig40

xxi

ndice de Tablas

Planificacin del Proyecto

PlanTabla1
PlanTabla2
PlanTabla3
PlanTabla4
PlanTabla5
PlanTabla6
PlanTabla7
PlanTabla8

Capitulo 1
Capitulo 2
xxii

Cap2Tabla1
Cap2Tabla2
Cap2Tabla3

Capitulo 3
Capitulo 4

Cap4Tabla1
Cap4Tabla2
Cap4Tabla3
Cap4Tabla4
Cap4Tabla5
Cap4Tabla6
Cap4Tabla7
Cap4Tabla8
Cap4Tabla9
Cap4Tabla10
Cap4Tabla11
Cap4Tabla12
Cap4Tabla13
Cap4Tabla14
Cap4Tabla15
Cap4Tabla16
Cap4Tabla17
Cap4Tabla18
Cap4Tabla19
Cap4Tabla20
Cap4Tabla21
Cap4Tabla22

Anexos

AnexoTabla1
AnexoTabla2

xxiii

Antecedentes

Empresa en la que se sita el proyecto


Yet Informtica S.L. es lider en sistemas de informacin
de alta tecnologa para los sectores de calzado, textil y
deportes de Espaa. Su experiencia en la informatizacin
de ms de 2000 tiendas les avala, as como la
permanencia en este mercado concreto en los ltimos 18 aos.
Yet Informtica, naci en 1984, tras un anlisis del mercado informtico. En aquellos
tiempos este se divida fundamentalmente en dos reas: la programacin a medida y
los programas estndares de uso generalista, existiendo una tendencia incipiente hacia
los programas verticales.
Para conocer ms sobre Yet: www.yet.es.

Cmo surge la necesidad del proyecto a realizar


La actual centralita telefnica se ha quedado corta en funcionalidades y la mejora de
esta supone la compra de una serie de licencias y cierto Hw, en caso de un aumento de
personal en la empresa sera necesario abonar otras cantidades.
Como una posible solucin surge el montaje de una centralita no propietaria como es
Asterisk evitando por una parte la compra de licencias , pudiendo aprovechar los
telfonos Cisco haciendo una conversin del protocolo de estos, SCCP, al protocolo
SIP.
Por otra parte la centralita actual tiene algunas restricciones en cuanto a
funcionalidades que seran interesantes para la empresa y que sern solucionadas con
esta nueva central.

Planificacin del Proyecto

Objetivos del Proyecto


El objetivo principal es adquirir los conocimientos necesarios sobre VoIP, telefona,
redes, Linux y sobre todo Asterisk para el montaje adecuado de estas centralitas
pasando poco a poco de una configuracin bsica a una configuracin casi a medida
para la elaboracin de la centralita de la empresa.
Una vez obtenidos estos conocimientos la centralita nueva debe mejorar la actual y
ofrecer otras funcionalidades extras que la hagan aun ms completa.
Tambin es objetivo que esta memoria sea lo ms intuitiva posible de forma que si no
se conoce nada sobre Asterisk se pueda llegar a entender gran parte tanto de la
configuracin del Dialplan como del funcionamiento de estas centralitas y de este
mundo en general.
3

Viabilidad del Proyecto


Planificacin Inicial Temporal

Resumiendo esta tabla, cuando se realiz la planificacin inicial, la idea era realizar la
formacin necesaria en los meses de Julio y Agosto, sin contar las semanas de
vacaciones (del 4 al 16 de Agosto) y durante los dos siguientes meses montar la
centralita para la empresa Yet Informtica.
Planificacin Real Temporal

Como se puede ver en la imgenes anteriores la planificacin real comienza con una
tarea repetitiva en la que cada semana se har un planing del trabajo a realizar
durante esta.
A continuacin se pueden definir tres partes en la planificacin: el estudio de las
tecnologas y pruebas iniciales, el montaje de la centralita para Yet Informtica S.L. y la
elaboracin de la documentacin.
Desvio Temporal
El desvo temporal es de 2 meses y 20 das, el estudio de las tecnologas fue uno de los
culpables en este contratiempo, tambin la integracin de la centralita con Verbio y
Nagios supuso un tiempo no planificado y por ltimo la elaboracin de la agenda de
contactos Yetbook, que surgi al final del proyecto.
Planificacin real del proyecto y herramientas a utilizar en su elaboracin
Estructura de Descomposicin del Trabajo

Fases, Tareas y Entregables


A continuacin se indican y describen los diferentes documentos generados y
utilizados para el proyecto que constituyen los entregables.


Entrega de la primera parte de la memoria : Introduccin a la VoIP:


Documento de introduccin a la VoIP a travs de la explicacin y definicin de
conceptos fundamentales para su comprensin. Es la tarea n 11.

Entrega de la segunda y tercera parte de la memoria : Asterisk, el futuro de la


telefona y Prcticas: Documento que permite un adentramiento en el mundo
de Asterisk en el que se describen conceptos general y especficos ,as como, su
instalacin y configuracin y pruebas realizadas. Es la tarea n 28.

Entrega documento final del Proyecto: Entrega de toda la documentacin


elaborada junto con el la presentacin. Es la tarea n 46.

Tras ver la Planificacin Real Temporal se generar una ficha para cada tarea
identificada, donde se anotar su nmero, nombre, una breve descripcin y el
esfuerzo estimado:

Especificacin de la tarea

Nmero: 1

Nombre: Anlisis del trabajo a realizar

Descripcin: Tarea repetitiva que se lleva a cabo los viernes de


cada semana con el objetivo de planificar la siguiente y hacer
balance de lo avanzado en esta.

Duracin: 26 h

Especificacin de la tarea

Nmero: 2

Nombre: Iniciacin en Linux

Descripcin: Periodo de estudio e iniciacin en el sistema


operativo Linux, en concreto primero en Kubuntu, despues en
CentOs con KDE y finalmente CentOs server.

Duracin: 240 h

Especificacin de la tarea

Nmero: 3

Nombre: Estudio y aprendizaje sobre telefona y VoIP

Descripcin: Estudio y comprensin de conceptos relacionados


con la telefona y ms concretamente con la VoIP explicados en
el Capitulo 1 de la Memoria.

Duracin: 240 h

Especificacin de la tarea

Nmero: 4

Nombre: Estudio y aprendizaje sobre el mundo Asterisk

Descripcin: Adentramiento en el mundo Asterisk, estudio de


conceptos y configuraciones bsicas y avanzadas. Recopilado en
el Captulo 2 de la Memoria.

Duracin: 240 h

10

Especificacin de la tarea

Nmero: 5

Nombre: Elaboracin de la memoria I: Introduccin a la VoIP

Descripcin: Documentacin del Capitulo 1 de la Memoria.

Duracin: 160 h

Especificacin de la tarea

Nmero: 6

Nombre: Pruebas de montaje de centralitas Asterisk

Descripcin: Montaje de las primeras centralitas Asterisk en


Kubuntu y CentOs 5.4. con KDE.

Duracin: 80 h

Especificacin de la tarea

Nmero: 7

Nombre: Pruebas con SoftPhones y Telefonos IP

Descripcin: Primeras configuraciones de Softphones X-Lite y


Zoiper y telefonos IP Sipura SPA 841.

Duracin: 20 h

11

Especificacin de la tarea

Nmero: 8

Nombre: Montaje de centralita de pruebas I

Descripcin: Documentacin del captulo 2 de la memoria

Duracin: 160 h

Especificacin de la tarea

Nmero: 9

Nombre: Pruebas de funcionamiento de Elastix

Descripcin: Instalacin de Elastix y pruebas con Softphones y


de deterccin de Hw.

Duracin: 10 h

Especificacin de la tarea

Nmero: 10.1

Nombre: Pruebas de configuracin de funcionalidades

Descripcin: Pruebas exhaustivas de los ficheros de


configuracin queues.conf, features.conf ,meetme.conf,
voicemail.conf, manager.conf, sip.conf, iax.conf y
extensions.conf.

Duracin: 160 h

12

Especificacin de la tarea

Nmero: 10.2

Nombre: Pruebas de integracin con FOP 2

Descripcin: Instalacin, configuracin y pruebas de


funcionamiento de FOP 2.

Duracin: 30 h

Especificacin de la tarea

Nmero: 10.3

Nombre: Pruebas de integracin con Call Center Stats

Descripcin: Instalacin, configuracin y pruebas de


funcionamiento de Asternic Call Center Stats.

Duracin: 10 h

Especificacin de la tarea

Nmero: 10.4

Nombre: Pruebas de integracin con CDR Reports

Descripcin: Instalacin, configuracin , pruebas de


funcionamiento y elaboracin de documentacin de Asternic CDR
Reports.

Duracin: 10 h

13

Especificacin de la tarea

Nmero: 12

Nombre: Montaje de centralita de pruebas II con RDSI BRI

Descripcin: Montaje de centralita Asterisk en CentOs 5.4. con


tarjeta de telefona RDSI BRI de 4 puertos con 2 de ellos en
uso : 1 mdulo FXO y 1 mdulo FXS.

Duracin: 15 h

Especificacin de la tarea

Nmero: 13

Nombre: Pruebas RDSI BRI

Descripcin: Instalacin y configuracin de DAHDI y pruebas


de deteccin de Hardware y de funcionamiento de la tarjeta.

Duracin: 5 h

Especificacin de la tarea

Nmero: 14

Nombre: Programacin y Pruebas Google Calendar I:


Interactuacin con los calendarios

Descripcin: Programacin y Pruebas de programa en Python


de interactuacin con Google Calendar para la comprobacin de
la existencia de eventos en el instante de tiempo que se ejecuta.

Duracin: 30 h

14

Especificacin de la tarea

Nmero: 15

Nombre: Programacin y Pruebas Google Calendar II:


Envio de SMS

Descripcin: Programacin y modificacin de programa en Java


de creacin de eventos en un calendario de Google Calendar y
posterior envo de aviso de SMS.

Duracin: 30 h

Especificacin de la tarea

Nmero: 16

Nombre: Elaboracin de la memoria III: Prcticas realizadas

Descripcin: Documentacin del Capitulo 3 de la Memoria.

Duracin: 60 h

Especificacin de la tarea

Nmero: 17

Nombre: Elaboracin de la memoria IV: Viabilidad del proyecto

Descripcin: Documentacin y recopilacin de planificaciones


para la realizacin de la viabilidad del proyecto.

Duracin: 120 h

15

Especificacin de la tarea

Nmero: 18

Nombre: Montaje centralita Yet Informtica

Descripcin: Elaboracin del Esquema Conceptual de la


centralita. Diseo de la centralita.

Duracin: 20 h

Especificacin de la tarea

Nmero: 19

Nombre: Anlisis de requerimientos y requisitos

Descripcin: Anlisis de pros y contras ,as como, mejoras a


realizar y requerimientos.

Duracin: 15 h

Especificacin de la tarea

Nmero: 20

Nombre: Diseo del Dialplan

Descripcin: Elaboracin minuciosa del Plan de llamadas de la


centralita.

Duracin: 30 h

16

Especificacin de la tarea

Nmero: 21

Nombre: Puesta a punto del servidor

Descripcin: Instalacin, configuracn y pruebas de servicios


necesarios antes de la instalacin de Asterisk.

Duracin: 16 h

Especificacin de la tarea

Nmero: 22

Nombre: Instalacin de Asterisk

Descripcin: Eleccin, descarga e instalacin correcta de la


versin de Asterisk elegida: Asterisk 1.4.26.2.

Duracin: 5 h

Especificacin de la tarea

Nmero: 23

Nombre: Programacin de ficheros de configuracin y Dialplan

Descripcin: Configuracin de los ficheros de Asterisk para


conseguir el funcionamiento deseado y por tanto ptimo de la
centralita.

Duracin: 30 h

17

Especificacin de la tarea

Nmero: 24

Nombre: Integracin de ficheros de configuracin

Descripcin: Implantacin de los ficheros de configuracin


solucionando los posibles errores.

Duracin: 3 h

Especificacin de la tarea

Nmero: 25

Nombre: Pruebas I

Descripcin: Pruebas post-implantacin para alcanzar un


funcionamiento correcto.

Duracin: 5 h

Especificacin de la tarea

Nmero: 26

Nombre: Solucin de errores I

Descripcin: Poner solucin a los posibles errores de


configuracin cometidos.

Duracin: 16 h

18

Especificacin de la tarea

Nmero: 27

Nombre: Elaboracion de la memoria V: Aplicacin

Descripcin: Documentacin del Capitulo 4 de la Memoria.

Duracin: 60 h

Especificacin de la tarea

Nmero: 29

Nombre: Tratamiento de funcionalidades extra

Descripcin: Anlisis de funcionalidades avanzadas a aadir.

Duracin: 30 h

Especificacin de la tarea

Nmero: 30

Nombre: Programacin Callback y DISA

Descripcin: Configuracin de Callback y DISA.

Duracin: 16 h

19

Especificacin de la tarea

Nmero: 31

Nombre: Pruebas II

Descripcin: Realizacin de Pruebas sobre el funcionamiento de


Callback y DISA.

Duracin: 30 h

Especificacin de la tarea

Nmero: 32.1

Nombre: Anlisis de requisitos

Descripcin: Anlisis sobre los resultados que queremos


conseguir y cmo conseguirlos.

Duracin: 10 h

Especificacin de la tarea

Nmero: 32.2

Nombre: Diseo interfaz grfica

Descripcin: Programacin del css y javascript de la agenda.

Duracin: 20 h

20

Especificacin de la tarea

Nmero: 32.3

Nombre: Programacin Web

Descripcin: Programacin HTML ,Java y conexin con la base


de datos MySQL.

Duracin: 150 h

Especificacin de la tarea

Nmero: 32.4

Nombre: Pruebas de funcionamiento

Descripcin: Tests de funcionamiento de la agenda.

Duracin: 20 h

Especificacin de la tarea

Nmero: 33

Nombre: Elaboracin de la memoria VI:


Pruebas de la Aplicacin

Descripcin: Documentacin del Capitulo 5 de la Memoria.

Duracin: 35 h

21

Especificacin de la tarea

Nmero: 34

Nombre: Instalacin y Estudio de Verbio

Descripcin: Descarga e instalacin de paquetes Verbio y


Estudio de su funcionamiento.

Duracin: 30 h

Especificacin de la tarea

Nmero: 35

Nombre: Integracin Verbio-Asterisk

Descripcin: Anlisis y programacin de Verbio para su uso en


la centralita Asterisk.

Duracin: 20 h

Especificacin de la tarea

Nmero: 36

Nombre: Pruebas III

Descripcin: Pruebas de ejemplos y programacin realizada


con Verbio.

Duracin: 15 h

22

Especificacin de la tarea

Nmero: 37

Nombre: Instalacin y Estudio de Nagios y servicio SNMP

Descripcin: Instalacin del servicio SNMP y Nagios ,as como,


compresin del funcionamiento de ambos.

Duracin: 25 h

Especificacin de la tarea

Nmero: 38

Nombre: Integracin Asterisk-Nagios

Descripcin: Instalacin del mdulo de Nagios para enlazar con


Asterisk y de los plugins necesarios.

Duracin: 20 h

Especificacin de la tarea

Nmero: 39

Nombre: Pruebas IV

Descripcin: Pruebas con Nagios sobre la monitorizacin de


Asterisk.

Duracin: 15 h

23

Especificacin de la tarea

Nmero: 40

Nombre: Pruebas ATA (SPA 3000) y Chan_Sebi

Descripcin: Pruebas con Adaptador Analgico de telefona y


con modem Huawei (chan_sebi).

Duracin: 15 h

Especificacin de la tarea

Nmero: 41

Nombre: Pruebas TRUNK IAX 2 y usuario remoto

Descripcin: Pruebas de conexin de 2 servidores Asterisk y de


extensin remota.

Duracin: 20 h

Especificacin de la tarea

Nmero: 42

Nombre: Integracin y pruebas con Skype

Descripcin: Pruebas de enlace entre Asterisk y Skype a travs


del chan_skype.

Duracin: 15 h

24

Especificacin de la tarea

Nmero: 43

Nombre: Conversin telefonos IP (de SCCP a SIP), configuracin


y pruebas.

Descripcin: Conversin de protocolo de los telfonos CISCO,


para su aprovechamiento en la nueva central.

Duracin: 40 h

Especificacin de la tarea

Nmero: 44

Nombre: Elaboracin de la memoria VII: Finalizacin

Descripcin: Finalizacin de la memoria con la documentacin


de la bibliografa, anexos, glosario, conclusin y lneas futuras.

Duracin: 20 h

Especificacin de la tarea

Nmero: 45

Nombre: Elaboracin de la Presentacin

Descripcin: Tratamiento y elaboracin de la presentacin del


proyecto.

Duracin: 30 h

25

Recursos Humanos y Materiales Amortizables


Para la realizacin del proyecto de fin de carrera el nico recurso humano ser el autor
de dicho proyecto, es decir, yo, David Escauela Alonso (David).
Como recursos materiales amortizables se dispone:

Recurso

Descripcin

Precio

Unidades

300,00

600,00

500,00

Ordenadores

Las caractersticas
tcnicas del PC son las
HP PROLIANT ML110 G5
(Servidor)

siguientes: Intel Xeon


3065 Dual Core a 2,33
GHz, 1GB de memoria
RAM, 250GB de disco
duro.

HP Compaq
(Ordenador)

Amilo Notebook Pi3540


(Portatil1)
(Portatil2)

Las caractersticas
tcnicas del PC son las
siguientes: Intel Pentium
4CPU 280GHz, 504MB
de RAM.

Las caractersticas
tcnicas del PC son las
siguientes: Intel Core 2
Duo P8600,320GB de
disco y 4GB de RAM

26

Telfonos

Sipura SPA 841


(Sipura1)
(Sipura2)
(Sipura3)

Telfono IP (SIP)

149,97

ALLNET ALL7960
(ALLNET)

Telfono IP (SIP e IAX)

61,89

Inalmbrico Alcatel
Versatis 620 Duo
(Telefono1)
(Telefono2)

Telefono Analgico

49,00

Cisco 7941

Telfono IP (SCCP)

163,85

TDM400P
(Tarjeta)

Tarjeta de Telefona

135,00

SPA 3000
(ATA)

Adaptador de Telefona
Analgico(1FXS y 1FXO)

44,53

Modem Huawei K3520

HSDPA DL 7.2 MBPS,


incorporacin de
Micro SD.

54,90

Switch
(Switch1)
(Switch2)

Procure Switch 140008G J9077A (22 puertos


10/100/1000 y 2 puertos
de doble personalidad)

54,69

Otros

27

Router
(Router1)(Router2)

Router ADSL

150,00

Precio

Unidades

300,00

00,00

Por otra parte el Software utilizado ser el siguiente:

Recurso

Descripcin

Microsoft Office
Profesional 2007

Paquete con Visio


y Proyect 2007

Commpilador de
Netbeans 6.7.1

Lenguajes de
Programacin

Putty

Cliente SSH para


acceso al Servidor

00,00

WinSCP

Cliente SFTP para


acceso al Servidor

00,00

MySQL 5.0.27

Gestor de Bases
de Datos

00,00

Skype

Softphone

00,00

Licencia chan_skype

Canal de conexion
con Asterisk

45,92

Firefox 3.5

Navegador Web

00,00

Zoiper

Softphone

00,00

28

Agenda del proyecto


Agenda de recursos:

Recurso

Trabajo
(horas)

Costo ()

2.522

983,58

Anlisis del trabajo a realizar

26

10,14

Iniciacin en Linux

240

93,60

Estudio y aprendizaje sobre


telefona y VoIP

240

94,60

Estudio y aprendizaje sobre


el mundo Asterisk

240

93,60

Elaboracin de la memoria I:
Introduccin a la VoIP

160

62,40

Pruebas de montaje de
centralitas Asterisk

80

31,20

Pruebas con SoftPhones y


Telefonos IP

20

7,80

Elaboracin de la memoria II:


Asterisk, el futuro de la telefona

160

62,40

Pruebas de funcionamiento de
Elastix

1,95

Pruebas de configuracin
de funcionalidades

30

11,70

Tareas asociadas

David

29

Pruebas de integracin con FOP

15

5,85

Pruebas de integracin
con Call Center Stats

10

3,9

Pruebas de integracin con CDR


Reports

10

3,9

Montaje de centralita de
pruebas II con TDM400P

15

5,85

Pruebas TDM400P

1,95

Programacin y Pruebas Google


Calendar I: Interactuacin con los
calendarios

30

11,70

Programacin y Pruebas Google


Calendar II: Envio de SMS

30

11,70

Elaboracin de la memoria III:


Prcticas realizadas

60

23,40

Elaboracin de la memoria IV:


Viabilidad del proyecto

120

46,80

Montaje centralita Yet


Informtica

20

7,80

Anlisis de requerimientos y
requisitos

15

5,85

Diseo del Dialplan

30

11,70

Puesta a punto del servidor

16

6,24

30

Instalacin de Asterisk

1,95

Programacin de ficheros de
configuracin y Dialplan

30

11,70

Integracin de ficheros de
configuracin

Pruebas I

1,95

Solucin de errores I

16

6,24

Elaboracion de la memoria V:
Aplicacon

60

23,40

Tratamiento de
funcionalidades extra

30

11,70

Programacin Callback y DISA

16

6,24

Pruebas II

30

11,70

Anlisis de requisitos (Agenda)

10

3,90

Diseo interfaz grfica (Agenda)

20

7,80

Programacin Web (Agenda)

150

58,50

Pruebas de funcionamiento
(Agenda)

20

7,80

Elaboracin de la memoria VI:


Pruebas de la Aplicacin

35

13,65

1,17

31

Instalacin y Estudio de Verbio

30

11,70

Integracin Verbio-Asterisk

20

7,80

Pruebas III

15

5,85

Instalacin y Estudio de Nagios


y servicio SNMP

25

9,75

Integracin Asterisk-Nagios

20

7,80

Pruebas IV

15

5,85

Pruebas ATA (SPA 3000) Y


Chan_Sebi

15

5,85

Pruebas TRUNK IAX 2 y usuario


remoto

20

7,80

Integracin y pruebas con Skype

15

5,85

Conversin telefonos IP (de SCCP


a SIP), configuracin y pruebas

40

15,60

Elaboracin de la memoria VII:


Finalizacin

20

7,80

Elaboracin de la Presentacin

30

11,70

26

32,50

1,25

Servidor

Pruebas con SoftPhones y


Telefonos IP

32

Pruebas de funcionamiento de
Elastix

1,25

Pruebas de configuracin
de funcionalidades

1,25

Pruebas de integracin con FOP

1,25

Pruebas de integracin
con Call Center Stats

1,25

Pruebas de integracin con CDR


Reports

1,25

Montaje de centralita de
pruebas II con TDM400P

1,25

Pruebas TDM400P

1,25

Montaje centralita Yet


Informtica

1,25

Puesta a punto del servidor

1,25

Instalacin de Asterisk

1,25

Programacin de ficheros de
configuracin y Dialplan

1,25

Integracin de ficheros de
configuracin

1,25

Pruebas I

1,25

33

Solucin de errores I

1,25

Tratamiento de
funcionalidades extra

1,25

Programacin Callback y DISA

1,25

Pruebas II

1,25

Integracin Verbio-Asterisk

1,25

Pruebas III

1,25

Integracin Asterisk-Nagios

1,25

Pruebas IV

1,25

Pruebas ATA (SPA 3000) Y


Chan_Sebi

1,25

Pruebas TRUNK IAX 2 y usuario


remoto

1,25

Integracin y pruebas con Skype

1,25

Conversin telefonos IP (de SCCP


a SIP), configuracin y pruebas

1,25

27

33,75

1,25

Ordenador

Pruebas de montaje de
centralitas Asterisk

34

Pruebas con SoftPhones y


Telefonos IP

1,25

Pruebas de funcionamiento de
Elastix

1,25

Pruebas de configuracin
de funcionalidades

1,25

Pruebas de integracin con FOP

1,25

Pruebas de integracin
con Call Center Stats

1,25

Pruebas de integracin con CDR


Reports

1,25

Montaje de centralita de
pruebas II con TDM400P

1,25

Pruebas TDM400P

1,25

Montaje centralita Yet


Informtica

1,25

Puesta a punto del servidor

1,25

Instalacin de Asterisk

1,25

Programacin de ficheros de
configuracin y Dialplan

1,25

Integracin de ficheros de
configuracin

1,25

35

Portatil1

Pruebas I

1,25

Solucin de errores I

1,25

Tratamiento de
funcionalidades extra

1,25

Programacin Callback y DISA

1,25

Pruebas II

1,25

Integracin Verbio-Asterisk

1,25

Pruebas III

1,25

Integracin Asterisk-Nagios

1,25

Pruebas IV

1,25

Pruebas ATA (SPA 3000) Y


Chan_Sebi

1,25

Pruebas TRUNK IAX 2 y usuario


remoto

1,25

Integracin y pruebas con Skype

1,25

Conversin telefonos IP (de SCCP


a SIP), configuracin y pruebas

1,25

17

21,25

36

Iniciacin en Linux

1,25

Estudio y aprendizaje
sobre telefona y VoIP

1,25

Estudio y aprendizaje sobre


el mundo Asterisk

1,25

Elaboracin de la memoria I:
Introduccin a la VoIP

1,25

Elaboracin de la memoria II:


Asterisk, el futuro de la telefona

1,25

Programacin y Pruebas Google


Calendar I: Interactuacin con los
calendarios

1,25

Programacin y Pruebas Google


Calendar II: Envio de SMS

1,25

Elaboracin de la memoria III:


Prcticas realizadas

1,25

Elaboracin de la memoria IV:


Viabilidad del proyecto

1,25

Anlisis de requerimientos y
requisitos

1,25

37

1,25

Diseo del Dialplan

Elaboracion de la memoria V:
Aplicacon

1,25

Elaboracin de la memoria VI:


Pruebas de la Aplicacin

1,25

1,25

Instalacin y Estudio de Verbio

Instalacin y Estudio de
Nagios y servicio SNMP

1,25

1,25

Elaboracin de la Presentacin

Elaboracin de la memoria VII:


Finalizacin

1,25

7,5

Anlisis de requisitos

1,25

Diseo interfaz grfica

1,25

Programacin Web

1,25

Pruebas de funcionamiento

1,25

Pruebas ATA (SPA 3000)


y Chan_Sebi

1,25

Portatil2

38

Pruebas TRUNK IAX 2


y usuario remoto

1,25

20

5,00

Pruebas con SoftPhones


y Telefonos IP

0,25

Pruebas de funcionamiento
de Elastix

0,25

Pruebas de configuracin
de funcionalidades

0,25

0,25

Pruebas de integracin con FOP

Pruebas de integracin con Call


Center Stats

0,25

Pruebas de integracin con CDR


Reports

0,25

Montaje de centralita de pruebas


II con TDM400P

0,25

0,25

Pruebas TDM400P

Programacin y Pruebas Google


Calendar I: Interactuacin con los
calendarios

0,25

Sipura1

39

Sipura2

Programacin y Pruebas Google


Calendar II: Envio de SMS

0,25

0,25

Pruebas I

0,25

Solucin de errores I

Tratamiento de funcionalidades
extra

0,25

0,25

Programacin Callback y DISA

0,25

Pruebas II

0,25

Pruebas III

Pruebas ATA (SPA 3000) Y


Chan_Sebi

0,25

Pruebas TRUNK IAX 2


y usuario remoto

0,25

Integracin y pruebas con Skype

0,25

Conversin telefonos IP (de SCCP


a SIP), configuracin y pruebas

0,25

1,25

40

Pruebas con SoftPhones


y Telefonos IP

0,25

Pruebas I

0,25

Solucin de errores I

0,25

Tratamiento de
funcionalidades extra

0,25

Pruebas TRUNK IAX 2


y usuario remoto

0,25

0,75

Pruebas con SoftPhones


y Telefonos IP

0,25

Pruebas I

0,25

Solucin de errores I

0,25

0,75

Pruebas con SoftPhones


y Telefonos IP

0,25

Pruebas I

0,25

Solucin de errores I

0,25

0,50

Sipura3

ALLNET

Telefono1

41

Montaje de centralita de
pruebas II con TDM400P

0,25

Pruebas TDM400P

0,25

0,25

0,25

0,25

0,25

1,00

Montaje de centralita de
pruebas II con TDM400P

0,50

Pruebas TDM400P

0,50

0,15

0,15

28

7,00

0,25

Telefono2

Pruebas ATA (SPA 3000)


y Chan_Sebi

ATA

Pruebas ATA (SPA 3000)


Y Chan_Sebi

Tarjeta

sebi

Pruebas ATA (SPA 3000)


y Chan_Sebi

Switch1

Pruebas con SoftPhones


y Telefonos IP

42

Pruebas de funcionamiento
de Elastix

0,25

Pruebas de configuracin
de funcionalidades

0,25

Pruebas de integracin con FOP

0,25

Pruebas de integracin
con Call Center Stats

0,25

Pruebas de integracin
con CDR Reports

0,25

Montaje de centralita
de pruebas II con TDM400P

0,25

Pruebas TDM400P

0,25

Programacin y Pruebas Google


Calendar I: Interactuacin con los
calendarios

0,25

Programacin y Pruebas Google


Calendar II: Envio de SMS

0,25

Montaje centralita Yet


Informtica

0,25

Puesta a punto del servidor

0,25

Instalacin de Asterisk

0,25

Programacin de ficheros de
configuracin y Dialplan

0,25

43

Integracin de ficheros
de configuracin

0,25

Pruebas I

0,25

Solucin de errores I

0,25

Tratamiento de
funcionalidades extra

0,25

Programacin Callback y DISA

0,25

Pruebas II

0,25

Integracin Verbio-Asterisk

0,25

Pruebas III

0,25

Integracin Asterisk-Nagios

0,25

Pruebas IV

0,25

Pruebas ATA (SPA 3000)


Y Chan_Sebi

0,25

Pruebas TRUNK IAX 2 y usuario


remoto

0,25

Integracin y pruebas con Skype

0,25

Conversin telefonos IP (de SCCP


a SIP), configuracin y pruebas

0,25

44

Pruebas con SoftPhones y


Telefonos IP

0,25

0,50

Pruebas ATA (SPA 3000)


y Chan_Sebi

0,25

Pruebas TRUNK IAX 2


y usuario remoto

0,25

36

9,00

Pruebas de montaje
de centralitas Asterisk

0,25

Estudio y aprendizaje
sobre el mundo Asterisk

0,25

Estudio y aprendizaje
sobre telefona y VoIP

0,25

Pruebas con SoftPhones


y Telefonos IP

0,25

Pruebas de funcionamiento
de Elastix

0,25

Pruebas de configuracin
de funcionalidades

0,25

Pruebas de integracin con FOP

0,25

Pruebas de integracin
con Call Center Stats

0,25

Switch2

Router1

45

Pruebas de integracin
con CDR Reports

0,25

Montaje de centralita de
pruebas II con TDM400P

0,25

Pruebas TDM400P

0,25

Programacin y Pruebas Google


Calendar I: Interactuacin
con los calendarios

0,25

Programacin y Pruebas Google


Calendar II: Envio de SMS

0,25

Montaje centralita Yet


Informtica

0,25

Anlisis de requerimientos
y requisitos

0,25

Puesta a punto del servidor

0,25

Instalacin de Asterisk

0,25

Programacin de ficheros de
configuracin y Dialplan

0,25

Integracin de ficheros
de configuracin

0,25

Pruebas I

0,25

Solucin de errores I

0,25

46

Elaboracin de la memoria V:
Aplicacin

0,25

Tratamiento de
funcionalidades extra

0,25

Programacin Callback y DISA

0,25

Pruebas II

0,25

Elaboracin de la memoria VI:


Pruebas de la Aplicacin

0,25

Instalacin y Estudio de Verbio

0,25

Integracin Verbio-Asterisk

0,25

Pruebas III

0,25

Instalacin y Estudio de Nagios


y servicio SNMP

0,25

Integracin Asterisk-Nagios

0,25

Pruebas IV

0,25

Pruebas ATA (SPA 3000)


Y Chan_Sebi

0,25

Pruebas TRUNK IAX 2


y usuario remoto

0,25

Integracin y pruebas con Skype

0,25

47

Conversin telefonos IP (de SCCP


a SIP), configuracin y pruebas

0,25

1,75

Iniciacin en Linux

0,25

Anlisis de requisitos

0,25

Diseo interfaz grfica

0,25

Programacin Web

0,25

Pruebas de funcionamiento

0,25

Pruebas ATA (SPA 3000)


Y Chan_Sebi

0,25

Pruebas TRUNK IAX 2


y usuario remoto

0,25

0,50

1,75

Router2

CISCO

Conversin telefonos IP (de SCCP


a SIP), configuracin y pruebas

Diagrama de GANTT:
Este diagrama nos indica cmo ser el proceso de elaboracin del proyecto, indicando
cundo empezarn y acabarn las tareas.
Y es que la duracin total del proyecto es algo que nos interesa optimizar, y es este
diagrama la herramienta perfecta para ello.

48

49

50

Estimacin de Costes del Proyecto:


Recursos Humanos de Trabajo:
David = 72,00 /mes
Recursos Materiales Amortizables:

Nombre del Recurso

Costo por unidad ()

a)Hardware
Servidor

300,00

Ordenador

600,00

Portatil1

500,00

Portatil2

500,00

Sipura1

149,97

Sipura2

149,97

Sipura3

149,97

ALLNET

61,89

Telefono1

49,00

Telefono2

49,00

ATA

44,53

Tarjeta

135,00

Sebi (Huawei)

54,90

Switch1

54,69

Switch2

54,69

Router1

150,00

Router2

150,00

Cisco

163,85
3317,46

b)Software
Microsoft Office Profesional 2007

300,00

Netbeans 6.7.1

00,00

Putty

00,00

51

WinSCP

00,00

MySQL 5.0.27

00,00

Skype

00,00

Licencia Chan_Skype

45,92

Firefox 3.5

00,00

Zoiper

00,00
345,92

Clculo del costo de los Recursos Humanos y Recursos Materiales Amortizables:

Concepto

Unidades (horas) Precio (/h)

Importe ()

Recursos Humanos
David

2.522

0,39

983,58

Servidor

26

1,25

32,50

Ordenador

27

1,25

33,75

Portatil1

17

1,25

21,25

Portatil2

1,25

7,50

Sipura1

20

0,25

5,00

Sipura2

0,25

1,25

Sipura3

0,25

0,75

ALLNET

0,25

0,75

Telefono1

0,25

0,50

Telefono2

0,25

0,25

ATA

0,25

0,25

Tarjeta

0,50

1,00

sebi

0,15

0,15

Switch1

28

0,25

7,00

Switch2

0,25

0,50

Router1

36

0,25

9,00

Recursos Materiales Amortizables (Hw)

52

Router2

0,25

1,75

CISCO

0,50

0,50
123,65

Clculo de la Amortizacin de los Recursos Amortizables:

Concepto

Coste
Unitario
()

Tiempo de
Amortizacin
(horas)

Coste Unitario
de
Amortizacin
(/h)

Tiempo
de Uso
(horas)

Importe
()

Servidor

300,00

4800

0,0625

26

1,63

Ordenador

600,00

4800

0,1250

27

3,38

Portatil1

500,00

4800

0,1042

17

1,77

Portatil2

500,00

4800

0,1042

0,63

Sipura1

149,97

4800

0,0312

20

0,62

Sipura2

149,97

4800

0,0312

0,16

Sipura3

149,97

4800

0,0312

0,09

ALLNET

61,89

4800

0,0129

0,03

Telefono1

49,00

4800

0,0102

0,02

Telefono2

49,00

4800

0,0102

0,01

ATA

44,53

4800

0,009

0,01

Tarjeta

135,00

4800

0,0281

0,06

sebi

54,90

4800

0,011

0,01

Switch1

54,69

4800

0,011

28

0,31

Switch2

54,69

4800

0,011

0,02

Router1

150,00

4800

0,031

36

1,15

Router2

150,00

4800

0,031

0,22

CISCO

163,85

4800

0,034

0,03

SUBTOTAL
Microsoft
Office
Profesional
2007
Netbeans
6.7.1

10,15

300,00

4800

0,0625

525

32,81

Gratuito

4800

0,00
53

Putty

Gratuito

4800

0,00

WinSCP

Gratuito

4800

0,00

MySQL
5.0.27

Gratuito

4800

0,00

Skype

Gratuito

4800

15

0,00

Licencia
chan_skype

45,92

4800

0,0096

15

0,14

Firefox 3.5

Gratuito

4800

0,00

Zoiper

Gratuito

4800

0,00

SUBTOTAL

32,95

TOTAL

43,10

Presupuesto

Concepto

Importe ()

Recursos Humanos o de Trabajo

1.107,23

Recursos Materiales Amortizables

123,65

Materiales Hardware y Software Amortizables

43,10
1.273,98

10% Costos Generales

127,40

15% Beneficio

191,10

SUBTOTAL

1.592,48

16%IVA

254,80

PRESUPUESTO

1.847,28

Por tanto, el presupuesto asciende a veintisiete mil seiscientos ochenta y siete con
cincuenta y nueve.
Estimando que los datos aportados en el siguiente presupuesto son suficientes, se
somete al proyecto a su aprobacin por los organismos oficiales correspondientes.
Firma: David Escauela Alonso

54

55

Captulo

Introduccin a VoIP

Qu es VoIP (Voice Over Internet Protocol)?


Una definicin general de Voz sobre IP (tambin conocida como telefona IP) es la
posibilidad de transportar conversaciones telefnicas en paquetes IP. Cuando hablamos
de VoIP, nos referimos a la telefona en Internet en el sentido ms amplio de la
expresin. El trmino VoIP no se refiere a ninguno de los mecanismos concretos que
existen para llevar las seales de voz de un sitio a otro en la red. Existen docenas de
tecnologas que permiten hablar por la red.
Las alternativas tecnolgicas de VoIP se pueden dividir de una manera sencilla en dos
grandes grupos:

56

Tecnologas cerradas/propietarias dnde nos encontramos con el conocido


Skype o el ya legendario Cisco Skinny (SCCP).

Sistemas abiertos dnde nos encontramos con los estndares abiertos basados
en SIP, H.323 o IAX.

Este sistema permite convivir con los sistemas tradicionales de comunicacin. Las
lneas telefnicas PSTN entrantes, pueden ser convertidas a VoIP, a travs de una
pasarela (Gateway) que permite recibir y hacer llamadas en la red telefnica normal.

Por qu deberamos pasarnos a VoIP y no seguir usando


servicios gratuitos como Skype?
La respuesta es simple: por sostenibilidad, oportunidad, apropiamiento y flexibilidad.
Los servicios gratuitos te pueden solucionar una necesidad a corto plazo pero nunca
garantizar tu independencia o el control de tu propio proceso de aprendizaje y
desarrollo. No se trata de una cuestin puramente tcnica.
El problema no es decidir cul es la mejor de las tecnologas sino cul es la que permite
que las comunidades sean dueas de su propio desarrollo y que puedan adaptarse a
sus propias necesidades.
Es muy difcil imaginar un desarrollo sostenible sin transferencia de conocimiento y
reapropiamiento tecnolgico. Una solucin basada en estndares abiertos y cdigo
libre no es slo una buena solucin desde un punto de vista puramente tcnico sino
que adems permite la posibilidad de adaptacin para mejorarse a la realidad local.
Para ser conscientes de la importancia de los estndares abiertos quizs sea bueno
empezar presentando una definicin de estndar. Un estndar es un conjunto de
reglas, condiciones o requerimientos que describen materiales, productos, sistemas,
servicios o prcticas.
En telefona, los estndares garantizan que todas las centrales de telefona sean
capaces de operar entre s. Sin ese conjunto de reglas comunes un sistema de telefona
de una regin sera incapaz de intercambiar llamadas con otro que est, tan slo, unos
kilmetros ms all.
Aunque muchos de los estndares de telefona son pblicos, los sistemas siempre han
estado bajo el control de un grupo muy limitado de fabricantes. Los grandes
fabricantes de sistemas de telefona son los nicos capaces de negociar contratos a
nivel regional o incluso nacional. sta es la razn que puede explicar porqu es muy
comn encontrar siempre el mismo tipo de equipos a lo largo de un mismo pas.
Los equipos de telefona tradicionales, adems, tienen la particularidad de haber sido
diseados para realizar un conjunto de tareas muy concretas. Normalmente, son
57

equipos informticos con aplicaciones muy especficas. Aunque las reglas que
gobiernan la telefona (los estndares) son relativamente abiertas, no es el caso de los
equipos informticos que los implementan. Al contrario de los estndares, el
funcionamiento interno siempre se mantiene en secreto.

Historia de VoIP
1995 Inicio de la Voz sobre IP
o La VoIP empieza con pequeas aplicaciones gratuitas y de cdigo abierto
a raz de la posibilidad de enviar pequeos fragmentos de voz
codificados.
1997 Aparecen los primeros PBX software
o El protocolo H.323 se hace el dueo y seor de la VoIP ofreciendo voz
y video aunque con mala calidad debido al ancho de banda: limitado y
poco econmico.
1999 La revolucin de la banda ancha
o Netmeeting y CUSeeMe se afianzan como aplicaciones de voz y video
ms utilizadas hasta el momento.
o Aparece el protocolo SIP evolucin del arcaico H.323.
o Comienzo de Asterisk de la mano de Mark Spencer.
2001 La revolucin llega a la Voz sobre IP
o Asterisk comienza como un software abierto y con un gran nmero de
seguidores.
o Las empresas aun no se fan de este software ni de GNU/Linux y
continan utilizando software y hardware propietario.
2003 Lanzamiento de Skype
o El primer producto VoIP gratis de calidad se ha convertido en objeto de
culto de usuarios residenciales.
2005 Asterisk se afianza como smbolo de VoIP
o Asterisk gana ms y ms adeptos.
o La empresa de Mark Spencer, Linux Support Services, se convierte en
Digium especializada en la venta de hardware para Asterisk.
58

o No tardan en aparecer otros fabricantes que crean hardware


exclusivamente compatible con Asterisk (Junghanns, Beronet).

Caractersticas Principales
-

Se utiliza una nica red. Si dos empresas estn unidas a travs de Internet.
Por qu no aprovecharlo?

Se administra una nica red.

Estndares abiertos e internacionales. Inter-operabilidad, Bajada de precios


en proveedores y fabricantes de hardware VoIP.

Calidad: Es posible conseguir la misma calidad, de hecho hoy por hoy, el


40% de las llamadas de las grandes operadoras se encaminan por VoIP.

Fiabilidad: En LAN, se puede lograr una gran fiabilidad. En Internet tambin,


pero existen quizs demasiados factores. (QoS, NAT).

Coste: Instalacin sobre red existente, precios de llamadas.

Ventajas de VoIP
Funcionales
o Provee movilidad a nuestros empleados. Permite a los usuarios conectar
su telfono en cualquier parte en la oficina. Los usuarios simplemente
cogen su telfono y lo conectan al puerto Ethernet ms cercano y
mantienen su nmero existente.
o Permite comunicacin unificada integrando otros servicios disponibles
en Internet como son video, mensajes instantneos, etc.
o Escalable. Podemos trasmitir ms de una llamada sobre la misma lnea
telefnica. La transmisin de VoIP hace ms fcil aumentar las lneas
telefnicas cuando se incorporan nuevos empleados.
De Gestin
o Mucho ms fcil de instalar y configurar que una central telefnica
propietaria.
o Nos facilita la administracin por Web de forma fcil e intuitiva, frente a
otros sistemas como por ejemplo centralita Siemens Hipath que
necesitan de un software especfico y nada intuitivo para ser
59

configurado.
o Mejor reporte.
Econmicas
o Tenemos voz y datos en una misma infraestructura. No hay necesidad de
cableado telefnico separado.
o Reduccin significativa de costes al aprovechar Internet.
o Proporciona servicios que normalmente son muy difciles y costosos de
implementar usando la red tradicional de voz PSTN. Funcionalidades que
normalmente son facturadas con cargo extra por las compaas
telefnicas, como identificacin de llamada, transferencia de llamadas,
remarcado automtico, conferencias,, son fciles de implementar y sin
coste alguno.
o El estndar SIP elimina telfonos propietarios y costosos.
o Llamadas entre sedes gratuitas.

Problemas
NAT: El cncer de la VoIP. Distintos tipos, no es fcilmente manejable.
QoS: Necesidad de ofrecer calidad de servicio, al ser la voz crtica en tiempo
real.
Latencia: Tiempo que tarda la voz en llegar al destino.
Jitter: Variacin de la latencia.

Elementos fundamentales de una red VoIP

Terminales: telfonos IP que pueden ser hardware o software.

GateKeeper: controlador y gestionador de toda la comunicacin de VoIP.

Gateway: dispositivo que hace de enlace con la telefona fija tradicional.


Acta de forma transparente al usuario.

60

Cmo se transmite VoIP por la red?


Los paquetes de VoIP se transmiten sobre la red basada en IP aprovechando el modelo
TCP/IP. Consta de 5 capas:

Protocolos NTP, RTP, RTCP aseguran la entrega y calidad


de los paquetes VoIP.

El protocolo UDP, transporta los paquetes VoIP desde


inicio a fin.
Se aade la direccin IP al paquete. Cada dispositivo de
VoIP (telfono o PC), tiene una nica direccin IP que
enruta la entrega de paquetes VoIP para y desde el
llamante al receptor durante toda la llamada.

Se aade la @ MAC al paquete.

En esta capa se convierten todos los paquetes a seales


elctricas u pticas, para ser transportados sobre la red
interna o externa.

Los protocolos especficos que se utilizan en cada capa son:


Aplicacin:
En esta capa los paquetes de VoIP utilizan 3 protocolos:


NTP (Network Time Protocol): ayuda a asegurar que las seales


son transmitidas y recibidas en el margen de tiempo necesario
para asegurar la calidad de recepcin.

RTP (Real Time transports Protocol): proporciona funciones de


transporte de red de fin a fin, para seales de voz digitales,
encapsuladas en el paquete VoIP.

RTCP(Real Time transports Control Protocol): monitoriza la


entrega de la seal de voz y proporciona funciones mnimas de
control para asegurar la entrega de los paquetes.

61

Transporte:
La mayora de los datos de una red usan el protocolo TCP en la capa de
transporte, mientras que en VoIP se utiliza el UDP.
El TCP es ms lento que el UDP. Utiliza ms tiempo en la entrega de
paquetes en el destino para asegurar que llegan correctamente. Pero al
tratarse de un sistema que funciona en tiempo real es ms importante la
velocidad de entrega de paquetes, que no la seguridad en que llegan
todos los paquetes. Por eso se usa el UDP.

Conceptos principales de VoIP


Entender cada uno los conceptos nos va a ser muy til cuando configuremos cualquier
tipo de programa relacionado con telefona IP.
PBX
PBX viene del trmino ingls Private (Automatic) Branch Exchange. En palabras simples,
el uso ms comn de una PBX es compartir de una a varias lneas telefnicas con un
grupo de usuarios. Una PBX se sita entre las lneas telefnicas y los telfonos
(terminales de voz).
La PBX tiene la propiedad de ser capaz de redirigir las llamadas entrantes a uno o varios
telfonos. De una manera similar, una PBX permite a un telfono escoger una de las
lneas telefnicas para realizar una llamada telefnica al exterior. De la misma forma
que un enrutador (router) en Internet es responsable de dirigir los paquetes de un
origen a su destino, una PBX es responsable de dirigir llamadas telefnicas.
La palabra private en la sigla PBX significa que el dueo del sistema tiene todo el
control y decide como compartir las lneas exteriores con los usuarios.
Una PBX no slo permite compartir un conjunto de lneas con un grupo de usuarios
sino que tambin ofrece la posibilidad de crear servicios de valor aadido como
transferencia de llamadas, llamadas a tres ,es decir, tener la posibilidad de tener a
ms de dos personas hablando simultneamente en la misma conversacin, pasarela
de voz a correo permitiendo grabar un mensaje de voz en un adjunto de correo
electrnico como si fuera un contestador automtico grabando el mensaje en un
fichero de audio y se envindolo a una cuenta de correo o servicios basados en una
respuesta de voz interactiva (IVR), etc.
Una PBX puede ser de gran utilidad en mltiples escenarios. Piensa en las regiones
donde el acceso a la red telefnica implica caminar varias horas (sino das) a una cabina
o Telecentro.
Adems, una situacin muy comn es que slo exista una lnea telefnica por edificio o
por poblacin. Una PBX (tu centralita) permitir compartir esa lnea e incluso extender
62

la red telefnica a lugares remotos.


ASTERISK (PBX avanzada) (para saber ms pulsa aqui )
PSTN-RTB
PSTN es la Red Pblica Telefnica Conmutada (Public Switched Telephone Network), la
red de redes telefnicas o ms conocida como la red telefnica. En castellano la
PSTN es conocida como la red pblica conmutada (RTC) o red telefnica bsica (RTB).
De la misma forma que Internet es la red global IP, la RTB es la combinacin de todas
las redes conmutadas de telfono. Una diferencia muy importante entre la RTB e
Internet es la nocin de flujo de informacin. En telefona los flujos de informacin
son cada una de las llamadas o conversaciones mientras que en Internet es cada uno
de los paquetes de datos.
Desde el punto de vista conceptual la RTB e Internet son muy diferentes y representan
dos mundos y filosofas casi antagnicas. Si una conversacin se efecta en una RTB se
tiene que reservar un canal (circuito) dedicado de 64 Kbps, pero en Internet la misma
conversacin puede coexistir con otros servicios de manera simultnea. Aunque esta
diferencia pueda parecer irrelevante a primera vista, tiene grandes implicaciones de
cara a la implementacin de las tecnologas de la informacin tanto en regiones
desarrolladas como en desarrollo. En el modelo tradicional, un cable de cobre
proporciona acceso a la RTB y ofrece un slo tipo de servicio: un canal analgico. Si ese
mismo cable se usa para conectarse a una red conmutada de paquetes como Internet,
se puede implementar cualquier tipo de servicio basado en el protocolo IP.
La RTB ha estado histricamente gobernada por estndares creados por la ITU
(International Telecommunication Union), mientras que Internet es gobernada por los
estndares del IETF (Internet Engineering Task Force).
Ambas redes, la RTB e Internet usan direcciones para encaminar sus flujos de
informacin. En la primera se usan nmeros telefnicos para conmutar llamadas en las
centrales telefnicas, en Internet se usan direcciones IP para conmutar paquetes entre
los enrutadores (routers).
Sealizacin en telefona tradicional
Sealizacin analgica
Las centrales telefnicas son los routers de la RTB.
Un Foreign Exchange Office (FXO) es cualquier dispositivo que, desde el punto de vista
de la central telefnica, acta como un telfono tradicional. Un FXO debe ser capaz de
aceptar seales de llamada o ring, ponerse en estado de colgado o descolgado, y enviar
y recibir seales de voz. Asume que un FXO es como un telfono o cualquier otro
dispositivo que suena (como una mquina de fax o un mdem).
63

Un Foreign Exchange Station (FXS) es lo que est situado al otro lado de una lnea
telefnica tradicional (la estacin). Un FXS enva el tono de marcado, la seal de
llamada que hace sonar los telfonos y los alimenta. En lneas analgicas, un FXS
alimenta al FXO. El FXS utiliza alrededor de 48 voltios DC para alimentar al telfono
durante la conversacin y hasta 80 voltios AC (20 Hz) cuando genera el tono de llamada
(ring).
Para operar con lneas analgicas, se necesitan tarjetas con interfaces FXO.

Por ejemplo: Digium TDM01B

Para operar con telfonos analgicos o centralitas clsicas, se requieren interfaces FXS.

Por ejemplo: Digium TDM10B

Una PBX que integra perifricos FXO y FXS puede conectarse a la RTB e incorporar
telfonos analgicos. Las lneas telefnicas que vienen del operador se tienen que
conectar a una interfaz FXO. Los telfonos se deben conectar a las interfaces FXS de la
centralita.
En resumen, dos reglas fciles que hay que recordar son:
1. Un FXS necesita estar conectado a un FXO (como una lnea telefnica
necesita estar conectada a un telfono) o viceversa.
2. Un FXS suministra energa (elemento activo) a un telfono FXO (elemento
pasivo).
Ejemplos de conexiones:

64

Cada vez que usas una lnea telefnica se intercambian un conjunto de seales. Las
seales sirven para ofrecer informacin del estado de la llamada al usuario. Algunas de
esas seales son el tono de marcado o el tono de lnea ocupada. Estas seales se
transmiten entre el FXS y el FXO haciendo uso de un protocolo conocido como
sealizacin.
Por desgracia, existen muchas maneras de generar este tipo de seales. Cada uno de
los mecanismos es conocido como mtodo de sealizacin. Los mtodos de
sealizacin son diferentes de un lugar a otro, as que debes conocer de antemano el
mtodo de sealizacin que se usa en tus lneas telefnicas. Dos de los mtodos de
sealizacin ms conocidos son el loop start y el ground start.
Si desconoces el mtodo de sealizacin que debes usar puedes empezar probando
con loop start. Una consecuencia de configurar tu PBX con un mtodo de
sealizacin equivocado es que la lnea telefnica se cuelga de manera inesperada.
Sealizacin digital
La Red Digital de Servicios Integrados (RDSI) utiliza, en principio, dos tipos de
capacidades de acceso.
o Acceso Bsico (2 canales de voz + 1 de sealizacin)

Por ejemplo: Digium B410P


o Acceso Primario (30 canales de voz + 1 de sealizacin)

Por ejemplo: Digium TE110P

Adems del tipo de sealizacin, las interfaces RDSI pueden funcionar en modo NT
(Network Termination) o TE (Terminal Equipment).
o Modo TE: En este modo, la centralita se puede conectar con interfaces RDSI
(BRI o PRI) o con Centrales Digitales Tradicionales que tengan conexin RDSI de
forma esclava.
o Modo NT: En este modo la centralita telefnica puede conectarse con Centrales
Digitales Tradicionales que tengan conexin RDSI de forma Maestro o con
extensiones Digitales.
65

Sealizacin entre centrales telefnicas


SS7 es un grupo de estndares desarrollados originalmente por la AT&T y la UIT que,
entre otras cosas, se encargan de la gestin del establecimiento de llamadas y su
encaminamiento entre centrales telefnicas en la RTB. Una cosa muy importante que
debes entender es que en la red telefnica tradicional, la voz y las seales auxiliares
(sealizacin) estn claramente separadas. Esto significa que existe un circuito
dedicado a voz y otro circuito independiente para el intercambio de las seales
encargadas del establecimiento de las llamadas. Esta informacin adicional necesaria
en cada llamada se intercambia usando un protocolo conocido como SS7.
El hecho de que la voz y la sealizacin estn separadas significa que los flujos de
informacin pueden tomar caminos fsicos totalmente diferentes. Imagnate que las
conversaciones pueden viajar por un cable mientras que los nmeros de telfono de
los comunicantes se envan por otro. Este concepto es importante para entender la
siguiente seccin: sealizacin en telefona IP.
Sealizacin en telefona IP
Por herencia histrica, la sealizacin en voz sobre IP sigue unos principios muy
parecidos a la sealizacin en RTB. Las seales y las conversaciones estn claramente
diferenciadas.
Protocolo H.323
Primer estndar VoIP, basado en protocolos de la RDSI, desarrollado en 1996 por la UIT
como un medio para transmitir voz, video, datos, fax y las comunicaciones a travs de
una red basada en IP al tiempo que se mantiene la conectividad con la PSTN. Facilita la
introduccin de Telefona IP en las redes existentes de RDSI basadas en sistemas PBX.
Tom fama porque era el ms usado por los grandes operadores en sus redes
troncales. Se usa en el famoso programa Netmeeting.
Ha sido sustituido por el protocolo SIP, no obstante, todava hay muchos operadores IP
que no han portado SIP, muchos sistemas instalados que solo entienden este protocolo
y tambin est presente en algunas aplicaciones de Videoconferencia.
Los roles que nos interesan de este protocolo son los siguientes:

Gatekeeper: Es ncleo de una zona H.323, es utilizado para conocer los


diferentes usuarios y servicios de una red H.323.
GNUGk: Gatekeeper de cdigo abierto.

EndPoint : Son los usuarios finales que hacen uso de los servicios
proporcionados dentro de la zona H.323.

66

Conexin de Asterisk con un Operador IP (Sistema de Voz Ip) a travs del protocolo H.323

Protocolo MGCP (Media Gateway Control Protocol)


Este Protocolo es un protocolo muy simple con mucha facilidad para ampliarse y en el
que la centralita Asterisk se desenvuelve de forma muy ptima.
Este Protocolo se basa en dos entidades bien diferenciadas, los Agentes de Llamadas y
las pasarelas. En Asterisk la estructura estara formada por Terminales IP MGCP que
actan como pasarelas y l acta como Agente de Llamada. As entonces, el Asterisk
siempre tiene el estado en el que se encuentran las pasarelas.

67

Protocolo SIP (Session Initiation Protocol)


El protocolo de sealizacin de inicio de sesin, del ingls Session Initiation Protocol
(SIP), es una especificacin para Internet para ofrecer una funcionalidad similar al SS7
pero en una red IP. Fue desarrollado por el IETF. Se trata de un protocolo de
sealizacin para crear, modificar y terminar sesiones con uno o ms participantes.
Estas sesiones incluyen llamadas telefnicas por Internet, distribucin de datos
multimedia, y conferencias multimedia.
Tiene una sintaxis muy similar al HTTP.
Dentro de los Protocolos de Comunicaciones de Voz IP, SIP se posiciona como el ms
aventajado y conocido que est desbancando a H.323 gracias a su simplicidad .Ha
incrementado su popularidad cuando las tecnologas de VoIP se han hecho ms
presentes en el bucle local.(enlace fsico que conecta al cliente con la terminacin de
la red de telefona del proveedor de servicios de telecomunicaciones).
Ventajas:
 La gran mayora de telfonos IP soportan este protocolo.
Inconvenientes:
Tiene problemas con el NAT. Los datos y sealizacin viajan de forma
separada y suele necesitar un servidor STUN para resolver este
problema.
Son necesarios muchos puertos. Necesita el puerto 5060 para
sealizacin y 2 puertos RTP para cada conexin de audio. Es
necesario abrir muchos puertos en el Firewall.
Asterisk puede tener dos roles diferentes e importantes dentro de las comunicaciones
a travs de este Protocolo SIP.

Agente de Usuario: Como agente de Usuario, el Asterisk puede conectarse a


Operadores IP que soporten protocolo SIP, as como a otros Asterisk.

Servidor: Como Servidor, el Asterisk puede recibir peticiones de Registro de


Agentes de Usuario, pudiendo ser estos clientes, clientes Hardware (telfonos
IP), clientes Software (SofPhone), otros Asterisk o cualquier Agente de Usuario
SIP.

68

Ejemplo de los 2 roles que puede tomar Asterisk usando este protocolo.

Capacidades de SIP:
o Localizacin del usuario
o Disponibilidad del usuario: determinacin de la voluntad del receptor de la
llamada de participar en las comunicaciones.
o Capacidad del usuario: determinacin del medio y de sus parmetros.
o Gestin de la sesin: transferencia, terminacin de sesiones, modificacin de
los parmetros de la sesin desde el propio User Agent.
En el protocolo SIP el usuario es el dueo de su sesin.
Movilidad:
 SIP permite implementar dos tipos de movilidad diferentes:
69

o La movilidad personal, el usuario puede ser alcanzado en un dispositivo


cualquiera, registrndose en el SIP Registrar Server.
o La movilidad propia al protocolo IP (VPN).
 El registro permite mantener las localizaciones actuales del usuario de manera
dinmica.
En la imagen de abajo se muestra un ejemplo de funcionamiento del protocolo SIP.
Este protocolo se encarga nicamente de la sealizacin y delega en otros protocolos
como RTP (Real-time Transport Protocol) la transmisin de datos, que en este caso
pueden ser tanto audio como vdeo.

Servidores Proxy SIP


Aunque dos dispositivos SIP (telfonos IP) pueden comunicarse directamente, SIP
normalmente hace uso de algunos elementos adicionales llamados proxies para
facilitar el establecimiento de las llamadas. Un proxy opera como un representante
(apoderado) que se encarga de negociar entre dos partes. Con la ayuda de un proxy
puedes mover fsicamente tu nmero de telfono en Internet. Los nmeros no estn
asociados a un sitio concreto sino que se pueden mover siempre y cuando
notifiquemos al proxy de nuestra ubicacin. Como el proxy funciona como un
70

intermediario es capaz de indicar a las partes dnde se encuentran los telfonos. Este
servidor intermedio en SIP aprende la posicin de sus usuarios durante un proceso que
se conoce como registro.
El proceso de registro entre clientes y el servidor proxy. La sealizacin (SIP) y las
conversaciones de voz (RTP) viajan por caminos diferentes.

Hay dos tipos de Servidores Proxy:


o Inbound Proxy: permite independizar al usuario del dispositivo que utiliza y de
su localizacin.

o Outbound Proxy: Simplifica la administracin de los usuarios de un dominio,


aplica polticas, tarifica, etc. Un mismo servidor puede funcionar como proxy
entrante y saliente de un dominio.

71

Protocolos en tiempo real y el NAT


En Internet, las conversaciones que usan sealizacin de tipo SIP resultan en flujo
constante de paquetes de pequeo tamao entre los comunicantes. Estos paquetes de
voz hacen uso de otro protocolo llamado RTP. El protocolo de transporte de tiempo
real o Realtime Transport Protocol (RTP) es el encargado de llevar las conversaciones (la
voz) de un lado a otro. En el RTP se define un mecanismo estndar para enviar audio y
vdeo en Internet. De la misma forma que en una conversacin existen dos flujos de
voz, en una conversacin en una red IP tenemos dos flujos de paquetes RTP.
Los Network Address Translators (NATs) son los grandes enemigos del RTP. Una red con
un NAT consiste en varios ordenadores compartiendo, con el mundo exterior, una sla
direccin IP pblica. Las mquinas situadas dentro de la red NAT usan direcciones
privadas. Aunque el NAT permite conectar ms fcilmente ordenadores a la red, lo
hace al precio de no permitir una conexin puramente bidireccional.
El efecto de un NAT en voz sobre IP es que no se pueden recibir conexiones iniciadas
desde el exterior.
Existen varios problemas relacionados con NAT y VoIP. El ms comn de los problemas
es conocido como audio en una sola direccin (oneway audio). Como coment, una
conversacin est compuesta por dos flujos de paquetes RTP distintos. En presencia de
un NAT, slo el flujo de dentro a fuera no es bloqueado; el flujo de fuera a dentro no
tiene la misma suerte y puede atravesar el NAT.
La consecuencia: el que inicia la llamada desde dentro del NAT no puede escuchar a la
otra parte. Si los dos comunicantes se encuentran dentro de NATs las cosas se
complican an ms, hasta el punto de que ningn flujo de audio llega a su destino final.
Por desgracia, las direcciones IP privadas y los NAT estn especialmente presentes en
todos los lugares de las regiones en desarrollo. Configurar una red con sealizacin SIP
y NATs no es trivial.
SIP vs NAT
El verdadero enemigo del SIP es el NAT.
El supuesto agotamiento de los rangos de direcciones IP utilizables en Internet ha
obligado a utilizar direcciones IP privadas dentro de las redes de las empresas y
usuarios domsticos.
Un equipo IP para ser alcanzado en Internet debe utilizar una IP pblica para sus
comunicaciones. Es necesario por tanto enmascarar la red interna en una o varias IPs
pblicas (Source NAT).

72

El proceso de NAT no es nada sencillo: varios tipos de NAT suponen varios tipos de
soluciones e infinidad de problemas.
No son problemas fciles de solucionar.

Protocolo IAX (Inter-Asterisk Exchange)


Es un protocolo de sealizacin que fue creado por Mark Spencer, para paliar una serie
de inconvenientes y problemas del SIP.
Lo dise para la comunicacin entre Asterisk remotos, y actualmente es empleado
tambin entre servidor y cliente VoIP.
Se ha revelado como un protocolo robusto, potente y flexible.
Numerosos fabricantes de hardware lo implementan en sus equipos.
Ventajas:
 Consume mucho menos ancho banda por llamada que el SIP. Los
mensajes IAX son codificados de forma binaria mientras que los del
SIP son mensajes de texto.
Esta forma de enviar tanto las conversaciones como la sealizacin
73

por el mismo canal se conoce como inband, mientras que el mtodo


que usa SIP, el outofband, enviar la sealizacin dentro del canal de
voz obligando a separar los paquetes de voz de los paquetes de
sealizacin.

 Reduce al mximo la cabecera de los mensajes agrupando los


paquetes de distintas conversaciones, que van en una misma
direccin en la red, en uno slo consiguiendo que el exceso de
informacin introducido por las cabeceras se reduzca en cada una de
las conversaciones. Este mecanismo es conocido como trunking
reduciendo el ancho de banda aun ms en llamadas simultaneas.
 No hay problema de NAT ya que datos y la sealizacin viajan
conjuntamente.
 Slo necesitamos el puerto, el 4569, para mandar la informacin de
sealizacin y los datos de todas sus llamadas.
Inconvenientes:
No est estandarizado y por tanto no est muy extendido en
dispositivos Hardware.
IAX2 (por ser la versin 2) est fuertemente influido por el modelo comunitario de
desarrollo abierto y tiene la ventaja de haber aprendido de los errores de sus
predecesores resolviendo muchos de los problemas y limitaciones de H.323 y SIP.
Aunque IAX2 no es un estndar en el sentido ms oficial de la palabra, no slo tiene el
gran reconocimiento de la comunidad sino todos los prerrequisitos para convertirse en
el remplazo de SIP.
El diseo de IAX2 es ms adecuado para regiones en desarrollo por tres razones:
1. Reduce el uso de ancho de banda por llamada.
2. Est diseado para operar en presencia de NATs (soporte nativo) y es ms fcil
de usar detrs de los cortafuegos.
3. Reduce an ms el ancho de banda cuando se realizan varias llamadas
simultneas (como resultado del trunking).
En las comunicaciones basadas en IAX, el Asterisk puede operar de dos formas
74

diferentes:

Servidor: Como Servidor, Asterisk admite registros de clientes IAX, pudiendo ser
estos clientes Hardware, Software u otros Asterisk.

Cliente: Como Cliente, Asterisk puede registrarse en otros Asterisk o en


Operadores IP que utilicen este protocolo.
Ejemplo de los 2 roles que puede tomar Asterisk usando este protocolo.

Equipamiento para VoIP


Telfonos IP
Un telfono de VoIP o telfono IP es un aparato telefnico con la misma apariencia
fsica que los telfonos tradicionales especialmente diseado para conectarse a una
red de telefona IP.
Caractersticas Principales:
75

Normalmente soportan un nico protocolo de VoIP (SIP, IAX2, H323).Aunque


pueden soportar varios.

Soportan una serie de codecs, el famoso G.729 casi siempre est entre ellos.

Se conectan directamente a la Red IP:

Se configuran desde los mens del propio telfono o por interfaz web:

Caractersticas Avanzadas :

Dual Lan: Algunos telfonos disponen de dos conectores RJ45 e implementan


funciones de switch, de esta forma no es necesario tirar cableado nuevo para
los nuevos dispositivos IP.

76

Manos Libres
Conector auriculares/micrfono
Display LCD: Caller ID / Agenda
Autoprovisioning: Autoconfiguracin automtica de los parmetros de
configuracin desde un servidor remoto.

Hay todo tipo de terminales normales o inalmbricos en gamas baja, media y alta.
Algunos ejemplos:
Gama Alta:

Gama Media:

Gama Baja:

77

WiFi:

SoftPhones (Telefona con Software)


Una alternativa al uso de equipos dedicados (fsicos) de VoIP es el uso de programas
para emularlos. Estos programas se conocen como SoftPhones y funcionan en
cualquier ordenador personal. El nico requerimiento es tener una tarjeta de sonido
en funcionamiento y estar seguro de que el cortafuegos instalado en tu mquina no
est bloqueando la aplicacin.
Si quieres reducir el ancho de banda usado por tus conversaciones elige un
SoftPhone que tenga soporte para el protocolo IAX2 y activa un cdec de alta
compresin.
El audio es capturado desde:
-

Micrfono Incorporado.
Entrada de lnea (Micrfono Externo).
Dispositivos de entrada de audio USB.
Dispositivos Bluetooth.

Caractersticas Principales:

Integracin con el entorno (Escritorio).


-

Icono en systray, dock ...


Aviso visual de llamadas entrantes.

Integracin con plataformas de acceso y validacin de usuarios (LDAP).


Importacin / Exportacin de datos: libretas de contactos en XML.

Soporte de varias conversaciones simultneamente y en algunos casos de


varias lneas.

Tipos de SoftPhones:
o Propietarios :
Protocolos estndar: SIP, H323, IAX/IAX2
Protocolos propios abiertos.
Protocolos propios cerrados.
78

Por ejemplo : Skype

o Libres :
Protocolos estndar.
Protocolos propios abiertos.

Por ejemplo : Zoiper


Algunos de los SoftPhones ms utilizados son:

 X-Lite
-

Basado en el protocolo SIP


Soporte STUN
Soporta g711a/u, gsm, ilbc, speex
Disponible para Windows, GNU/Linux y
MacOSX
Puede descargarlo desde
http://www.xten.com/.

Configuracin:
Cuando se descarga el telfono no se preocupe por el mensaje de error que
aparece en la parte superior de la
pantalla. Login failed! Contact Network Admin.

Simplemente haga clic en el botn de Men


(a la izquierda del botn CLEAR).
En Enabled debe poner YES, de lo contrario
no funcionar incluso si su registro de usuario
es correcto.
En Display Name puede ser lo que quieras
que se muestre.
En Username, Authorization y Password debe ponerse lo mismo que en
sip.conf.
En Domain/Realm, SIP Proxy y Out Bound Proxy tiene que poner la direccin IP
de su servidor de Asterisk.

79

Las dems caractersticas para crear un usuario SIP en el telfono no es


necesario modificarlas.
X-Lite no puede utilizar la deteccin de silencio
cuando se utiliza con el servidor de Asterisk.
Por esto es necesario que modifique las
caractersticas de silencio.
Podemos encontrar esta opcin en:
Men>Advanced System settings>Audio
Settings>Silence Settings>Transmit Silence .
De esta manera estamos seguros de que X-Lite
enviara marcos de audio siempre, incluso
despus de que detecte un silencio.
 Zoiper
-

Basado en los protocolos SIP e IAX2


Soporte STUN
Soporta g711a/u, gsm, ilbc, speex,
g729 (version BIZ)
Disponible para Windows, GNU/Linux
y MacOSX

Configuracin:
En Domain debe poner la
direccin IP del servidor
Asterisk.
En Username, Password y
en Caller ID Name se
deben poner los datos de
configuracin del archivo
sip.conf.

 Ekiga
-

Basado en los protocolos SIP y H.323.


Soporta g711a/u, gsm, speex, g726.
Disponible para GNU/Linux.
Podemos descargarlo en :
www.ekiga.org .

Configuracin:
80

Para aadir una cuenta SIP, simplemente


haga clic en el botn Aadir una cuenta SIP.
- Nombre: Nombre de la cuenta SIP.
-Servidor de Registro: Direccin IP del
servidor Asterisk.
-Usuario: Extensin del usuario.
-Usuario
Usuario para autenticacin:
extensin@IP del servidor Asterisk
-Contrasea: Introducir su clave.
-Tiempo
Tiempo de expiracin: El tiempo de
espera despus del que el registro
debe estar actualizado. Por defecto es
3600.
Otros SoftPhones :

 Cubix
-

Basado en los protocolos SIP e IAX2.


Soporte STUN.
Soporta los codecs g711a/u, gsm, ilbc,
speex,g729.
Disponible para Windows.
Se puede descargar en:
http://www.virbiage.com/cubix.php.

 Diax
-

Basado en el protocolo IAX2.


Soporta los codecs g711a/u, gsm, ilbc,
speex.
Disponible para Windows.
Puede ser descargado en: http://www.voipinfo.org/wiki-DIAX.
DIAX.

 Kiax
-

Basado en el protocolo IAX2.


Soporta los codecs g711u, gsm, speex.
Disponible para Windows, Linux, *BSD.
Para descargar el telfono :
http://sourceforge.net/projects/kiax
81

Adaptadores IP
Los adaptadores IP son dispositivos (hardware) que permiten conectar un telefno
analgico a la red IP utilizando protocolos de VoIP.

Tipos de Adaptadores :
 ATA (Analog Telephone Adapter) es un adaptador FXS, tiene un puerto RJ11
(phone jack) y un RJ45 (Ethernet jack).
Por un lado habla analgico con el telfono y por otro lado habla digital con
la red IP.
Caractersticas de ATA:

Soportan SIP o IAX2 normalmente, varios codecs (entre ellos, casi


siempre el G.729).
Tienen uno o dos interfaces FXS para conectar 2 telfonos analgicos.
Cada telfono puede ser registrado a un proxy VoIP distinto.
Soportan caller ID, tonos de llamada distintivos, llamada en espera ...
Econmicos y de tamao reducido.
Pueden conectarse a cualquier tipo de aparato telefnico a la red IP, por
ejemplo, se pueden conectar una cabina telefnica (de monedas o
tarjeta), un fax o un telfono inalmbrico (DECT).

 FXS to USB: permite conectar un telfono normal a un PC, enviando y


recibiendo el audio. Requieren un SoftPhone instalado para VoIP.
 FXO to USB: Casi siempre relacionados con Skype, permiten reenviar las
llamadas recibidas por Skype por una lnea normal.

Ejemplo de Adaptadores IP Linksys PAP2:


o 2 FXS, 1 LAN. Configuracin va Web.
o Prestaciones avanzadas: dialplan, llamada en espera,
parmetros SIP avanzados, autoprovisioning
o Coste muy econmico.
o Integracin sencilla con los proveedores de VoIP.

82

Gateways VoIP
Dispositivos que permiten interconectar la telefona tradicional con la VoIP.
Se integran con la red telefnica pblica con interfaces analgicos o enlaces digitales.
Los adaptadores tambin pueden ser considerados como gateways, a pequea escala.
Generalmente, los adaptadores que realizan funciones de routing/NAT IP, son
considerados gateways.
Caractersticas Principales:

Generalmente funcionan en dos sentidos: las llamadas recibidas por IP se


envan a PSTN/FXS o las llamadas recibidas por interfaces FXS se envan por IP.

Soportan generalmente SIP o H.323, as como numerosos codecs (G.711,


G.729 casi siempre).

Pueden ser utilizados de forma integrada con las centralitas tradicionales:


transformando la llamada analgica de la centralita en llamada por IP, de forma
totalmente transparente.

Gateways: FXS -> VoIP


Disponen de 1 o ms interfaces FXS para conectar telfonos o lneas de enlace de
centralitas.

Gateways: FXO -> VoIP


Interfaz FXO para conectar una lnea de operador.
Tres funciones principalmente:
Discriminar en salida: llamar por IP o PSTN.
Utilizar la lnea como backup, es decir, en caso de fallo de Internet o del proveedor
VoIP, las llamadas pueden ser encaminadas por PSTN tradicional.
83

Recibir llamadas por PSTN y encaminarlas por VoIP.

Parmetros de VoIP
Calidad de Servicio
La calidad de servicio o Quality of Service (QoS) es la capacidad de la red para ofrecer
mejoras en el servicio de cierto tipo de trfico de red.
Para ofrecer una buena calidad en la conversacin, el ancho de banda que necesitan
los dos flujos de trfico se debe garantizar con independencia del estado del resto de
las conexiones (incluso si la conexin a Internet est altamente ocupada).
En el diseo de una red de voz IP debes intentar optimizar el ancho de banda,
controlar las fluctuaciones de la red (jitter), y minimizar la latencia.
Codecs
Para poder transmitir la voz sobre una red IP, necesitamos codificarla y para ello,
empleamos algoritmos de compresin/descompresin de audio, llamados codecs.
Segn el cdec que utilicemos ocupar ms o menos ancho de banda y esto influir
mucho en la calidad de los datos transmitidos.
Existen muchas formas de digitalizar audio y cada una de esas formas resulta en un
tipo de cdec.
En general puedes asumir que a mayor compresin vas a obtener mayor distorsin
(peor calidad).
Un cdec se considera mejor que otro cuando es capaz de ofrecer mejor calidad de voz
usando la misma cantidad de ancho de banda.
Los codecs ms habitualmente empleados son:

84

Latencia
Latencia es sinnimo de retraso, y mide el tiempo que tarda un paquete en viajar de
un punto a otro.
Para mejorar la calidad de las conversaciones de voz sobre IP es necesario reducir los
retrasos al mximo, dando la mxima prioridad al trfico de voz. Dar ms prioridad a
los paquetes de voz significa que se les deja saltarse la cola de salida y as ocupar una
mejor posicin que el resto de los paquetes que estn esperando para ser
transmitidos.
Jitter (Fluctuaciones de velocidad)
En VoIP, el jitter es la variacin del tiempo entre la llegada de distintos paquetes. Estas
variaciones son debidas a la congestin de la red, la falta de sincronizacin o los
cambios de enrutamiento del trfico.
En redes con grandes cambios de velocidad se puede usar un jitter buffer para
mejorar la calidad de la conversacin.
Un buffer es un espacio intermedio donde se almacenan los paquetes hasta su
procesamiento.
La idea bsica del jitter buffer es retrasar deliberadamente la reproduccin del
sonido para garantizar que los paquetes ms lentos hayan llegado. Los paquetes se
almacenan en el buffer, se reordenan si es necesario y se reproducen a una velocidad
constante. La calidad de voz mejora al precio de incrementar la latencia total.
Existen dos tipos de jitter buffers:
o Un buffer esttico est implementado como parte del equipo y configurado de
manera fija por el fabricante.
o El dinmico se configura usando un programa y lo puede cambiar el usuario.
85

Retos al implementar VoIP

Tcnicos: Evitar el impacto negativo de los NAT.

Infraestructura de soporte:
o Redes inalmbricas con gran latencia y jitter.
o Redes en general que no han sido diseadas para priorizar servicios
de tiempo real.

Energa: No existen fuentes fiables de energa.

Marco regulatorio:
o Servicio ilegal.
o Necesidad de licencias.

Recomendaciones

Tcnicas: Usar IAX2.

Infraestructura de soporte:
o Redes inalmbricas: Uso de la banda UNI 5.4 Ghz (IEEE 802.11a). Uso
de protocolos con TDMA en zonas urbanas (WiMAX).
o Incorporar QoS.

Energa: Equipos de bajo consumo, energa solar.

Marco regulatorio: Lobby, Modelos de negocio.

86

Captulo

Asterisk, el futuro de la telefona

Qu es Asterisk?
Asterisk es una centralita digital diseada en Software libre que integra las
funcionalidades de telefona clsica con nuevas capacidades derivadas de su flexible y
potente arquitectura.
Su nombre viene del smbolo asterisco (*) en ingls.
Asterisk se cre, originariamente, para funcionar sobre el sistema operativo
GNU/Linux. Y actualmente puede funcionar en toda una variedad de sistemas como
OpenBSD, FreeBSD, MacOSX, Windows, Solaris,, pero Linux sigue siendo el que ms
soporte presenta.
87

Asterisk permite conectividad en tiempo real entre las redes PSTN y redes VoIP.
Para poder utilizar telfonos convencionales en un servidor Linux o para conectar la
central a una lnea de telfono analgica se suele necesitar Hardware especial, como
adaptadores analgicos de telefona (ATAs) o tarjetas de telefona.
Como se ha comentado es una PBX hbrida (TDM y VoIP).
Por una parte apoya una amplia gama de protocolos TMD para el manejo y
transmisin de interfaces de telefona tradicional.
Por otra parte soporta y traduce distintos protocolos de sealizacin de VoIP como SIP,
IAX2, MGCP o H.323.

Al mezclar telefona tradicional y servicios de VoIP, Asterisk permite construir


arquitecturas de telefona avanzadas y soluciones CTI (Computer Telephony
Integration), y facilita la migracin gradual de los sistemas existentes en las empresas a
las nuevas tecnologas.
Asterisk cuenta con un esquema de doble licencia, la licencia de Software libre GNU
(GNU General Public License, GPL) y otra licencia propietaria para permitir cdigo
propietario como el del cdec G.729. Gracias a la licencia GPL cuenta con una gran
comunidad de programadores que han contribuido a aadirle multitud de
caractersticas.
Esto nos permite:

Ejecutar el programa con cualquier propsito.


Modificar el programa, accediendo al cdigo fuente.
Redistribuir copias.
Mejorar el programa y publicar estas mejoras (junto al cdigo fuente).
88

Los aadidos de terceros al cdigo de Asterisk implican la cesin de los derechos


comerciales a Digium pero se conserva el copyright del desarrollador.
La potencia de esta PBX aumenta al ser posible desarrollar nuevas funcionalidades con
lenguajes estndar de programacin y utilidades propias de Asterisk.

Qu NO es Asterisk?
Asterisk no es un proxy SIP. Aunque posea funcionalidades de estos, carece de la
mayor parte de la implementacin SIP necesaria.
Asterisk no es una solucin de MultiVideoConferencia. Al menos a corto plazo, no se
espera transcoding de video en tiempo real.
Asterisk no es un servidor de faxes. Puede interactuar con productos de terceros para
enviar y recibir faxes, pero no incluye esa funcionalidad de serie.

Cul es el papel de Digium?


Digium es la creadora y desarrolladora primaria de Asterisk, el primer PBX de cdigo
abierto de la industria. Usado en conjunto con las placas de telefona PCI, ellas ofrecen
un manejo estratgico con excelente relacin costo/beneficio para el transporte de voz
y datos sobre arquitecturas TDM, conmutadas y redes Ethernet.
Digium es hoy el principal patrocinador de Asterisk y uno de los lderes de la industria
de PBX en cdigo abierto, siendo Mark Spencer el creador y principal soporte de
Asterisk, l es hoy admirado por el gran trabajo que realiz y por la responsabilidad
que supo acarrear.

89

Cundo usar Asterisk?


Asterisk se encuentra avalado por los principales proveedores de VoIP, que lo utilizan
para la interconexin de sus redes con las redes de telefona tradicional, encaminando
tal cantidad de trfico que slo un sistema tan estable, seguro y eficaz como ste
puede soportar.
Y como solucin para empresas, desde Pymes a grandes corporaciones, va ampliando
su mercado impulsado por el auge del Software libre, la reduccin de costes que
supone y las posibilidades de adaptacin a las necesidades empresariales.
Por tanto, Asterisk es recomendable para las comunicaciones de voz en cualquier
organizacin donde se requieran desde las necesidades ms bsicas a las ms altas
prestaciones y funcionalidades. Pero sobre todo en aquellos entornos con expectativas
de crecimiento y deseos de integrar las nuevas tecnologas (como la VoIP) en su
modelo de negocio.

Por qu Asterisk?
Utilizando Asterisk en su entorno es posible olvidar las limitaciones tradicionales de las
centralitas telefnicas: no ms problemas de alcanzar el mximo de extensiones
posibles, dejar de pagar cantidades exorbitantes por mdulos propietarios para
ampliar la capacidad de la centralita.
Algunos de los motivos de la eleccin de Asterisk son:
-

Personalizacin de su sistema: Asterisk permite disear su sistema de telefona


a su medida, en vez de tener que adecuar su empresa a la telefona.
Podr implementar una solucin que responda a las necesidades de su negocio,
mejorando sus tiempos de respuesta y optimizando sus recursos.

Puede crecer sin lmite: un sistema Asterisk puede crecer con usted, con su
negocio. Desde un entorno pequeo es posible aumentar la capacidad y
posibilidades sin lmite. Se acab el cambiar de centralita cada pocos aos.

Interconexin de sedes: Asterisk permite enlazar con costes muy ajustados


sedes remotas e incluso ubicar terminales telefnicos remotos. Puede usar su
conexin a internet como puerta de enlace entre sedes, reduciendo sus costes
de telefona interna de forma espectacular.

Ahorro de costes: Un nico cableado para toda su empresa evitando tener


cableados separados para voz y datos. Una nica red de datos puede gestionar
sus telfonos y sus ordenadores. Simplificar infraestructuras es un modo
inteligente de reducir costes.

90

Reduzca su factura telefnica: El uso de proveedores de VoIP para permitir el


envo o la recepcin de llamadas a travs de Internet puede significar un ahorro
en su factura telefnica superior al 40 %.

Las soluciones de telecomunicaciones basadas en Asterisk son econmicas, robustas,


flexibles y protegen la inversin.

Econmico:
Asterisk es ms econmico principalmente por dos motivos, por qu utiliza
equipos estndar y est basado en cdigo abierto.
Los servidores y los telfonos usados son estndar, los producen multitud de
fabricantes, que compiten entre ellos en prestaciones y precio.

En el caso de una centralita IP propietaria, la empresa est obligada a adquirir


un Hardware concreto a un precio establecido a un solo fabricante. Los
telfonos estndar no funcionan o lo hacen parcialmente, y nicamente se
pueden comprar al fabricante de la centralita. Un ejemplo son las centralitas
Cisco.
Asterisk es de cdigo abierto, por lo que se obtienen gratuitamente el cdigo
fuente y todas las futuras actualizaciones. Todas las prestaciones que en otra
centralita son de pago, en Asterisk vienen incorporadas, slo hay que
configurarlas y ponerlas en produccin. A Asterisk puede conectar cuantos
telfonos quiera mientras el servidor tenga potencia para gestionarlos, no
pagar ninguna licencia por cada extensin, ni por cada buzn de voz asociado
a la extensin, etc.

Robusto:
Asterisk se ejecuta sobre servidores Linux, sistema operativo de gran robustez y
estabilidad.

Flexible:
Asterisk se configura y adapta a la medida de cada organizacin como ninguna
otra centralita del mercado como se ha comentado.

91

Debido a su sistema de configuracin a bajo nivel, la centralita prcticamente


se programa a medida para cada cliente, permitiendo adaptarla para cubrir
prcticamente todas las necesidades de su empresa, hasta el mnimo detalle.
Gran capacidad de integracin con el resto de sistemas y de aplicaciones de su
organizacin, sobre el ncleo de conmutacin de Asterisk, se pueden conectar
diferentes interfaces de programacin que pueden desarrollar aplicaciones a
medida, integrarlo con sus sistemas, bases de datos, o integrar aplicaciones
comerciales como Call Centers.

Protege la inversin:
La eleccin de una centralita IP basada en Asterisk tiene una ventaja
importante ms, protege la inversin. La inversin en Software y equipos que
se realiza por parte de la empresa no depende de la continuidad que un
fabricante quiera dar al producto que ha comprado. Utilizando Asterisk la
empresa puede aprovechar de nuevo los servidores.

Ventajas Competitivas:

Posibilidad de uso de sintetizadores de voz y tcnicas de reconocimiento del


lenguaje.
Integracin de servidor fax con centralita y correo electrnico.
Integracin de buzn de voz con centralita y correo electrnico.
Informacin pormenorizada del volumen de llamadas mediante web.
Posibilidad de contratar servicios con uno o varios operadores diferentes.
Integracin de varias empresas en una sola centralita.
Control de calidad mediante grabacin total o parcial de llamadas.

Desventajas de las centralitas Asterisk:

Desconocimiento y desconfianza en la telefona VoIP (miedo a cambios).


Si no hay Internet no permite realizar comunicaciones.
Si no hay corriente elctrica no funciona.
Uso obligatorio de telfonos especiales (telfonos IP) o adaptadores/tarjetas de
telefona para usar los telfonos analgicos.
Posibles fallos de programacin e implementacin por errores humanos.
Riesgos de seguridad aun desconocidos del SO.
Integracin de Asterisk en la empresa :
Asterisk no es un sistema fcil de configurar y poner en produccin debido
precisamente a su enorme flexibilidad y potencia. Cuando hay miles de
maneras de conseguir el mismo resultado, el proceso requiere un esfuerzo
extra. Por eso es tan importante la figura del integrador.
92

Historia de Asterisk
Mark Spencer empez en el mundo Linux con Slackware en 1994 (kernel versin 1.09).
Uno de los pocos en Auburn, Alabama por aquellos tiempos que conoca cualquier
cosa sobre Linux. Despus de una temporada con Adtran (un proveedor global de
equipos de telecomunicaciones) cre su propia compaa "Linux Support Services" con
el objetivo de dar soporte a usuarios de Linux.
Para ello necesitaba una centralita telefnica, pero ante la imposibilidad de adquirirla
dados sus elevados precios, decidi construir una con un PC bajo Linux, utilizando el
lenguaje C.
Este fue el principio del fenmeno mundialmente conocido como Asterisk, la
centralita telefnica construida por Mark, despus de su experiencia desarrollando
GAIM (ahora llamado Pidgin) entre otros proyectos de software libre.

Mark Spencer en el 2006 O'Reilly Emerging Telephony Conference.

Despus de explicarles sus necesidades de capital a sus amigos en Adtran ellos se


ofrecieron a invertir en su compaa. Se dio cuenta que se tena ms inters en
Asterisk que en sus servicios generales de consultora Linux. Entonces se reuni con
Jim Dixon que estaba construyendo Hardware Open Source.
Su primer proyecto fue construir una tarjeta T1 Open Source. Estos ingresos les
mantenan a flote pero no reciban contribuciones de nadie y el resto tan solo coga sus
diseos y manufacturaban tarjetas que competan con las suyas.
Posteriormente "Linux Support Services" se convertira en el ao 2002 en "Digium",
redirigiendo sus objetivos al desarrollo y soporte de Asterisk.
El dinero era escaso en Digium hasta que un da un vendedor de DeltaCom (una
competitiva compaa de comercio local) con la intencin de venderles una T1, tras
93

entender lo que Mark y Jim haban hecho se ofreci a ayudarles. A partir de este punto
empezaron a ver un incremento en las ventas, y acabaron el ao con beneficios.
Despus de grandes ingresos durante largo tiempo Mark fue capaz de hacer crecer el
negoci sin recabar mucho en los beneficios.
Cuando Mark empez con Asterisk hizo una cosa muy inteligente. Cada desarrollador
que contribua en el cdigo debera firmar un acuerdo para que el Copyright se
asignara a Asterisk y el compromiso de que no hubiera encumbramientos gracias a
dicho cdigo. Esto le permiti sentirse confortable con su proyecto que era
completamente Open Source y le permita a su compaa re licenciar el cdigo a
vendedores como 3COM y NTT.
Digium tambin ha hecho las cosas bien al mantener la versin de la comunidad con la
funcionalidad completa y no crear una escisin entre ellos y los que les apoyan.
La primera release fue Asterisk 0.1 (Diciembre de 1999), y el tarball ocupaba tan slo
124.3KB, que una vez descomprimido venan a ser unos 506 KB en 96 archivos.
Para correr Asterisk necesitbamos bsicamente Linux y libaudiofile:

Esta primera release fue liberada en 1999 bajo licencia GPL2 pero tena clausulas
adicionales que indicaban que en todos los productos derivados deba constar el
nombre de Linux Support Services, LLC o Adtran Inc., tambin advertan sobre cdecs
cubiertos por patentes de Software, y la ms curiosa es que si emprendamos acciones
legales por infringir patentes en referencia a algn Software Open Source nuestro
derecho a usar o distribuir el Software se terminaba de inmediato.

94

De todos modos estas clausulas duraron bien poco, ya que en los primeros cambios
que se hicieron para la release 0.1.1 aparte de arreglar numerosos bugs se revis la
licencia que pas a ser GPL pura.

Asterisk est formado por varios paquetes:

Asterisk: Ficheros base del proyecto.


Zaptel: Soporte para hardware. Drivers de tarjetas. En versiones altas de
Asterisk este paquete se sustituye por Dahdi_Linux y Dahdi_Tools.
Addons: Complementos y aadidos del paquete Asterisk. Opcional.
Libpri: Soporte para conexiones digitales. Opcional.
Sounds: Aporta sonidos y frases en diferentes idiomas.

Zaptel, inicialmente llamado Zapata se bas en el Zapata Telephony Project, el driver


Open Source de Zapata Telephony (anteriormente llamada BSD Telephony Of Mexico).
La primera release fue Zapata 0.1.1 (Noviembre 2001), que vena a ser muy parecido al
original liberado por Zapata Telephony en Octubre del ao 2000.
De hecho no se introdujeron cambios importantes hasta la release 0.1.6 (Marzo 2002),
donde se movieron las estructuras de red para usar malloc ( ) cuando fuera necesario,
se le aadi soporte HDLC PPP, junto con algunos arreglos multicanal en Torisa y
Zaptel:

95

En la primera release, Libpri 0.1 Mark nos relataba que libpri era la implementacin en
C de la especificacin para primarios RDSI basado en la especificacin de Bellcore (12
de Mayo de 2001), por aquel entonces Asterisk pas a ofrecer soporte para conexiones
digitales:

Las funcionalidades y aadidos que no podan ser incluidas en el ncleo se fueron


incorporando al paquete Addons, y tambin se pas a ofrecer paquetes de sonidos.
El lanzamiento de Asterisk 1.0 (Setiembre 2004) fue anunciado por Mark durante la
Astricon. El tarball de Asterisk 1.0.0 pesaba unos 9 MB, y ya varias compaas daban
soporte al desarrollo de Asterisk: Pilosoft, Inc. (soporte al desarrollo ADSI), GFS
(soporte al desarrollo ALSA), Telesthetic (soporte al desarrollo SIP), Paul Bagyenda,
Digital Solutions (desarrollo inicial del driver Voicetronix), entre otros muchos
desarrolladores que contribuan como Christos Ricudis que realiz importantes aportes
al cdigo de Asterisk.
Con un Changelog mucho ms amplio ya, puesto que desde la release inicial se haban
resuelto unos 340 bugs, se dispona de canales IAX2, SIP, PRI, Zap, OSS, backends para
CDR, mejoras en el soporte para FreeBSD/OpenBSD/MacOS X, mejoras en H.323, se
aadieron los codecs iLBC, G.726, G.729, LPC10, ADPCM, speech, u-law, formato GSM
WAV, formato de fichero PCM, tambin MP3 aunque luego se quit, soporte para ISDN
Linux e incluso soporte para vdeo en el canal SIP e IAX2.
Tambin se dispona de DISA (hacer llamadas desde el exterior a travs de la
centralita), voicemail, transferencias, autenticacin de propsito general, macros,
conferencias MeetMe, AGI, grabaciones, call parking, soporte para mltiples idiomas,
se elimin la dependencia con libaudiofile, entre otras muchas mejoras como el
control del eco.
Asterisk 1.0.0 ya tena soporte para diferente hardware Zaptel entre otros:

96

97

Paralelamente a Asterisk fue lanzado Zaptel 1.0.0 (Setiembre 2004), tena soporte para
udev (kernel Linux 2.6), zttool tena como dependencia a libnewt, parte del software
tambin necesitaba la librera Zapata. Por aquel entonces existan problemas con la
directiva PROSLIC_POWERSAVE, donde el audio se cortaba despus de cuatro
segundos:

98

Libpri 1.0.0 (Septiembre 2004) traa algunas mejoras para Q.931 entre otros:

Un ao ms tarde (Noviembre 2005) se anunciaba el lanzamiento de la versin 1.0.10


de Asterisk y Zaptel. Libpri, Asterisk-addons, y Asterisk-sounds ya no presentaban
cambios, lo cual ya dejaba entrever la discontinuidad de la rama 1.0 en favor de 1.2.
Y efectivamente as fue, solo Asterisk lleg a la release 1.0.12 dejando paso a Asterisk
1.2.0 (Noviembre 2005). La nueva rama de Asterisk fue presentada durante la
conferencia IP.4.IT en Las Vegas, Nevada.
Asterisk 1.2 introduca sobre 3,000 funcionalidades y mejoras sobre el rendimiento
global y eficiencia en el uso de la memoria.
Entre las principales novedades tenamos:

Mejora de las funcionalidades de voicemail.


Aadido protocolo DUNDi (Distributed Universal Number Discovery).
Configuracin de Asterisk ms sencilla.
Creacin de un motor de almacenamiento de configuracin en tiempo real
sobre una base de datos.
Un Asterisk Dialplan ms potente.
Introduccin de Asterisk Extension Logic, un nuevo mtodo flexible para
configurar el Dialplan.
99

Nueva interfaz para flujos de llamada IVR dinmicos.


Acceso configurable a funcionalidades de llamada generales.
Mejoras en el protocolo SIP.
Nuevas funcionalidades para el protocolo IAX (Inter-Asterisk eXchange).
Uso de ficheros de sonido para la msica en espera nativa.
Soporte CDR customizable.
Mejoras en el soporte PRI.

En Agosto de 2007, la rama 1.2 pas al estado de mantenimiento de seguridad, y


slo se corregan bugs relativos a la seguridad.
El 25 de Diciembre de 2006 apareci Asterisk 1.4 que ya contaba con:
Lneas de cdigo fuente
Esfuerzo estimado de desarrollo (persona/ao - persona/mes)
Estimacin de tiempo (aos)
Estimacin de nmero de desarrolladores en paralelo
Coste total estimado

250.463
66,03 -792,30
2,63
25,08
8.919.128 $

Lenguajes de programacin en Asterisk 1.4.0:

Lenguaje
ANSI C
sh
cpp
perl
yacc
asm
tcl
PHP

Lneas de cdigo
232.514
7.550
5.815
2.259
1.508
642
113
62

Porcentaje
92,83%
3,01%
2,32%
0,90%
0,60%
0,26%
0,05%
0,02%

Las mejoras especficas que aparecian en Asterisk 1.4 eran:

Generic Jitter Buffer: Mejora la calidad de una llamada durante un aumento


de trafico de red. En todos los protocolos no slo en IAX2 como en la 1.2.
Asterisk Extension Language Version 2 (AEL2): Simplifica la programacin y
la configuracin del plan de marcado (Dialplan).
Soporte de T.38: Permite Faxes codificados con T.38 (FOIP).
Jabber/Jingle/GoogleTalk: Soporte de clientes Jabber a travs del protocolo
Jingle (GoogleTalk).
Mejora el soporte de idiomas: Ofrece nuevas caractersticas en Ingles,
Espaol y Francs. Incluso nuevos sonidos y estructuras gramaticales.

100

Mensajera unificada: Integra el buzn de voz, el correo electrnico y el fax en


un nico buzn donde los usuarios pueden enviar, recibir y manejar todos sus
mensajes utilizando cualquier dispositivo compatible.
Gestin en tiempo real del audio: Permite seleccionar y programar
interrupciones en las llamadas para controlar el volumen y el mute en tiempo
real.
Mejorado el soporte DTMF: Permite distinguir tonos de diferente longitud
para nuevas opciones especiales.
Codecs de video H.264 (Video llamadas 3G): Podremos realizar
videoconferencias con la ultima tecnologa de video compatible con la red
mvil 3G.
Soporte Radius en CDR: Para poder almacenar el registro de llamadas
utilizando un servidor Radius.
Interfaz web: Para que una oficina o un nico usuario pueda configurar el
servidor fcilmente.
Monitorizacin de llamadas: Permite escuchar conversaciones de manera
silenciosa, necesario para todo buen Call-Center o proveedor de VoIP.
Mejora en el uso de la memoria: Hace un mejor uso de la mejora ahorrando
y potencindola en aquellos casos en que sea necesario.
Mejora en las transferencias: Los clientes SIP e IAX podrn hacer
transferencias sin limitaciones e incluso transferir llamadas aparcadas (parked).
Mejora en el protocolo IAX2: Mejora en las capacidades de este protocolo
para transmitir audio y video permitiendo comunicacin directa sin tener que
pasar por el servidor, aunque manteniendo el control de llamadas.
Programacin automtica de Eventos: Permite programar eventos y
escucharlos durante una conversacin reproduciendo archivos gsm o wav.
Locales de fecha: Permite cambiar el formato de fecha y adecuarlo al formato
deseado (no nicamente el formato ingles EEUU).
Soporte de SCCP de Cisco: Permite utilizar los terminales de Cisco y as poder
reutilizar dispositivos.
Monitorizacin SNMP: Permite controlar, gracias a un cliente SNMP (mrtg,
rrdtool, etc), los datos de utilizacin, registros, llamadas, etc.
Transparencia de protocolos: Soporta pasar codecs desconocidos en modo
passthrougt (canreinvite=yes).
Reconocimiento de voz: Utilizando un motor comercial podremos crear IVR
utilizando la voz para introducir la opcin elegida.
Reproductor de texto a voz (TextToSpeech): Utilizando un motor comercial
podremos crear locuciones dinmicamente con comandos especiales.
Nueva estructura de compilacin (make menuselect).
Nuevas variables disponibles (como DIALSTATUS).

En octubre de 2008 aparece la primera release de Asterisk 1.6 ,bastante esperada


y pese a que Asterisk 1.4 traa notables ventajas con respecto a la versin 1.2, en
Asterisk 1.6 siguen apareciendo nuevas ventajas que harn las delicias de los usuarios,
como por ejemplo:

101

Realtime LDAP: Si bien Asterisk 1.4 tena herramientas y parches para dotar a
esta aplicacin de soporte LDAP para gestionar los usuarios y contraseas,
parece ser que en Asterisk 1.6 vendr de serie el soporte para Realtime en
LDAP. Este es un sistema de directorios que nos permitir mantener
perfectamente clasificado y ordenado cualquier tipo de datos
correspondientes a personas, recursos, empresas, etc., es un directorio
especialmente creado para este tipo de informacin y son muchos los sistemas
operativos y sus aplicaciones los que suelen utilizar este tipo de servicio de
forma transparente para el usuario. Actualmente estn corrigiendo muchos
bugs en el soporte LDAP en Asterisk relativos a este sistema para poder dotar a
Asterisk 1.6 de un control integro de usuarios mediante LDAP.
SIP bajo TCP: Este es otro de los aadidos que traer Asterisk 1.6 tras 3 aos
de pruebas (el bug comenz en 2005) y es sin duda una de las mejoras que, de
funcionar correctamente, podra convertirse en la STAR FEATURESde
Asterisk 1.6.
SIP bajo TLS: Otro de los grandes avances en cuanto a seguridad en el
protocolo SIP.
DAHDI en vez de Zaptel.
Mejorado el soporte NAT en el protocolo SIP.
Chan_Mobile (Bluetooth y mviles).

Cierto es que llevamos varios aos


esperando que estos aadidos se
conviertan de una vez por todas en
funcionalidades estables, no obstante
cabe recordar a todos que Asterisk
pese a los esfuerzos de muchas
empresas que dedican tiempo y
recursos en desarrollar y corregir cada
una de las partes que lo forman y pese
a que hay muchsimo dinero
movindose en torno a l tanto a nivel
de Hardware, instalaciones, soluciones
personalizadas, etc, tambin hay que entender que, hay un volumen altsimo de
usuarios en comparacin con el de desarrolladores por lo que se hace muy difcil
coordinar todos estos esfuerzos para conseguir que todos los usuarios estn
contentos.
En la actualidad Digium se centra en el desarrollo y mejora de la versin 1.6 mientras
que la versin estable para produccin, la versin 1.4, slo recibe atenciones de
soporte para las versiones comerciales.
Por otra parte las versiones 1.4.2X, las ltimas que sac Digium con la funcionalidad
DAHDI ya implantada en vez de Zaptel, han resultado ser bastante decepcionantes en
cuando a estabilidad.

102

En la actualidad a pesar que Digium trabaja para estabilizar Asterisk 1.6 ,para
produccin la versin 1.4 es la ms estable y recomendable.

Estructura de directorios de Asterisk:

/etc/asterisk: Contiene los ficheros de configuracin. Si al compilar ejecutamos


make samples, tendremos ejemplos en este directorio.

/usr/lib/asterisk/modules: Contiene los mdulos de Asterisk que hemos


compilado.

/var/lib/asterisk: Contiene diferentes libreras de Asterisk.

/var/lib/asterisk/agi-bin: Directorio para contener los AGI.

/var/spool/asterisk: Directorio para archivos que genera Asterisk


(voicemail, etc.)

/var/log/asterisk: Aqu se guardan los log de Asterisk.

Funcionalidad de Asterisk
El sistema Asterisk incorpora muchsimas funcionalidades avanzadas que tendran un
elevado coste en sistemas tradicionales propietarios.
Funciones bsicas:

Conexin con lneas de telefona tradicional, mediante interfaces tipo analgico


(FXO) para lneas de telfono fijo o bien mvil y RDSI (BRI o PRI).

Soporte de extensiones analgicas, bien para terminales telefnicos analgicos,


terminales DECT o bien equipos de fax.

Soporte de lneas (trunks) IP: SIP, H323 o IAX.

Soporte de extensiones IP: SIP, SCCP, MGCP, H323 o IAX.

Funciones de llamada:

Reglas de salida (OutBound Rules): definen las rutas que tomar una llamada
saliente.

DiD (Direct In Dial): son reglas que definen dnde ir una llamada de un
determinado nmero telefnico.
103

Transferencia (a cualquiera) y Transferencia atendida (a alguien determinado).

Msica en espera y en transferencia (ficheros MP3 actualizables por el usuario).

Desvo de llamadas si est ocupado (Busy) o no contesta (No Answer).

Llamada en espera (Hold).

Identificador de llamante (CallerID).

Bloqueo de llamante segn identificador (CallerID).

Opcin No molestar (Do Not Disturb / DND).

Retro llamada (Callback): llamada automtica cuando est disponible.

Grupo de timbrado (Ring Group o Call Group): permite llamar al mismo tiempo
a todos los telfonos de un grupo. Los telfonos del grupo tambin pueden
consistir en nmeros telefnicos externos como telfonos mviles.

Call Pickup: es el hecho de poder descolgar y responder a la llamada entrante a


un telfono o grupo de telfonos determinado desde un tercer telfono que no
est sonando.

Remote Pickup: permite coger llamadas de forma remota.

Colas (Queue): almacenes de llamadas entrantes. As, las personas que llaman
pueden esperar la respuesta de alguien en lugar de obtener una seal de
ocupado o ser forzadas a dejar un mensaje. Esta extensin tambin puede decir
a la persona que llama su lugar en la cola y el tiempo estimado de espera. Es
posible establecer prioridades de forma que ciertas personas no esperen tanto.

Parking de llamadas (Call Parking): permite transferir la llamada a un 'parking'


virtual. Pudiendo colgar sin que la llamada origen sea desconectada de Asterisk,
ya que se encontrar aparcada.

Megafona a travs del altavoz del telfono (Paging).

Espiar llamadas (Call snooping): permite escuchar una llamada, sin que la
persona que ha llamado se d cuenta.

Call Whisper: permite intervenir en una llamada de forma que la persona que
ha llamado no escucha nada.

104

Funciones avanzadas:

Buzn de Voz (Voicemail): sistema de contestador automtico personalizado


por usuario. Se integra con el sistema de directorio (LDAP) y con el email.
Los buzones pueden ser individuales o para todo un grupo de personas.

Gestin del buzn de voz mediante el terminal telefnico y pgina web.

Sistema de Audio conferencias (Web MeetMe): Sistema que permite la


conexin remota de 2 o ms usuarios que quieren mantener una reunin
virtual y suministra la correcta gestin y control de los usuarios que se
incorporan a ella.

IVR (Interactive Voice Response): Operadora Automtica. Sistema


automatizado de respuesta que permite redirigir las llamadas entrantes en
funcin de las opciones seleccionadas por el llamante.

Informes detallados de llamadas (CDR): Detalle de llamadas realizadas o


recibidas por extensin, para imputacin de costes departamentales, por
cliente o incluso para facturacin.

ACD: Sistema Automtico de Distribucin de Llamadas entrantes. Pensado para


Centros de Llamadas para atencin comercial o soporte tcnico.

CTI: Integracin con sistemas de gestin comercial o de atencin al cliente


(CRM).

Extensiones Remotas: para poder aceptar un usuario remoto teniendo en


cuenta el funcionamiento de NAT con los protocolos utilizados por Asterisk
(IAX y SIP).

Sistema DISA. (mtodo por el cual una persona externa a la oficina puede
realizar llamadas a travs de la centralita).

Grabacin de llamadas entrantes y salientes.

AMI (Asterisk Management Interface): gestin y control remoto de Asterisk.

Monitorizacin de llamadas en curso.

Gestin de listas negras (nmeros telefnicos con acceso prohibido).

LCR (Least Cost Routing): encaminamiento de llamadas por el proveedor VoIP


ms econmico.

105

AGI (Asterisk Gateway Interface): integracin con todo tipo de aplicaciones


externas.

Configuracin en base de datos: usuarios, extensiones, proveedores, etc.

Interfaz grfica de administracin (GUI).

Acciones a realizar segn horarios y fechas (horario laboral, das festivos, etc.).
Posibilidad de integracin con Google Calendar.

Posibilidad de integrar un sistema de llamadas pre-pago (solucin para


locutorios telefnicos).

Deteccin automtica de faxes y recepcin de fax desde el propio sistema y


posterior envo por e-mail.

Almacenamiento y recuperacin en Base de Datos.

Integracin de Festival: aplicacin que pasa de texto a voz.

Soporte de vdeo (Asterisk 1.6: the video release).

Modificacin de funciones:
En el caso de que se desee cambiar horarios o mensajes, aadir nuevas extensiones,
modificar los desvos, cambiar los buzones de correo para los mensajes de voz, o
cualquier otra funcionalidad, solamente habra que modificar los archivos de
configuracin (extensions.conf, sip.conf, features.conf, meetme.conf, manager.conf e
iax.conf) y hacer las pruebas necesarias.
Funcionalidad en servidores SIP:
Desde el punto de vista de la clasificacin funcional de servidores SIP, las
funcionalidades de Asterisk son varias:
 Por una parte, hace funcin de Registro y Localizacin de Servidor, ya que
acepta peticiones de registro de los usuarios y suministra un servicio de
localizacin y traduccin de direcciones en el dominio que controla.
 Por otro lado, tambin hace funcin de Proxy Server con estado (Stateful
Proxy), ya que conoce en todo momento el estado de la llamada y posee
funcionalidades que dependen del estado de la llamada como servicios de
respuesta automtica (Interactive Voice Response, IVR) que le permiten actuar
sobre el flujo RTP (Real Time Protocol), que es el que contiene la comunicacin
de voz.

106

Cabe recordar que en contraste con este tipo de Proxy nos encontramos los
Proxy server sin estado (Stateless Proxy) como SER (SIP Express Router), que no
tienen sentido ms que para redes completamente SIP, ya que solo conocen y
actan sobre los paquetes SIP que negocian las direcciones IP, los puertos a
utilizar, el cdec a utilizar,, pero no sobre el flujo RTP.

Arquitectura de Asterisk
 Esquema:

 Partes de Asterisk :

107

 Arquitectura de Asterisk:
Est formada por cuatro APIs: API de Canales, de Aplicaciones, de Traduccin
de Codecs y de Formatos de Ficheros.
Un API es el conjunto de funciones y procedimientos que ofrece cierta
biblioteca para ser utilizado por otro Software como una capa de abstraccin.
Usando este sistema basado en APIs, la base del Asterisk no tiene porqu
preocuparse por detalles como, que llamada est entrando, que cdec se est
utilizando, etc.

Descripcin de las APIs:

 API de Canales Asterisk:


Maneja el tipo de conexin al cual el cliente est llegando, sea una
conexin VoIP, ISDN, PRI, o alguna de otro tipo de tecnologa. Mdulos
dinmicos son cargados para manejar los detalles ms bajos de la capa
de estas conexiones.
 API de Aplicaciones Asterisk:
Permite a varios mdulos de tareas cumplir varias funciones,
multiconferencias, lista de directorios, buzones de voz, aplicaciones
personalizadas, etc.

108

 API de traduccin de Codecs:


Carga mdulos, codecs, para apoyar varios tipos de audio, codificando y
decodificando formatos tales como G711, G729, GSM23, etc.
 API de formato de ficheros Asterisk:
Maneja la lectura y escritura de varios formatos de archivos para el
almacenaje de datos en el sistema de archivos.
Usando estas APIs Asterisk alcanza una completa abstraccin entre sus
funciones bsicas y las diferentes tecnologas y aplicaciones relacionadas.
La formula modular es lo que le permite al Asterisk integrar Hardware de
telefona implementado y tecnologa de paquetes de voz emergentes hoy en
da.
La aplicacin API provee el flexible uso de aplicaciones modulares para realizar
cualquier accin flexible en demanda, tambin permite un desarrollo abierto de
nuevas aplicaciones para satisfacer necesidades o situaciones nicas.
En conclusin, cargar todo el uso como mdulos permite un sistema flexible,
permitindole al administrador disear la mejor y ms satisfactoria trayectoria
para los usuarios en el sistema PBX y tambin modificar la trayectoria de
llamadas para satisfacer las distintas necesidades.

Concepto de Canal:
Canal: Es una conexin que conduce una llamada entrante o saliente en el sistema
Asterisk. La conexin puede venir o salir hacia telefona tradicional analgica o
digital o VoIP.
Asterisk soporta una serie de canales, los ms importantes:




H323, IAX2, SIP, MGCP (Protocolos de VoIP).


Zap: Lneas analgicas y digitales.
misdn: RDSI

109

Dialplan de Asterisk
El Dialplan es realmente el corazn de cualquier sistema Asterisk, ya que define de la
configuracin de la centralita indicando el itinerario que sigue una llamada desde que
entra o sale del sistema hasta que llega a su punto final. En pocas palabras, consiste
en una lista de instrucciones o pasos que componen el comportamiento lgico de la
centralita.
A diferencia de los sistemas de telfono tradicionales, el Dialplan de Asterisk es
plenamente personalizable.
Para poder crear tu propio sistema de Asterisk, se necesita entender el Dialplan.
La Sintaxis del Dialplan
El Dialplan de Asterisk se especifica en el archivo de configuracin extensions.conf que
reside en el directorio /etc/asterisk/ pero su ubicacin puede variar dependiendo de la
instalacin de Asterisk.
Otros lugares comunes para incluir este archivo:
/usr/local /asterisk/etc/
/opt/asterisk/etc/
Puede encontrar los archivos de configuracin de ejemplo (extensions.conf.sample) en
el fichero configs de la carpeta /usr/src/asterisk/asterisk-1.4.26.1.
El Dialplan se compone de cuatro conceptos principales:
Contextos
Extensiones
Prioridades
Aplicaciones
Contextos
El Dialplan se divide en uno o varios contextos. Un contexto es una coleccin de
extensiones.
Los contextos existen para poder diferenciar el 'lugar' donde se encuentra una
llamada, por ejemplo para aplicar polticas de seguridad. Y es que Asterisk no se
comporta igual cuando llama un usuario y marca el 1 que cuando un usuario local
marca el 1. En general, es una forma de diferenciacin.
Una extensin definida en un contexto est completamente aislada de las extensiones
de cualquier otro contexto. Es posible una iteracin entre contextos a travs de la
palabra include.
110

Los contextos se caracterizan por colocar el nombre del contexto dentro de corchetes
([]).El nombre puede estar formado por las letras desde la A hasta la Z (maysculas y
minsculas), los nmeros del 0 al 9, el guion de subrayado (_) y el punto (.) (No use
espacios en los nombres de su contexto).La longitud mxima es de 79 caracteres (80
caracteres -1 de terminacin nula). Por ejemplo: [incoming]
Todas las instrucciones despus de la definicin de un contexto son parte de ese
contexto, hasta que el siguiente contexto se define.
Al comienzo del Dialplan, hay dos contextos especiales:
El [general] que contiene una lista de ajustes generales del Dialplan (que
probablemente no tenga que preocuparse por el).
El [globals], la seccin de "variables globales" por ahora es importante saber
que estos dos contextos son especiales.
Debemos evitar nombrar a nuestros contextos con esos nombres.
Cuando se define un canal, uno de los parmetros que se define en el canal es el
contexto. En otras palabras, el contexto es el punto donde las conexiones de canal van
a comenzar.
Otro uso importante de los contextos (quizs el ms importante) es para garantizar la
seguridad. Mediante el uso correcto de contextos, puede tener acceso a ciertas
caractersticas que no estn a disposicin de los dems.
Si su Dialplan no ha sido diseado cuidadosamente, puede permitir que otras personas
inadvertidamente utilicen fraudulentamente el sistema.
En /usr/src/asterisk/asterisk-1.4.26.1/doc/ se encuentra un archivo muy importante,
security.txt, que describe varios pasos que debes tomar para mantener su sistema
seguro de Asterisk.
Es de vital importancia que se lea y entienda este archivo.
Include
Asterisk tiene una caracterstica que nos permite utilizar las extensiones de un
contexto dentro de otro contexto, a travs de la directiva include.
Este es usado para controlar el acceso a diferentes secciones del Dialplan.
include => contexto
Cuando se incluyen otros contextos dentro de nuestro contexto actual, tenemos que
ser conscientes de l orden en el que estamos incluyndolos.

111

[empleados]
include => context1
Extensiones
En el mundo de las telecomunicaciones, la palabra extensin se refiere generalmente a
un nmero identificador que posibilita que un telfono particular suene en una lnea.
En Asterisk, una extensin es una lista de comandos a ejecutar.
Dentro de cada contexto, podemos definir muchas (o pocas) extensiones, segn sea
necesario.Se accede a las extensiones cuando:




Se recibe una llamada entrante por un canal dado.


El usuario que ha llamado marca la extensin.
Se ejecuta un salto de extensiones desde el Dialplan de Asterisk.

La sintaxis: exten =>


Seguido de esto se pone el nombre (o nmero) de la extensin. Cuando se trata de
sistemas de telefona tradicionales, tendemos a pensar en los nmeros que se marcan
para que otro telfono suene.
En Asterisk, se utilizan nombres de extensin que pueden ser cualquier combinacin
de nmeros y letras.
La asignacin de nombres a las extensiones puede parecer un concepto revolucionario,
la marcacin por nombre o direccin de correo electrnico en lugar de solo marcacin
de un nmero, tiene un perfecto sentido.
Esta es una de las caractersticas de Asterisk que lo hace tan flexible y potente.
Una extensin se compone de tres componentes:
El nombre (o numero) de la prorroga.
La prioridad (cada extensin puede incluir varios pasos, el n del paso se
llama "prioridad").
La aplicacin (o comando) que lleva a cabo.
Estos tres componentes estn separados por comas, de esta forma:
exten => nombre, prioridad, aplicacin()
exten => 123,1, Answer ()
Extension s
Cuando pide entrar en un contexto sin un destino de extensin especifico (por
ejemplo, una seal de lnea FXO), se pasa a la extensin s. (La s significa "comienzo")
112

[incoming]
exten => s, 1, aplicacion()
exten => s, 2, aplicacion()
exten => s, 3, aplicacion()
Manejo de las entradas no validas (i) y tiempos (t)
En primer lugar, necesitamos una extensin de las entradas no validas, cuando se pulsa
una tecla no valida, la llamada se enva a la extensin i.
En segundo lugar, necesitamos una extensin para manejar situaciones cuando la
persona que llama no pulsa a tiempo ,(el tiempo de espera predeterminado es de 10
segundos) la llamada se enva a la extensin t:
[incoming]
exten => 123,1, Answer()
exten => 123, 2, Background(entrar-ext-de-persona)
exten => 123, 3, WaitExten()
exten => i, 1, Playback(pbx-invalid)
exten => i, 2, Goto(incoming, 123,1)
exten => t, 1, Playback(vm-adios)
exten => t, 2, Hangup()
El uso de la i y la t hace que nuestro Dialplan sea un poco ms robusto y fcil de usar.
Prioridades
Cada extensin puede tener varias etapas, llamadas prioridades.
Cada prioridad esta numerada empezando con 1, y ejecuta una aplicacin especifica.
Por ejemplo, la prorroga Answer (de prioridad 1) y, a continuacion, Hangup (de
prioridad 2):
exten => 123,1, Answer()
exten => 123,2, Hangup ()
El punto clave a recordar aqu es que una extensin de Asterisk sigue las prioridades en
orden.
No numerar las prioridades
En emisiones mayores de Asterisk, la numeracin de las prioridades ha causado
muchos problemas.
Imagine tener una extensin que tenia 15 prioridades, y luego tener que aadir algo en
la 8. Todas las prioridades desde la posterior tendran que ser modificadas
manualmente.
Asterisk no maneja los pasos que faltan o renombra prioridades, y la depuracin de
estos tipos de errores es intil y frustrante. A partir de la versin 1.2, en Asterisk se
113

aborda este problema introduciendo el uso de la prioridad n, que significa


"prximo". Cada vez que encuentra una prioridad n, Asterisk calcular el prximo
nmero de prioridad aumentando 1 la prioridad anterior.Esto hace que sea ms fcil
hacer cambios en su Dialplan, al no tener que reenumerar en sus cambios. Tener en
cuenta que la prioridad 1 s que es necesaria poner.
exten => 123,1, Answer()
exten => 123, n, Hangup()
Prioridades con etiquetas (label)
A partir de la versin de Asterisk 1.2, una prctica comn es asignar etiquetas de texto
a las prioridades. Esto es para asegurar que se puede hacer referencia a una de las
prioridades sin saber su nmero ya que se ha utilizado la numeracin con n.
Para asignar una etiqueta de texto a una prioridad, solo tiene que aadir la etiqueta
entre parntesis despus de la prioridad, de esta forma:
exten => 123, n(label), aplicacion()
Un error muy comn al escribir las etiquetas es insertar una coma entre n y el
parntesis de esta forma:
exten => 123, n,( etiqueta), aplicacion()
Aplicaciones
Las aplicaciones son las acciones del Dialplan. Cada aplicacin realiza una accin sobre
el canal actual, tales como la reproduccin de un sonido, la aceptacin de tonos de
entrada, marcar un canal, colgar la llamada, y as sucesivamente.
En el ejemplo se presentaron dos aplicaciones sencillas: Answer() y Hangup().
Algunas aplicaciones, como Asnwer() y Hangup(), no necesitan instrucciones para
hacer su trabajo. Otras aplicaciones requieren informacin adicional.
Estas piezas de informacin, llamadas argumentos, pueden ser transmitidas a las
aplicaciones para afectar la forma en que realizan sus acciones. Para pasar argumentos
a una aplicacin, entre parntesis y separados por comas.
Ocasionalmente, tambin puede aparecer el carcter tubera (|) que se utiliza como un
separador entre argumentos, en lugar de una coma.
Algunas aplicaciones bsicas son:
-

Wait (n): Espera n segundos, ignorando los dgitos marcados durante.


WaitExten(n):Espera n segundos, pero gestionando los dgitos marcados.
WaitMusicOnHold(n):Reproduce msica en espera durante n segundos.
Answer(): Acepta la llamada entrante por el canal.
114

Busy(): Enva la seal de ocupado al origen.


Hangup(): Cuelga la llamada.
Ringing(): Enva la seal de tono de llamada.
Dial ( tipo/identificador,timeout,opciones,url ): Aplicacin para llamar.
Goto (contexto, extension, prioridad): Salta al contexto, extensin y prioridad
del argumento.
GotoIf ( condicion ? prioridad1 : prioridad2 ): Salta a la prioridad1 si la
condicin se cumple. Salta a la prioridad2 si la condicin no se cumple.
GotoIfTime(<times>|<weekdays>|<mdays>|
<months>?[[context|]exten|]priority): Igual que GotoIf teniendo en cuenta la
fecha y hora actual.
PlayBack (fichero ): Reproduce el fichero, continua la ejecucin cuando
finaliza.
Background (fichero): Reproduce el fichero, pero continua la ejecucin
inmediatamente.
SayDigits ( dgitos): Reproduce los dgitos

Para ver la lista completa de las aplicaciones de Asterisk.


Uso de variables
Las variables pueden ser utilizadas en el Dialplan de Asterisk para ayudar a reducir la
mecanografa, aadir claridad, o aadir caractersticas adicionales a la lgica de
Dialplan.
Para hacer referencia a la variable, simplemente escriba el nombre de ella, si lo que
desea hacer es referencia a su valor, usted debe escribir un signo de dollar.
exten => 555,1, Dial ($ {JUAN}) : Al marcar 555 llamariamos por el canal y al numero
establecido en esa variable.
Tipos de variables :
Variables globales:
Como su nombre indica, las variables globales se aplican a todas las extensiones
en todos los contextos.Las variables globales deben ser declaradas en el
contexto [globales], en el inicio del archivo extensions.conf, aunque tambin
pueden ser definidas mediante programacin, utilizando la GLOBAL ().
[globals]
JUAN = Zap / 1
[empleados]
exten => 124,1, Set (GLOBAL (GEORGE) = SIP / George)

115

Variables de canal:
Una variable de canal es una variable que se asocia slo con una llamada en
particular.
Hay muchas variables predefinidas de canal disponibles para su uso en el
Dialplan, que se explican en el channelvariables.txt en usr/src/asterisk/asterisk1.4.26.1/doc.
Se definen a travs de la aplicacin SET() :
exten => 125,1, Set (MAGICNUMBER = 42)
Algunas de las variables ms importantes son:
-

${CALLERID}: Caller ID actual, nombre y nmero.


${CONTEXT}: Contexto actual.
${EXTEN}: Extensin actual.
${CHANNEL}: Canal actual.
${DIALSTATUS}: Estado de la llamada: UNAVAILABLE, CONGESTION,
BUSY, NOANSWER, ANSWERED, CANCEL o HANGUP.
${DATETIME}: Hora actual.

Variables de entorno
Variables de entorno son una forma de acceder a variables de entorno Unix en
Asterisk. Estas son referenciadas mediante la aplicacin ENV() .
La sintaxis :
ENV {$ (var)}, donde var es la variable de entorno Unix que desee referenciar.
Las variables de entorno no son comnmente utilizadas en Dialplans de
Asterisk, pero estn disponibles si las necesitas.
Coincidencia de patrones
Los patrones permiten crear una extensin en su Dialplan que coincide con muchos
nmeros diferentes.
Sintaxis:
Los patrones siempre empiezan con un guion bajo (_).
Despus puede utilizar uno o ms de los siguientes caracteres:
X : Coincide con cualquier digito del 0 al 9.
116

Z : Coincide con cualquier digito del 1 al 9.


N : Coincide con cualquier digito del 2 al 9.
[1,5-7] : Coincide con un solo digito a partir de la serie de dgitos
especificado. En este caso, el patrn coincide con 1, 5,6, o 7.
. (punto) : Comodn , coincide con uno o mas caracteres, no importa
lo que son.
! (bang) : Comodn , coincide con cero o mas caracteres, no importa
lo que son.
Esta expresin nunca
 _.
De hecho, Asterisk le avisara si intenta volver a utilizarlo. En cambio, utilizar
este si es posible: _X.
Para utilizar la concordancia mediante patrones en su Dialplan, simplemente poner el
patrn en el lugar de la extensin (nombre o nmero):
exten => _NXX, 1, PLayback (thankyou) : Al marcar un nmero entre 200 y 999
se escucha el sonido de thankyou.gsm.
Otra cosa importante a saber acerca de patrones de Asterisk es que si se encuentra
ms de un patron que coincida con lo pulsado, se utilizar el ms especifico.
Supongamos que ha definido los siguientes dos modelos, y marca 555-1212 .
exten => _555XXXX, 1, Playback (digitos / 1)
exten => _55512XX, 1, Playback (digitos / 2)
En este caso, la segunda prorroga, porque es mas especifica.
Usando la variable de canal $ (EXTEN):
exten => _XXX, 1, SayDigits ($ {EXTEN}) ; la aplicacion SayDigits () muestra los 3
;ltimos dgitos marcados.
${EXTEN: x}
x es el lugar donde se desea que la cadena volvio a empezar,
de izquierda a derecha.
EXTEN es 95551212
${EXTEN:1} = 5.551.212
${EXTEN: x: y}

117

x es el inicio , e y es el numero de dgitos a regresar.


EXTEN es 94169671111
$ {EXTEN:1:3} = 416.
$ {EXTEN:4:7} = 9671111.
$ {EXTEN:-4:4} = 1111 (comenzara cuatro dgitos desde el final).
Esta es una construccin muy potente, pero la mayora de estas
variaciones no son muy comunes en uso normal.
Manipulacin de expresiones y operadores
Expresiones bsicas
Las expresiones son combinaciones de variables, operadores, y cadenas de valores
para producir un resultado.
Una expresin puede mostrar valores, alterar las cadenas, o realizar clculos
matemticos.
Cada una de estas expresiones tiene un resultado o valor, dependiendo del valor de las
variables o las cadenas.
Sintaxis: $ [expresion]
Ejemplos:
$ [$ {COUNT}+ 1]
$ [$ {COUNT} / 2]
Operadores
Smbolos que permiten manipular las variables.
Operadores booleanos
Estos operadores evalan si la expresin es cierta o no.
 expr1 | expr2: Este operador (llamado "or" o "pipe") devuelve 1 si la expr1
es verdadera (no es una cadena vaca ni cero). De lo
contrario, devuelve la evaluacin de expr2.
expr1 & expr2: Este operador (llamado "and") devuelve 1 si las dos
expresiones son verdaderas (es decir, ninguna expresin es
cadena vaca o cero). De lo contrario, devuelve 0.
expr1 {=,>,> =, <, <=,! =} expr2: Estos operadores retornan el resultado de la
comparacin de las dos expresiones sean enteros o
118

cadenas .El resultado de cada comparacin es 1 si la


relacin es cierta , o 0 si la relacin es falsa.
Operadores matemticos

expr1 (+, -) expr2


expr1 (*, /,%) expr2

Operadores de expresin regular

expr1: expr2 : Siendo expr2 un expresin regular comprueba si expr1 es una


expresin o subexpresin regular de expr2 ,si lo es la
devuelve sino devuelve 0.
Funciones del Dialplan
Las funciones le permiten calcular la longitud de cadena, fechas y horas,,todo dentro
de una expresin.
Sintaxis: Function_name (argumento)
Al igual que las variables, para referenciar el valor de la funcin se usan argumentos:
$ {Function_name (argumento)}
Las funciones tambin pueden encapsular otras funciones:
${FUNCTION_NAME(${FUNCTION_NAME(argument)})}
Para obtener una lista completa de funciones disponibles:
*CLI> core show functions
Configuracin para canales de VoIP: SIP e IAX2
Los ficheros a manipular son sip.conf e iax.conf, la instalacin crea ficheros de ejemplo
con la sintaxis bastante comentada a modo de gua.
En sip.conf se definen:
Variables generales de SIP.
Clientes SIP.
Servidores SI
119

En sip.conf tambin se definen tanto los clientes que se conectarn a Asterisk, como
los proveedores que se utilizaran para encaminar llamadas. Conceptualmente, se
distinguen:
user: Envia llamadas a Asterisk
peer: Recibe llamadas de Asterisk (proveedor).
friend: Recibe y Enva llamadas (usuario).
Un ejemplo bsico del archivo sip.conf:
[general]
context=default
port=5060 ; Puerto UDP en el que responder el Asterisk .
bindaddr=0.0.0.0 ; Si queremos especificar que Asterisk est en una IP (si un
; equipo tiene 3 IPs .por ej.) 0.0.0.0 vale para cualquiera.
srvlookup=yes ; Habilita servidor DNS SRV.
[david]
type=friend ;puede recibir y hacer llamadas.
secret=1234
qualify=yes ;Tiempo de latencia no superior a 2000 ms.
nat=no
host=dynamic ; El dispositivo se registra con una IP variante .
canreinvite=no ; Asterisk por defecto trata de redirigir.
context=internal ; El contexto que controla todo esto.
Igual que tenemos para el protocolo SIP el fichero sip.conf, tambin tenemos el fichero
iax.conf para el protocolo IAX2.
En este fichero se definen:
Variables generales de IAX.
Clientes IAX.
Servidores IAX.
Un ejemplo bsico del archivo iax.conf:
[general]
bindport = 4569 ;Puerto de IAX
bindaddr = 0.0.0.0
disallow=all ;Para permitir la utilizacion de codecs primero hay que
;desabilitar todos
allow=ulaw
allow=alaw
allow=gsm
[david]
type=friend
120

username=david
secret=1234
host=192.168.1.30
context=fromiax
qualify=yes
Verificacin de la configuracin con el CLI.
Para ver los usuarios sip e iax:
*CLI>sip show peers
*CLI>iax show peers
Buzones de voz (Voicemail)
Uno de los servicios ms interesantes de las PBX, Asterisk implementa un sistema de
buzones de voz bastante flexible.
Algunas caractersticas de este servicio:
-

Ilimitados contenedores voicemail con proteccin de password, contenidos en


carpetas.
Saludos diferentes para los estados busy y unavailable.
Saludos configurables.
Habilidad de asociar un telefono con varios voicemail's y un voicemail con
varios telefonos.
Posibilidad de envio al correo electrnico con el archivo de sonido como
adjunto.

La configuracin se har en el archivo voicemail.conf (en /etc/asterisk/). Aqu


deberemos definir los contextos y contenedores voicemail.
A continuacin vamos a ver una configuracin bsica.
La configuracin avanzada se encuentra en el apartado Configuracin de Asterisk.
Creacin de mailbox
En el contexto de voicemail definimos diferentes mailbox cuya sintaxis es:
mailbox => password,name[,email[,pager_email[,options]]]
En la que:
mailbox: Este es el nmero de buzn. Por lo general, se corresponde con una
extensin.
password: Esta es la contrasea numrica que el propietario del buzn usara
para acceder a su buzn de voz.
name: Este es el nombre del propietario del buzn.
email: Esta es la direccin de correo electrnico del propietario del buzn.
121

Asterisk puede enviar notificaciones de voz a la casilla de correo.


pager_email: Esta es la direccin de correo electrnico del pager o telfono
celular. Asterisk puede enviar un breve mensaje de notificacin
de voz a la direccin de correo electrnico especificada.
options: Este campo es una lista de opciones que establece el propietario del
buzn de la zona horaria y redefiniciones de configuracin de voz.
Hay nueve opciones validas: attach, serveremail, tz,ssaycid,
review,operator, callback, dialout,y exitcontext. Estas opciones deben
estar en pares option = value , separados por el carcter tubera (|).
La opcin tz establece la zona horaria del usuario a una zona horaria
previamente definida en el contexto [zonemesages] en voicemail.conf,
y las otras ocho opciones son sobre el voicemail.
Un ejemplo de mailbox podra ser algo como esto:
101 => 1234,David,davidin073@gmail.com,tz=central|attach=yes
Aadir el voicemail al Dialplan
Para ello, vamos a utilizar VoiceMail().
VoiceMail() : aplicacin que enva al llamante un mensaje. El buzn debe ser
especificado como mailbox@context (el contexto por defecto es default).
Si se utiliza la letra b, la persona que llama escuchara el mensaje de
ocupado. Si se usa la letra u, la persona que llama escuchar el mensaje
de no disponible (si existe).
exten => 101,1,Dial(${JOHN},10) ; despus de 10 segundos pasa al voicemail
exten => 101,n,VoiceMail(101@default,u)
Acceso al voicemail
Los usuarios pueden recuperar sus mensajes de correo de voz, cambiar sus opciones
de voz, y grabar sus saludos de voz utilizando el VoiceMailMain().
exten => 700,1, VoiceMailMain() :accedes al buzon de voz del llamante.
Marcacin por nombre de directorio
Una ltima caracterstica del sistema de correo de voz de Asterisk es la de marcacin
por nombre de directorio.
Esto se crea con Directory(). Esta aplicacin utiliza los nombres definidos en los
mailbox de voicemail.conf .
Sintaxis: Directory (voicemailcontext,context,options)
 voicemailcontext: El contexto voicemail para leer los nombres.
122

 context: El contexto opcional del dialplan para llamar al usuario.


 options: Por defecto se busca el usuario por apellido.
Con la opcin f se busca por nombre.
Con la opcin e se busca por extensin.
Se solicita al usuario que introduzca por teclado las 3 primeras letras del
nombre/apellido/extension del empleado.
Audio en Asterisk
Reproduccin
El audio en Asterisk juega un papel importante. En el mundo de las PBX tradicionales
es habitual que mientras el llamante no llega a su destino se le entretenga con musica
en espera. Ademas la reproduccion de audio es necesaria para la construccion de
sistemas IVR.
Asterisk, en su instalacion, facilita algunos sonidos comunes para, por ejemplo, el
buzon de voz, o para notificar fallos de la red (el usuario no se encuentra, etc), aunque
podemos llevar esto mucho mas alla, mediante Festival y otras aplicaciones.
Msica en Espera
Asterisk puede poner un canal dado en espera ('HOLD'), principalmente en las
siguientes situaciones:
- Durante una transferencia.
- Durante una llamada si se ha especificado el parmetro 'm', que indica que
no se oir tono de llamada sino msica en espera.
- Durante una espera en el parking.
- Si la aplicacin MusicOnHold o WaitMusicOnHold ha sido llamada desde el
DialPlan.
- Si el destino de la llamada ha solicitado explcitamente que la llamada sea
puesta en espera.
Es posible tener distintos tipos de msica en espera.
La msica en espera se configura en musiconhold.conf en /etc/asterisk/.
La configuracin de este archivo se encuentra en el apartado Configuracin de
Asterisk.
Aplicacin Festival
La aplicacin Festival en un TTS, es decir un sistema de sntesis de voz. Si queremos
crear un men de voz, saludos de bienvenida, leer archivos de texto, entonces es que
lo necesitamos.
Para que Festival se integre en Asterisk, antes de compilar la centralita tenemos que
instalar dos paquetes:
123

yum install festival festival-devel


Para averiguar que el modulo de festival est correctamente cargado en asterisk,
desde la consola de la centralita:
*CLI> module unload app_festival
== unregistered application 'festival'
*CLI> module load app_festival
== parsing '/etc/asterisk/festival.conf': == found
== registered application 'festival'
loaded app_festival => (simple festival interface)

Si aparece algn tipo de error significa que el modulo no ha sido compilado y tenemos
que volver a la compilacin de Asterisk.
Festival tiene como idioma predefinido el ingles. Para agregarle el idioma espaol hay
que seguir estos pasos:
cd /usr/share/festival/voices
wget http://www.voztovoice.org/tmp/festival-spanish.zip
yum install unzip
unzip festival-spanish.zip
Ahora modificamos el archivo de configuracin de festival
nano /usr/share/festival/festival.scm
aadimos estas lneas:
;(language__spanish)
(set! voice_default 'voice_el_diphone)
(define (tts_textasterisk string mode)
"(tts_textasterisk string mode)
apply tts to string. this function is specifically designed for
use in server mode so a single function call may synthesize the string.
this function name may be added to the server safe functions."
(let ((wholeutt (utt.synth (eval (list 'utterance 'text string)))))
(utt.wave.resample wholeutt 8000)
(utt.wave.rescale wholeutt 5)
(utt.send.wave.client wholeutt)))

Guardamos el archivo y modificamos el archivo de configuracin de festival en


asterisk:
nano /etc/asterisk/festival.conf
estas son la lneas que hay que modificar/activar:
124

[general]
host=localhost
port=1314
festivalcommand=(tts_textasterisk "%s" 'file)(quit)\n

Guardamos el archivo y reiniciamos Asterisk.


Ahora vamos a aadir unas cuantas lneas en extensions.conf.
nano /etc/asterisk/extensions.conf
exten => 650,1,Answer()
exten => 650,n,Festival(lo conseguiste!!!)
exten => 650,n,Hangup()
Codecs y carga de CPU
En principio Asterisk puede reproducir de muchisimos codecs (GSM,G711,G729,MP3)
y de archivos de audio sin codificar (WAV), siempre que nos sea posible deberiamos
pasar cualquier archivo que queramos reproducir a WAV, pues decodificar es un
trabajo que puede cargar mucho a la CPU con cada reproduccion. Aunque tambien es
cierto que un archivo codificado ocupa bastante menos que uno que no lo est, pero
sacrificamos espacio por cantidad de llamadas que pueden ser atendidas.
Qu uso se da de los Cdecs de audio en Asterisk?

Sirven para digitalizar la voz humana.


Cuando dos dispositivos van a establecer una comunicacin, acuerdan el cdec
a utilizar.

Factores importantes a la hora de seleccionar un cdec:


Calidad de audio.
Coste computacional.
Gasto de ancho de banda.
Comparacin de ancho de banda utilizado por los cdecs:

Cdec & Bit Rate (Kbps)

Bandwidth Ethernet(Kbps)

G.711 (64 Kbps)

87.2 Kbps

G.729 (8 Kbps)

31.2 Kbps

G.723.1 (6.3 Kbps)

21.9 Kbps

G.723.1 (5.3 Kbps)

20.8 Kbps

G.726 (32 Kbps)

55.2 Kbps
125

G.726 (24 Kbps)

47.2 Kbps

G.728 (16 Kbps)

31.5 Kbps

Los proveedores VoIP suelen trabajar en G.729, que consume muy poco ancho de
banda y no sera viable utilizar G.711 por ejemplo. El cdec G.729 no es libre, cada
licencia de G.729 para un canal es de 10$ pero hay una implementacin que puede
utilizarse con fines no lucrativos o educacionales, tanto de este cdec como del
G.723.1, en el siguiente enlace:
http://asterisk.hosting.lv/.
Para comprobar cuntos codecs soporta Asterisk :
*CLI> core show codecs audio
Para comprobar el coste de transcoding :
*CLI> core show translation
Asterisk no soporta por defecto la reproduccion de mp3, puedes activarla compilando
el paquete de addons y activando el soporte para MP3, o instalando el paquete de tu
distribucion.
Definir un idioma
Un idioma en Asterisk es un conjunto de sonidos colocados en el directorio de sonidos
de Asterisk (revisa /etc/asterisk/asterisk.conf). Se puede definir un lenguaje en
el archivo de configuracion del canal (por ejemplo sip.conf o iax.conf) o utilizando
Set(CHANNEL(language)=idioma) que cambia el idioma para la llamada en curso.
Esto permite que aplicaciones que reproducen sonidos, como Playback(), SayDigits() o
SayNumber() puedan hacerlo en el idioma del llamante.
Es bastante comun definir un idioma global (espaol , por ejemplo) y para ciertos
contextos, (entrantes-internacionales) ponerlo a un idioma ms apropiado como
ingles.
Castellanizar Asterisk
Por defecto las voces que incluye Asterisk estn en Ingls, el lenguaje universal, pero a
veces para la perfecta compresin de algunas de las diversas funcionalidades de
Asterisk, como el buzn de voz, es necesario tener las voces en Castellano.
Con estos sencillos pasos lo conseguiremos:

Aadir lo siguiente al fichero asterisk.conf (en /etc/asterisk/):


[options]
126

languageprefix = yes

Incluir la lnea language=es en los ficheros de configuracin. (sip.conf,


iax.conf, extensions.conf, voicemail.conf,...,diposnibles en /etc/asterisk/).

Editar el fichero indications.conf, poniendo country=es.

Ficheros de sonido en castellano:


-

http://www.voipnovatos.es/voces/
Descargamos en formato gsm, alaw, g729, ...
Editar rbol de directorios (todo cuelga de es)
Copiar a /var/lib/asterisk/sounds/es/

Grabacin
Para la grabacin no hace falta ninguna aplicacin especial, podramos coger cualquier
aplicacin de audio como Audacity o una grabadora de sonidos. No obstante, Asterisk
incorpora una serie de aplicaciones para la grabacin en el sistema telefnico. Esto
puede utilizarse para crear una macro que reproduzca un mensaje de bienvenida
personalizado por el usuario.
Aplicacin para la grabacin
La aplicacion Record() graba en un archivo la voz del llamante.
Sintaxis: Record(nombre.formato[,silencio,duracion_maxima,opciones])
Podemos utilizar %d en el nombre del fichero, as se utilizar un ndice autoincremental, para no sobrescribir grabaciones. El nombre del fichero queda guardado
en la variable ${RECORDED_FILE}.
exten => ext1,n,Record(sonido-asterisk%d.alaw)
Legalidad en la grabacin de llamadas
La legislacin actual en Espaa determina que:

Es ilegal grabar o escuchar una conversacin en la que uno no es parte, y los


dems desconocen la grabacin o escucha.
Es legal grabar una conversacin en la que uno es parte, pero es ilegal facilitar
esa grabacin a un tercero que no haya sido autorizado por los que
participaron en la conversacin.

El Tribunal Constitucional lo deja bien claro en su sentencia del 29 de Noviembre de


1984,STC 11/1984,cuando establece, entre otras consideraciones que:

127

Quien graba una conversacin de otros atenta, independientemente de toda otra


consideracin, al derecho reconocido en el art. 18.3 CE; por el contrario, quien graba
una conversacin con otro no incurre, por este solo hecho , en conducta contraria al
precepto constitucional citado.
Si uno no es parte en la conversacin estar vulnerando un derecho fundamental,
reconocido en el artculo 18.3 de la Constitucin, pero quien graba las palabras que un
tercero le dirige no est realizando por ese slo hecho ilcito alguno. Cuestin
diferente sera si esa conversacin se divulga y la intromisin que pueda suponer en la
esfera de la persona cuyas palabras se han recogido.
Para las grabaciones ajenas, el Cdigo Penal castiga con prisin de uno a cuatro aos y
multa de doce a veinticuatro meses. El artculo 197 castiga a quien para descubrir los
secretos o vulnerar la intimidad de otro, sin su consentimiento, utilice artificios
tcnicos de escucha, transmisin, grabacin o reproduccin del sonido o de la imagen,
o de cualquier otra seal de comunicacin.
Se plantearon a la Agencia Espaola de Proteccin de Datos diversas cuestiones
relacionadas con la recopilacin por parte de una empresa de diversos registros de
voz, con la finalidad de elaborar un programa de Software de reconocimiento de voz.
La recopilacin tendra lugar mediante la realizacin de llamadas telefnicas
efectuadas desde un Estado miembro de la Unin Europea.
En relacin con esta cuestin, se considera que siempre que quien haya de realizar el
tratamiento tenga conocimiento directo o indirecto de quin es la persona cuya voz
est siendo objeto de grabacin, as como de su nmero de telfono, la grabacin
efectuada tendr la naturaleza de dato de carcter personal y el tratamiento
efectuado estar sometido a la normativa de proteccin de datos ,al incorporarse al
mismo los datos identificativos del sujeto (nombre y apellidos), su nmero de telfono
y su voz, conforme a lo dispuesto en el artculo 3.a) de la LOPD y el artculo 1.4 del Real
Decreto 1332/1994, del 20 de Junio, que indica que dichos datos podrn proceder de
informacin acstica.
Macros
Las macros son una herramienta excelente para ahorrarte repeticin de cdigo, y
facilidad de cambio y adaptacin para tu Dialplan.
Si tuviera que repetir para un centenar de usuarios las lneas siguientes supondra una
gran cantidad de copy/paste. Sera ms sencillo un cambio en la manera en que trabaja
las extensiones.
exten => 101,1,Dial(${JOHN},10)
exten => 101,n,VoiceMail(101@default)
exten => 101,n,Hangup()
.
Puede definir una macro que contiene una lista de pasos a seguir. Todo lo que necesita
para el cambio es la macro, y las referencias. Si est familiarizado con la programacin,
128

usted reconocer que las macros son similares a las subrutinas en muchos lenguajes de
programacin modernos.
Definicin de macros
Los contextos de toda macro deben ser [macro-nombreMacro]. Esto les distingue de
los contextos ordinarios y facilita su llamada.
Los comandos de la macro se construyen casi igual a cualquier otra cosa en el Dialplan,
el nico factor limitante es que solo se usan en la extensin s.
Llamadas a macros
Para utilizar una macro en nuestro dialplan, utilizamos Macro() .
exten => 101,1, Macro (nombreMacro)
Macro () define varias variables especiales para nuestro uso. Son:
${MACRO_CONTEXT}: El contexto original en el que se llama a la macro.
${MACRO_EXTEN}: La extensin original en la que se llama a la macro.
${MACRO_PRIORITY}: La prioridad inicial en el que se llama a la macro.
${ARG n }: El ensimo argumento pasado a la macro .
Aplicando al ejemplo:
exten => 101,1, Macro (voicemail)
[macro-voicemail]
exten => s,1,Dial(${JOHN},10)
exten => s,n,VoiceMail(${MACRO_EXTEN}@default)
exten => s,n,Hangup()
Si todo el que llame va a realizar la llamada a travs del mismo canal y extensin que
define la variable JOHN ya hemos terminado sino es necesario el uso de argumentos.
Utilizacin de argumentos en macros
Vamos a pasar el canal como argumento:
exten => 101,1,Macro(voicemail,${JOHN})
[macro-voicemail]
exten => s,1,Dial(${ARG1},10)
exten => s,n,VoiceMail(${MACRO_EXTEN}@default)
exten => s,n,Hangup()

129

Uso de la base de datos de Asterisk (AstDB)


Asterisk proporciona un poderoso mecanismo para el almacenamiento de valores de
llamada con el uso de una base de datos interna llamada AstDB. Esta no es una
relacional tradicional, como MySQL, SQLServer y otras, es del tipo Berkeley DB
Version 1.
Nos puede ser de utilidad para sistemas pequeos.
Existen dos entidades: familias(Families) y llaves(Keys), cada key esta asociada a una
Family, si un Key toma un valor nuevo, el anterior es superpuesto por este nuevo valor.
Almacenamiento de datos en AstDB
Para almacenar un nuevo valor en la base de datos de Asterisk, utilizamos la aplicacin
Set(), pero en lugar de usarlo para establecer un canal de la variable, la usamos para
definir una variable AstDB.
Para asignar la clave count en la familia test con el valor 1:
exten => 456,1,Set(DB(test/count)=1)
Tambin puede guardar los valores de Asterisk con la lnea de comandos CLI,
ejecutando el comando database poniendo el valor de la clave de la familia.
*CLI>database put family key value.
*CLI>database put test count 1
Recuperacin de datos de AstDB
Para recuperar un valor de AstDB y asignarlo a una variable, usamos la aplicacin Set ()
de nuevo. Vamos a recuperar el valor de count de la familia test,asignando a una
variable llamada COUNT y, a continuacin, decimos el valor:
exten => 456,n,Set(COUNT=${DB(test/count)})
exten => 456,n,SayNumber(${COUNT})
Tambin puede comprobar el valor de una clave desde la lnea de comandos de
Asterisk utilizando el comando:
database get family key
database get test key
Para ver todo el contenido de AstDB, se utiliza el comando:
database show

130

Borrado de datos de AstDB


Hay dos maneras de borrar los datos de la base de datos de Asterisk.
Borrar solo la llave devolviendo su valor antes de eliminarla: DB_DELETE().
exten => 457,1,Set(COUNT= ${DB_DELETE(test/count)})
En el CLI : *CLI>database del key
Borrar la familia y la clave: DBdeltree(family).
exten => 457,1, DBdeltree(test)
En el CLI: *CLI>database deltree family .
Transferencias de llamadas
La configuracin de la transferencia de llamadas entre diversos usuarios,
independientemente de la tecnologa que usen se realiza en el archivo features.conf
en /etc/asterisk/.
Hay que especificar en dicho archivo las siguientes caractersticas:


blindxfer => secuencia : Permite realizar una transferencia de llamada a ciegas


marcando la secuencia.
 atxfer => secuencia : Permite realizar una transferencia de llamada atendida.
El origen es puesto en espera, mientras el destino se
comunica con el nuevo destino para anunciarle la
llamada. Si el nuevo destino cuelga, la llamada no se
transfiere.
 pickupexten => secuencia : Especifica la secuencia a marcar para coger una
llamada de alguien del mismo callgroup.
Para poder realizar transferencias va PBX, Asterisk debe estar a la escucha de los
tonos configurados, para ello la aplicacin Dial debe haber recibido como parmetro 't'
para permitir la transferencia en destino o 'T' para hacerlo en origen (o ambas).
CallParking
El callparking o aparcamiento de llamadas es una funcionalidad que permite transferir
la llamada a un 'parking' virtual. Pudiendo colgar sin que la llamada origen sea
desconectada de Asterisk, ya que se encontrar aparcada.
Para operar, el usuario transfiere la llamada a una extensin especial (parkext en
features.conf), Asterisk aparca la llamada y anuncia la posicin en el parking.

131

Cualquier usuario que tenga incluido en su contexto el contexto especial 'parkedcalls'


puede recuperar la llamada aparcada llamando directamente a su posicin en el
parking.
Los parmetros para el callparking son controlados con la configuracin del
features.conf. En el contexto [general] del features.conf hay 4 caracteristicas
relacionadas con el callparking:

parkext: Esta es la extensin del parking. Al transferir una llamada a esta


extensin se llama a la posicin determinada del aparcamiento .Por defecto es
700.

parkpos: Esta opcin define el nmero de aparcamientos. Por ejemplo, entre


701-720 crea 20 aparcamientos numeradas del 701 al 720.

context: Este es el nombre del contexto del aparcamiento.Para poder aparcar


llamadas, debe incluir este contexto.

parkingtime: Si se establece, esta opcin controla el tiempo(en segundos) que


una llamada puede permanecer en el aparcamiento. Si la llamada no est
recogida en el tiempo especificado, se llama de nuevo.

Es necesario reiniciar (restart) Asterisk no vale con hacer reload.


Tambin es necesario que el usuario sea capaz de transferir las llamadas a la extensin
del parking, debe estar seguro de la utilizacin de la "t" y / o T del Dial().
Ejemplo:
extensions.conf
[incoming]
include => parkedcalls
exten => 103,1,Dial(SIP/Pedro,,tT)
exten => 104,1,Dial(SIP/John,,tT)
features.conf
[general]
parkext => 700
parkpos => 701
context => parkedcalls
parkingtime => 120
[featuremap]
blindxfer => #
disconnect => *
132

atxfer => *2
parkcall => *7
Para visualizar estos datos desde la linea de commandos CLI:
*CLI> show parkedcalls
Para ilustrar como usar el Call Parking, supongamos que David marca la extensin 103
para hablar con Pedro. Despus de un tiempo, Pedro transfiere la llamada a la
extensin 700 aparcando la llamada de David en la posicin 701. Pedro marca la
extensin 104 para llamar a John , y le dice que el que la llamada de David se
encuentra en la extensin 701. John entonces marca de extensin 701 y comienza a
hablar David.
CallPickup
CallPickup es la auto-transferencia de un telfono que esta sonando, en otras palabras,
el hecho de poder descolgar y responder a la llamada entrante a un telfono o grupo
de telfonos determinado desde un tercer telfono que no est sonando.
La configuracin para el 'Callpickup' se configura en features.conf.
En cada usuario de la centralita se definen estos dos parmetros:

callgroup: Toda llamada que entra a una extensin determinada pertenece


al/los callgroups de la extensin.

pickupgroup: Es el/los callgroups de llamadas entrantes en los que el usuario


puede hacer 'pickup'.

Hay dos tipos de callpickup:


-

Group callpickup: Permite que descuelgues cualquier llamada de alguien de


mismo grupo que tu. Para utilizar esta funcionalidad la secuencia a marcar
suele ser *8# o *8.

Directed pickup: Permite que descolgar una llamada segn una extensin
especifica, suena el telefono y si descuelgas y marcas una secuencia ms tu
extensin se transfiere la llamada a tu extensin.

Ejemplo:
features.conf
[general]
.
pickupexten=*8

133

sip.conf
[100] ; 100 puede coger llamadas de 101 ya que pickupgroup abarca el
; callgroup de 101

callgroup=1
pickupgroup=1-3
[101] ;101 tambien puede coger llamadas de 100
.
callgroup=2
pickupgroup=1
Para ver estos datos desde el CLI:
*CLI>feature show
Manejo de Colas
Una llamada entrante puede ser enviada a una cola de llamadas, que ser distribuida
entre los agentes disponibles, miembros que contestan las llamadas.
Las colas se utilizan mucho en entornos tipo 'Call Center', con los canales tipo de
Agente (que hacen 'login en el sistema').
El sistema de colas se compone de:
-

Llamadas entrantes que son ubicadas en una cola.

Miembros que contestan las llamadas en la cola

Una estrategia sobre cmo manejar la cola y repartir las llamadas entre
los miembros.

Msica que se reproduce durante la espera en la cola.

La configuracin de las colas se define:


-

Estticamente: en el archivo queues.conf

Dinmicamente: la configuracin se almacena en una BD,


disponibilizando los cambios sin necesidad de realizar un reload.

La configuracin de los agentes se define en el archivo agents.conf.


Los agentes atienden las llamadas de una cola especfica.
Un agente debe realizar un login (llamando a una extensin especial que contiene la
aplicacin AgentLogin()) indicando que est listo para tomar llamadas. Tambin existe

134

el concepto de agente dinmico por si cualquier usuario quiere agregarse a una cola.
Para esto se utilizan las aplicaciones AddQueueMember() y RemoveQueueMember().
Los miembros son aquellos canales disponibles que estn activamente atendiendo la
cola. Pueden ser tanto agentes como tambin canales regulares (SIP/105).
Las llamadas son distribuidas entre los miembros de una cola siguiendo alguna de las
siguientes estrategias:
-

ringall: hace sonar todos los canales disponibles hasta que alguno
responda (configuracin por defecto).

roundrobin: hace sonar cada agente disponible por turnos.

leastrecent: hace sonar el agente que es menos recientemente llamado


por esta cola.

fewestcalls: hace sonar el agente con la menor cantidad de llamadas


completas.

random: hace sonar una interfaz al azar.

rrmemory: igual que el round robin pero recuerda cual fue el ltimo
telfono que atendi una llamada y contina con el siguiente.

Cada agente tiene lo denominado Penalty(penalidad) de manera que se derivan las


llamadas (segn la estrategia definida) a los agentes con el menor valor de penalidad.
En el caso de estar todos ocupados, se contina con la siguiente penalty y as
sucesivamente.
Para establecer esto en los agentes estaticos en queues.conf:
member => SIP/3000,1
member => SIP/3001,2
Si hay agentes dinamicos ellos tienen penalidad 1, a no ser que se les asigne otra al
agregarse a la cola:
exten => 888,1,AddQueueMember(davidqueue||3) ;penalidad 3
Si se asignan a dos agentes la misma penalidad sonarian los dos si hay una llamada.
Tambin es posible asignar a cada llamada entrante una Priority(prioridad)
permitiendo situarla en un lugar ms adelante de la cola (no siempre al final), por
ejemplo si es un cliente importante adelantarle en la cola. Por defecto todas tienen
prioridad 0 (estrategia FIFO (First In First Out)).
Si queremos que cierta llamada sea adelantada en la cola deberemos modificar la
variable de prioridad , QUEUE_PRIO.

135

exten => 101,1,Playback(bienvenido)


exten =>101,n,SetVar(QUEUE_PRIO=10)
exten =>101,n,Queue(davidqueue)
Es posible que un miembro de una cola en determinado momento quiera no
responder llamadas de esta, esto es posible hacerlo de dos formas:
Con las aplicaciones de Pausa:
exten => 333,1,PauseQueueMember(davidqueue|SIP/100)
exten => 334,n,UnpauseQueueMember(davidqueue|SIP/100)
Opcion de TimeOut : Cuando no se contexta una llamada se entra en pausa
automaticamente (poniendo en el contexto de la cola autopause=yes).
Las aplicaciones principales relacionadas con las colas, utilizadas en extensions.conf:
-

Queue(): aplicacin utilizada para encolar una llamada (toma como


parmetro las colas definidas en queue.conf).
exten => 1234,n,Queue(ventas|t|||45|)

AddQueueMember(cola): agrega dinmicamente un miembro a la cola.

RemoveQueueMember(cola): remueve dinmicamente un miembro


de la cola.

PauseQueueMember(cola|miembro): Pone en pausa al miembro en la


cola.

UnpauseQueueMember(cola|miembro) : Reactiva al miembro en la


cola.

AgentLogin(): login de un agente a una cola.

Comandos relacionados de la CLI:


Mostrar los agentes :
*CLI>show agents
Lista de todas las colas:
*CLI>show queues
Muestra los datos de una cola en particular:
*CLI>show queue nombrecola
136

Agrega un miembro a la cola:


*CLI>queue add member nombremiembro
Elimina un miembro de la cola :
*CLI>queue remove member nombremiembro
Un ejemplo del archivo queues.conf con una cola definida es:
[general]
;Si usamos agentes dinamicos su configuracin se guardara en la BD de
Asterisk. De ;esta forma si Asterisk se vuelve a arrancar , cada agente ser
;enrutado a su ;correspondiente cola.
persistentmembers=yes
;Para mantener las estadsticas en la cola durante un reload
keepstats=no
[davidqueue]
music=default
strategy=ringall
timeout=15 ;tiempo maximo de ring
retry=5 ;tiempo de espera para intentar con otro miembro
wrapuptime=0 ;tiempo de espera tras intentar con todos los miembros
member => SIP /100,1
Algunas de las variables para obtener informacin de las colas son:

QUEUE_MEMBER_COUNT(queue) : n de miembros de una cola


exten => 3001,1,Set(NUM = ${QUEUE_MEMBER_COUNT(davidqueue)})
exten =>3001,n,SayNumber(${NUM})

QUEUE_MEMBER_LIST(queue) :guarda los nombres de los miembros de la cola


exten =>4001,1,Set(MEM=${QUEUE_MEMBER_LIST(davidqueue)})
exten =>4001,n,NoOp(MEM=${MEM})

QUEUE_WAITING_COUNT(queue): n de personas esperando en la cola


exten =>5001,1,Set(ESP=${QUEUE_WAITING_COUNT(davidqueue)})
exten =>5001,n,SayNumber(${ESP})

Registro de llamadas(CDR)
Asterisk permite llevar un control exhaustivo de todas las llamadas que se han
realizado o recibido. Este control es interesante para el propio control de facturacin,

137

independientemente del proveedor y adems permite realizar estadsticas. Dicho


control se denomina CDR(Call Detail Record).
El registro del CDR se escribe por defecto en el archivo:
/var/log/asterisk/cdr-csv/Master.csv
Tambien es posible almacenar los registros en una base de datos MySQL configurando
el archivo cdr_mysql.conf en /etc/asterisk/, para configurar el CDR se hace en cdr.conf
en la misma carpeta.
Para confirmar el estado del CDR desde el CLI, se puede ejecutar:
*CLI> cdr status
Algunos de los campos ms importantes son:

accountcode: cdigo de la cuenta a utilizar.


src: nmero del caller ID.
dst: extensin destino.
dcontext: contexto destino.
start: comienzo de la llamada (fecha/hora).
answer: respuesta de la llamada (fecha/hora).
end: fin de la llamada (fecha/hora).
duration: duracin de la llamada en segundos, desde que fue
discada hasta el corte.
billsec: duracin de la llamada en segundos, desde que fue
atendida hasta el corte.
disposition: estado de la llamada (atendida, no atentendida, ocupado, fallida).

Existen muchas aplicaciones que permite gestionar el CDR. Desarrollar una propia no
es realmente muy complejo. Para la aplicacin se utilizar Asternic CDR Reports de
Nicols Gudio.
Sala de conferencias
Una conferencia en Asterisk permite que varias personas estn incluidas en una misma
conversacin, Asterisk trabaja esto de una manera fcil y flexible mediante las
Aplicaciones MeetMe (conferencia,opciones,password) para crear conferencias y para
contar los participantes MeetMeCount(conferencia,variable_contador).
Algunas de las cosas que se pueden hacer en conferencias son:

Crear passwords para salas de conferencias.

138

Tipos de conferencia (mute conference, lock conference, kick partipants).

Posibilidad de silenciar a todos los particintes menos a uno, til en caso de


discursos de entrada o mensajes importantes.

Creacin de conferencias estticas o dinmicas.

Se puede limitar el nmero de participantes.

Las opciones de configuracin para el sistema de MeetMe se encuentran en


meetme.conf en la carpeta /etc/asterisk/.
Dentro de la configuracin, hay que establecer las salas de conferencias y definir un
nmero opcional de contraseas. (Si una contrasea esta definida aqu, ser necesaria
para acceder a esta sala para toda la conferencia).
Definimos la sala de conferencias en la extensin 600 (en meetme.conf):
[roms]
conf => 600
Creamos una simple sala de conferencias utilizando la extensin 600,la opcin i (que
anuncia cuando la gente entra y sale de la conferencia), y una contrasea de 54321 en
extensions.conf:
exten => 600,1, MeetMe (600, i, 54321)
Si usted pasa una variable como segundo argumento para MeetMeCount(), el numero
de participantes se asigna a la variable, y la reproduccin de estos cada vez que se
aade uno se omite. Usted puede usar esto para limitar el nmero de participantes, de
esta forma:
; Limitar la sala de conferencias para 10 participantes
exten => 600,1,MeetMeCount(600,CONFCOUNT)
exten => 600,n,GotoIf($[${CONFCOUNT} <= 10]?meetme:conf_full,1)
exten => 600,n(meetme),MeetMe(600,i,54321)
exten => conf_full,1,Playback(conf-full)
IVR (Interactive Voice Response)
IVR es el nombre de la tecnologa que permite interactuar con un men de voz
utilizando un telfono.
Es relativamente fcil y sencillo, configurar un men de ese tipo en Asterisk.
Una vez hechas varias grabaciones de mensajes con la aplicacin Record() como hemos
comentado y haberlas guardado estos en /var/lib/asterisk/sounds/ se puede comenzar
a configurar el IVR en extensions.conf.
139

Las ventajas que proporciona el sistema no reside solamente en la reduccin de costes


y en el incremento de la eficiencia del CallCenter sino que tambin:






Ayuda a reducir los turnos de los operadores y sus costes asociados.


Incrementa las horas de servicio.
Disminuye la tasa de llamadas perdidas.
Incrementa la disponibilidad de los operadores.
Proporciona una tasa de re-direccionamiento solucionando un mayor
nmero de primeras llamadas.
 Mejora la flexibilidad para responder a las necesidades del cliente o a
picos de llamadas.

El 95% del xito del diseo de los sistemas IVR de Asterisk se basa en trabajar junto al
cliente desarrollando casos de uso consistentes y probar (y rehacer) prototipos con
usuarios finales "reales" (a los cuales, incluidos nosotros mismos, les fastidia "hablar"
con una maquina). Si la transaccin promedio es corta y amigable, la ventaja frente al
acceso Web es que no todos tienen Internet en todo momento, aunque si un telfono.
El 5% restante es solo programacin.
Principales errores de "ergonoma":






Mens demasiado largos.


Los usuarios se pierden o no encuentran lo que necesitan.
No comprenden cmo usar el sistema.
Lgica confusa y "callejones sin salida".
Suponer que el usuario conoce la "jerga" del negocio.

Principales errores de diseo:


 Ineficiente recuperacin ante fallos.
 Falta de canales de atencin suficientes.
 Carencia de una salida hacia un operador humano.
Resumen de algunos principios generales:
 Los mens no tienen que reproducir la estructura organizativa o
departamental de la empresa.
 Si el servicio tiene alguna restriccin, es preciso avisar al usuario antes de
nada. Por ejemplo, en un servicio de compra de tarjetas de llamadas
prepago, si se requiere que el usuario sea cliente, es preciso avisarle antes
de nada.
 Proporcionar solo la informacin que se necesita y de la forma ms simple
posible.
 Disear para la mayora de los usuarios evitando que tengan que recorrer
opciones que solo interesan a unos pocos.

140

 Hacer que el sistema trabaje por el usuario, por ejemplo, no pidiendo el


mismo dato varias veces y evitando preguntar informacin que el sistema
puede conocer.
 Ser consistente y no cambiar a menudo las opciones de los mens.
Saludo inicial:
 Debe haber una bienvenida breve: buenos das, buenas tardes...
 No repetirlo si en algn momento el usuario vuelve al inicio.
Es preciso evitar:
 Mensajes promocionales: poner solo si el usuario los puede encontrar
justificados y, sobretodo, han de ser breves permitiendo acceder a la
informacin en aquel mismo momento.
 Tener que pulsar la tecla * para saber si el terminal es de tonos (DTMF)
o no.
 Remitir al usuario a otro servicio.
Men principal:
 El primer men debe ser el principal a no ser que se tenga que pedirse
identificacin.
 Mximo 20 segundos de duracin total contando el saludo inicial y el
men principal.
Identificacin:
 Pedir identificacin slo cuando sea necesaria.
 Pedir el identificador ms fcil de recordar: telfono, DNI...
 Gestionar el final de la entrada de datos por medio de timeout, no solicitar
ningn tecleo adicional.
Las opciones de navegacin recomendables son:







Volver atrs.
Men principal.
Repetir.
Ayuda (si lo necesita la aplicacin).
Si existe una opcin de paso al operador, debe ser la ltima.
No hay que cortar nunca la comunicacin si el usuario se equivoca. Es
preciso dar caminos alternativos.
 Ordenar las opciones de las ms especficas a las mas generales.

Preguntas Si/No:
 Se usan para recuperar errores y para confirmar acciones.
141

 Tienen que ser preguntas directas que induzcan a decir de forma natural
solo Si o No:
Incorrecto:
Por favor, confirme si su DNI es: XXXXXXXX
Correcto:
DNI: XXXXXXXX. Es correcto?
 Debe ser una nica pregunta, no dos en una.
 Si adems de la pregunta hay texto informativo, poner la pregunta al final
de la frase. Ejemplo: Para obtener ms informacin sobre las condiciones
del contrato, desea que pase la llamada a un agente?.
Discado automtico (Auto-dial out)
Los Call Files (.call) se utilizan para iniciar llamadas desde una aplicacin externa. Son
archivos de texto que al copiarse en el directorio /var/spool/asterisk/outgoing,
Asterisk notar su presencia e inmediatamente activar la extensin en la prioridad
especificada en el archivo .call. Generalmente, se combinan con el programador de
tareas de Linux: el cron.
Algunos ejemplos de uso son: soluciones de callback, despertador telefnico, anuncios
automticos.
La estructura de un Call File es la siguiente:
Channel: <channel> ; La extensin que queremos llamar.
Callerid: <callerid> ; El identificativo de llamada que queremos enviar a la
;extensin llamada.
WaitTime: <number> ; Cuantos segundos esperamos antes de considerar la
;llamada sin xito.
Maxretries: <number> ; Numero de veces que intentaremos llamar la
;extensin
RetryTime: <number> ; Cuantos segundos debe esperar asterisk para volver a
; marcar
Account: <account> ; El nombre de la cuenta con la cual queremos grabar
; esta llamada (CDR)
Una vez que la extensin llamada conteste tenemos que decirle a asterisk lo que tiene
que hacer. Esto tambin se define en el mismo archivo. Hay dos opciones:

Ejecutar una aplicacin:


Application: <appname> ; la aplicacin que queremos utilizar
Data: <args>

; aqu podemos definir las opciones de la aplicacin

142

Ejecutar un punto exacto del plan de llamadas (Dialplan):


Context: <context> ; El contexto en el dial plan
Extension: <exten> ; La extensin que queremos usar en el contexto
; especificado.
Priority: <priority>

; El numero de la prioridad o la etiqueta si definida

Setvar: <var=value> ; Variables que se pueden necesitar en el


; contexto, extensin y prioridad que definimos.
Ejemplo:
En el siguiente ejemplo: se llama al 43424444 en el canal SIP y enva la llamada al
contexto [mensajes-salida], extensin 84, Prioridad 1:
- Archivo mensaje.call
Channel: SIP/43424444
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Context: mensajes-salida
Extension: 84
Priority: 1
-

extensions.conf
[mensajes-salida]
exten => 84,1,Playback(anuncio)
exten => 84,2,Playback(vm-goodbye)
exten => 84,3,Hangup

Sistema de logs
En el archivo /etc/asterisk/logger.conf se encuentra la configuracin del sistema de
logging de Asterisk.
Los distintos niveles de informacin a capturar en los logs son:
Verbose: mensajes generales sobre lo que est ocurriendo en el sistema (por
ejemplo si el valor de verbosity es mayor a 3, muestra las instrucciones del plan
de marcacin).
Debug: mensajes con informacin extendida, en general utilizados por
programadores.
Notice: notificaciones no crticas.
Warning: mensajes de alerta posiblemente crticos.
143

Error: mensajes indicando que ocurri algo grave.


En el contexto [logfiles] del archivo logger.conf se indican los archivos y mensajes a
loguear en c/u, la sintaxis es: archivo => nivel1,...,niveln
Los archivos de log se crean por defecto en /var/log/asterisk/ (esto se puede cambiar
/etc/asterisk/asterisk.conf).
Ejemplos:
debug => debug
full => notice,warning,error,debug,verbose
Para enviar a la consola, hay que definir el archivo especial console:
console => notice,warning,error,debug
Tambin se pueden enviar al syslog:
syslog.local0 => debug, warning, error, notice, verbose
Configurando adems en /etc/syslog.conf:
local0.*@ip_servidor
Los comandos relacionados con el manejo del log en el CLI son:
Reabre los archivos de log del Asterisk y recarga la configuracin del logger:
*CLI>logger reload
Rota los archivos de log y luego hace un logger reload.
*CLI>logger rtate
Cambia el nivel de informacin a mostrar en la consola. Por ej.: set verbose 999
*CLI>core set verbose
ENUM y Asterisk
ENUM (proviene de tElephone Number Mapping) o mapeo de nmeros telefnicos,
est constituido por una serie de protocolos que permiten crear una convergencia
entre la red telefnica tradicional y Internet. Permite asociar (utilizando el protocolo
DNS) un nmero telefnico a todas una serie de servicios tpicos de la red internet
(VoIP, correo electrnico, pagina web, etc.).
Cmo funciona?

144

Se ha creado una nueva jerarqua de dominios bajo el DNS e164.ARPA donde se


almacenan los servicios asociados a un determinado numero telefnico.
Un ejemplo:
+5712345678  8.7.6.5.4.3.2.1.7.5.e164.arpa
El servidor DNS (Name Authority Pointer o NAPTR) que alberga la entrada, tiene
registrados los servicios (sip, mail, http) publicados para dicho nmero.
Ejemplo de entrada en Bind:
$ORIGIN 8.7.6.5.4.3.2.1.7.5.E164.ARPA.
IN NAPTR 100 10 "U" "E2U+SIP" "!^.*$!SIP:PHONEME@EXAMPLE.NET!"
IN NAPTR 102 10 "U" "E2U+MAILTO"
"!^.*$!MAILTO:MYEMAIL@EXAMPLE.COM!"
Prioridad 1: contactar va SIP con fulano@foo.com.
Prioridad 2: contactar por correo con fulano@foo.com.
Como queda claro a travs de este ejemplo una vez que tengamos estos datos
podremos usarlos en nuestra centralita. Llamar directamente la SIP URI en lugar del
nmero telefnico (ahorrando los costos de llamadas) o enviar un correo electrnico.
Ejemplo:
Llamada desde un telfono IP al +34944991234
1) Consulta del telfono al servidor DNS sobre la direccin
4.3.2.1.9.9.4.4.9.4.3.e164.arpa
2) El DNS responde:
sip:fulano@foo.com
mailto:fulano@gmail.com
3) El telfono llama a sip:fulano@foo.com
Si queremos hacer una prueba podemos registrar nuestro nmero telefnico y
asociarlo a distintos servicios Internet a travs de E164.org, un directorio ENUM
publico.
Utilizacin de ENUM en Asterisk:
Primero tenemos que modificar el fichero enum.conf.
[general]
search => e164.arpa
145

search => e164.org


h323driver => H323
Ponemos estas lneas que nos permitirn hacer bsqueda en la jerarqua DNS
e164.arpa y e164.org.
Guardamos los cambios y echamos una mirada a las funciones disponibles en
Asterisk para hacer consultas a estos DNS:
ENUMLOOKUP: nos permite hacer una consulta de los registros NAPTR
asociados a un determinado nmero telefnico.
ENUMQUERY: nos permite hacer una consulta de los registros NAPTR pero, al
contrario de ENUMLOOKUP generar como resultado un ID que luego
podremos usar con la funcin ENUMRESULT.
ENUMRESULT: permite consultar los resultados generados por ENUMQUERY
usando el ID creado por ENUMQUERY.
Ejemplo:
Vamos a construir nuestro plan de llamadas de modo que antes de llamar cualquier
nmero (nacional o internacional) haga una consulta en ENUM para ver si es posible
usar una SIP URI en lugar del nmero telefnico:
exten => _00.,1,Set(Enum1=${ENUMLOOKUP(+${EXTEN:2},sip,c)}|counter=0)
exten => _00.,2,GotoIf($["${counter}"<"${Enum1}"]?3:6)
exten => _00.,3,Set(counter=$[${counter}+1])
exten => _00.,4,Dial(SIP/${ENUMLOOKUP(+${EXTEN:2},sip,,${counter})})
exten => _00.,5,GotoIf($["${counter}"<"${sipcount}"]?3:6)
exten => _00.,6,Dial(SIP/MyproveedorVoIP/${EXTEN})
exten => _00.,7,Hangup
DUNDI
DUNDi es un sistema peer-to-peer que permite localizar gateways para servicios
telefnicos. A diferencia de los servicios centralizados tradicionales (como ENUM), es
totalmente distribuido. No es en s un protocolo VoIP de sealizacin.
DUNDi se puede utilizar dentro de una empresa para crear una completa PBX federada
con ningn punto de fracaso, y la posibilidad de aadir nuevas extensiones
arbitrariamente.
Diagrama DUNDI:

146

Hay tres archivos que necesitan ser configurados para DUNDi: dundi.conf,
extensions.conf, y iax.conf. El archivo dundi.conf controla la autentificacin de los
compaeros que nos permiten realizar bsquedas a travs de nuestro sistema. Dado
que es posible ejecutar varias
arias redes diferentes en la misma caja, es necesario definir
una seccin diferente para cada interlocutor, a continuacin, configurar las redes de
pares en el que se permiten realizar bsquedas. Adems, tenemos que definir los
compaeros que desea utilizar
utiliza para realizar bsquedas.
Configuracion del archivo dundi.conf:
[general]
; puerto mediante el cual se comunica el protocolo dundi.
dundi
port=4520
; identificador de mi Asterisk en la nube dundi, se recomienda sea la MAC de la
; tarjeta de red eth0.
eth0
entityid=00:0C:29:0C:AB:C2
; Tiempo que permanece en cache la ruta para ir a las extensiones aprendidas ;
; mediante dundi .
cachetime=5
; Mximo nmero de saltos que se harn buscando el destino dentro de la red ;
; dundi .
ttl=12
; si al preguntar a un par, el ACK tarda ms de 2 segundos, se cancela la
;bsqueda
bsqueda a travs de ese peer; es ;til cuando no est activo el peer o cuando
;hay
hay una conexin ;mala hacia el peer
autokill=yes
Publicacin de mis nmeros en la red dundi (contextos dundi):

Los contextos
tos en esta seccin se enlazan con los contextos de
extensions.conf.

El contexto referenciado de extensions.conf es donde se controla qu


numeros se publican en la red dundi.

147

Al configurar un peer con el que nos vamos a enlazar, se puede determinar


a cuales de los mapas puede tener acceso el peer.

Contextos dundi:
nombre_contexto => contexto_extensions,peso,proto,destino[,opciones]]
nombre_contexto: Nombre del contexto al que se hace referencia en una
peticin dundi.
contexto_extensions. Nombre del contexto en el extensions.conf, donde se
buscarn los nmeros que son solicitados en la nube dundi.
peso. Deber ser 0 en caso de que nuestro conmutador publique directamente
los nmeros, en caso contrario, deber tener el valor del nmero de saltos que
necesita para llevar al destino.
proto. Cualquiera de los protocolos IP (sip, iax,323) con el cual el peer remoto
se debe comunicar con nosotros.
destino. Es la informacin que se entrega al peer para que pueda llegar al
nmero que est marcando.
opciones. Pueden ser varios argumentos los cuales indican el comportamiento
que se tendr cuando no tengamos nosotros el nmero que se est solicitando.
-

nounsolicited. No se permiten llamadas que no sean solicitadas.

nocomunsolicited. No se permiten llamadas comerciales que no sean


solicitadas.

nopartial. No se permiten bsquedas para patrones parciales.

residential, comercial,mobile. Le indica a los pares qu tipo de nmeros


son los que se estn publicando a travs de este contexto.

[mappings]
priv =>dundi-priv-local,0,IAX2,priv:${SECRET}@162.248.175.91/${NUMBER}
,nounsolicited,nocomunsolicit,nopatial
Variables:
${SECRET}. Es reemplazado por el password almacenado en la base de datos.
${NUMBER}. Es el nmero solicitado.
${IPADDR}. Es la IP de nuestro Asterisk. No se recomienda su uso.
Generacin de llaves:
La autenticacin en una red dundi normalmente se hace mediante llave
pblica/privada:
cd /var/lib/asterisk/keys
astgenkey -n dundi_ext_44xx
148

yum -y install php


cp dundi_ext_44xx.pub /var/www/html
service httpd start
wget -c http://132.248.175.90/dundi_principal.pub
*CLI>reload res_crypto.so
*CLI>reload pbx_dundi.so
*CLI>dundi lookup 4400@priv
Dundi: configuracin de pares:
;Par principal, el principal publica las dems extensiones
[00:0c:29:d8:86:c0] ; MAC address del par principal
model = symmetric
host = 132.248.175.90
inkey = dundi_principal ; nombre de la llave pblica del par
outkey = dundi_ext_44xx ; nombre de mi llave privada
include = priv
permit = priv
qualify = yes
dynamic=yes
Configuracin del archivo extensions.conf:
; tratamos de ir en el contexto local al nmero de extensin, despus vamos a
buscar a ;otro contexto. dundi-priv-lookup apunta a la directiva switch la cual
permite buscar las ;extensiones ;en otros conmutadores. Esto posibilita la
convergencia entre mltiples ;servidores Asterisk con ;diferentes nmeros de
bloques de extensiones
[macro-dundi-lookup]
exten => s,1,Goto(${ARG1},1)
include => dundi-priv-local
include => dundi-priv-lookup
Definicin de contextos:
; Son las extensiones locales, por ejemplo: 44XX
[dundi-priv-local]
exten => _44XX,1,Macro(Dial,${EXTEN})
; Buscamos con nuestros pares
[dundi-priv-lookup]
switch => DUNDi/priv
; Cuando se trata de una llamada de un par privado, llega aqu.
[dundi-priv-incoming]
include => dundi-priv-local
Bsqueda en pares:

149

; Contexto para llamadas salientes, aqu nos comunicamos con la red dundi,
pero ;agregamos 4 dgitos
[pares-dundi]
exten => _XXXX,1,Macro(dundi-lookup,${EXTEN})
[internos]
include => pares-dundi
Configuracion del archivo iax.conf:
[priv]
type=user
dbsecret=dundi/secret
context=internos
disallow=all
allow=ulaw
allow=alaw
allow=gsm
Aspectos avanzados de Asterisk:
Qu es AGI?
AGI (Asterisk Gateway Interface) nos permite ejecutar en Asterisk software de terceros
escrito en casi cualquier lenguaje (C, C#, Bourne Shell, PHP, Ruby, Python, Perl, Java).
Permite extender al infinito las posibilidades de Asterisk, juntando su potencia, con las
posibilidades que ofrece un lenguaje de programacin.
El programa debe cumplir:
Ser ejecutable (chmod 755 script.php).
Localizado por defecto en /var/lib/asterisk/agi-bin
Asociado con alguna extensin en el Dial Plan:
exten => 200,1,AGI(programa.php|argumentos)
El intercambio de informacin del script con Asterisk se realiza va los canales de
comunicacin: STDIN, STDOUT y STDERR.

Lee desde STDIN para obtener informacin.


Escribe en STDOUT para enviar informacin.
Escribe en STDERR para enviar informacin de debugging.

El script AGI enva comandos a Asterisk escribiendo en el STDOUT. Seguidamente


Asterisk enva una respuesta por cada uno de ellos que es leda por el script.
Algunos ejemplos de comandos son:

ANSWER: atiende.
150

HANGUP: cuelga.
SAY [NUMBER | DIGITS | ALPHA |
| PRIORITY]: establece un nuevo contexto, extensin o prioridad luego de
finalizada la ejecucin de script.
VERBOSE: imprime un mensaje en el log.
WAIT FOR DIGIT: PHONETICS]: dice un nmero, dgito, caracter o una
cadena fonticamente.
SET [CONTEXT | EXTENSION espera que se presione un dgito.
[SET | GET] VARIABLE: asigna u obtiene el valor de una variable del plan de
marcacin.

Qu es AMI?
AMI (Asterisk Manager TCP/IP API) permite que programas cliente se conecten a
Asterisk mediante TCP/IP y sean capaces de ejecutar comandos y leer eventos, como
por ejemplo crear o monitorizar llamadas ,canales y colas. Por cada cosa que Asterisk
realiza se generan eventos que pueden ser ledos mediante una sesin de manager, y
el usuario puede tratarlos a su gusto.
Adems, AMI permite la ejecucin de comandos, lo que proporcina la posibilidad de
alterar el comportamiento de Asterisk desde un programa hecho a medida.
Funcionamiento:
Para trabajar con AMI es necesario tener un usuario definido en el fichero
manager.conf. A partir de aqu hay que establecer una comunicacin TCP/IP con el
servidor de Asterisk en el puerto 5038, y una vez conectado y autentificado, se puede
comenzar a leer los eventos o ejecutar comandos.
Las cuentas de usuario se configuran en /etc/asterisk/manager.conf.
Ejemplo:
[general]
enabled=yes
[admin]
secret = 1234
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
En este caso, "admin" es el nombre de usuario, la clave es "1234" y slo se permiten
conexiones para este usuario va localhost. El resto de las lneas establecen permisos
(r,w,r/w) para cada clase (system, call, etc.).
151

Una de las mejores aplicaciones opensource para controlar y visualizar el estado en


tiempo real de la centralita Asterisk es: Flash Operator Panel (FOP).
Qu es AJAM?
AJAM es una nueva tecnologa disponible en Asterisk 1.4 (Asyncronous Javascript
Asterisk Manager) que permite conectar con Asterisk por medio de HTTP. Para poder
trabajar con AJAM es necesario configurar los ficheros manager.conf y httpd.conf.
Configuracin del servidor HTTP de Asterisk:
1) Descomentar "enabled=yes" en /etc/asterisk/http.conf para habilitar el
pequeo servidor HTTP de Asterisk.
2) Si se desea tener acceso a simples pginas HTML, CSS, JavaScript, etc., hay
que descomentar "enablestatic = yes" .
3) Poner la Ip del servidor Asterisk y el puerto en "bindaddr" y "bindport
respectivamente.
4) Ajuste el "prefix" que debe ser el comienzo de cualquier URI en el servidor .
El valor predeterminado es "asterisk" ..
Permitir el acceso al Manager via HTTP:
1) Asegrese de que tiene tanto "enabled = yes" como "webenabled = yes" en
la configuracin / etc / asterisk / manager.conf .
2) Tambin puede usar "httptimeout" para establecer el tiempo de espera
predeterminado para las conexiones HTTP (en segundos).
3) Asegurarse de la configuracin de manager.conf teniendo claro cul es el
username y la password.
Una vez que estos cambios de configuracin han sido completados puede reiniciar
Asterisk y podr acceder a distintas funciones de web. Puede encontrar una lista
completa de estas funciones:
*CLI> show http o *CLI> http show status
Ejemplos de funcionamiento:


Para abrir una sesin de Asterisk Manager:


http://192.168.1.200:8088/asterisk/manager?action=login&username=admin_
de_usuario&secret=amp111

Para ver la salida del comando status:


152

http://192.168.1.200:8088/asterisk/rawman?action=status
Qu es AEL2?
AEL2 (Asterisk Extension Language versin 2) tiene como objetivo proporcionar una
forma diferente de escribir el Dialplan ,una forma ms flexible.
Para utilizar AEL2, lo nico que tiene que hacer es tener cargado el modulo
pbx_ael2.so. Esto se har de forma automtica si se utiliza 'autoload = yes "en
/etc/asterisk/modules.conf. Cuando se carga el mdulo, se busca 'extensions.ael2' en
/etc/asterisk/. Algunos usuarios pueden mantienen el archivo extensions.conf para
conservar las caractersticas que se configuran en la seccin "general" de
extensions.conf.
Para volver a cargar extensions.ael2:
*CLI> ael2 reload
Hacer un debug de los Contextos:
*CLI> ael2 debug contexts
Hacer un debug de las macros:
*CLI> ael2 debug macros
Ejemplo:
context prueba {
1234 => {
Dial(SIP/${EXTEN},45);
switch (${DIALSTATUS}) {
case BUSY:
Voicemail(b200);
break;
case NOANSWER:
Voicemail(u200);
break;
default:
Noop(Algo raro ha pasado);
Hangup;
}
}
}

Eso seria similar a esto:


[prueba]
exten => 1234,1,Dial(SIP/${EXTEN},45)
exten => 1234,n,GotoIf($[${DIALSTATUS}=BUSY]?BUSY)
exten => 1234,n,GotoIf($[${DIALSTATUS}=NOANSWER]?NOANSWER)
exten => 1234,n,Hangup()
153

exten => 1234,BUSY,Voicemail(b200)


exten => 1234,BUSY,Hangup()
exten => 1234,NOANSWER,Voicemail(u200);
exten => 1234,NOANSWER,Hangup()

Qu es ARA?
Asterisk permite ser configurado en una Base de Datos, mediante Asterisk Realtime
Architecture.
Por ejemplo soporta MySQL, podiendo migrar a la base de datos lo siguiente:
Configuracin de dispositivos SIP e IAX.
Configuracin de buzones de voz.
Configuracin de colas.
El fichero a configurar es extconfig.conf. El fichero res_mysql.conf contiene la
configuracin de la base de datos.
ARA dispone de 2 tipos de Realtime: esttico y dinmico:
Esttico: La configuracin esta almacenada en la BD, pero Asterisk la carga al
arrancar como si fuera un fichero. Si se realiza algn cambio, es necesario hacer
un reload.
Dinmico: La configuracin esta almacenada en la BD y Asterisk realiza una
consulta a esa BD cada vez que necesita un dato. No es necesario hacer reload
si se han realizado cambios. Mucha carga para el servidor...
Todos los ficheros no soportan Realtime Dinmico como el fichero de colas
(queues.conf).
Ejemplo de configuracin (extconfig.conf):
[settings]
;;RealTime Dynamic
;file => driver,database,table
;sipusers => mysql,asterisk,dispositivos_sip
;iaxpeers => mysql,asterisk,dispositivos_iax
;voicemail => mysql,asterisk,buzones
;;RealTime Static
;file => driver,database,table
;sip.conf => mysql,asterisk,sip_conf
;extensions.conf => mysql,asterisk,extensions_conf
;iax.conf => mysql,asterisk,iax_conf
;queues.conf => mysql,asterisk,queues_conf
;voicemail.conf => mysql,asterisk,voicemail_conf
154

Administracin de Asterisk
La administracin de Asterisk se hace por interfaz web o por la lnea de comandos CLI
en modo administrador.
Interfaces web para Asterisk:

Asterisk GUI:

Interfaz grfica para Asterisk creada por Digium.


El AsteriskGUI se cre para hacer que la configuracin, gestin, y ajuste de su sistema
Asterisk sea menos complicado, proporcionando un fcil uso de la interfaz grfica.
El AsteriskGUI es diferente de la mayora de las interfaces que se han creado para su
uso con Asterisk, ya que la interfaz realmente manipula el Asterisk y los archivos de
configuracin.
Se lanz tras el lanzamiento del Asterisk Appliance.
Lo bueno de esta interfaz, es que lee la configuracin que hemos escrito a mano, la
entiende y permite gestionarla va web, algo que las dems interfaces no hacen
(siempre machacan los cambios o acuden a archivos externos incluidos para
saltarse esta dificultad, en lugar de plantarle cara).
Es importante que conozcamos estas GUI, porque Digium planea convertirla en un
estndar para las versiones Appliance, AsteriskNOW y Asterisk Business Edition.
En Agosto de 2008 Digium sac la versin estable de Asterisk GUI 2.0.
Instalacin:
Para instalar la interfaz grfica web lo tenemos que hacer desde subversion, por ello
necesitaremos el cliente:
yum install subversion
En /usr/src:
svn checkout http://svn.digium.com/svn/asterisk-gui/branches/2.0 ast-gui
cd ast-gui
./configure
make && make install && make samples
Ahora configuramos los archivos para poder activar el pequeo servidor http que trae
Asterisk GUI y la autenticacin para acceder:

155

En /etc/asterisk/http.conf:
[general]
enabled=yes
enablestatic=yes
En /etc/asterisk/manager.conf:
[general]
displaysystemname = yes
enabled = yes
webenabled = yes
port = 5038
;httptimeout = 60
bindaddr = 0.0.0.0
[admin]
secret = clave
read = system,call,log,verbose,command,agent,config
write = system,call,log,verbose,command,agent,config
Una vez guardados, comprobamos que todo ha ido bien:
make checkconfig
Con este ltimo comando (el make checkconfig) confirmaremos que la configuracin
es la correcta, sino nos dar algn mensaje de error. Tan solo deberemos asegurarnos
que est habilitado el manager en el puerto 5038 as como que existe un usuario valido
en el manager.conf y haber des comentado los parmetros en el archivo http.conf,
reiniciamos Asterisk y listo.
Arrancamos asterisk:
./asterisk -vvvgc
Ahora ya podemos ir a arrancar el script para finalizar la configuracin:
http://ipServidor:8088/asterisk/static/config/cfgbasic.html.

FreePBX:

FreePBX es una completa aplicacin web de PBX. Asterisk no viene con ninguna
Interfaz y no podemos conectar un telfono en ella y hacerlo funcionar sin editar
archivos de configuracin y crear un Dialplan para su uso.
FreePBX simplifica esto ofreciendo funcionalidades pre-programados accesibles a
156

travs de una interfaz web amigable que le permite tener un PBX completamente
funcional casi de inmediato sin necesidad de programacin.
FreePBX se basa en la pila LAMPA (Linux, Apache, MySQL, PHP y Asterisk). Es un
sistema modular, con clic para instalar plugins descargables a travs de Internet desde
el repositorio de mdulo en lnea.
Algunas de las caractersticas de FreePBX son:
-

Agregar o cambiar la extensin y las cuentas de correo de voz en cuestin de


segundos.
- El soporte nativo de SIP, IAX, y los clientes de ZAP (otros criterios de valoracin
son apoyados a travs de extensiones personalizadas).
- Reducir los costos de larga distancia con LCR.
- Enrrutar las llamadas entrantes basndose en la hora del da.
- Crear Recepcionista digital interactiva (IVR).
- Grupos de llamada de diseo sofisticado.
- Gestin de llamadas con colas.
- Detectar y recibir los faxes entrantes.
- Copias de seguridad y restaurar el sistema.
- Guardar las grabaciones de audio de las llamadas.
- Ver detalle de llamadas con Asterisk-stat.
- Ver las extensiones y el estado de los trunks con Flash Operator Panel.
- Ver grabaciones de la conversacin con Asterisk Recording Interface (ARI).
- Nmero ilimitado de Conferencias (limitado por la potencia de CPU disponible.
(300 usuarios simultneos en conferencias sobre un Pentium 4 a 3 GHz, 600
con doble ncleo!)...
- Msica en espera.
Instalacin de FreePBX
1.) Instalar Asterisk.
2.) Deshabilitar SeLinux (si no lo desactivaste en la instalacin del sistema
operativo).
En /etc/selinux/config  "selinux=disabled"
3.) Instalar paquetes necesarios para FreePBX
yum install e2fsprogs-devel keyutils-libs-devel krb5-devel libogg libselinuxdevel libsepol-devel libxml2-devel libtiff-devel gmp php-pear php-pear-DB
php-gd php-mysql php-pdo ncurses-devel audiofile-devel libogg-devel mysql-

157

devel zlib-devel perl-DateManip sendmail-cf kernel-devel openssl-devel


httpd sox spandsp mpg123
4.) Instalar lame
wget http://easynews.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz
tar zxvf lame-3.97.tar.gz
cd lame-3.97
./configure
make
make install
5.) Descargar FreePBX
wget http://mirror.freepbx.org/freepbx.tar.gz
6.) Instalar BD para FreePBX (mysql con password)
mysqladmin create asteriskcdrdb p
mysql --user root -p asteriskcdrdb <
/usr/src/freepbx/SQL/cdr_mysql_table.sql
mysqladmin create asterisk p
mysql --user root -p asterisk < /usr/src/freepbx/SQL/newinstall.sql
mysql -u root p
GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost
IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED
BY 'password';
flush privileges;
7.) Cambios en el Sistema Linux
useradd -c "Asterisk PBX" -d /var/lib/asterisk asterisk
Cambiar el usuario y grupo apache por usuario y grupo asterisk
nano +231 /etc/httpd/conf/httpd.conf
Cambiar AllowOverride None a AllowOverride All
nano +329 /etc/httpd/conf/httpd.conf
8.) Instalar FreePBX
yum install db
cd /usr/src/freepbx
./start_asterisk start
./install_amp --username=asterisk --password=password

158

En /etc/rc.local  "/usr/local/sbin/amportal start"


chkconfig httpd on
chkconfig mysqld on
9.) Solucionar Problemas de Flash Operator Panel (Si no tienes instalado Fop2)
wget http://www.asternic.org/files/op_panel-0.29.tar.gz
tar xvfz op_panel-0.29.tar.gz
cd op_panel-0.29
cp op_server.pl /var/www/html/panel/
cp flash/operator_panel.swf /var/www/html/panel/
En el archivo op_server.cfg:
[general]
use_amportal_conf=1
//usuario y clave similar al registrado en el archivo
/etc/asterisk/manager.conf
manager_user=admin
manager_secret=password
10.) Solucionar Password de ARI
nano /var/www/html/recordings/includes/main.conf.php
$ari_admin_password = "password";
11.) Configurar Sendmail:
nano /etc/mail/sendmail.mc
define(`SMART_HOST', `relay.DOMAIN.com)dnl
MASQUERADE_AS(`pbx.DOMAIN.com')dnl
FEATURE(`masquerade_envelope')dnl
make -C /etc/mail
12.) Editar sip_nat.conf para NAT:
nano /etc/asterisk/sip_nat.conf
localnet=192.168.1.0/255.255.255.0
externhost=pbx.DOMAIN.com
externrefresh=10
fromdomain=DOMAIN.com o externip=ipPublica
nat=yes

159

qualify=yes
canreinvite=no
13.) Aadir extra codecs a la configuracion:
nano /etc/asterisk/sip_custom.conf
allow=gsm
allow=h261
allow=h263
allow=h263p
videosupport=yes
nano /etc/asterisk/iax_custom.conf
allow=gsm
allow=h261
allow=h263
allow=h263p
videosupport=yes
14.) Editar Configuracion de Correo:
nano /etc/amportal.conf
//Si la interface web de la PBX sera accedida desde internet o localmente.
AMPWEBADDRESS=pbx.DOMAIN.com o IpPublica o ip Privada
nano /etc/asterisk/vm_email.inc
remove "Visit http://AMPWEBADDRESS/cgi- bin/vmail.cgi?action=login
&mailbox=${VM_MAILBOX} to check your voicemail with a web browser.\n"
nano /etc/asterisk/vm_general.inc
serveremail=pbx@DOMAIN.com ;
// El email desde donde la notificacion pudo venir
fromstring=DOMAIN PBX ; // Nombre Real o email Sender
15.) Configuracion para Music on Hold:
chown asterisk /var/lib/php/session/
sed -i "s|upload_max_filesize = 2M|upload_max_filesize = 20M|"
/etc/php.ini
En /etc/httpd/conf.d/php.conf  echo "LimitRequestBody 20000000"
ln -s /var/lib/asterisk/moh /var/lib/asterisk/mohmp3
16.) Iniciar FreePBX
160

En consola  amportal start


En el Explorador en http://IpDelServidor/admin
Lnea de comandos de Asterisk: CLI
Esta lnea de comandos es bastante potente, y permite controlar y monitorizar gran
parte de la situacin de la centralita.
Soporta el empleo de la tecla <Tabulador>, al estilo de las consolas de UNIX/GNU
Linux, por lo que para ver un listado de todos los comandos disponibles, basta con
presionar varias veces la tecla.
Asterisk CLI es la consola de Asterisk desde donde podemos debugear y comprobar
el funcionamiento de Asterisk.
Para acceder a ella debemos ejecutar:
service asterisk start
cd /usr/sbin
asterisk r
El CLI permite acciones tales como:

Ver que versin de Astersik tenemos instalada:


*CLI> show versin

Tiempo que lleva en ejecucin despus del ltimo reinicio:


*CLI> core show uptime

Recargar configuraciones en el PBX funcional


(necesario cuando modificamos algn archivo de configuracin):
*CLI> reload

Mostrar aplicaciones registradas en Asterisk:


*CLI>show applications

Listar los canales definidos:


*CLI>show channels

Mostrar informacin sobre los codecs instalados :


*CLI>show codecs

161

Mostrar un cuadro de doble entrada con los tiempos de conversin entre


formatos de codecs:
*CLI>show translation

Es posible realizar una desconexin del CLI 'quit'.


Asterisk continuar ejecutndose en segundo plano.
Para matar al propio Asterisk desde el CLI, se puede utilizar el comando stop, en sus
tres variantes:

Detiene Asterisk al momento:


*CLI> stop now

Detiene Asterisk cuando no haya carga:


*CLI> stop when convenient

Detiene Asterisk cuando no haya carga y deja de aceptar peticiones de


llamadas a partir de este momento:
*CLI> stop gracefully

Nivel de Verbose: Este valor indica la cantidad de mensajes que se recibirn sobre los
eventos generales del sistema. Cuanto ms alto, ms informacin sobre lo que sucede
en la centralita se recibir.
Este nivel, se puede establecer de varias formas:

Al arrancar el demonio:
sudo asterisk vvvvvv

Al conectarse al demonio:
sudo asterisk -rvvvvvvvv

Desde el CLI (Quitar opciones de visualizacin):


*CLI>set verbose O

Nivel de Debug: Este valor indica la cantidad de mensajes que se recibirn sobre los
eventos generales del sistema, pero utilizado normalmente para depurar problemas de
drivers o de aplicaciones.
Este nivel, se puede establecer de varias formas:

162

Al arrancar el demonio:
sudo asterisk dddd

Al conectarse al demonio:
sudo asterisk rdddd

Desde el CLI (Recibir como mximo 30 mensajes):


*CLI> Set Debug 30

Realizar un debug de un canal:


*CLI>debug channel

Acciones del canal de consola (console channel):

Permite hacer un llamada desde la consola :


*CLI>console dial

Permite contestar una llamada desde la consola:


*CLI>console answer

Cuelga la llamada en curso en la consola:


*CLI>console hangup

Acciones sobre los mdulos:

Cargar/descargar un mdulo especfico:


*CLI>module load/unload

Mostrar todos los mdulos levantados:


*CLI>module show

Acciones del Dialplan:

Mostrar el plan de marcacin actual:


*CLI>dialplan show

Guardar los cambios realizados:


163

*CLI>dialplan
dialplan save

Agregar / eliminar una extensin en un contexto dado al plan de marcacin:


*CLI>dialplan
dialplan add/remove extensin

Incorporar / eliminar un include en un contexto dado en el plan de marcacin:


*CLI>dialplan
dialplan add/remove include

A travs de la lnea de comandos CLI tambin podemos controlar por ejemplo los
usuarios SIP e IAX2, el estado de las tarjetas de telefona o los buzones de voz
existentes en la centralita Asterisk:
*CLI>sip
sip show peers
*CLI>iax2
iax2 show peers
*CLI>zap
zap show status
*CLI>voicemail
voicemail show users
Para obtener informacin detallada sobre todos los comandos del CLI basta con poner:
*CLI>help

Versiones Enterprise de Asterisk:

Asterisk Appliance

Descripcin:
El Asterisk Appliance (AA50) es un PBX basado y dirigido
hacia las PyMES (2-50
50 usuarios), oficinas remotas de
grandes organizaciones (2--50 usuarios por sitio), y los
proveedores de servicios gestionados para la premisa
CPE con las soluciones basadas en SIP o IAX trunking.
El AA50 tambin ofrece una solucin hbrida alternativa (una combinacin de las
aplicaciones de VoIP usando legado de equipo de telecomunicaciones) para los clientes
empresariales que todava no estn preparados para migrar a una solucin de VoIP.
El Asterisk Appliance 50 tiene las caractersticas de la licencia comercial Asterisk
Aste
Business Edition , as como de la Digium AsteriskGUI 1.0 desarrollados.
El AA50 est disponible en las siguientes configuraciones: Slo VoIP (S800i), ocho FXO
(S808B), y cuatro FXS y cuatro FXO (S844B).
Caractersticas:

164

-Servidor
Servidor Asterisk completo con
con AsteriskGUI.
- Asterisk Business Edition con licencia comercial.
-Built-in
in Router Ideal para pequeas oficinas.
oficinas.
-Hasta
Hasta ocho puertos analgicos.
-Apoyo
Apoyo a una combinacin de mdulos FXO y FXS.
-1GB
1GB Compact Flash Card .
-Hardware
Hardware base de Cancelacin de eco.
-8
8 MB Onboard Flash.
-64
64 MB de RAM Onboard.
-5
5 Puertos Ethernet (4 LAN, 1 WAN)
Beneficios:





Paquetes Todo en uno con Hardware de Digium, Asterisk Digium Software,


sistema de documentacin, y servicios de suscripcin.
suscr
Mayor fiabilidad en el PC.
Baja necesidad de energa  Reducidos costes de propiedad.
Permite un completo despliegue ofreciendo rentables soluciones de telefona
con una instalacin sencilla y caractersticas como el auto-aprovisionamiento
auto aprovisionamiento o
la posibilidad
osibilidad de utilizacin de telfonos IP de Polycom.
Una suscripcin aade la paz mediante la prestacin de apoyo en cualquier
incidente, en curso de garanta, y en el acceso a las personas adecuadas.
Asterisk Business Edition

Software Digium
Digium ofrece Asterisk Business Edition, una versin
perfeccionada de la versin de fuente abierta Asterisk PBX,
para el sistema operativo Linux. Digium Partner tambin
ofrece productos que se integran con Asterisk Business
Edition y de fuente abierta Asterisk.
Descripcin:
Por qu Asterisk Business Edition?
Asterisk es una completa plataforma de telecomunicaciones y representa una muy
valiosa pieza de software por una serie de razones:
-

Reduccin de los costos extrema


Control y personalizacin
Flexible dial plan
Rich, caracterstica de base amplia

Fcil de Instalar, configurar y Usar

165

Asterisk Business Edition incluye soporte rPath distribucin de Linux con una mejor
instalacin, un manual tcnico Asterisk, y una gua rpida; hace que Asterisk sea an
ms fcil de instalar, configurar y utilizar.
Para mejorar la interactividad del cliente con un Asterisk PBX, Asterisk Business Edition
se integra con el reconocimiento LumenVox Engine y Cepstral Texto-a-Habla. Una
versin de prueba de la Cepstral producto est incluido, y un puerto libre de Lumenvox
Lite tambin est disponible la solicitud a Asterisk Business Edition clientes. La compra
de una licencia es necesaria para activar funciones adicionales de estos productos.
Rendimiento, interoperabilidad y fiabilidad
El programa de pruebas de Digium asegura la fiabilidad, el rendimiento y la
interoperabilidad de Asterisk Business Edition con los principales equipos, software y
protocolos. Digium hardware tarjetas se realizarn las pruebas de la total
compatibilidad con Asterisk Business Edition, como son varios modelos de seleccionar
los servidores, VoIP, y los dispositivos TDM. Todas las principales funciones de
software en Asterisk Business Edition son testeadas para la funcionalidad y la
fiabilidad. Banco de pruebas de sistemas tambin son sometidos a extremas
condiciones de estrs Empirix utilizando equipos de prueba para simular cientos de
miles de llamadas en el mundo real con diversas combinaciones y configuraciones.
Como resultado, los clientes pueden confiar en su probada combinacin de Asterisk
Digium software y hardware que trabajan juntos para proporcionar una caracteristicarica VoIP PBX o sistema.
Caractersticas:
-Soporte de Asterisk Bussiness Ed.
-AbsoluteTimeout
-AddQueueMember
-ADSIprog
-AgentCallbackLogin
-AgentLogin
-AgentMonitorOutgoing
-AGI
-Answer
-AppendCDRUserField
-Authenticate
-Background
-BackgroundDetect
-Busy
-ChangeMonitor
-ChanIsAvail
-ChanSpy
-CheckGroup
-Congestion
-ControlPlayback
-Cut

-Hangup
-HasNewVoicemail
-HasVoicemail
-IAX2Provision
-ImportVar
-LookupBlacklist
-LookupCIDName
-Macro
-MacroExit
-MacroIf
-MailboxExists
-Math
-MD5
-MD5Check
-MeetMe
-MeetMeAdmin
-MeetMeCount
-Milliwatt
-Monitor
-MP3Player
-MusicOnHold

-SayUnixTime
-SendDTMF
-SetAccount
-SetAMAFlags
-SetCallerID
-SetCallerPres
-SetCDRUserField
-SetCIDName
-SetCIDNum
-SetGlobalVar
-SetGroup
-SetLanguage
-SetMusicOnHold
-SetRDNIS
-SetVar
-SIPAddHeader
-SIPDtmfMode
-SIPGetHeader
-SoftHangup
-StartMusicOnHold
-StopMonitor
166

-DateTime
-DBDel
-DBdeltree
-DBGet
-DBPut
-Dial
-DigitTimeout
-Directory
-DISA
-DumpChan
-DUNDiLookup
-Echo
-Endwhile
-EnumLookup
-Eval
-Exec
-ExecIf
-ExecIfTime
-Flash
-ForkCDR
-GetCPEID
-GetGroupCount
-GetGroupMatchCount
-Goto
-GotoIf
-GotoIfTime

-NoCDR
-NoOp
-Park
-ParkAndAnnounce
-ParkedCall
-PauseQueueMember
-Playback
-PlayTones
-Prefix
-PrivacyManager
-Progress
-Queue
-Random
-Read
-ReadFile
-RealTime
-RealTimeUpdate
-RemoveQueueMember
-RetryDial
-ResetCDR
-ResponseTimeout
-Ringing
-SayAlpha
-SayDigits
-SayNumber
-SayPhonetic

-StopMusicOnHold
-StopPlayTones
-StripLSD
-StripMSD
-Suffix
-System
-TestClient
-TestServer
-Transfer
-TryServer
-TXTCIDName
-UnpauseQueueMember
-UserEvent
-Verbose
-VMAuthenticate
-VoiceMail
-VoiceMailMain
-Wait
-WaitExten
-WaitForRing
-WaitForSilence
-WaitMusicOnHold
-While
-Zapteller
-ZapBarge
-ZapScan

Beneficios:

Reduccin de costos extrema

Combinado con la telefona de bajo costo de hardware, Asterisk Business


Edition se puede utilizar para crear un PBX a una fraccin del precio tradicional
de PBX y sistemas clave, proporcionando al mismo tiempo un nivel de
funcionalidad superior a la de muchos de los ms caros sistemas disponibles.

Control

Asterisk Business Edition permite al usuario tomar el control de su sistema


telefnico. Una vez que la llamada es en una caja linux con Asterisk, nada se
puede hacer para l. De la misma forma que Apache le da al usuario un control
de grano fino sobre prcticamente todos los aspectos de su operacin (y de su
carcter de fuente abierta da ms flexibilidad), lo mismo se aplica a Asterisk.

Rpido Despliegue y desarrollo

Asterisk PBX permite la IVR y aplicaciones que se cre y despleg rpidamente.


Su potente CLI texto y archivos de configuracin permite una rpida
configuracin y diagnstico en tiempo real.

167

Rich, caracterstica de base amplia

Porque es de cdigo abierto Asterisk y que se aplica de software, no slo


aportan caractersticas como el buzn de voz, mens de voz, IVR, y de las
conferencias, que son muy costosas para los sistemas de propiedad, sino que
tambin permite nuevas caractersticas que se aadirn rpidamente y con un
mnimo de Esfuerzo.

Personalizacin

A travs de su apoyo a la internacionalizacin, los archivos de configuracin, y


el cdigo fuente, cada uno de los aspectos de Asterisk pueden ser ajustados.
Por ejemplo, los cdigos de Asterisk para funciones de llamadas podra ser
cambiado para que coincida con un sistema existente.

Despliegue de contenido dinmico

De la misma forma que los servidores web como Apache permitir a los
usuarios desplegar contenido dinmico, como la informacin de la cuenta, la
pelcula muestra los tiempos, etc, en la web, Asterisk permite desplegar esos
contenidos dinmicos a travs del telfono, con la misma facilidad como CGI.

Marcado Extremadamente flexible

Asterisk es excepcionalmente flexible de marcado permite una integracin sin


problemas de IVR y la funcionalidad PBX. Muchas de las caractersticas de
Asterisk (deseado y las caractersticas de la futura) se pueden aplicar usando
nada ms que la extensin lgica. Asterisk apoya una mezcla de longitudes de
extensin.

Distribuciones Linux con Asterisk:


Las distribuciones con Asterisk ms conocidas son:
 AsteriskNOW
 TrixBox
 Elastix
El 80% de los usuarios que utilizan este tipo de distribuciones para montar su sistema
de comunicaciones, no saben cmo modifican los ficheros de configuracin o
directamente jams lo han hecho.
Los usuarios de distribuciones controladas por interfaz web suelen olvidar (o no
quieren reconocer)que toda interfaz es creada con un objetivo: simplificar la
configuracin y gestin de una aplicacin (en este caso, de Asterisk), esta
simplificacin tiene un efecto muy negativo, impide realizar tareas que no han sido
previamente preparadas por los creadores de dicha interfaz o incluso han sido
168

desechadas por su complejidad y poca utilidad para un pblico general, se dice


entonces que esa distribucin est a merced de lo que permita hacer la interfaz . En
muchos casos se puede pensar que no se puede hacer algo, simplemente porque la
interfaz web no lo permite.
AsteriskNOW
AsteriskNOW es el camino ms rpido para empezar la construccin de soluciones
personalizadas de telefona con Asterisk. Simplemente descarga el archivo. Iso,
grabarlo en un CD, colquelo en la unidad de CD o DVD en el equipo de destino y en
menos de 30 minutos tendr un sistema Asterisk funcional lista para su aplicacin
personalizada de telefona.
Instalar Asterisk y la costumbre comenzar a construir aplicaciones de telefona con
AsteriskNOW. AsteriskNOW instala una distribucin completa de Linux (rPath en las
primeras versiones y CentOs en la ltima versin 1.5), Asterisk, el marco de conductor
DAHDI, Asterisk-GUI, la base de datos MySQL, el servidor web Apache y una amplia
variedad de herramientas de desarrollo y componentes.
Qu es AsteriskNOW?
AsteriskNOW hace fcil crear soluciones personalizadas de telefona por la instalacin
automtica de la "plomera". Gran parte de la complejidad de Asterisk y Linux es
manejado por el instalador y el GUI de administracin. Los desarrolladores de
aplicaciones e intergrators pueden concentrarse en la construccin de su solucin.

169

Qu puedo crear con AsteriskNOW?


Entre las muchas aplicaciones que puedes crear con AsteriskNOW son:

VoIP Gateway
Skype Gateway
IP PBX
Call Center ACD
Conferencia de
Puente

Servidor IVR
Sistema de buzn de voz
Call Recorder
Servidor de fax
Speech Server

A quin est dirigido?


AsteriskNOW fue construido para los desarrolladores de aplicaciones, integradores de
sistemas, estudiantes, piratas informticos y otros que quieren para crear soluciones
personalizadas con Asterisk.
Quin apoya a AsteriskNOW?
Los usuarios de AsteriskNOW tienen dos opciones. Hay una comunidad activa de
usuarios de AsteriskNOW, integradores y desarrolladores que ofrecen apoyo a la
comunidad en los foros de AsteriskNOW y lista de correo.
Digium ofrece suscripciones de soporte comercial para AsteriskNOW. Si su aplicacin
requiere el apoyo directo del fabricante, consulta la pgina de suscripciones.
Caractersticas y funciones:
AsteriskNOW tiene una larga lista de caractersticas que lo convierten en el preferido
de Asterisk listo para ejecutar la distribucin:
-

Instalacin fcil y rpida. Normalmente se instala en 15 minutos o menos.


No requiere un profundo conocimiento de Linux. Seguro para los usuarios de
Mac y Windows.
Web-interfaz de configuracin basada en las tareas de gestin hace que la
mayora de apuntar y hacer clic.
Los datos Construir aplicaciones dirigidas con soporte integrado para ODBC y
HTTPS.
Asistente para la configuracin de las conexiones de VoIP hace que sea fcil de
conectar.
Instalacin de pre-construidos, paquetes de aplicaciones utilizando el
administrador de aplicaciones.
Deteccin automtica y la configuracin de analgicas Digium y hardware de
telefona Digitial.

170

Sound Manager hace fcil crear, instalar y gestionar el sistema de mensajes y


grabaciones.
Dialplan y editor de secuencia de comandos AEL con resaltado de sintaxis y
validacin simplifica el desarrollo.
Nombre y Call Detail Record (CDR) Viewer proporciona acceso instantneo a la
actividad del sistema.
Integrado de texto de ayuda para las aplicaciones, funciones, CLI, AGI y los
comandos de AMI.
En tiempo real de seguimiento y depuracin de la consola ayuda a simplificar el
proceso de desarrollo.
Paso a paso el desarrollo de aplicacin tutoriales ensear los fundamentos
rpidamente.
Apoyo a la creacin de agrupaciones y de alta disponibilidad que sea fcil de
escalar las aplicaciones.
Actualizaciones automticas mantener su sistema en armona y seguridad.
Ahorre dinero con una oferta especial en el apoyo de Digium y servicios de
formacin.

Actualidad:
El 1 de Abril Digium public la versin estable de AsteriskNOW 1.5.0.
Digium public su primera beta de esta versin en Octubre de 2008 y
ya iba siendo hora de que lo actualizaran. Los principales cambios:

Distribucin CentOS actualizado.


Web basada en httpd y FreePBX
Asterisk 1.6 con soporte de DAHDI.
Versiones x86 (32 bits) y x64 (64 bits)

Podis descargarlo de aqu: http://www.asterisknow.org/downloads.


TrixBox
TrixBox es una distribucin basada en CentOS que comercializa la empresa Fonality.
Esta distribucin tiene una versin gratuita y es de las distribuciones rpidas, una de
las ms utilizadas por newbies.

171

Una vez instalado TrixBox, el sistema dispone de:

Asterisk
Apache
MySQL
SugarCRM
ARI
FreePBX

Principales caractersticas
Trixbox es una completsima y poderosa plataforma. Los productos que incluye son:

TrixBox dashboard
Asterisk (tm) Open Source PBX
FreePBX herramienta web de administracin
SugarCRM
Munin (en paquete administrador)
HUDLite server/admin (en paquete administrador)
IVRGraph (en paquete administrador)
phpMyAdmin (en paquete administrador)
Webmin (en paquete administrador)

Cdecs que soporta:

ADPCM
G.711 (A-Law & -Law)
G.722
G.723.1 (pass through)
G.726
G.729 (through purchase of a commercial license)
GSM
iLBC
172

Protocolos con los que trabaja:

IAX (Inter-Asterisk Exchange)


IAX2 (Inter-Asterisk Exchange V2)
H.323
SIP (Session Initiation Protocol)
MGCP (Media Gateway Control Protocol
SCCP (Cisco Skinny)
Traditional Telephony Interoperability
FXS
FXO
DTMF support
PRI Protocols

Versiones de TrixBox:
Trixbox posee dos tipos de versiones:
1) TrixBox CE (Community Edition)
Comenz en el ao 2004 como un proyecto popular PBX denominado
Asterisk@Home. Desde ese momento se convirti en la distribucin ms
popular, con ms de 65.000 descargas al mes. Dicha versin se caracteriza por
dos pilares importantes: su flexibilidad para satisfacer las necesidades de los
clientes y, sobre todo, por ser gratuita.
Por qu utilizar TrixBox CE?
Como se acaba de comentar TrixBox CE es una versin muy flexible, que no solo
permite configurar funciones y mdulos parametrizables para las necesidades
de cada cliente, sino que tambin es posible acudir a la comunidad de TrixBox
para ayudar o ser ayudado. Esta es una de las ms grandes y ms activas del
mundo y sus miembros trabajan entre ellos da a da con el fin de responder
consultas, resolver problemas, fallos y en seguir desarrollando la herramienta.
Quin utiliza TrixBox CE?
Empresas de todo el mundo, desde aquellas que posen muy pocas estaciones
de trabajo, hasta medianas compaas que poseen cientos de empleados.
2) TrixBox Pro (Versin comercial de pago)
Es una solucin denominada "hibrid-hosted", que significa que el cliente puede
realizar una monitorizacin 24 horas al da los 7 das de la semana, administrar la
central desde cualquier lugar y recibir actualizaciones del software de manera
automtica. Trixbox Pro es una versin empresarial que se ejecuta sobre
tecnologas PBXtra, comercializada desde el 2004 permitiendo enviar/recibir ms
de 120 millones de llamadas por da. La familia trixbox Pro posee 3 versiones:
173

Standard Edition (SE)


Enterprise Edition (EE)
Call Center Edition (CCE)

Caractersticas y beneficios:
1. Gratis y flexible:
Las 3 versiones poseen las siguientes caractersticas:

Standard Edition (SE) : Gratis.


Enterprise Edition (EE) y Call Center Edition (CCE): coste mensual muy
bajo o una cuota de por vida.

2. Fcil instalacin, uso y configuracin:


Posee un instalador que hace que la instalacin sea sencilla; posee, adems, un
administrador intuitivo y un panel de control que facilita la instalacin,
configuracin y administracin.
3. Caractersticas avanzadas:
Posee caractersticas como contestador automtico, integracin con el Outlook,
voicemail a email, informes, llamadas en conferencia, etc.
4. HUD:
El Hud es una herramienta denominada de "todo en uno", que permite a los
empleados poder manejar las comunicaciones de la empresa desde su propio
escritorio. De esta manera pueden acceder a chats privados, realizar llamadas
con hacer un solo clic, realizar transferencia de llamadas, etc.
5. Seis idiomas:
El panel de control de trixbox Pro est en 6 idiomas, permitiendo as que
cualquier usuario pueda configurar la central: Ingls, Francs, Espaol, Alemn,
Italiano y Portugus.
Descripcin de las principales caractersticas de TrixBox Pro:
Contestador Automtico (IVR):
Una de sus caractersticas es la funcionalidad de Contestador-Automtico que
gua a los que llamen segn las opciones predefinidas. Esta caracterstica en
este producto es muy poderosa y fcil de usar con solo unos clics. Se puede
configurar el flujo de las llamadas, redirigir llamadas fuera del lugar de trabajo y
algunas opciones ms.

174

Integracin con Outlook:


Llamadas entrantes: cuando el telfono suena, el identificador de llamadas
puede analizar contra los contactos del Outlook y si una coincidencia es
encontrada se mostrara una ventana con el nombre de la persona.
Hacer llamadas desde su casilla de entrada personal: basta con hacer clic con el
botn derecho en el contacto o en un mensaje del contacto para llamarle.
Buzn de voz:
Ofrece cuatro maneras fciles de almacenar mensajes:
Presionando un botn en el telfono.
Marcando remotamente desde cualquier telfono.
Recibiendo archivos .WAV adjuntos en el mail.
Escuchando a travs del panel de control web.
Mensajes de voz a email:
La posibilidad de recibir mensajes de voz como simples emails. Trixbox viene
preconfigurado para enviar a cada empleado un email cuando estos reciban un
mensaje de voz. Tambin se puede tener el audio adjunto al email y escucharlo
directamente en la bandeja de entrada.
Scheduler:
Se pueden reproducir diferentes mensajes a las personas que llaman segn la
hora del da. Configurar un men totalmente diferente los fines de semana con
opciones diferentes que se pueden elegir.
Telfonos analgicos e IP:
Es el sistema de telfonos ms flexible del mercado, soportando todos los
telfonos analgicos y numerosos telfonos IP de marcas como Cisco, Polycom,
Aastra, SwissVoice y Snom.
VoIP:
Trixbox est preparado para VoIP dependiendo del producto que se est
usando, el cual limita la cantidad de telfonos posibles. Fcilmente se puede
conectar TrixBox con cualquier proveedor de VoIP (SIP o IAX).
Panel de control web:
Ofrece una interfaz web fcil de usar. Un panel de administrador que maneja
todos los aspectos del TrixBox remotamente y un panel de usuario para
empleados que les permite manejar sus configuraciones personales (como
175

escuchar sus mensajes de voz, responder llamados mediante un clic, traspaso


de llamadas, etc.) desde cualquier parte.
Reportes y monitorizacin:
Con esta caracterstica se pueden analizar en tiempo real los registros de
llamadas para cualquier extensin usando potentes filtros y parmetros de
bsqueda. Tambin provee informes de los gastos que un cliente ha hecho o su
registro de llamadas individual. Todos estos informes pueden ser exportados en
formato .csv.
Puentes para conferencias:
Los puentes para conferencias vienen preconfigurados gratuitamente y
soportan un nmero ilimitado de participantes internos y externos.
Soporte de sucursales:
Desarrollo de servidores de bajo coste en cada sucursal u oficina. Algunas de las
opciones de las que se disponen en esta caracterstica:

Llamadas gratis entre sucursales va VoIP.


Traspaso de llamadas a cualquier extensin que est conectada al
servidor.

Elastix
Elastix es un software aplicativo que integra las mejores herramientas disponibles para
PBXs basados en Asterisk en una interfaz simple y fcil de usar. Adems aade su
propio conjunto de utilidades y permite la creacin de mdulos de terceros para hacer
de este el mejor paquete de software disponible para la telefona de cdigo abierto.
Elastix implementa gran parte de su funcionalidad sobre 4 programas de software muy
importantes como son Asterisk, Hylafax, Openfire y Postfix. Estos brindan las funciones
de PBX, Fax, Mensajera Instantnea y Correo electrnico respectivamente.
La meta de Elastix son la confiabilidad, modularidad y fcil uso. Estas caractersticas
aadidas a la robustez para reportar hacen de l, la mejor opcin para implementar un
PBX basado en Asterisk.

176

Caractersticas:
Es difcil hacer una lista con todas las caractersticas de Elastix en un simple listado,
pero las ms importantes son:
VoIP PBX:

Grabacin de llamadas con interfaz va Web.


Voicemails con soporte para notificaciones por e-mail.
IVR configurable y bastante flexible.
Soporte para sintetizacin de voz.
Herramienta para crear lotes de extensiones lo cual facilita instalaciones
nuevas.
Cancelador de eco integrado.
Provisionador de telfonos va Web. Esto permite instalar numerosos telfonos
en muy corto tiempo.
Soporte para Video-telfonos.
Interfaz de deteccin de hardware de telefona.
Servidor DHCP para asignacin dinmica de IPs a Telfonos IP.
Panel de operador. Desde donde el operador puede ver toda la actividad
telefnica de manera grfica y realizar sencillas acciones drag-n-drop como
transferencias, aparcar llamadas, etc.
Aparcamiento de llamadas.
Reporte de detalle de llamadas (CDRs) con soporte para bsquedas por fecha,
extensin y otros criterios.
Tarifacin con informes de consumo por destino.
Informe de uso de canales por tecnologa (SIP, ZAP, IAX, H323).
Soporte para colas de llamadas.
Centro de conferencias. Desde donde se puede programar conferencias
estticas o temporales.
177

Soporta protocolo SIP, IAX, H323, MGCP, SKINNY entre otros.


Codecs soportados: ADPCM, G.711 (A-Law & -Law), G.722, G.723.1 (pass
through), G.726, G.729 (si se compra licencia comercial), GSM, iLBC.
Soporte para interfaces anlogas FXS/FXO.
Soporte para interfaces digitales E1/T1/J1 a travs de protocolos PRI/BRI/R2.
Soporte para interfaces bluetooth para celulares (canal chan_mobile).
Identificacin de llamadas.
Troncalizacin (uso de trunks).
Rutas entrantes y salientes las cuales se pueden configurar por coincidencia de
patrones de marcado lo cual da mucha flexibilidad.
Soporte para follow-me.
Soporte para grupos de timbrado.
Soporte para paging e intercom. El modelo de telfono debe soportar tambin
esta caracterstica.
Soporte para condiciones de tiempo. Es decir que la central se comporte de un
modo diferente dependiendo del horario.
Soporte para PINes de seguridad.
Soporte DISA.
Soporte Callback.
Editor Web de archivos de configuracin de Asterisk.
Acceso interactivo desde el Web a la consola de Asterisk.

Fax:

Servidor de Fax administrable desde Web.


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

General:

Ayuda en lnea incorporada.


Elastix est traducido a 22 idiomas.
Monitor de recursos del sistema.
Configurador de parmetros de red.
Control de apagado/re-encendido de la central va Web.
Manejo centralizado de usuarios y perfiles gracias al soporte de ACLs.
Administracin centralizada de actualizaciones.
Soporte para copias de seguridad y la restauracin de las mismas a travs del
Web.
Soporte para temas o skins.
178

Interfaz para configurar fecha/hora/huso horario de la central.

Email:

Servidor de correo electrnico con soporte multidominio.


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

Colaboracin:

Calendario integrado con PBX con soporte para recordatorios de voz.


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

Extras:

Interfaz de generacin de tarjetas de telefona basada en software A2Billing.


CRM completo basado en el producto vTigerCRM.
Tambin versin de cdigo abierto de SugarCRM.

Centro de llamadas:

Mdulo de centro de llamadas con marcador predictivo incluido.


El mdulo de centro de llamadas puede manejar tanto campaas de llamadas
entrantes como salientes. Algunas de las caractersticas son:
-

Soporte para lista de nmeros no-llamar (Do-Not-Call List).


Soporte para campaas entrantes y salientes.
Asociacin de formularios por campaa.
Asociacin de guin por campaa.
Consola de agente.
Soporte para breaks, siendo estos configurables y de diferentes
tipos.
Marcador predictivo de cdigo abierto.
Informes avanzados.

Mensajera instantnea:

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


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

Soporta grupos de usuarios.


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

Soporte para hardware de telefona:


Elastix cuenta con un buen soporte para hardware de telefona, contando con drivers
para los principales fabricantes de tarjetas como:

OpenVox
Digium
Sangoma
Rhino Equipment
Xorcom
Yeastar

La mayora de estos controladores se soportan a travs de los drivers del proyecto


Zaptel o versiones modificadas del mismo. Otros se soportan en base al proyecto
mISDN u otros.
Elastix tambin soporta muchas marcas de telfonos gracias a que los protocolos SIP e
IAX que usa Asterisk lo permiten. Estos protocolos son abiertos por lo que
prcticamente cualquier fabricante puede implementar un telfono que se comunique
sobre estos estndares.
Algunos fabricantes de telfonos soportados son:

Polycom
Atcom
Aastra
Linksys
Snom
Cisco
Nokia
UTstarcom

Casos de uso de una Centralita Asterisk:

Centralita nueva con conexiones y extensiones de varios tipos.


Pasarela para dotar a una centralita tradicional de servicios nuevos.
Pasarela para dotar a una centralita tradicional de nuevas extensiones.
Varias Oficinas con un Asterisk Centralizado.
180

Varias Oficinas con Sistemas Asterisk interconectados.

Centralita nueva con conexiones y extensiones de varios tipos.

Pasarela para dotar a una centralita tradicional de servicios nuevos.


Posibles servicios: Conexin con Operador IP, Buzn de Voz a email, Sistema de
respuesta automtico, etc.

181

Pasarela para dotar a una centralita tradicional de nuevas extensiones.


Para poder hacer esto la centralita tradicional debera poder programarse para ello.

Varias Oficinas con un Asterisk Centralizado.


De esta forma, adems de comunicaciones entre Sedes, todas las sedes pueden hacer
llamadas al exterior a travs de la central Asterisk. Las extensiones externas podrn
seguir el protocolo SIP o el Protocolo IAX.

182

Varias Oficinas con Sistemas Asterisk interconectados.


Todos los Asterisk Pueden utilizar los otros Asterisk para hablar con nmeros de las
provincias donde se encuentran. Entre ellos se pueden conectar mediante IAX o SIP, e
incluso se puede montar un plan de numeracin nico entre todos.

183

Ampliacin del sistema de telefona de una empresa


Supongamos una empresa con una infraestructura de comunicaciones tradicional,
basada en una red de telefona y una red de datos independientes.
El sistema de telefona est controlado por una PBX propietaria que da servicio a un
determinado nmero de extensiones analgicas y digitales, y que se encuentra
conectada a la red de telefona pblica.
La empresa experimenta un crecimiento inesperado, pero bienvenido, de personal y la
PBX alcanza su mxima capacidad y todava quedan extensiones por asignar.

Solucin Uno: Ampliacin de la PBX con los mdulos apropiados, siempre que
ese modelo no se encuentre descatalogado por el fabricante, asumiendo el
elevado coste de este tipo de hardware y exponindonos a la misma situacin
en crecimientos futuros.
Solucin Dos: Compra de nueva PBX, con mayores prestaciones y mdulo de
VoIP para acercar la empresa a la nueva tecnologa. Lo que supone costes
elevadsimos, dependencia del fabricante y poca flexibilidad en las aplicaciones
disponibles.
 Solucin Asterisk: Instalacin de una centralita Asterisk que aprovechando la
PBX antigua, ofrece nuevas extensiones analgicas y/o digitales con hardware
de menor coste. Pero que, sobretodo, ofrece un nmero mucho mayor de
extensiones VoIP sin hardware adicional, y con gran escalabilidad para
prximas ampliaciones.

184

Soluciones de Asterisk para sistemas de telefona entre sedes


remotas
Una ventaja inmediata de las soluciones de telefona IP consiste en la posibilidad de
realizar llamadas entre sedes remotas sin coste e integrando el sistema de numeracin
(extensiones) entre ellas.
Asterisk ofrece una solucin ideal para este tipo de organizaciones con sedes distantes.
Sistema Centralizado
Existe un servidor centralizado por donde entran y salen las llamadas a la red de
telefona tradicional, y que se encarga de gestionar los clientes de VoIP (extensiones
VoIP) de todas las delegaciones.

185

Sistema Distribuido
Cada delegacin tiene su propia centralita Asterisk conectada a la red WAN de la
empresa (A travs de internet o lneas dedicadas) y a la red telefnica.
Entre los Asterisk, a travs del protocolo IAX (Inter-Asterisk eXchange) intercambian
informacin de rutado, permitiendo una gestin del sistema de telefona de la
compaa y un rutado inteligente de llamadas.

La revolucin Asterisk
Cambio en el concepto de PBX
Probablemente lo ms importante de Asterisk es que no es un sistema de telefona en
caja negra. Es una plataforma de comunicaciones basada en un servidor informtico.
Esto no slo cambia la manera de concebir los sistemas de telefona, sino que adems
presenta una serie de ventajas sorprendentes.
Flexibilidad y Customizacin
Efectivamente una instalacin Asterisk puede ser diseada, configurada,
conectada e instalada de diferentes maneras, por lo que se convierte en una
solucin universal para todas las necesidades.

Asterisk puede aceptar conexiones a telfonos locales, pero


tambin a telfonos en otras partes del mundo, que se convierten
en parte de la red telefnica de su oficina.

186

Asterisk puede interconectarse usando sealizacin analgica, digital


o IP.

Asterisk funciona igual de bien con viejos telfonos analgicos que


con telfonos IP o SoftPhones, que son en realidad software del PC.

Escalabilidad
Asterisk es una solucin muy buena de PBX para una pequea oficina con 2 o 3
extensiones internas y 1 lnea saliente, pero tambin funciona perfectamente
para una plataforma de comunicaciones de una empresa con 900 telfonos IP,
centenares de llamadas simultneas y varios primarios RDSI.
Para Asterisk el tamao no importa. Sin ningn coste aadido incluso la
instalacin ms pequea puede ofrecer las caractersticas ms avanzadas de
telefona como IVR, buzn de voz, conferencias, servicio hasta ahora reservado
a las grandes empresas.
Es importante recordar que Asterisk puede crecer de forma lineal segn sus
necesidades. Necesita otro telfono en su oficina? Slo debe comprar el
telfono; no deber modificar las licencias de hardware o software ni justificar
gasto alguno ante el Departamento de Finanzas.
Integracin
Asterisk puede integrarse con otros sistemas TI (Tecnologas de Informacin) en
la organizacin empresarial, aportando as un valor aadido a los procesos de
negocio nuevos y/o mejorados.
A continuacin presentamos una serie de ejemplos que ilustran el valor
aadido que representa para una empresa integrar las telecomunicaciones y
otros sistemas TI.

Ejemplos de uso de Asterisk:


Ejemplo 1: Centros mdicos Llamada recordatoria
Cuando a un paciente le dan cita con semanas e incluso meses de antelacin, es
probable que se olvide del da. Si no acude a la cita repercutir en los ingresos de ese
da y el personal mdico estar desocupado el tiempo previsto para la consulta.
A fin de mejorar su funcionamiento y rendimiento, los centros mdicos pueden instalar
un sistema telefnico basado en Asterisk, que tras integrarlo con la agenda de visitas
programadas, llamar al paciente el da o semana anterior recordndole su cita
mediante un mensaje de voz grabado. De esta manera se garantizan los ingresos
previstos y se aumenta la productividad.

187

Ejemplo 2: Centros de telemarketing Integracin con sistemas CRM


Los centros de telemarketing llamarn a una lista de nmeros para intentar vender a
los usuarios un producto o servicio. La lista con los nmeros se descarga en el software
CRM (Customer Relationship Management).
El sistema CRM contacta con el sistema de comunicaciones pidiendo que se marque de
forma automtica el nmero y de esta manera tener una serie de mejoras:
Llamada automtica: los agentes slo deben hacer clic sobre el nmero de
telfono que aparece en la pantalla y el sistema marca el nmero.
Registro de llamadas: el sistema de comunicaciones genera
automticamente una entrada para cada llamada como parte del historial
telefnico del cliente.
Centrarse en el objetivo: el sistema de comunicaciones puede programarse
de modo que en horas laborables slo marque nmeros de la lista de
nmeros, impidiendo a los empleados realizar llamadas personales.
Esta integracin genera ms productividad al acelerar la cadencia de trabajo y centrar
a los agentes en la tarea que estn llevando a cabo. Tambin disminuye los costes no
relacionados con las operaciones de la empresa.
Ejemplo 3: Agencias de viajes (Self service)
Una agencia de viajes contrata vuelos, estancias en hoteles y visitas para sus clientes.
En contextos como excursiones o viajes de trabajo son habituales las cancelaciones y
los cambios de planes. Qu sucede si hay que cancelar fuera de horarios de oficina?
Qu pasa si hay una avalancha de llamadas entrantes?
Integrando el sistema de comunicaciones con el sistema de reservas, los clientes
podrn llamar y cambiar o cancelar su reserva mediante mens interactivos. Por lo
tanto, la agencia de viajes podr optimizar los costes operativos y los costes derivados
de proveedores (hoteles y empresas de transporte).

La complejidad Asterisk
Los expertos resaltan que en cualquier Software sea libre o cerrado sus ventajas y
riesgos estn directamente relacionados con su uso adecuado. Y recuerdan que
Asterisk es un sistema complejo, aunque sea una solucin avanzada basada en
software abierto.
Es necesario apoyarse en un equipo tcnico o empresas externas que conozcan bien
Asterisk para que su implantacin y ciclo de vida sea plenamente satisfactorio.

188

En muchos proyectos no solo se tiene que considerar un servicio de instalacin,


soporte sino tambin la integracin con otros sistemas de la compaa.
En el terreno de los problemas que puede presentar Asterisk hay que aclarar que por s
solo no ofrece escalabilidad o alta disponibilidad, pero se puede alcanzar una solucin
intermedia de alta disponibilidad a travs de la redundancia y usando software de
terceros.

Y el futuro?
Asterisk es un software abierto y como tal su evolucin es posible gracias a una
comunidad de usuarios y empresas que comparten su cdigo y experiencias a travs de
Internet. Los Call Centers son los primeros beneficiados de una herramienta como
Asterisk ya que para ellos el PBX es un componente imprescindible para prestar sus
servicios .Igualmente las empresas que pueden beneficiarse de Asterisk no solo para
reducir costes sino tambin para crear soluciones ms sostenibles para diferentes tipos
de negocios, seala Ivn Sixto, CEO Business Development manager de I6NET.
Sobre el futuro de Asterisk podra trazarse un paralelismo a la situacin que
experimenta Linux en el mercado de los sistemas operativos. No se convertir en un
monopolio, pero ser un rival totalmente viable en ambos campos. Especialmente en
tiempos de recortes de costes como los que se avecinan, aunado con un cambio en la
tecnologa (Voz IP) tendr una oportunidad nica de sustituir a soluciones existentes,
seala Eduardo Malpica, responsable de Consultora Preventa de Altitude Software
Espaa.

Conclusiones
La adopcin de una centralita VoIP no debera ser una opcin para aquellas personas o
entidades que hayan llegado a la conclusin de que necesitan una centralita, sino que
debera verse como algo inevitable.
Los grandes operadores siguen cobrando precios desorbitados por un servicio que,
desde la aparicin de Internet y la interconexin de grandes redes, ha perdido su razn
de ser: la transmisin de voz.
Asterisk est revolucionando el mundo de la telefona, nunca existi una herramienta
tan completa, verstil, extensible y flexible en la industria de las comunicaciones de
voz, y es que tiene una potencia y escalabilidad que es inalcanzable, en relacin
prestaciones-precio, para ninguna centralita convencional.
Adems gracias a que es libre, en licencia y en cdigo, el nico lmite que existe para
los servicios que podemos ofrecer, es nuestra imaginacin.
Una vez ms se demuestra que el paradigma Open Source funciona, y funciona bien,
no existen productos comerciales que superen en calidad y caractersticas a otros
proyectos como son Linux, Apache o Mozilla, por mencionar unos cuantos.
Asterisk es en pocas palabras, el futuro de la telefona.
189

Captulo

Pruebas realizadas

Iniciacin en Linux
Como todo iniciado en el mundo Linux, lo primero en lo que me centre fue en la
eleccin de la distribucin correcta para tener un aprendizaje lo ms rpido posible.
Tras mirar lo que me ofreca cada una de las siguientes distribuciones, decid instalar
Kubuntu 9.04.

190

191

Kubuntu & Asterisk


Pese a que el aprendizaje y familiarizacin con Linux fue sencillo y breve no lo fue
tanto el primer contacto con Asterisk y tampoco la primera instalacin aunque la
informacin en cuanto a instalar de este tipo centralitas es abundante para la mayora
de las distribuciones Kubuntu no es de las ms habituales o empleadas .Tras conseguir
un funcionamiento correcto de la centralita Asterisk pas a informarme sobre las
distribuciones ms empleadas para crear servidores de este tipo.

192

Eleccin del servidor adecuado para Asterisk


Qu hay que tener en cuenta en la eleccin del servidor Asterisk?
Para la eleccin del equipo servidor de nuestro sistema Asterisk deberemos tener en
cuenta:






Nmero de usuarios, o extensiones internas, del sistema y tecnologa


empleada, VoIP o telfonos analgicos.
Cdecs empleados y necesidades de conversin.
Cantidad de trfico de voz esperado.
Existencia de conferencias.
Funcionalidades avanzadas como mens interactivos de voz, integracin con
aplicaciones informticas empresariales, sistemas de facturacin,

Cul es la mejor distribucin para instalar Asterisk?


Asterisk funciona perfectamente bajo cualquier distribucin
No obstante, segn una encuesta que se realiz hace algn tiempo en la pgina web
de los usuarios de Asterisk-ES (foro de Asterisk), la mayora se decantan por dos:
Debian y CentOS.
CentOS (acrnimo de Community ENTerprise Operating System)
es un clon a nivel binario de la distribucin Red Hat Enterprise
Linux, compilado por voluntarios. Es una alternativa para
aquellos que quieren usar la plataforma RHL pero no quiere
alejarse de sus principios de software libre.
Otra ventaja que tiene CentOS es la gran cantidad de usuarios que trabajan con esta
distribucin y la cantidad de paquetes en rpm que existen, lo que hace que existan
multitud de foros de usuarios que preguntan y responden basados en esta
distribucin.
Debian es muy usado por su gran estabilidad y seguridad. Su gran
estabilidad se basa en que llevan mucho tiempo arreglando los bugs
que puede tener cierto programa antes de ser liberado como
estable. Sin embargo este proceso puede durar hasta aos por lo
que muchos no son tan pacientes en esperar y quizs decidan en
migrar a otra distribucin.
Mi eleccin definitiva para las prcticas y el montaje de la centralita Asterisk fue
CentOs 5.4. Para instalarlo segu el siguiente manual.

193

Puesta a punto del servidor antes de la instalacin de Asterisk:


Servidor HTTP Apache
Apache es un proyecto nacido para crear un servidor web estable, fiable y veloz para
plataformas Unix. Apache nace, por una parte, de un cdigo ya existente y de una serie
de patch para mejorar su fiabilidad y sus caractersticas; de ah su nombre: A PAtCHy
sErver! El equipo de desarrollo, adems, est formado por voluntarios, repartidos por
todo el mundo, que sigue manteniendo este servidor web libre.
Instalacin
yum install httpd httpd-devel php php-common php-devel

Arranque de Apache
Iniciar el servicio
service httod start
chkconfig httpd on

Parar el servicio
service httpd stop

Reiniciar el servicio
service httpd restart

Servidor DHCP (DHCPD)


DHCP es un protocolo diseado principalmente para ahorrar tiempo gestionando
direcciones IP en una red grande. El servicio DHCP est activo en un servidor donde se
centraliza la gestin de la direcciones IP de la red. Hoy en da, muchos sistemas
operativos incluyen este servicio dada su importancia.
Funcionamiento
El funcionamiento DHCP se basa en la arquitectura cliente / servidor (como casi todos
los servicios de Internet), por lo que hace falta un servidor DHCP (dhcpd) y el cliente
DHCP para su funcionamiento. En el caso ms simple es un servidor DHCP el que recibe
la solicitud de asignacin de direccin IP ( y el resto de los parmetros de
configuracin) del cliente. Si no existe un servidor DHCP se necesitar un agente
(normalmente un router) que sabe la direccin del servidor DHCP.
El protocolo funciona en cuatro pasos:





DHCP discover
DHCP offer
DHCP request
DHCP ACK
194

Modos en DHCP
Existen 3 modos en DHCP para poder asignar direcciones IP a otros equipos:

Asignacin manual: El administrador configura manualmente las direcciones IP


del cliente en el servidor DCHP. Cuando la estacin de trabajo del cliente pide
una direccin IP, el servidor mira la direccin MAC y procede a asignar la que
configur el administrador.
Asignacin automtica: Al cliente DHCP (ordenador, impresora, etc.) se le
asigna una direccin IP cuando contacta por primera vez con el DHCP Server.
En este mtodo la IP es asignada de forma aleatoria y no es configurada de
antemano.
Asignacin dinmica: El servidor DHCP asigna una direccin IP a un cliente de
forma temporal. Digamos que es entregada al cliente que hace la peticin por
un espacio de tiempo. Cuando este tiempo acaba, la IP es revocada y la
estacin de trabajo ya no puede funcionar en la red hasta que no pida otra.

Instalacin
yum install y dhcpd

Configuracin
El fichero de configuracin est en /etc/ y se denomina dhcpd.conf.
La configuracin es la siguiente:
; Esta opcin especifica si el servidor de DHCP debe intentar actualizar el servidor de DNS
ddns-update-style interim;
ignore client-updates;
;Segmento red y submascara de red
subnet 192.168.1.0 netmask 255.255.255.0 {
;Definimos la gateway y la submascara de red
option routers
option subnet-mask

192.168.1.3;
255.255.255.0;

195

;Rango de IPS que repartir


range 192.168.1.201 192.168.1.203;
; Tiempo de vida por defecto de la IP
default-lease-time 86400;
;Mximo tiempo de vida de la IP
max-lease-time 608400;
;DNS
option domain-name-servers 194.179.1.100;
;Servidor TFTP
option tftp-server-name "192.168.1.3";
}

DHCP tambin usa el fichero /var/lib/dhcp/dhcpd.leases para almacenar la informacin de


los clientes, se utiliza para saber las IPs que va asignando.
Un ejemplo del contenido del archivo dhcpd.leases tras asignar la IP 192.168.1.203 a
un telfono IP Sipura es:

lease 192.168.1.203 {
starts 2 2009/09/22 09:56:15;
ends 3 2009/09/23 09:56:15;
binding state active;
next binding state free;
hardware ethernet 00:0e:08:da:c2:3c;
uid "\001\000\016\010\332\302<";
client-hostname "SipuraSPA";
}

Arranque del demonio DHCPD


Iniciar el servicio
service dhcpd start
chkconfig dhcpd on
Parar el servicio
service dhcpd stop
Reiniciar el servicio
service dhcpd restart

196

Servidor TFTP (TFTPD)


TFTP (Trivial file transfer Protocol) es un protocolo de red para la transferencia de
archivos entre sistemas conectados a una red TCP (Transmission Control Protocol),
basado en la arquitectura cliente-servidor. Desde un equipo cliente se puede conectar
a un servidor para descargar archivos desde l o para enviarle archivos,
independientemente del sistema operativo utilizado en cada equipo.
Caractersticas

Utiliza UDP (en el puerto 69) como protocolo de transporte (a diferencia del
FTP que utiliza el puerto 21 TCP).
No puede listar el contenido de los directorios.
No existen mecanismos de autenticacin o cifrado.
Se utiliza para leer o escribir archivos de un servidor remoto.
Soporta tres modos diferentes de transferencia, "netascii", "octet" y "mail", de
los que los dos primeros corresponden a los modos "ascii" e "imagen" (binario)
del protocolo FTP.

Instalacin del servidor TFTP


yum install y xinetd
Configuracin
El fichero de configuracin se encuentra en /etc/xinetd.d/ y se denomina tftp.
La configuracin es la siguiente:
service tftp
{
disable = no
socket_type
protocol
wait
user
server
server_args
per_source
cps
flags
}

= dgram
= udp
= yes
= root
= /usr/sbin/in.tftpd
= /root/tftpboot
= 11
= 100 2
= IPv4

Arranque del servicio Xinetd


Iniciar el servicio
service xinetd start
chkconfig xinetd on

Parar el servicio
service xinetd stop

197

Reiniciar el servicio
service xinetd restart

Servidor MySQL (MySQLD)


MySQL es un sistema de administracin relacional de bases de datos. Una base de
datos relacional archiva datos en tablas separadas en vez de colocar todos los datos en
un gran archivo. Esto permite velocidad y flexibilidad. Las tablas estn conectadas por
relaciones definidas que hacen posible combinar datos de diferentes tablas sobre
pedido.
MySQL es software de fuente abierta. Fuente abierta significa que es posible para
cualquier persona usarlo y modificarlo. Cualquier persona puede bajar el cdigo fuente
de MySQL y usarlo sin pagar. Cualquier interesado puede estudiar el cdigo fuente y
ajustarlo a sus necesidades. MySQL usa el GPL (GNU General Public License) para
definir que puede hacer y que no puede hacer con el software en diferentes
situaciones. Si usted no se ajusta al GPL o requiere introducir cdigo MySQL en
aplicaciones comerciales, usted puede comprar una versin comercial licenciada.
Instalacin del servidor y el cliente MySQL
yum install mysql-server
yum install mysql

Arranque del servicio mysqld


Iniciar el servicio
service mysqld start
chkconfig mysqld on

Parar el servicio
service mysqld stop

Reiniciar el servicio
service mysqld restart

Establecimiento de contrasea de root y privilegios


mysql u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'root' WITH
GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql>quit;

phpMyAdmin
phpMyAdmin es una herramienta escrita en PHP con la intencin de manejar la
administracin de MySQL a travs de pginas web, utilizando Internet.
198

Actualmente puede crear y eliminar Bases de Datos, crear, eliminar y modificar tablas,
borrar, editar y aadir campos, ejecutar cualquier sentencia SQL, administrar claves en
campos, administrar privilegios, exportar datos en varios formatos y est disponible en
50 idiomas. Se encuentra disponible bajo la licencia GPL.
Instalacin php
yum install y php*

Instalacin phpMyAdmin
cd /var/www/html
wget c http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin-3.2.4-rc1-alllanguages.tar.gz
tar xvfz phpMyAdmin-3.2.4-rc1-all-languages.tar.gz
mv phpMyAdmin-3.2.4-rc1-all-languages.tar.gz phpmyadmin
cd phpmyadmin
cp config.sample.inc.php config.inc.php
nano config.inc.php
Sustituir $cfg['Servers'][$i]['auth_type'] = cookies por :
$cfg['Servers'][$i]['auth_type'] = http;
service httpd restart

Acceso a phpmyadmin
http://IP del servidor/phpmyadmin/

Servidor SNMP (SNMPD)


SNMP (Simple Network Management Protocol), en sus distintas versiones, es un
conjunto de aplicaciones de gestin de red que emplea los servicios ofrecidos por
TCP/IP y que ha llegado a convertirse en un estndar.
Y es que este protocolo de gestin facilita de una manera simple y flexible el
intercambio de informacin de forma estructurada y efectiva.
Los elementos bsicos son los Administradores ( Management Stations) ubicados en
el/los equipo/s de gestin de red y los Gestores (Network Agents: elementos pasivos
ubicados en los nodos -host, routers, modems, multiplexores, ... a ser gestionados),
siendo los segundos los que envan informacin a los primeros, relativa a los
elementos gestionados, por iniciativa propia o al ser interrogados (polling) de manera
secuencial, apoyndose en los parmetros contenidos en sus MIB (Management
Information Base).

199

Su principal inconveniente es el exceso de trfico que se genera, lo que lo puede hacer


incompatible para entornos amplios de red.
Los cinco tipos de mensajes SNMP intercambiados entre los Agentes y los
Administradores, son:







Get Request: Una peticin del Administrador al Agente para que enve los
valores contenidos en el MIB (base de datos).
Get Next Request: Una peticin del Administrador al Agente para que enve los
valores contenidos en el MIB referente al objeto siguiente al especificado
anteriormente.
Get Response: La respuesta del Agente a la peticin de informacin lanzada
por el Administrador.
Set Request: Una peticin del Administrador al Agente para que cambie el
valor contenido en el MIB referente a un determinado objeto.
Trap: Un mensaje espontneo enviado por el Agente al Administrador, al
detectar una condicin predeterminada, como es la conexin/desconexin de
una estacin o una alarma.

Instalacin de SNMP
Instalar NETSNMP y otros paquetes:
# perl -MCPAN -e shell
/etc/perl/CPAN/Config.pm inicialize.
CPAN is the world-wide archive of perl resources. It consists of about 100 sites that all replicate
the same contents all around the globe. Many countries have at least one CPAN site already.
The resources found on CPAN are easily accessible with the CPAN.pm module. If you want to use
CPAN.pm, you have to configure it properly.
If you do not want to enter a dialog now, you can answer 'no' to this question and I'll try to auto
configure. (Note: you can revisit this dialog anytime later by typing 'o conf init' at the cpan
prompt.)
Are you ready for manual configuration? [yes] no
cpan> install Net::SNMP
Checking if your kit is complete...
Looks good Warning:
prerequisite Crypt::DES 2.03 not found.
Warning: prerequisite Digest::HMAC 1.00 not found.
Warning: prerequisite Digest::SHA1 1.02 not found.
Writing Makefile for Net::SNMP ---Unsatisfied dependencies detected during [D/DT/DTOWN/Net-SNMP-5.2.0.tar.gz] ----Digest::HMAC
Crypt::DES
Digest::SHA1
Shall I follow them and prepend them to the queue
of modules we are processing right now? [yes] Enter

200

cpan>exit

Ahora es necesario instalar los paquetes de SNMP:


yum install arpwatch.i386 net-snmp-devel.i386 net-snmp-libs.i386 net-snmp-perl.i386 netsnmp-utils.i386 cluster-snmp.i386 openhpi-subagent.i386 php-snmp.i386

Configuracin del SNMP


Necesitas modificar el fichero snmpd.conf:
# nano /etc/snmp/snmpd.conf

Borra todo su contenido pulsando continuamente Ctrl+K y copia lo siguiente:


master agentx
agentXPerms 0660 0660 root root
com2sec local localhost public_asterisk
com2sec mynetwork 230.5.42.12 public_asterisk
group MyROGroup any local
group MyROGroup any mynetwork
view all included .1
access MyROGroup "" any noauth 0 all none none

Guarda el fichero y reinicia el demonio SNMPD:


# /etc/init.d/snmpd restart

Cambia los privilegios a agentx:


# chmod 755 /var/agentx

Acceso al Servidor: PUTTY


Se trata de una aplicacin gratuita SSH41, Telnet, rlogin y cliente TCP raw que nos
permite acceder al servidor Asterisk en modo consola y as poder acceder a la lnea de
comandos.En Host Name: 192.168.1.200 IP del servidor Asterisk y pulsamos en
Open.

201

Nos aparecer una pantalla negra solicitando que nos loguemos Login as
Ejemplo de Login como Root.

Acceso al Servidor: WinSCP


Se trata de un cliente SFTP (Security File Transfer Protocol) grfico que emplea SSH
(Security Shell) y que hemos utilizado en algunos casos para transferir y editar archivos
de configuracin de Asterisk.
Ejemplo de acceso al directorio de archivos de Asterisk:

202

Instalacin de Asterisk:
Asterisk 1.4.xx (de 1.4.0 a 1.4.21)
1.) El primer paso es descargar los mdulos necesarios: zaptel, libpri,
asterisk y asterisk-addons desde los repositorios pblicos de Digium y
guardarlos en nuestro sistema( /usr/src/) :
cd /usr/src/
mkdir asterisk

203

cd asterisk
wget http://downloads.digium.com/pub/libpri/libpri-1.4-current.tar.gz
wget http://downloads.digium.com/pub/zaptel/zaptel-1.4-current.tar.gz
wget http://downloads.digium.com/pub/asterisk/asterisk-1.4-current.tar.gz
wget http://downloads.digium.com/pub/asterisk/asterisk-addons-1.4-current.tar.gz

2.) Ahora debemos averiguar la versin exacta de nuestro kernel con el comando
uname a, deberamos ver algo como:

[root@asterisk~]# uname -a
Linux asterisk.asteriskclub.org 2.6.18-8.el5 #1 SMP Thu Mar 15 19:57:35 EDT 2007 i686
i686 i386 GNU/Linux

Apuntamos si la versin del kernel es 2.4 o 2.6, ya que necesitaremos esta


informacin luego.

3.) Luego verificamos si tenemos instaladas las fuentes del kernel, para ello
utilizamos el comando rpm -q kernel-devel:

[root@asterisk ~]# rpm -q kernel-devel


kernel-devel-2.6.18-8.el5

Si no estn instaladas podemos hacerlo con yum de la siguiente forma:


yum install kernel-devel

4.) Ahora s, instalamos los siguientes paquetes necesarios para al instalacin de


Asterisk:
yum install bison bison-devel ncurses ncurses-devel zlib zlib-devel gcc-c++ openssldevel gnutls-devel gcc openssl

5.) Un paso ms antes de empezar con la instalacin, CentOS no instala las fuentes
del kernel en el directorio /usr/src/linux como est escrito en los Makefile de
Zaptel y Astersik, para ello nos vamos a /usr/src/ y creamos un link llamado
linux hacia el directorio con las fuentes del kernel el cual est ubicado en
/usr/src/kernels/mi_version_del_kernel (aqu utilizamos la informacin
obtenida del paso 2) estos son los resultados que esperamos:

[root@asterisk ~]# cd /usr/src/


[root@asterisk src]# ln -s
kernels/2.6.18-8.el5-i686/ linux
[root@asterisk src]# ll

204

total 28
drwxr-xr-x 2 root root 4096 jun 13 08:43 asterisk
drwxr-xr-x 3 root root 4096 jun 12 13:17 kernels
lrwxrwxrwx 1 root root 26 jun 13 09:12 linux -> kernels/2.6.18-8.el5-i686/
drwxr-xr-x 7 root root 4096 jun 12 13:34 redhat

6.) Listo, ahora s, nos posicionamos en la carpeta donde bajamos los paquetes
(/usr/src/), los desempaquetamos y descomprimimos, as:

cd /usr/src/asterisk
tar -vxzf libpri-current tar.gz
tar -vxzf zaptel-current.tar.gz
tar -vxzf asterisk-current.tar.gz
tar -vxzf asterisk-addons-current.tar.gz

Luego ingresamos a la carpeta libpri

cd libpri-1.4.0

y ejecutamos:

make clean
make
make install

Grabamos y cerramos el archivo.


Luego ingresamos a la carpeta zaptel

cd ../zaptel-1.4.2.1

y ejecutamos:

make clean
make
make install
make config (para hacer que el modulo zaptel se carge al tiempo de boot)

Finalmente ingresamos a la carpeta asterisk:

cd ../asterisk-1.4.4

205

y ejecutamos:
make clean
./configure
make
make install
make samples (para crear archivos de ejemplo)
make config

7.) Listo !! si todo sali bien deberamos poder cargar Asterisk con:

asterisk vvvvvvvvcg o asterisk rvvvvvvv

8.) Opcionalmente podemos ponerle a nuestra central soporte para cdec g729,
descargando una version OpenSource.
cd /var/lib/asterisk/modules
wget http://asterisk.hosting.lv/bin/codec_g729-ast14-gcc4-glibcpentium4.so
mv codec_g729-ast14-gcc4-glibc-pentium4.so codec_g729.so
chmod +x codec_g729.so
service asterisk restart

Asterisk 1.4xx (de 1.4.22 a 1.4.27) y 1.6.x


1.) Empezamos actualizando el S.O.
yum -y update

2.) Instalaremos algunos paquetes necesarios antes de Asterisk en s mismo.

yum install libtiff-devel php-pear php-pear-db php-gd php-mysql php-pdo


audiofile-devel mysql-devel perl-datemanip

3.) Creamos la carpeta dnde guardaremos los paquetes de asterisk y los


descargamos:

cd /usr/src
mkdir asterisk
cd asterisk

Instalamos el subversion para para poder descargar el Asterisk:

yum y install subversin

206

svn checkout http://svn.digium.com/svn/asterisk/branches/1.4/asterisk-1.4.26.1


svn checkout http://svn.digium.com/svn/asterisk-addons/branches/1.4/asteriskaddons-1.4.9
wget http://downloads.digium.com/pub/telephony/dahdi-linux/dahdi-linux2.1.0.4.tar.gz
wget http://downloads.digium.com/pub/telephony/dahdi-tools/dahdi-tools2.1.0.2.tar.gz
wget http://downloads.digium.com/pub/libpri/releases/libpri-1.4.9.tar.gz

Descomprimimos:
tar zxvf libpri-1.4.9.tar.gz
tar zxvf dahdi-linux-2.1.0.4.tar.gz
tar zxvf dahdi-tools-2.1.0.2.tar.gz

4.) Instalamos libpri:

cd libpri-1.4.9
make
make install
cd ..

5.) Instalamos dahdi-linux

cd dahdi-linux-2.1.0.4
make
make install
cd ..

6.) Instalamos dahdi-tools

cd dahdi-tools-2.1.0.2
./configure
make menuselect
make
make install
make config
cd ..

7.) Instalamos asterisk


cd asterisk-1.4.26.1/
./configure
make menuselect
make
make install

8.) Instalamos asterisk-addons

207

cd /usr/src/asterisk-addons-1.4.9/
./configure
make menuselect
make
make install

Eleccin de la version Asterisk:


Diferencia entre los Asterisk 1.4 (hasta 1.4.21) y los Asterisk 1.4.22 (y
superiores) y 1.6 en telefona analgica: De Zaptel a DAHDI
En el paso de Asterisk 1.4.21 a Asterisk 1.4.22 Digium como ya anunci, cambi el
nombre de la interfaz de telefona analgica Zaptel a DAHDI (Digium Asterisk Hardware
Device Interface) para dar cabida a los deseos del titular de la marca Zaptel.
A parte del cambio de nombre Digium aprovech para efectuar la correccin de
errores e introducir una serie de caractersticas:

Los supresores de eco pueden aplicarse por canal y


seleccionando el tiempo de configuracin.
La asignacin de memoria de canal ha pasado de un
gran bloque a bloques ms pequeos con el fin de
reducir los errores de memoria.
Apoyo para las tarjetas RDSI BRI (Basic Rate
Interface), concretamente para las tarjetas B410P
(mdulo con 4 puertos BRI).

Otros de los avances es el empaquetamiento de los mdulos, pasando de uno slo


(zaptel) a dos diferenciados por tener uno los mdulos del Kernel (dahdi-linux) y otro
con las herramientas para su uso (dahdi-tools).
En el primer paquete, dahdi-linux la equivalencia de mdulos es la siguiente:
-

zaptel.ko  dahdi.ko
ztd-eth.ko  dahdi_dynamic_eth.ko
ztd-loc.ko  dahdi_dynamic_loc.ko
ztdummy.ko  dahdi_dummy.ko
ztdynamic.ko  dahdi_dynamic.ko
zttranscode.ko  dahdi_transcode.ko

En el segundo paquete, dahdi-tools la equivalencia de mdulos es la siguiente:


-

ztcfg  dahdi_cfg
ztmonitor  dahdi_monitor
ztscan  dahdi_scan
ztspeed  dahdi_speed
208

zttest  dahdi_test
zttool  dahdi_tool
zapconf dahdi_genconf

En las versiones de Asterisk 1.4 y 1.6 en las que se usa DAHDI, los mdulos que utilizan
los servicios de este canal son:
-

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

La descripcin de cada mdulo es la siguiente:

chan_dahdi.so: Este modulo determina que nombre del canal se debe utilizar
para llamadas entrantes .Si no se quiere usar el nombre de canal DAHDI y se
quiere seguir usando el canal Zap hay que aadir la siguiente lnea al archivo
asterisk.conf de /etc/asterisk/:
dahdichanname=no

app_dahdibarge.so: La aplicacin ZapBarge ser ahora DAHDIBarge.


app_dahdiras.so: La aplicacin ZapRAS ser ahora DAHDIRAS.
app_dahdiscan.so: La aplicacin ZapScan ser ahora DAHDIScan.

Por ltimo, la configuracin para el controlador del canal se lee del archivo
chan_dahdi.conf en /etc/asterisk/ en vez del zapata.conf, mientras que la informacin
de las tarjetas que detecte aparecer en dahdi-channels.conf en vez de en zaptel.conf.
Configuracin DAHDI
1.) Ejecutamos dahdi_scan y veremos que las tarjetas que reconoce DAHDI y su estado
(actualmente Unconfigured).En este caso disponemos de una tarjeta de telefona
con 4 puertos,2 de ellos ocupados por dos mdulos un FXO y un FXS.
[root@asterisk ~]# dahdi_scan
[1]
active=yes
alarms=OK
description=Wildcard TDM400P REV E/F Board 5
name=WCTDM/4
manufacturer=Digium
devicetype=Wildcard TDM400P REV E/F
location=PCI Bus 08 Slot 02
basechan=1
totchans=4
irq=209

209

type=analog
port=1,FXO
port=2,FXS
port=3,none
port=4,none

2.) Ahora que sabemos que dahdi reconoce nuestras tarjetas, pasamos a
configurarlas. para eso ejecutamos:
[root@asterisk ~]# dahdi_genconf
[root@asterisk ~]# dahdi_cfg -vv
dahdi tools version - 2.2.0
dahdi version: 2.2.0
echo canceller(s):
configuration
======================
channel map:
channel 01: fxs kewlstart (default) (echo canceler: mg2) (slaves: 01)
channel 02: fxo kewlstart (default) (echo canceler: mg2) (slaves: 02)
2 channels to configure.
setting echocan for channel 1 to mg2
setting echocan for channel 2 to mg2

3.) A partir de aqu ajustaremos la configuracin de dahdi para adaptarla a


nuestras necesidades.
3.1.) Editamos /etc/dahdi/modules y comentamos todos aquellos drivers que
no usamos.
[root@asterisk asterisk]# nano /etc/dahdi/modules
# Contains the list of modules to be loaded / unloaded by /etc/init.d/dahdi.
#
# NOTE: Please add/edit /etc/modprobe.d/dahdi or /etc/modprobe.conf if you
#
would like to add any module parameters.
#
# Format of this file: list of modules, each in its own line.
# Anything after a '#' is ignore, likewise trailing and leading
# whitespaces and empty lines.
# Digium TE205P/TE207P/TE210P/TE212P: PCI dual-port T1/E1/J1
# Digium TE405P/TE407P/TE410P/TE412P: PCI quad-port T1/E1/J1
# Digium TE220: PCI-Express dual-port T1/E1/J1
# Digium TE420: PCI-Express quad-port T1/E1/J1
#wct4xxp
# Digium TE120P: PCI single-port T1/E1/J1
# Digium TE121: PCI-Express single-port T1/E1/J1

210

# Digium TE122: PCI single-port T1/E1/J1


#wcte12xp
# Digium T100P: PCI single-port T1
# Digium E100P: PCI single-port E1
#wct1xxp
# Digium TE110P: PCI single-port T1/E1/J1
#wcte11xp
# Digium TDM2400P/AEX2400: up to 24 analog ports
# Digium TDM800P/AEX800: up to 8 analog ports
# Digium TDM410P/AEX410: up to 4 analog ports
#wctdm24xxp
# X100P - Single port FXO interface
# X101P - Single port FXO interface
#wcfxo
# Digium TDM400P: up to 4 analog ports
wctdm
# Digium B410P: 4 NT/TE BRI ports
#wcb4xxp
# Digium TC400B: G729 / G723 Transcoding Engine
#wctc4xxp
# Xorcom Astribank Devices
#xpp_usb

3.2.) A continuacin editamos /etc/dahdi/system.conf. ponemos controlar


aparte del idioma el nmero de canal para cada mdulo.
[root@asterisk asterisk]# nano /etc/dahdi/system.conf
# Autogenerated by /usr/sbin/dahdi_genconf on Thu Nov 5 06:19:40 2009
# If you edit this file and execute /usr/sbin/dahdi_genconf again,
# your manual changes will be LOST.
# Dahdi Configuration File
#
# This file is parsed by the Dahdi Configurator, dahdi_cfg
#
# Span 1: WCTDM/4 "Wildcard TDM400P REV E/F Board 5" (MASTER)
fxsks=1
echocanceller=mg2,1
fxoks=2
echocanceller=mg2,2
# channel 3, WCTDM/4/2, no module.
# channel 4, WCTDM/4/3, no module.
# Global data
loadzone
= es
defaultzone = es

4.) Echemos un vistazo al fichero /etc/asterisk/dahdi_channels.conf


211

[root@asterisk asterisk]# nano /etc/asterisk/dahdi-channels.conf


; Autogenerated by /usr/sbin/dahdi_genconf on Thu Nov 5 06:19:40 2009
; If you edit this file and execute /usr/sbin/dahdi_genconf again,
; your manual changes will be LOST.
; Dahdi Channels Configurations (chan_dahdi.conf)
;
; This is not intended to be a complete chan_dahdi.conf. Rather, it is intended
; to be #include-d by /etc/chan_dahdi.conf that will include the global settings
;
; Span 1: WCTDM/4 "Wildcard TDM400P REV E/F Board 5" (MASTER)
;;; line="1 WCTDM/4/0 FXSKS"
signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
channel => 1
callerid=
group=
context=default
;;; line="2 WCTDM/4/1 FXOKS"
signalling=fxo_ks
callerid="Channel 2" <4002>
mailbox=4002
group=5
context=from-internal
channel => 2
callerid=
mailbox=
group=
context=default

Tenemos las tarjetas reconocidas pero no tenemos canales.

[root@asterisk etc]# asterisk -r


*CLI> dahdi show channels
Chan extension Context
pseudo
default

Language Moh interpret


default

*CLI> dahdi show status


Description
Wildcard TDM400P REV E/F Board 5

Alarms IRQ bpviol CRC4


OK
0
0
0

5.) Asterisk interpreta los canales a travs del fichero de configuracin


chan_dahdi.conf. Este fichero no existe, as que lo crearemos nosotros.

[root@asterisk asterisk]# nano chan_dahdi.conf

Aadiremos simplemente 2 lneas:


212

[channels]
#include dahdi-channels.conf

con esto le decimos al sistema asterisk que lea el fichero dahdi-channels.conf


(creado en la ejecucin de dahdi_genconf y dahdi_cfg -vv).
6.) Ahora simplemente reiniciamos asterisk

[root@asterisk asterisk]# asterisk -r


*CLI> dahdi show channels
Chan Extension
pseudo
1
2

Context
default
default
default

Language MOH Interpret


default
default
default

7.) Paramos Asterisk :


[root@asterisk asterisk]# service asterisk stop

Reiniciamos DAHDI:
[root@asterisk asterisk]# service dahdi restart

Iniciamos Asterisk y listo:


[root@asterisk asterisk]# service asterisk start

8.) Al descolgar el telefono analgico en el CLI:


-- Starting simple switch on 'DAHDI/2-1'
-- Hungup 'DAHDI/2-1'

Pruebas de llamada al canal DAHDI en Asterisk 1.4.26.1


La configuracin del canal DAHDI en el extensions.conf es:
exten => 1234,1,Dial(DAHDI/2-1,30,Ttm)
exten => 1234,n,Hangup

Llamada de la extensin 105 a la extensin 1234 que desva al canal DAHDI, la salida
del CLI es la siguiente:

213

-- Executing [1234@incoming:1] Dial("SIP/105-08601bd0", "DAHDI/2-1|30|Ttm") in


new stack
-- Called 2-1
-- Started music on hold, class 'default', on SIP/105-08601bd0
-- DAHDI/2-1 is ringing
-- DAHDI/2-1 is ringing
-- Stopped music on hold on SIP/105-08601bd0
-- Hungup 'DAHDI/2-1'
== Spawn extension (incoming, 1234, 1) exited non-zero on 'SIP/105-08601bd0'

Llamada del telfono analgico (canal DAHDI) a la extensin 105:


-- Starting simple switch on 'DAHDI/2-1'
-- Executing [105@incoming:1] Dial("DAHDI/2-1", "SIP/105|30|Ttm") in new stack
-- Called 105
-- Started music on hold, class 'default', on DAHDI/2-1
-- SIP/105-0948a5a0 is ringing
-- Stopped music on hold on DAHDI/2-1
== Spawn extension (incoming, 105, 1) exited non-zero on 'DAHDI/2-1'
-- Hungup 'DAHDI/2-1'

Pruebas bsicas realizadas en Asterisk 1.4.21


Pruebas SoftPhones:
1.) Realizamos la configuracin de 2 usuarios SIP y de 2 usuarios IAX2 en los
ficheros extensions.conf, iax.conf y sip.conf.
extensions.conf
exten => 100,1,Dial(SIP/100,30,Ttm)
exten => 100,n,Hangup
exten => 101,1,Dial(SIP/101,30,Ttm)
exten => 101,n,Hangup
;exten => 300,1,Dial(IAX2/300,30,Ttrm)
;exten => 300,n,Hangup
;exten => 400,1,Dial(IAX2/400,30,Ttrm)
;exten => 400,n,Hangup

sip.conf
[general]
context=default
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
language=es
callevents=yes
[100]
type=friend
username=100

214

secret=1234
mailbox=100
host=dynamic
context=default
canreinvite=yes
dtmfmode=rfc2833
nat=no
[101]
type=friend
username=101
secret=1234
mailbox=101
host=dynamic
context=default
canreinvite=yes
dtmfmode=rfc2833
nat=no

iax.conf
[general]
bindport=4569
bindaddr=0.0.0.0
srvlookup=yes
accountcode=lss0101
delayreject=yes
language=es
disallow=all
allow=gsm
allow=ulaw
allow=alaw
[300]
type=friend
host=dynamic
secret=1234
auth=md5,plain
context=default
qualify=yes
callerid = "300"
autokill=yes
[400]
type=friend
host=dynamic
secret=1234
auth=md5,plain
context=default
qualify=yes
callerid = "400"
autokill=yes

2.) Hacemos un reload de Asterisk para que detecte las extensiones de los
usuarios.
215

[root@asterisk]# asterisk rvvv


*CLI> reload

3.) Realizamos la configuracin de los 4 usuarios en 2 Softphones Zoiper situados


en dos ordenadores diferentes.

De la misma manera se configuran las otras dos extensiones de cada protocolo.


Para tener ms informacin sobre la configuracin de este y otros SoftPhones ir
al subcaptulo SoftPhones del captulo de Asterisk.(ENLACE)
4.) Comprobamos que los usuarios se han registrado correctamente en los
SoftPhones.
-- Registered IAX '300' at 192.168.1.200 port 4569
-- Registered SIP '100' at 192.168.1.200 port 5060
-- Saved useragent "Zoiper rev.5324" for peer 300
-- Saved useragent "Zoiper rev.5324" for peer 100

216

5.) Vemos el comportamiento de la centralita Asterisk, a travs del SoftPhone, al


realizar llamadas entre las extensiones (teniendo en cuenta que no podemos
llamar de una extensin SIP a una IAX2 y bicerversa).
-- Executing [100@default:1] Dial("SIP/101- 097f7fb8", "SIP/100|30|Ttm") in
new stack
-- Called 100
-- Started music on hold, class 'default', on SIP/101-097f7fb8
-- SIP/100-097f9a98 is ringing
-- SIP/100-097f9a98 answered SIP/101-097f7fb8
-- Stopped music on hold on SIP/101-097f7fb8
== Spawn extension (default, 100, 1) exited non-zero on 'SIP/101-097f7fb8'

217

Pruebas telfonos IP (SipuraSPA):

1.) Realizamos la configuracin de 4 usuarios SIP en los ficheros extensions.conf y


sip.conf.
De la misma forma que en el apartado anterior realizamos la configuracin en
dichos ficheros de las extensiones SIP: 102, 103, 104, 105, que sern utilizadas
tambin en pruebas posteriores.
2.) Hacemos un reload de Asterisk para que detecte las extensiones de los
usuarios.
[root@asterisk]# asterisk rvvv
*CLI> reload

3.) Realizamos la configuracin de los 4 usuarios en 2 telefenos IP SipuraSPA de


dos extensiones cada uno.
La configuracin del telfono en cuanto al servidor Asterisk es la siguiente:

Un ejemplo de configuracin de una extensin de las dos que permite


configurar cada telfono IP es:

218

4.) Comprobamos que los usuarios se han registrado correctamente en los


telfonos IP.

-- Registered SIP '102' at 192.168.1.201 port 5060


-- Saved useragent "Sipura/SPA841-3.1.3(a)" for peer 102

5.) Vemos el comportamiento de la centralita Asterisk, a travs del CLI, al realizar


llamadas entre las extensiones SIP de los telfonos IP y las de los SoftPhones
configuradas en el apartado anterior.
-- Executing [100@default:1] Dial("SIP/102-097f96a8", "SIP/100|30|Ttm") in
new stack
-- Called 100
-- Started music on hold, class 'default', on SIP/102-097f96a8
-- SIP/100-098066d8 is ringing
-- Stopped music on hold on SIP/102-097f96a8

219

== Spawn extension (default, 100, 1) exited non-zero on 'SIP/102-097f96a8'

Pruebas de funcionamiento de buzones de voz:


1.) Desconectamos un telfono IP paa obligar la redireccin a los buzones de las
extensiones registradas en l.
extensions.conf
exten => 100,1,Dial(SIP/100,30,Ttm)
exten => 100,n,Voicemail(100)
exten => 100,n,Hangup

voicemail.conf
[general]
format=wav49|gsm|wav
;serveremail=asterisk
attach=yes
skipms=3000
maxsilence=10
silencethreshold=128
maxlogins=3
emaildateformat=%A, %B %d, %Y at %r
sendvoicemail=yes
[zonemessages]
eastern=America/New_York|'vm-received' Q 'digits/at' IMp
central=America/Chicago|'vm-received' Q 'digits/at' IMp
central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours'
military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'
european=Europe/Copenhagen|'vm-received' a d b 'digits/at' HM
[default]
100 => 1234,100,100@localhost

2.) Vemos el comportamiento de la centralita Asterisk, a travs del CLI, al realizar


una llamada a una de las extensiones del telfono IP que no est registrada.
-- Executing [100@default:1] Dial("SIP/102-0891c9f0", "SIP/100|30|Ttm") in
new stack
== Everyone is busy/congested at this time (1:0/0/1)
-- Executing [100@default:2] VoiceMail("SIP/102-0891c9f0", "100") in new
stack
-- <SIP/102-0891c9f0> Playing 'vm-intro' (language 'es')
-- <SIP/102-0891c9f0> Playing 'beep' (language 'es')
-- Recording the message
-- x=0, open writing: /var/spool/asterisk/voicemail/default/100/tmp/ylgos8
format: wav49, 0x889d9f0
-- x=1, open writing: /var/spool/asterisk/voicemail/default/100/tmp/ylgos8
format: gsm, 0x89181f0
-- x=2, open writing: /var/spool/asterisk/voicemail/default/100/tmp/ylgos8
format: wav, 0x88fc230

220

-- User hung up

Al grabar el primer mensaje en la cuenta de voicemail hay que especificar los


cdecs en los que quieres que se grabe el mensaje. A continuacin grabar en
esos formatos todos los mensajes que se dejen a no ser que se cambie.
3.) Vemos cmo escuchar el mensaje guardado en el buzn.
extensions.conf
;exten => 1001,1,VoiceMailMain(100)

Para escuchar los mensajes: Marcar 1001.


Tras grabar dejar dos mensajes en el buzn de voz a la extensin 100:
Despus de marcar la extensin para escuchar los buzones de voz de la
extensin 100 (1001) te pide la password del buzn, si la metes correctamente
t dice el numero de mensajes que tienes en el buzn y te da una serie de
opciones:
-- Executing [1001@default:1] VoiceMailMain("SIP/102-08914790", "100") in
new stack
-- <SIP/102-08914790> Playing 'vm-password' (language 'es')
-- <SIP/102-08914790> Playing 'vm-youhave' (language 'es')
-- <SIP/102-08914790> Playing 'digits/2' (language 'es')
-- <SIP/102-08914790> Playing 'vm-messages' (language 'es') -->OPCION 1
-- <SIP/102-08914790> Playing 'vm-INBOX' (language 'es') -->OPCION 2
-- <SIP/102-08914790> Playing 'vm-onefor' (language 'es') -->OPCION 3

Pulsamos el 1 para escuchar los mensajes.Te dice la fecha y hora del primero y
reproduce la grabacin:
-- <SIP/102-08914790> Playing 'vm-first' (language 'es')
-- <SIP/102-08914790> Playing 'vm-message' (language 'es')
== Parsing '/var/spool/asterisk/voicemail/default/100/INBOX/msg0000.txt':
Found
-- <SIP/102-08914790> Playing 'vm-received' (language 'es')
-- <SIP/102-08914790> Playing 'digits/today' (language 'es')
-- <SIP/102-08914790> Playing 'digits/at' (language 'es')
-- <SIP/102-08914790> Playing 'digits/11' (language 'es')
-- <SIP/102-08914790> Playing 'digits/24' (language 'es')
-- <SIP/102-08914790> Playing 'digits/a-m' (language 'es')
-- <SIP/102-08914790> Playing
'/var/spool/asterisk/voicemail/default/100/INBOX/msg0000' (language 'es')

Entre otras opciones te permite volverlo a escuchar y escuchar el siguiente


mensaje,etc.
-- <SIP/102-08914790> Playing 'vm-advopts' (language 'es') -->OPCION 4
-- <SIP/102-08914790> Playing 'vm-repeat' (language 'es') -->OPCION 5

221

-- <SIP/102-08914790> Playing 'vm-next' (language 'es')


-->OPCION 6
-- <SIP/102-08914790> Playing 'vm-delete' (language 'es') -->OPCION 7
-- <SIP/102-08914790> Playing 'vm-toforward' (language 'es') -->OPCION 8
-- <SIP/102-08914790> Playing 'vm-savemessage' (language 'es') -->OPCION 9
-- <SIP/102-08914790> Playing 'vm-helpexit' (language 'es') -->OPCION 0

Escuchamos el siguiente pulsando el 6.


== Parsing '/var/spool/asterisk/voicemail/default/100/INBOX/msg0001.txt':
Found
-- <SIP/102-08914790> Playing 'vm-received' (language 'es')
-- <SIP/102-08914790> Playing 'digits/today' (language 'es')
-- <SIP/102-08914790> Playing 'digits/at' (language 'es')
-- <SIP/102-08914790> Playing 'digits/11' (language 'es')
-- <SIP/102-08914790> Playing 'digits/28' (language 'es')
-- <SIP/102-08914790> Playing 'digits/a-m' (language 'es')
-- <SIP/102-08914790> Playing
'/var/spool/asterisk/voicemail/default/100/INBOX/msg0001' (language 'es')

Pruebas utilizacin de las aplicaciones Goto() y GotoIf() y de variables de canal:

1.) Llamamos a la extensin 100 dependiendo del contenido de la variable de canal


DIALSTATUS que comprueba el estado de la extensin a la que llamamos.
Si la llamada no es contestada pero el canal esta activo --> Cuelga
Si la llamada est ocupada o la lnea est saturada --> Aplicaciones Busy() y
Congestion()
Si la llamada que estamos realizando es a un canal inactivo la redirecciona a la
extensin 102 tras decir la extensin marcada.
exten => 1222,1,Dial(SIP/100,30,Ttm)
exten => 1222,n,NoOp(Dial Status : ${DIALSTATUS})
exten => 1222,n,Set(COUNT=${EXTEN})
exten => 1222,n,Goto(${DIALSTATUS},1)
exten => NOANSWER,1,Hangup
exten => CONGESTION,1,Congestion
exten => CANCEL,1,Hangup
exten => BUSY,1,Busy
exten => CHANUNAVAIL,1,SayNumber(${COUNT})
exten => CHANUNAVAIL,2,Dial(SIP/101,30,Ttm)
-- Executing [1222@default:1] Dial("SIP/102-08915210", "SIP/100|30|Ttm") in new stack
== Everyone is busy/congested at this time (1:0/0/1)
-- Executing [1222@default:2] NoOp("SIP/102-08915210", "Dial Status : CHANUNAVAIL") in
new stack
-- Executing [1222@default:3] Set("SIP/102-08915210", "COUNT=1222") in new stack
-- Executing [1222@default:4] Goto("SIP/102-08915210", "CHANUNAVAIL|1") in new stack
-- Goto (default,CHANUNAVAIL,1)
-- Executing [CHANUNAVAIL@default:1] SayNumber("SIP/102-08915210", "1222") in new stack
-- <SIP/102-08915210> Playing 'digits/thousand' (language 'es')

222

-- <SIP/102-08915210> Playing 'digits/200' (language 'es')


-- <SIP/102-08915210> Playing 'digits/22' (language 'es')
-- Executing [CHANUNAVAIL@default:2] Dial("SIP/102-08915210", "SIP/101|30|Ttm") in new
stack
-- Called 101
-- Started music on hold, class 'default', on SIP/102-08915210
-- SIP/101-08920878 is ringing
-- Stopped music on hold on SIP/102-08915210
== Spawn extension (default, CHANUNAVAIL, 2) exited non-zero on 'SIP/102-08915210'

2.) Vemos el funcionamiento del GotoIf, tal que dependiendo del valor de una
variabvle se llama a una extension o a otra.
exten => 6666,1,Set(TEST=2)
;exten => 6666,1,Set(TEST=1)
exten => 6666,n,GotoIf($[${TEST} = 1]?ir,1:adios,1)
exten => adios,1,Goto(default,100,1)
exten => ir,1,Goto(default,101,1)
exten => t,1,Goto(default,101,1)

Probamos con la variable TEST=2 (redirecciona a dios y llama a la extensin 100


que no est registrada y por tanto salta el buzn).
-- Executing [6666@default:1] Set("SIP/102-0891dbe0", "TEST=2") in new stack
-- Executing [6666@default:2] GotoIf("SIP/102-0891dbe0", "0?ir|1:adios|1") in new stack
-- Goto (default,adios,1)
-- Executing [adios@default:1] Goto("SIP/102-0891dbe0", "default|100|1") in new stack
-- Goto (default,100,1)
-- Executing [100@default:1] Dial("SIP/102-0891dbe0", "SIP/100|30|Ttm") in new stack
== Everyone is busy/congested at this time (1:0/0/1)
-- Executing [100@default:2] VoiceMail("SIP/102-0891dbe0", "100") in new stack
-- <SIP/102-0891dbe0> Playing 'vm-intro' (language 'es')
== Spawn extension (default, 100, 2) exited non-zero on 'SIP/102-0891dbe0'

Probamos con la variable TEST=1 (redirecciona a ir y llama a la extensin 101).


-- Executing [6666@default:1] Set("SIP/102-b756d130", "TEST=1") in new stack
-- Executing [6666@default:2] GotoIf("SIP/102-b756d130", "1?ir|1:adios|1") in new stack
-- Goto (default,ir,1)
-- Executing [ir@default:1] Goto("SIP/102-b756d130", "default|101|1") in new stack
-- Goto (default,101,1)
-- Executing [101@default:1] Dial("SIP/102-b756d130", "SIP/101|30|Ttm") in new stack
-- Called 101
-- Started music on hold, class 'default', on SIP/102-b756d130
-- SIP/101-0891db38 is ringing
-- Stopped music on hold on SIP/102-b756d130
== Spawn extension (default, 101, 1) exited non-zero on 'SIP/102-b756d130'

223

3.) Contador decreciente.


exten => 1123,1,Set(COUNT=10)
exten => 1123,n(start),GotoIf($[${COUNT} > 0]?:goodbye)
exten => 1123,n,SayNumber(${COUNT})
exten => 1123,n,Set(COUNT=$[${COUNT} - 1])
exten => 1123,n,Goto(start)
exten => 1123,n(goodbye),Hangup

-- Executing [1123@default:1] Set("SIP/102-b7568b98", "COUNT=10") in new stack


-- Executing [1123@default:2] GotoIf("SIP/102-b7568b98", "1?:goodbye") in new stack
-- Executing [1123@default:3] SayNumber("SIP/102-b7568b98", "10") in new stack
-- <SIP/102-b7568b98> Playing 'digits/10' (language 'es')
-- Executing [1123@default:4] Set("SIP/102-b7568b98", "COUNT=9") in new stack
-- Executing [1123@default:5] Goto("SIP/102-b7568b98", "start") in new stack
-- Goto (default,1123,2)
-- Executing [1123@default:2] GotoIf("SIP/102-b7568b98", "1?:goodbye") in new stack
-- Executing [1123@default:3] SayNumber("SIP/102-b7568b98", "9") in new stack
-- <SIP/102-b7568b98> Playing 'digits/9' (language 'es')
-- Executing [1123@default:4] Set("SIP/102-b7568b98", "COUNT=8") in new stack
-- Executing [1123@default:5] Goto("SIP/102-b7568b98", "start") in new stack
-- Goto (default,1123,2)
-- Executing [1123@default:2] GotoIf("SIP/102-b7568b98", "1?:goodbye") in new stack
-- Executing [1123@default:3] SayNumber("SIP/102-b7568b98", "8") in new stack
-- <SIP/102-b7568b98> Playing 'digits/8' (language 'es')
-- Executing [1123@default:4] Set("SIP/102-b7568b98", "COUNT=7") in new stack
-- Executing [1123@default:5] Goto("SIP/102-b7568b98", "start") in new stack
-- Goto (default,1123,2)
-- Executing [1123@default:2] GotoIf("SIP/102-b7568b98", "1?:goodbye") in new stack
-- Executing [1123@default:3] SayNumber("SIP/102-b7568b98", "7") in new stack
-- <SIP/102-b7568b98> Playing 'digits/7' (language 'es')
-- Executing [1123@default:4] Set("SIP/102-b7568b98", "COUNT=6") in new stack
-- Executing [1123@default:5] Goto("SIP/102-b7568b98", "start") in new stack
-- Goto (default,1123,2)
-- Executing [1123@default:2] GotoIf("SIP/102-b7568b98", "1?:goodbye") in new stack
-- Executing [1123@default:3] SayNumber("SIP/102-b7568b98", "6") in new stack
-- <SIP/102-b7568b98> Playing 'digits/6' (language 'es')
-- Executing [1123@default:4] Set("SIP/102-b7568b98", "COUNT=5") in new stack
-- Executing [1123@default:5] Goto("SIP/102-b7568b98", "start") in new stack
-- Goto (default,1123,2)
-- Executing [1123@default:2] GotoIf("SIP/102-b7568b98", "1?:goodbye") in new stack
-- Executing [1123@default:3] SayNumber("SIP/102-b7568b98", "5") in new stack
-- <SIP/102-b7568b98> Playing 'digits/5' (language 'es')
-- Executing [1123@default:4] Set("SIP/102-b7568b98", "COUNT=4") in new stack
-- Executing [1123@default:5] Goto("SIP/102-b7568b98", "start") in new stack
-- Goto (default,1123,2)
-- Executing [1123@default:2] GotoIf("SIP/102-b7568b98", "1?:goodbye") in new stack
-- Executing [1123@default:3] SayNumber("SIP/102-b7568b98", "4") in new stack
-- <SIP/102-b7568b98> Playing 'digits/4' (language 'es')
-- Executing [1123@default:4] Set("SIP/102-b7568b98", "COUNT=3") in new stack
-- Executing [1123@default:5] Goto("SIP/102-b7568b98", "start") in new stack
-- Goto (default,1123,2)
-- Executing [1123@default:2] GotoIf("SIP/102-b7568b98", "1?:goodbye") in new stack
-- Executing [1123@default:3] SayNumber("SIP/102-b7568b98", "3") in new stack
-- <SIP/102-b7568b98> Playing 'digits/3' (language 'es')

224

-- Executing [1123@default:4] Set("SIP/102-b7568b98", "COUNT=2") in new stack


-- Executing [1123@default:5] Goto("SIP/102-b7568b98", "start") in new stack
-- Goto (default,1123,2)
-- Executing [1123@default:2] GotoIf("SIP/102-b7568b98", "1?:goodbye") in new stack
-- Executing [1123@default:3] SayNumber("SIP/102-b7568b98", "2") in new stack
-- <SIP/102-b7568b98> Playing 'digits/2' (language 'es')
-- Executing [1123@default:4] Set("SIP/102-b7568b98", "COUNT=1") in new stack
-- Executing [1123@default:5] Goto("SIP/102-b7568b98", "start") in new stack
-- Goto (default,1123,2)
-- Executing [1123@default:2] GotoIf("SIP/102-b7568b98", "1?:goodbye") in new stack
-- Executing [1123@default:3] SayNumber("SIP/102-b7568b98", "1") in new stack
-- <SIP/102-b7568b98> Playing 'digits/1' (language 'es')
-- Executing [1123@default:4] Set("SIP/102-b7568b98", "COUNT=0") in new stack
-- Executing [1123@default:5] Goto("SIP/102-b7568b98", "start") in new stack
-- Goto (default,1123,2)
-- Executing [1123@default:2] GotoIf("SIP/102-b7568b98", "0?:goodbye") in new stack
-- Goto (default,1123,6)
-- Executing [1123@default:6] Hangup("SIP/102-b7568b98", "") in new stack
== Spawn extension (default, 1123, 6) exited non-zero on 'SIP/102-b7568b98'

Pruebas de funcionamiento colas y registro de miembros:

queues.conf
[general]
persistentmembers = yes
keepstats=no
[davidqueue]
musiconhold = default
strategy = ringall
;servicelevel = 0
eventwhencalled = yes
timeout = 10
retry = 1
;autofil = yes
context = intern
;wrapuptime = 0
;maxten = 0
;joinempty = yes
announce-frequency = 30
announce-holdtime = yes
leavewhenempty = strict
member => SIP/100,1
member => SIP/103,2
member => SIP/104,3
member => SIP/105,1

extensions.conf
exten => 2000,1,Queue(davidqueue|tThH||)
exten => 2001,1,AddQueueMember(davidqueue|SIP/101)

225

exten => 2001,n,Hangup


exten => 2002,1,RemoveQueueMember(davidqueue|SIP/101)
exten => 2002,n,Hangup
exten => 2003,1,AddQueueMember(davidqueue,,1)
exten => 2003,n,Hangup
exten => 2004,1,RemoveQueueMember(davidqueue)
exten => 2004,n,Hangup
exten => 3009,1,Set(NUM=${QUEUE_MEMBER_COUNT(davidqueue)})
exten => 3009,n,SayNumber(${NUM})
exten => 3004,1,PauseQueueMember(davidqueue|SIP/105)
exten => 3004,n,Hangup
exten => 3005,1,UnpauseQueueMember(davidqueue|SIP/105)
exten => 3005,n,Hangup
exten => 3006,1,PauseQueueMember(davidqueue|SIP/100)
exten => 3006,n,Hangup
exten => 3007,1,UnpauseQueueMember(davidqueue|SIP/100)
exten => 3007,n,Hangup

1.) Comprobamos que la cola a sido correctamente configurada desde el CLI:


*CLI> queue show
davidqueue has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime), W:0, C:0,
A:0, SL:0.0% within 0s
Members:
SIP/105 with penalty 1 (Not in use) has taken no calls yet
SIP/104 with penalty 3 (Not in use) has taken no calls yet
SIP/103 with penalty 2 (Not in use) has taken no calls yet
SIP/100 with penalty 1 (Not in use) has taken no calls yet
No Callers>

2.) Llamada desde la extensin 102 a la cola (2000)

-- Executing [2000@default:1] Queue("SIP/102-09368d60", "davidqueue|tThH||") in new stack


-- Started music on hold, class 'default', on SIP/102-09368d60
-- Called SIP/100
-- Called SIP/105
-- SIP/100-093ce628 is ringing
-- SIP/105-0936a510 is ringing
-- Stopped music on hold on SIP/102-09368d60
== Spawn extension (default, 2000, 1) exited non-zero on 'SIP/102-09368d60'

Vemos que suenan a la vez los telfonos de los miembros de menor penalidad.
3.) Pausamos la extensin 105 y llamamos de nuevo a la cola.

226

-- Executing [3004@default:1] PauseQueueMember("SIP/102-09368d60",


"davidqueue|SIP/105") in new stack
-- Executing [3004@default:2] Hangup("SIP/102-09368d60", "") in new stack
== Spawn extension (default, 3004, 2) exited non-zero on 'SIP/102-09368d60'
-- Executing [2000@default:1] Queue("SIP/102-09368d60", "davidqueue|tThH||") in new
stack
-- Started music on hold, class 'default', on SIP/102-09368d60
-- Called SIP/100
-- SIP/100-093cba30 is ringing
-- Stopped music on hold on SIP/102-09368d60
== Spawn extension (default, 2000, 1) exited non-zero on 'SIP/102-09368d60'

Esta vez solo suena la extensin 100 de forma que en cualquier momento
podemos evitar contestar las llamadas de la cola.
4.) Aadimos dinmicamente el miembro 101 con prioridad 1 a la cola , llamamos
a la cola para ver su funcionamiento y lo eliminamos.
*CLI> queue add member SIP/101 to davidqueue penalty 1
Added interface 'SIP/101' to queue 'davidqueue'
-- Executing [2000@default:1] Queue("SIP/102-093d98a0", "davidqueue|tThH||") in new
stack
-- Started music on hold, class 'default', on SIP/102-093d98a0
-- Called SIP/100
-- Called SIP/101
-- SIP/100-093dd8c0 is ringing
-- SIP/101-093e18e0 is ringing
-- Stopped music on hold on SIP/102-093d98a0
== Spawn extension (default, 2000, 1) exited non-zero on 'SIP/102-093d98a0'

Como se puede observar a pesar de ser un miembro dinmico el


funcionamiento es el mismo que cualquier miembro esttico.
-- Executing [2002@default:1] RemoveQueueMember("SIP/102-09368d60",
"davidqueue|SIP/101") in new stack
-- Executing [2002@default:2] Hangup("SIP/102-09368d60", "") in new stack
== Spawn extension (default, 2002, 2) exited non-zero on 'SIP/102-09368d60'

A travs de la extension 2002 eliminamos dichos miembro dinmico.


*CLI> queue show
davidqueue has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime), W:0, C:0,
A:0, SL:0.0% within 0s
Members:
SIP/105 with penalty 1 (paused) (Not in use) has taken no calls yet
SIP/104 with penalty 3 (Not in use) has taken no calls yet

227

SIP/103 with penalty 2 (Not in use) has taken no calls yet


SIP/100 with penalty 1 (Not in use) has taken no calls yet
No Callers

5.) Pausamos el miembro 100 y llamamos a la cola para observar como sonar el
de penalidad inmediatamente superior.
-- Executing [3006@default:1] PauseQueueMember("SIP/102-093ce628",
"davidqueue|SIP/100") in new stack
-- Executing [3006@default:2] Hangup("SIP/102-093ce628", "") in new stack
== Spawn extension (default, 3006, 2) exited non-zero on 'SIP/102-093ce628'
-- Executing [2000@default:1] Queue("SIP/102-09368d60", "davidqueue|tThH||") in new stack
-- Started music on hold, class 'default', on SIP/102-09368d60
-- Called SIP/103
-- SIP/103-093ce628 is ringing
-- Stopped music on hold on SIP/102-09368d60
== Spawn extension (default, 2000, 1) exited non-zero on 'SIP/102-09368d60'

Efectivamente el siguiente de mayor penalidad es el miembro 103 y por tanto


es el que suena.
6.) Comprobamos que pasa si tenemos que esperar en la cola
Llama la extensin 102 a la cola y comienza a ser atendido por el miembro 103.
-- Executing [2000@default:1] Queue("SIP/102-09368d60", "davidqueue|tThH||") in new stack
-- Started music on hold, class 'default', on SIP/102-09368d60
-- Called SIP/103
-- SIP/103-093ce628 is ringing
-- SIP/103-093ce628 answered SIP/102-09368d60
-- Stopped music on hold on SIP/102-09368d60
-- Started music on hold, class 'default', on SIP/103-093ce628

A continuacin llama a la cola la extensin 101, pero resulta que el miembro


103 est hablando y por tanto no puede coger, el llamante es avisado de que es
el primero esperando y tras dejar de hablar con la extensin 102 atiende a la
extensin que estaba esperando.
-- Executing [2000@default:1] Queue("SIP/101-0936a510", "davidqueue|tThH||") in new
stack
-- Started music on hold, class 'default', on SIP/101-0936a510
-- Called SIP/103
-- SIP/103-093e2ac0 is ringing
-- Nobody picked up in 10000 ms
-- Stopped music on hold on SIP/101-0936a510
-- <SIP/101-0936a510> Playing 'queue-youarenext' (language 'es')
-- Told SIP/101-0936a510 in davidqueue their queue position (which was 1)
-- <SIP/101-0936a510> Playing 'queue-thankyou' (language 'es')
-- Started music on hold, class 'default', on SIP/101-0936a510
-- Called SIP/103

228

-- SIP/103-093e2ac0 is ringing
-- Nobody picked up in 10000 ms
-- Called SIP/103
-- SIP/103-093e2ac0 is ringing
-- Stopped music on hold on SIP/103-093ce628
== Spawn extension (default, 2000, 1) exited non-zero on 'SIP/102-09368d60'
-- SIP/103-093e2ac0 answered SIP/101-0936a510
-- Stopped music on hold on SIP/101-0936a510
== Spawn extension (default, 2000, 1) exited non-zero on 'SIP/101-0936a510'

7.) Cuntos miembros hay en la cola?


-- Executing [3009@default:1] Set("SIP/102-093ce628", "NUM=4") in new stack
-- Executing [3009@default:2] SayNumber("SIP/102-093ce628", "4") in new stack
-- <SIP/102-093ce628> Playing 'digits/4' (language 'es')

Otras pruebas:
Pruebas de uso de conferencias en Asterisk 1.4.26.2:

1.) Agregamos a la conferencia creada en el fichero meetme.conf en la extensin


600 a 3 usuarios que desean conversar. La configuracin en el fichero
extensions.conf para acceder a la conferencia es:
;Agregarse a la conferencia 600
exten => 600,1,Meetme(600,i,1234)

Al llamar el primer miembro (5000), hace una grabacin con su nombre y tras
pulsar # te da un serie de opciones como escuchar la grabacin, regrabarla o
aceptarla y despus de elegir esta ltima opcin la operadora le indica de su
posicin en la conferencia (en este caso el 1).
-- Executing [600@acceso:1] MeetMe("SIP/5000-08d7d820", "600|i|1234") in new stack
== Parsing '/etc/asterisk/meetme.conf': Found
-- Created MeetMe conference 1023 for conference '600'
-- Recording
-- <SIP/5000-08d7d820> Playing 'vm-rec-name' (language 'es')
-- <SIP/5000-08d7d820> Playing 'beep' (language 'es')
-- x=0, open writing: /var/spool/asterisk/meetme/meetme-username-600-1 format: sln,
0x8d8f598
[Dec 10 21:49:55] DTMF[29532]: channel.c:2330 __ast_read: DTMF begin '#' received on
SIP/5000-08d7d820
[Dec 10 21:49:55] DTMF[29532]: channel.c:2340 __ast_read: DTMF begin passthrough '#' on
SIP/5000-08d7d820
[Dec 10 21:49:55] DTMF[29532]: channel.c:2262 __ast_read: DTMF end '#' received on
SIP/5000-08d7d820, duration 140 ms
[Dec 10 21:49:55] DTMF[29532]: channel.c:2299 __ast_read: DTMF end accepted with begin '#'
on SIP/5000-08d7d820
[Dec 10 21:49:55] DTMF[29532]: channel.c:2315 __ast_read: DTMF end passthrough '#' on
SIP/5000-08d7d820
-- User ended message by pressing #
-- <SIP/5000-08d7d820> Playing 'auth-thankyou' (language 'es')

229

-- <SIP/5000-08d7d820> Playing 'vm-review' (language 'es')


[Dec 10 21:50:02] DTMF[29532]: channel.c:2330 __ast_read: DTMF begin '1' received on
SIP/5000-08d7d820
[Dec 10 21:50:02] DTMF[29532]: channel.c:2334 __ast_read: DTMF begin ignored '1' on
SIP/5000-08d7d820
[Dec 10 21:50:02] DTMF[29532]: channel.c:2262 __ast_read: DTMF end '1' received on
SIP/5000-08d7d820, duration 110 ms
[Dec 10 21:50:02] DTMF[29532]: channel.c:2315 __ast_read: DTMF end passthrough '1' on
SIP/5000-08d7d820
-- <SIP/5000-08d7d820> Playing 'vm-msgsaved' (language 'es')
-- <SIP/5000-08d7d820> Playing 'conf-onlyperson' (language 'es')
[Dec 10 21:50:06] DEBUG[29532]: app_meetme.c:1817 conf_run: Placed channel SIP/500008d7d820 in DAHDI conf 1023

Hacemos lo mismo con los otros dos usuarios (2003 y 4000):


-- Executing [600@acceso:1] MeetMe("SIP/2003-08df6190", "600|i|1234") in new stack
-- Recording
-- <SIP/2003-08df6190> Playing 'vm-rec-name' (language 'es')
-- <SIP/2003-08df6190> Playing 'beep' (language 'es')
-- x=0, open writing: /var/spool/asterisk/meetme/meetme-username-600-2 format: sln,
0x8d8f598
[Dec 10 21:54:56] DTMF[29573]: channel.c:2262 __ast_read: DTMF end '#' received on
SIP/2003-08df6190, duration 90 ms
[Dec 10 21:54:56] DTMF[29573]: channel.c:2288 __ast_read: DTMF begin emulation of '#' with
duration 90 queued on SIP/2003-08df6190
[Dec 10 21:54:56] DTMF[29573]: channel.c:2407 __ast_read: DTMF end emulation of '#'
queued on SIP/2003-08df6190
-- User ended message by pressing #
-- <SIP/2003-08df6190> Playing 'auth-thankyou' (language 'es')
-- <SIP/2003-08df6190> Playing 'vm-review' (language 'es')
[Dec 10 21:55:05] DTMF[29573]: channel.c:2262 __ast_read: DTMF end '2' received on
SIP/2003-08df6190, duration 90 ms
[Dec 10 21:55:05] DTMF[29573]: channel.c:2315 __ast_read: DTMF end passthrough '2' on
SIP/2003-08df6190
-- Reviewing the recording
-- <SIP/2003-08df6190> Playing '/var/spool/asterisk/meetme/meetme-username-600-2'
(language 'es')
-- <SIP/2003-08df6190> Playing 'vm-review' (language 'es')
[Dec 10 21:55:13] DTMF[29573]: channel.c:2262 __ast_read: DTMF end '1' received on
SIP/2003-08df6190, duration 90 ms
[Dec 10 21:55:13] DTMF[29573]: channel.c:2315 __ast_read: DTMF end passthrough '1' on
SIP/2003-08df6190
-- <SIP/2003-08df6190> Playing 'vm-msgsaved' (language 'es')
[Dec 10 21:55:15] DEBUG[29533]: app_meetme.c:1457 announce_thread: About to play
/var/spool/asterisk/meetme/meetme-username-600-2
-- <DAHDI/pseudo-1307374741> Playing '/var/spool/asterisk/meetme/meetme-username-600-2'
(language 'es')
-- <DAHDI/pseudo-1307374741> Playing 'conf-hasjoin' (language 'es')
[Dec 10 21:55:19] DEBUG[29573]: app_meetme.c:1817 conf_run: Placed channel SIP/200308df6190 in DAHDI conf 1023
-- Executing [600@acceso:1] MeetMe("SIP/4000-08d910f8", "600|i|1234") in new stack
-- Recording
-- <SIP/4000-08d910f8> Playing 'vm-rec-name' (language 'es')
-- <SIP/4000-08d910f8> Playing 'beep' (language 'es')

230

-- x=0, open writing: /var/spool/asterisk/meetme/meetme-username-600-3 format: sln,


0x8d90478
[Dec 10 21:56:35] DTMF[29589]: channel.c:2330 __ast_read: DTMF begin '#' received on
SIP/4000-08d910f8
[Dec 10 21:56:35] DTMF[29589]: channel.c:2340 __ast_read: DTMF begin passthrough '#' on
SIP/4000-08d910f8
[Dec 10 21:56:35] DTMF[29589]: channel.c:2262 __ast_read: DTMF end '#' received on
SIP/4000-08d910f8, duration 170 ms
[Dec 10 21:56:35] DTMF[29589]: channel.c:2299 __ast_read: DTMF end accepted with begin '#'
on SIP/4000-08d910f8
[Dec 10 21:56:35] DTMF[29589]: channel.c:2315 __ast_read: DTMF end passthrough '#' on
SIP/4000-08d910f8
-- User ended message by pressing #
-- <SIP/4000-08d910f8> Playing 'auth-thankyou' (language 'es')
-- <SIP/4000-08d910f8> Playing 'vm-review' (language 'es')
[Dec 10 21:56:43] DTMF[29589]: channel.c:2330 __ast_read: DTMF begin '3' received on
SIP/4000-08d910f8
[Dec 10 21:56:43] DTMF[29589]: channel.c:2334 __ast_read: DTMF begin ignored '3' on
SIP/4000-08d910f8
[Dec 10 21:56:43] DTMF[29589]: channel.c:2262 __ast_read: DTMF end '3' received on
SIP/4000-08d910f8, duration 140 ms
[Dec 10 21:56:43] DTMF[29589]: channel.c:2315 __ast_read: DTMF end passthrough '3' on
SIP/4000-08d910f8
-- Re-recording
-- <SIP/4000-08d910f8> Playing 'vm-rec-name' (language 'es')
-- <SIP/4000-08d910f8> Playing 'beep' (language 'es')
-- x=0, open writing: /var/spool/asterisk/meetme/meetme-username-600-3 format: sln,
0x8d90478
[Dec 10 21:56:49] DTMF[29589]: channel.c:2330 __ast_read: DTMF begin '#' received on
SIP/4000-08d910f8
[Dec 10 21:56:49] DTMF[29589]: channel.c:2340 __ast_read: DTMF begin passthrough '#' on
SIP/4000-08d910f8
[Dec 10 21:56:49] DTMF[29589]: channel.c:2262 __ast_read: DTMF end '#' received on
SIP/4000-08d910f8, duration 130 ms
[Dec 10 21:56:49] DTMF[29589]: channel.c:2299 __ast_read: DTMF end accepted with begin '#'
on SIP/4000-08d910f8
[Dec 10 21:56:49] DTMF[29589]: channel.c:2315 __ast_read: DTMF end passthrough '#' on
SIP/4000-08d910f8
-- User ended message by pressing #
-- <SIP/4000-08d910f8> Playing 'auth-thankyou' (language 'es')
-- <SIP/4000-08d910f8> Playing 'vm-review' (language 'es')
[Dec 10 21:56:52] DTMF[29589]: channel.c:2330 __ast_read: DTMF begin '1' received on
SIP/4000-08d910f8
[Dec 10 21:56:52] DTMF[29589]: channel.c:2334 __ast_read: DTMF begin ignored '1' on
SIP/4000-08d910f8
[Dec 10 21:56:52] DTMF[29589]: channel.c:2262 __ast_read: DTMF end '1' received on
SIP/4000-08d910f8, duration 140 ms
[Dec 10 21:56:52] DTMF[29589]: channel.c:2315 __ast_read: DTMF end passthrough '1' on
SIP/4000-08d910f8
-- <SIP/4000-08d910f8> Playing 'vm-msgsaved' (language 'es')
[Dec 10 21:56:54] DEBUG[29533]: app_meetme.c:1457 announce_thread: About to play
/var/spool/asterisk/meetme/meetme-username-600-3
-- <DAHDI/pseudo-1307374741> Playing '/var/spool/asterisk/meetme/meetme-username-600-3'
(language 'es')
-- <DAHDI/pseudo-1307374741> Playing 'conf-hasjoin' (language 'es')
[Dec 10 21:56:58] DEBUG[29589]: app_meetme.c:1817 conf_run: Placed channel SIP/400008d910f8 in DAHDI conf 1023

231

En estos momentos hay 3 personas en la conferencia (600).


Vamos a comprobarlo:
;Saber cuantas personas hay en la conferencia
exten => 601,1,Playback(conf-thereare)
exten => 601,n,MeetMeCount(600)
exten => 601,n,Playback(conf-peopleinconf)
-- Executing [601@acceso:1] Playback("SIP/2000-08e14e28", "conf-thereare") in new stack
-- <SIP/2000-08e14e28> Playing 'conf-thereare' (language 'es')
-- Executing [601@acceso:2] MeetMeCount("SIP/2000-08e14e28", "600") in new stack
-- <SIP/2000-08e14e28> Playing 'digits/3' (language 'es')
-- Executing [601@acceso:3] Playback("SIP/2000-08e14e28", "conf-peopleinconf") in new
stack
-- <SIP/2000-08e14e28> Playing 'conf-peopleinconf' (language 'es')
== Auto fallthrough, channel 'SIP/2000-08e14e28' status is 'UNKNOWN'

2.) Vamos a restringir el nmero de personas de la conferencia a 2:


Para esto utilizaremos una macro que ir comparando cada vez que alquien
intente acceder a la conferencia dejndole o no dependiendo del nmero de
usuarios que ya hay en ella.
;Retringir Numero de personas en la conferencia
exten => 610,1,Set(confmax=2)
exten => 610,n,Macro(meetme)
[macro-meetme]
;exten => s,1,NoOp("confmax=" ${confmax})
exten => s,1,MeetMeCount(${MACRO_EXTEN},count)
;exten => s,n,NoOp("count=" ${count})
;exten => s,n,NoOp(${count}">" ${confmax})
exten => s,n,Gotoif($[${count} >= ${confmax}]?103)
exten => s,n,MeetMe(${MACRO_EXTEN})
exten => s,n,Hangup
exten => s,103,Playback(conf-invalid)
exten => s,104,Hangup

Como podemos ver en el archivo meetme.conf:


conf => 600,1234

Esto indica que slo hay una conferencia creada y que para acceder a ella habr
que marcar el nmero 600. Por esto en la primera prueba al marcar el 610 nos
saca esto por el CLI a la par que nos informa que no es un nmero de
conferencia el que acabamos de marcar.
-- Executing [610@acceso:1] Set("SIP/5000-08d7d7e0", "confmax=2") in new stack
-- Executing [610@acceso:2] Macro("SIP/5000-08d7d7e0", "meetme") in new stack
-- Executing [s@macro-meetme:1] MeetMeCount("SIP/5000-08d7d7e0", "610|count") in new
stack
== Parsing '/etc/asterisk/meetme.conf': Found
[Dec 10 22:04:27] DEBUG[29699]: app_meetme.c:2587 find_conf: 610 isn't a valid conference

232

[Dec 10 22:04:27] DEBUG[29699]: app_macro.c:379 _macro_exec: Executed application:


MeetMeCount
-- Executing [s@macro-meetme:2] GotoIf("SIP/5000-08d7d7e0", "0?103") in new stack
[Dec 10 22:04:27] DEBUG[29699]: app_macro.c:379 _macro_exec: Executed application: Gotoif
-- Executing [s@macro-meetme:3] MeetMe("SIP/5000-08d7d7e0", "610") in new stack
== Parsing '/etc/asterisk/meetme.conf': Found
[Dec 10 22:04:27] DEBUG[29699]: app_meetme.c:2587 find_conf: 610 isn't a valid conference
-- <SIP/5000-08d7d7e0> Playing 'conf-invalid' (language 'es')
== Spawn extension (macro-meetme, s, 3) exited non-zero on 'SIP/5000-08d7d7e0' in macro
'meetme'
== Spawn extension (acceso, 610, 2) exited non-zero on 'SIP/5000-08d7d7e0'

Modificamos el archivo meetme.conf aadiendo la linea: conf => 610 para as


crear una nueva conferencia de extensin 610, la cual la limitaremos a 2
personas.
No le ponemos contrasea porque esta conferencia al tener restringido el
acceso a slo 2 personas el acceso de ambas personas para hablar ser
instantneo.
Al igual que antes, agregamos los dos usuarios a la conferencia y probamos con
un tercero para ver que resultados obtenemos:
-- Executing [610@acceso:1] Set("SIP/5000-b6911148", "confmax=2") in new stack
-- Executing [610@acceso:2] Macro("SIP/5000-b6911148", "meetme") in new stack
-- Executing [s@macro-meetme:1] MeetMeCount("SIP/5000-b6911148", "610|count") in
new stack
[Dec 10 22:41:46] DEBUG[30235]: app_macro.c:379 _macro_exec: Executed application:
MeetMeCount
-- Executing [s@macro-meetme:2] GotoIf("SIP/5000-b6911148", "1?103") in new stack
-- Goto (macro-meetme,s,103)
[Dec 10 22:41:46] DEBUG[30235]: app_macro.c:379 _macro_exec: Executed application: Gotoif
-- Executing [s@macro-meetme:103] Playback("SIP/5000-b6911148", "conf-invalid") in new
stack
-- <SIP/5000-b6911148> Playing 'conf-invalid' (language 'es')
[Dec 10 22:41:51] DEBUG[30235]: app_macro.c:379 _macro_exec: Executed application:
Playback
-- Executing [s@macro-meetme:104] Hangup("SIP/5000-b6911148", "") in new stack
== Spawn extension (macro-meetme, s, 104) exited non-zero on 'SIP/5000-b6911148' in macro
'meetme'
== Spawn extension (acceso, 610, 2) exited non-zero on 'SIP/5000-b6911148'

El mensaje es claro: "Este no es un numero de conferencia valido, intntelo de


nuevo".
3.) Como ltimo ejemplo vamos a crear una conferencia dinmicamente, es decir,
sin configurarla en el meetme.conf.
;Crear una conferencia dinmica
exten => 620,1,Meetme(,scDM(default))
exten => 620,n,Hangup

El proceso de creacion es el siguiente:


233

1. Introduzca el numero de conferencia + #:


-- Executing [620@acceso:1] MeetMe("SIP/5000-b6902bf0", "|scDM(default)") in new
stack
-- <SIP/5000-b6902bf0> Playing 'conf-getconfno' (language 'es')

2. Introduzca el pin d ela conferencia


-- <SIP/5000-b6902bf0> Playing 'conf-getpin' (language 'es')

3. Crea la conferencia y te pide de nuevo el pin


-- Created MeetMe conference 1023 for conference '621'
-- <SIP/5000-b6902bf0> Playing 'conf-getpin' (language 'es')

4. Te dice si estas solo o no


-- <SIP/5000-b6902bf0> Playing 'conf-onlyperson' (language 'es')

Ahora probemos a aadir otro usuario a la conferencia que la hemos creado


con la extensin 621 y 1234 de contrasea.Es importante que no generemos
una conferencia con la misma extensin de la creacin dinmica de
conferencias (620).
Para el acceso a cualquier conferencia hay que definir una extensin, en el
archivo extensions.conf en este caso la 621:
;Acceso a conferencias dinamicas y estaticas
exten => 621,1,Meetme()
exten => 621,n,Hangup
-- Executing [621@acceso:1] MeetMe("SIP/2003-b6910c70", "") in new stack
-- <SIP/2003-b6910c70> Playing 'conf-getconfno' (language 'es')
-- <SIP/2003-b6910c70> Playing 'conf-getpin' (language 'es')
-- Stopped music on hold on SIP/5000-b690f648

Tras poner el nmero de conferencia + # y el pin se accede a la conferencia.


Pruebas Proveedor VoIP: Gizmo5
Uso de Gizmo 5 con Asterisk
Este proveedor tiene dos servicios fcilmente acoplables a las centralitas Asterisk:



Recepcin de llamadas.
Realizacin de llamadas.

El primero se consigue a travs de una cuenta Call In, de forma que tras obtener la
cuenta solo habra que configurar el archivo sip.conf con la informacin del proveedor

234

y el Dialplan a travs del extensions.conf para que determinadas llamadas sean


recibidas a travs de dicho proveedor.
El segundo se consigue a travs de una cuenta Call Out, de forma que tras obtener la
cuenta, al igual en el servicio Call In, se configuran los archivos sip.conf y
extensions.conf.
En los siguientes apartados se ve un ejemplo de estas configuraciones y del uso de este
servicio.
Configuracin
sip.conf
[general]
[]
register => 17473702523:Yet100:17473702523@proxy01.sipphone.com/17473702523
[proxy01.sipphone.com]
type=peer
context=from-external
disallow=all
allow=ulaw
allow=alaw
allow=ilbc
dtmfmode=rfc2833
host=proxy01.sipphone.com
fromdomain=proxy01.sipphone.com
insecure=very
qualify=yes
username=17473702523
fromuser=17473702523
authuser=17473702523
secret=XXXXXXXX
canreinvite=no

extensions.conf
;exten => _6XXXXXXXX,1,Dial(SIP/+34${EXTEN}@proxy01.sipphone.com,20,r)
;exten => _6XXXXXXXX,n,Hangup

Comprobacin del registro


*CLI> sip show peers
Name/username
Host
---------------------------proxy01.sipphone.com/1747 198.65.166.131

Dyn Nat ACL Port


----------------------5060

Status
--------OK (216 ms)

Llamada a movil desde GIZMO 5 utilizando cuenta Call Out:


Realizacin de una llamada desde el usuario SIP/102 hacia un mvil:

235

-- Executing [650XXXXXX@default:1] Dial("SIP/102-08913970",


"SIP/+34650XXXXXX@proxy01.sipphone.com|20|r") in new stack
-- Called +34650XXXXXX@proxy01.sipphone.com
-- SIP/proxy01.sipphone.com-089213f8 answered SIP/102-08913970
-- Packet2Packet bridging SIP/102-08913970 and SIP/proxy01.sipphone.com-089213f8
== Spawn extension (default, 650XXXXXX, 1) exited non-zero on 'SIP/102-08913970'

Pruebas Trunk IAX entre dos servidores Asterisk


Qu es un Trunk?
Un Trunk es una conexin, bien entre dos servidores o entre un servidor y las
aplicaciones de un operador de Telefona IP que permite el trfico de VoIP.
Trunk IAX Local entre dos servidores Asterisk
Como se ve en la imagen siguiente el Trunk IAX enlaza dos servidores de la misma red.

La configuracin necesaria para que las extensiones de ambos servidores puedan


comunicarse es la siguiente:

236

Tras reiniciar ambos servidores, comprobamos que el registro de las extensiones trunk
es correcto:

Al realizar una llamada desde la extensin 2003 del Servidor a la 100 del Porttil en el
CLI de Asterisk obtenemos:

237

Al realizar una llamada desde la extensin 100 del Porttil a la 2003 del Servidor en el
CLI de Asterisk obtenemos:

238

Trunk IAX entre dos servidores Asterisk


La configuracin sera igual a la del Trunk IAX local, la nica diferencia es que sera
necesario abrir el puerto correspondiente al protocolo IAX 2 en ambos routers para
poder recibir los paquetes uno del otro.

Pruebas extensin remota


Para configurar una extensin remota debemos configurarla como cualquier otra en
iax.conf:
[6000]
type=friend
username=6000
secret=1234
host=dynamic
context=remoto
canreinvite=yes
dtmfmode=rfc2833

Debemos configurar su acceso en el fichero extensions.conf:


[remoto]
exten => 6000,1,Dial(IAX2/${EXTEN},30,Ttm)
exten => 6000,n,Hangup

En el otro lado tendremos configurado en un softphone Zoiper una extensin IAX


poniendo como Dominio la IP externa del servidor.
239

Para poder establecer el registro de dicha extensin es necesario abrir el puerto


correspondiente al protocolo IAX 2 (4569) en el router por el que se comunica con el
exterior la centralita Asterisk.Tras abrir el puerto deberamos ver algo similar a esto:

Este es el esquema de la conexin con una extensin remota:

Para comprobar el correcto funcionamiento vemos el registro de la extensin


remota(6000):
-- Registered IAX2 '6000' (AUTHENTICATED) at 82.130.246.138:45755
localhost*CLI> iax2 show peers
Name/Username Host
Mask
6001/6001
192.168.1.50
(D) 255.255.255.255
6000/6000
82.130.246.138 (D) 255.255.255.255
2 iax2 peers [0 online, 0 offline, 2 unmonitored]

Port
4569
45755

Status
Unmonitored
Unmonitored

240

Y probamos a llamar desde la extensin de prueba 6001 a la extensin remota:


-- Accepting AUTHENTICATED call from 192.168.1.50:
> requested format = gsm,
> requested prefs = (),
> actual format = gsm,
> host prefs = (gsm|ulaw|alaw),
> priority = mine
-- Executing [6000@remoto:1] Dial("IAX2/6001-14139", "IAX2/6000|30|Ttm") in
new stack
-- Called 6000
-- Started music on hold, class 'default', on IAX2/6001-14139
-- Call accepted by 82.130.246.138 (format gsm)
-- Format for call is gsm
-- IAX2/6000-9140 is ringing
-- IAX2/6000-9140 answered IAX2/6001-14139
-- Stopped music on hold on IAX2/6001-14139
-- Hungup 'IAX2/6000-9140'
== Spawn extension (remoto, 6000, 1) exited non-zero on 'IAX2/6001-14139'
-- Hungup 'IAX2/6001-14139'

Prueba con Adaptador Telefnico Analgico SPA 3000


El esquema de las pruebas es el siguiente:

241

En primer lugar tenemos que acceder a la configuracin del SPA 3000 a travs de la IP
(192.168.1.211) para configurar las llamadas entrantes a travs del apartado PSTN Line
(PSTN->VoIP) y las llamadas salientes a travs del apartado Line 1 (VoIP->PSTN).
Line 1

PSTN Line

Vemos la configuracin del fichero sip.conf:


[9000]
type=friend
username=9000
secret=1234
host=dynamic
context=pstn
qualify=yes

242

[9001]
type=peer
username=9001
fromuser=9001
secret=1234
host=dynamic
port=5061
context=pstn
dtmfmode=rfc2833
insecure=very

Comprobamos el registro de las dos lneas:


-- Registered SIP '9000' at 192.168.1.211 port 5060
-- Saved useragent "Sipura/SPA3000-2.0.13(GWg)" for peer 9000
-- Registered SIP '9001' at 192.168.1.211 port 5061
-- Saved useragent "Sipura/SPA3000-2.0.13(GWg)" for peer 9001
NOTICE[3840]: chan_sip.c:13107 handle_response_peerpoke: Peer '9000' is now
Reachable. (25ms / 2000ms)
localhost*CLI> sip show peers
Name/username
Host
Dyn Nat ACL Port Status
9001/9001
192.168.1.211 D
5061 Unmonitored
9000/9000
192.168.1.211 D
5060 OK (14 ms)

La configuracin del fichero extensions.conf teniendo en cuenta que queremos que las
llamadas entrantes de nmeros que empiecen por 9 se redireccionen a un telfono
analgico y las de los nmeros que empiecen por 6 se redireccionen a un telfono IP y
que tambin queremos que las llamadas salientes que empiecen por 9 salgan por la
PSTN:
[globals]
PSTN=192.168.1.211:5061
[pstn]
;Entrantes
exten => 9001,1,NoOP("El CALLERID es: ${CALLERID(num)}")
exten => 9001,n,GotoIf($["${CALLERID(num):0:1}"= "9"]?100:200)
exten => 9001,100,Goto(pstn,9000,1)
exten => 9001,200,Goto(pstn,103,1)
;Si es un numero que empieza por 9
exten => 9000,1,Dial(SIP/9000,30,Ttm)
exten => 9000,n,Hangup
;Si es un numero que empieza por 6
exten => 103,1,Dial(SIP/103,30,Ttm)
exten => 103,n,Hangup
;Salientes
exten => _9XXXXXXXX,1,Dial(SIP/${EXTEN}@${PSTN},30,Ttm)
exten => _9XXXXXXXX,n,Hangup

Realizamos 3 pruebas para comprobar el correcto funcionamiento:


Prueba 1) Llamada desde un mvil al nmero que est conectado con el SPA 3000:
243

-- Executing [9001@pstn:1] NoOp("SIP/9001-b7776538", ""El CALLERID es: 650664616"") in


new stack
-- Executing [9001@pstn:2] GotoIf("SIP/9001-b7776538", "0?100:200") in new stack
-- Goto (pstn,9001,200)
-- Executing [9001@pstn:200] Goto("SIP/9001-b7776538", "pstn|103|1") in new stack
-- Goto (pstn,103,1)
-- Executing [103@pstn:1] Dial("SIP/9001-b7776538", "SIP/103|30|Ttm") in new stack
-- Called 103
-- Started music on hold, class 'default', on SIP/9001-b7776538
-- SIP/103-0a157af0 is ringing
-- Stopped music on hold on SIP/9001-b7776538
== Spawn extension (pstn, 103, 1) exited non-zero on 'SIP/9001-b7776538'

Prueba 2) Llamada desde un telfono fijo al nmero que est conectado con el SPA:
-- Executing [9001@pstn:1] NoOp("SIP/9001-b7771ae0", ""El CALLERID es: 945177145"") in
new stack
-- Executing [9001@pstn:2] GotoIf("SIP/9001-b7771ae0", "1?100:200") in new stack
-- Goto (pstn,9001,100)
-- Executing [9001@pstn:100] Goto("SIP/9001-b7771ae0", "pstn|9000|1") in new stack
-- Goto (pstn,9000,1)
-- Executing [9000@pstn:1] Dial("SIP/9001-b7771ae0", "SIP/9000|30|Ttm") in new stack
-- Called 9000
-- Started music on hold, class 'default', on SIP/9001-b7771ae0
-- SIP/9000-0a157af0 is ringing
-- Stopped music on hold on SIP/9001-b7771ae0
== Spawn extension (pstn, 9000, 1) exited non-zero on 'SIP/9001-b7771ae0'

Prueba 3) Llamada desde la extensin 103 de la centralita a un nmero fijo:


-- Executing [945177145@acceso2:1] Dial("SIP/103-0a157af0",
"SIP/945177145@192.168.1.211:5061|30|Ttm") in new stack
-- Called 945177145@192.168.1.211:5061
-- Started music on hold, class 'default', on SIP/103-0a157af0
-- SIP/192.168.1.211:5061-0a15d138 is ringing
-- SIP/192.168.1.211:5061-0a15d138 answered SIP/103-0a157af0
-- Stopped music on hold on SIP/103-0a157af0
== Spawn extension (acceso2, 945177145, 1) exited non-zero on 'SIP/103-0a157af0'

244

Captulo

Centralita Asterisk para Yet Informtica


y Pruebas realizadas

Descripcin de la centralita nueva: Asterisk


Para la correcta creacin e implantacin de la centralita Asterisk en la empresa Yet
Informtica S.L. se ha hecho un Demo para ver el futuro funcionamiento de la central
de una manera ms reducida, tras las pruebas generales , las de las aplicaciones
integradas en la centralita y las de otras funcionalidades nuevas estaremos preparados
para dicha implantacin.
A continuacin veremos cada uno de estos pasos a realizar.

245

Esquema Conceptual del Demo realizado antes de la implantacin

246

Explicacin del Plan de llamadas de la Centralita (Dialplan)


Llamadas entrantes

247

248

249

250

251

Accesos Directos a usuarios de la Empresa

252

Gestin de Buzones de Voz

Gestin de las Colas de la aplicacin

253

254

Funcionamiento de la Funcionalidad CallBack


Los pasos para realizar el CallBack son los siguientes:
1) Marcar el telfono al que se llamar.
2) Marcar la fecha de la llamada en el formato siguiente:
4 dgitos para el ao
2 dgitos para el mes
2 dgitos para el da
3) Marcar la hora de la llamada en el formato siguiente:
2 dgitos para la hora
2 dgitos para los minutos
4) Verificar que los datos introducidos son correctos o volver a introducirlos.
5) Se generar el Call File teniendo en cuenta si la llamada ser a un nmero
externo o no, para comprobarlo mira que el primer digito sea un 6.

255

Uso de Conferencias en la aplicacin


Agregarse a la conferencia 600

Saber cuntas personas hay en la conferencia

Restringir el nmero de participantes de una conferencia

Uso de Conferencia dinmica

ltima llamada recibida


Esta funcionalidad en los telfonos IP de gama media o alta no hara falta pero para
poder obtener esta informacin usando cualquier telfono IP se ha implementado.

256

Consiste en comprobar en la base de datos del CDR cul ha sido la ltima llamada
recibida para el CALLERID que ha llamado a la extensin de esta funcionalidad y
llamarla.

ltima llamada realizada


Consiste en comprobar en la base de datos del CDR cul ha sido la ltima llamada
realizada por el CALLERID que ha llamado a la extensin de esta funcionalidad y
llamarla. Si la ltima llamada a sido realizada a un usuario interno se mira cual es la
llamada anterior y si no es interna se realiza la llamada.

257

Funcionamiento de la Funcionalidad DISA


Configuracin 1) Al llamar a la centralita un determinado nmero, est le llama y le da
tono para llamar a travs de esta.

Configuracin 2) Al llamar a la extensin 333 de la centralita, est le llama y le da tono


para llamar a travs de esta.

258

Configuracin 3) Al llamar a la extensin 9999 de la centralita, tras marcar la


contrasea 1234 seguido del carcter #, est da tono para llamar a
travs de esta a cualquier nmero de salida que este en el contexto
acceso.

Funcionamiento del desvo de las llamadas de usuarios internos a otro telfono

Activacin del desvo de llamadas de una extensin de un usuario interno

Desactivacin del desvo de llamadas de una extensin de un usuario interno

259

Prueba para la extensin 5000 tras efectuar el desvo.

Pruebas generales
Prueba 1) Llama a la centralita en un horario no laborable un usuario VIP.
Parte de cdigo utilizado:
[acceso]
exten => 787,1,Set(NUM=${EXTEN})
exten => 787,n,Macro(general,soportelaboral,${CALS},${NUM})
[macro-general]
;1)COMPROBACION CON EL CALENDARIO
exten => s,1,Answer
exten => s,n,Set(SALTO=${ARG1})
exten => s,n,AGI(${ARG2})
exten => s,n,Goto(${SALTO},${ARG3},1)
[No Disponible Soporte]
;Comprobar en la base de datos si el cliente es VIP(contrato de mantenimiento de 24h).Si lo
es se le envia a la prioridad 100 sino lo es a la 90.
exten => 787,1,MYSQL(Connect connid localhost root root agenda)
exten => 787,n,NoOp(connid = ${connid})
exten => 787,n,Set(NUM2= ${CALLERID(num)})
exten => 787,n,MYSQL(Query resultid ${connid} SELECT\ mant FROM\ clientes\ INNER\ JOIN\
telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\ telefono=650664616)
;exten => 787,n,MYSQL(Query resultid ${connid} SELECT\ mant FROM\ clientes\ INNER\
JOIN\ telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\ telefono=${NUM2})
exten => 787,n,NoOp(resultid = ${resultid})
exten => 787,n,MYSQL(Fetch fetchid ${resultid} MANT)
exten => 787,n,NoOp(MANT = ${MANT})
exten => 787,n,MYSQL(Disconnect ${connid})
exten => 787,n,GotoIf($["${MANT}"="VIP"]?100:90)
exten => 787,90,Macro(nodisponible,${BS})
exten => 787,100,Set(N=650664616)
;exten => 787,100,Set(N=${NUM2})
exten => 787,n,Gotoif($["${N:0:1}" = "6"]?200:300)
exten => 787,200,Dial(SIP/+34${MOVIL1}@proxy01.sipphone.com,20,r)
exten => 787,n,Dial(Sebi/g1/${MOVIL1},30)
exten => 787,n,Dial(SIP/+34${MOVIL2}@proxy01.sipphone.com,20,r)
exten => 787,n,Dial(Sebi/g1/${MOVIL2},30)
exten => 787,n,AGI(sms_send.php)
exten => 787,n,Voicemail(3333)
exten => 787,n,Hangup
;sI ESTUVIERA CONECTADO A LA PSTN Y NO FUERA UN MOVIL SALDRIA POR AHI
exten => 787,300,Dial(DAHDI/${MOVIL1},20,r)

260

exten => 787,n,Dial(DAHDI/${MOVIL2},20,r)


exten => 787,n,AGI(sms_send.php)
exten => 787,n,Voicemail(3333)
exten => 787,n,Hangup

El log en caso de que coja el mvil el encargado de atender a usuarios 24 desde el


proveedor IP Gizmo 5:
-- Executing [787@acceso:1] Set("SIP/2003-b6901320", "NUM=787") in new stack
-- Executing [787@acceso:2] Macro("SIP/2003-b6901320", "general|soportelaboral|pyastcal.py|787")
in new stack
-- Executing [s@macro-general:1] Answer("SIP/2003-b6901320", "") in new stack
-- Executing [s@macro-general:2] Set("SIP/2003-b6901320", "SALTO=soportelaboral") in new stack
-- Executing [s@macro-general:3] AGI("SIP/2003-b6901320", "pyastcal.py") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py
-- AGI Script pyastcal.py completed, returning 0
-- Executing [s@macro-general:4] Goto("SIP/2003-b6901320", "No Disponible Soporte|787|1") in new
stack
-- Goto (No Disponible Soporte,787,1)
== Channel 'SIP/2003-b6901320' jumping out of macro 'general'
-- Executing [787@No Disponible Soporte:1] MYSQL("SIP/2003-b6901320", "Connect connid localhost
root root agenda") in new stack
-- Executing [787@No Disponible Soporte:2] NoOp("SIP/2003-b6901320", "connid = 1") in new stack
-- Executing [787@No Disponible Soporte:3] Set("SIP/2003-b6901320", "NUM2= 2003") in new stack
-- Executing [787@No Disponible Soporte:4] MYSQL("SIP/2003-b6901320", "Query resultid 1 SELECT
mant FROM clientes INNER JOIN telefono ON clientes.id=telefono.idEmp WHERE
telefono=650664616") in new stack
-- Executing [787@No Disponible Soporte:5] NoOp("SIP/2003-b6901320", "resultid = 2") in new stack
-- Executing [787@No Disponible Soporte:6] MYSQL("SIP/2003-b6901320", "Fetch fetchid 2 MANT") in
new stack
-- Executing [787@No Disponible Soporte:7] NoOp("SIP/2003-b6901320", "MANT = VIP") in new stack
-- Executing [787@No Disponible Soporte:8] MYSQL("SIP/2003-b6901320", "Disconnect 1") in new
stack
-- Executing [787@No Disponible Soporte:9] GotoIf("SIP/2003-b6901320", "1?100:90") in new stack
-- Goto (No Disponible Soporte,787,100)
-- Executing [787@No Disponible Soporte:100] Set("SIP/2003-b6901320", "N=650664616") in new
stack
-- Executing [787@No Disponible Soporte:101] GotoIf("SIP/2003-b6901320", "1?200:300") in new stack
-- Goto (No Disponible Soporte,787,200)
-- Executing [787@No Disponible Soporte:200] Dial("SIP/2003-b6901320",
"SIP/+34650664616@proxy01.sipphone.com|20|r") in new stack
-- Called +34650664616@proxy01.sipphone.com
-- SIP/proxy01.sipphone.com-0a1e3628 answered SIP/2003-b6901320
-- Packet2Packet bridging SIP/2003-b6901320 and SIP/proxy01.sipphone.com-0a1e3628
== Spawn extension (No Disponible Soporte, 787, 200) exited non-zero on 'SIP/2003-b6901320'

Para ver el correcto envio de SMS quito el valor a las variables que contienen los
mviles a llamar en horario no laboral:
-- Executing [787@acceso:1] Set("SIP/2003-b6900f70", "NUM=787") in new stack
-- Executing [787@acceso:2] Macro("SIP/2003-b6900f70", "general|soportelaboral|pyastcal.py|787") in
new stack
-- Executing [s@macro-general:1] Answer("SIP/2003-b6900f70", "") in new stack
-- Executing [s@macro-general:3] AGI("SIP/2003-b6900f70", "pyastcal.py") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py
-- AGI Script pyastcal.py completed, returning 0

261

-- Executing [s@macro-general:4] Goto("SIP/2003-b6900f70", "No Disponible Soporte|787|1") in new


stack
-- Goto (No Disponible Soporte,787,1)
== Channel 'SIP/2003-b6900f70' jumping out of macro 'general'
-- Executing [787@No Disponible Soporte:1] MYSQL("SIP/2003-b6900f70", "Connect connid localhost
root root agenda") in new stack
-- Executing [787@No Disponible Soporte:2] NoOp("SIP/2003-b6900f70", "connid = 1") in new stack
-- Executing [787@No Disponible Soporte:3] Set("SIP/2003-b6900f70", "NUM2= 2003") in new stack
-- Executing [787@No Disponible Soporte:4] MYSQL("SIP/2003-b6900f70", "Query resultid 1 SELECT
mant FROM clientes INNER JOIN telefono ON clientes.id=telefono.idEmp WHERE
telefono=650664616") in new stack
-- Executing [787@No Disponible Soporte:5] NoOp("SIP/2003-b6900f70", "resultid = 2") in new stack
-- Executing [787@No Disponible Soporte:6] MYSQL("SIP/2003-b6900f70", "Fetch fetchid 2 MANT") in
new stack
-- Executing [787@No Disponible Soporte:7] NoOp("SIP/2003-b6900f70", "MANT = VIP") in new stack
-- Executing [787@No Disponible Soporte:8] MYSQL("SIP/2003-b6900f70", "Disconnect 1") in new stack
-- Executing [787@No Disponible Soporte:9] GotoIf("SIP/2003-b6900f70", "1?100:90") in new stack
-- Goto (No Disponible Soporte,787,100)
-- Executing [787@No Disponible Soporte:100] Set("SIP/2003-b6900f70", "N=650664616") in new stack
-- Executing [787@No Disponible Soporte:101] GotoIf("SIP/2003-b6900f70", "1?200:300") in new stack
-- Goto (No Disponible Soporte,787,200)
-- Executing [787@No Disponible Soporte:200] Dial("SIP/2003-b6900f70",
"SIP/+34@proxy01.sipphone.com|20|r") in new stack
== Everyone is busy/congested at this time (1:0/0/1)
-- Executing [787@No Disponible Soporte:201] Dial("SIP/2003-b6900f70", "Sebi/g1/|30") in new stack
== Everyone is busy/congested at this time (1:0/0/1)
-- Executing [787@No Disponible Soporte:202] Dial("SIP/2003-b6900f70",
"SIP/+34@proxy01.sipphone.com|20|r") in new stack
== Everyone is busy/congested at this time (1:0/0/1)
-- Executing [787@No Disponible Soporte:203] Dial("SIP/2003-b6900f70", "Sebi/g1/|30") in new stack
== Everyone is busy/congested at this time (1:0/0/1)
-- Executing [787@No Disponible Soporte:204] AGI("SIP/2003-b6900f70", "sms_send.php") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/sms_send.php
-- AGI Script sms_send.php completed, returning 0
== Spawn extension (No Disponible Soporte, 787, 205) exited non-zero on 'SIP/2003-b6900f70'

Prueba 2) Llama a la centralita en un horario no laborable un usuario no VIP.


Parte de cdigo utilizado:
[No Disponible Soporte]
;Comprobar en la base de datos si el cliente es VIP(contrato de mantenimiento de 24h).Si lo
es se le envia a la prioridad 100 sino lo es a la 90.
exten => 787,1,MYSQL(Connect connid localhost root root agenda)
exten => 787,n,NoOp(connid = ${connid})
exten => 787,n,Set(NUM2= ${CALLERID(num)})
exten => 787,n,MYSQL(Query resultid ${connid} SELECT\ mant FROM\ clientes\ INNER\ JOIN\
telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\ telefono=650664616)
;exten => 787,n,MYSQL(Query resultid ${connid} SELECT\ mant FROM\ clientes\ INNER\
JOIN\ telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\ telefono=${NUM2})
exten => 787,n,NoOp(resultid = ${resultid})
exten => 787,n,MYSQL(Fetch fetchid ${resultid} MANT)
exten => 787,n,NoOp(MANT = ${MANT})
exten => 787,n,MYSQL(Disconnect ${connid})
exten => 787,n,GotoIf($["${MANT}"="VIP"]?100:90)

262

exten => 787,90,Macro(nodisponible,${BS})


[macro-nodisponible]
exten => s,1,PLayBack(grabacion2)
exten => s,n,Voicemail(${ARG1})
exten => S,n,Hangup

El log desde el CLI es el siguiente:


-- Executing [787@acceso:1] Set("SIP/2003-0a1e3110", "NUM=787") in new stack
-- Executing [787@acceso:2] Macro("SIP/2003-0a1e3110", "general|soportelaboral|pyastcal.py|787")
in new stack
-- Executing [s@macro-general:1] Answer("SIP/2003-0a1e3110", "") in new stack
-- Executing [s@macro-general:2] Set("SIP/2003-0a1e3110", "SALTO=soportelaboral") in new stack
-- Executing [s@macro-general:3] AGI("SIP/2003-0a1e3110", "pyastcal.py") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py
-- AGI Script pyastcal.py completed, returning 0
-- Executing [s@macro-general:4] Goto("SIP/2003-0a1e3110", "No Disponible Soporte|787|1") in new
stack
-- Goto (No Disponible Soporte,787,1)
== Channel 'SIP/2003-0a1e3110' jumping out of macro 'general'
-- Executing [787@No Disponible Soporte:1] MYSQL("SIP/2003-0a1e3110", "Connect connid localhost
root root agenda") in new stack
-- Executing [787@No Disponible Soporte:2] NoOp("SIP/2003-0a1e3110", "connid = 1") in new stack
-- Executing [787@No Disponible Soporte:3] Set("SIP/2003-0a1e3110", "NUM2= 2003") in new stack
-- Executing [787@No Disponible Soporte:4] MYSQL("SIP/2003-0a1e3110", "Query resultid 1 SELECT
mant FROM clientes INNER JOIN telefono ON clientes.id=telefono.idEmp WHERE telefono= 2003") in
new stack
-- Executing [787@No Disponible Soporte:5] NoOp("SIP/2003-0a1e3110", "resultid = 2") in new stack
-- Executing [787@No Disponible Soporte:6] MYSQL("SIP/2003-0a1e3110", "Fetch fetchid 2 MANT") in
new stack
-- Executing [787@No Disponible Soporte:7] NoOp("SIP/2003-0a1e3110", "MANT = ") in new stack
-- Executing [787@No Disponible Soporte:8] MYSQL("SIP/2003-0a1e3110", "Disconnect 1") in new stack
-- Executing [787@No Disponible Soporte:9] GotoIf("SIP/2003-0a1e3110", "0?100:90") in new stack
-- Goto (No Disponible Soporte,787,90)
-- Executing [787@No Disponible Soporte:90] Macro("SIP/2003-0a1e3110", "nodisponible|3333") in
new stack
-- Executing [s@macro-nodisponible:1] Playback("SIP/2003-0a1e3110", "grabacion2") in new stack
-- Executing [s@macro-nodisponible:2] VoiceMail("SIP/2003-0a1e3110", "3333") in new stack
-- <SIP/2003-0a1e3110> Playing 'vm-intro' (language 'es')
== Spawn extension (macro-nodisponible, s, 2) exited non-zero on 'SIP/2003-0a1e3110' in macro
'nodisponible'
== Spawn extension (No Disponible Soporte, 787, 90) exited non-zero on 'SIP/2003-0a1e3110'

Prueba 3) Llama a la centralita en un horario laboral un usuario VIP.


1) Pausar todos los miembros menos el 2001 de la cola del Departamento de Soporte,
al que le llegarn todas las llamadas.
2) El 2005 llama a la cola.(se le mantiene en espera)
3) El 4000 llama a la cola.(se le mantiene en espera)
4) El 2003 llama a la cola --> QUEUE_PRIO=10 (se le mantiene en espera)
5) Cuando el 2001 coja el telefono deberia hablar con 2003.

263

El cdigo utilizado en el apartado 1 es el siguiente:


exten => _XXXX22,1,PauseQueueMember(${QS}|SIP/${EXTEN:0:4})
exten => _XXXX22,n,Hangup

El log del CLI del apartado 1 es:


-- Executing [200022@acceso:1] PauseQueueMember("SIP/2003-b6900590",
"soportequeue|SIP/2000") in new stack
-- Executing [200022@acceso:2] Hangup("SIP/2003-b6900590", "") in new stack
-- Executing [200522@acceso:1] PauseQueueMember("SIP/2003-b690ea58",
"soportequeue|SIP/2005") in new stack
-- Executing [200522@acceso:2] Hangup("SIP/2003-b690ea58", "") in new stack
== Spawn extension (acceso, 200522, 2) exited non-zero on 'SIP/2003-b690ea58'
-- Executing [200322@acceso:1] PauseQueueMember("SIP/2003-b690d430",
"soportequeue|SIP/2003") in new stack
-- Executing [200322@acceso:2] Hangup("SIP/2003-b690d430", "") in new stack

El cdigo utilizado en los apartados 2,3,4 y 5 es el siguiente:


exten => 787,1,Set(NUM=${EXTEN})
exten => 787,n,Macro(general,soportelaboral,${CALS},${NUM})
[macro-general]
;1)COMPROBACION CON EL CALENDARIO
exten => s,1,Answer
exten => s,n,Set(SALTO=${ARG1})
exten => s,n,AGI(${ARG2})
exten => s,n,Goto(${SALTO},${ARG3},1)
[soportelaboral]
exten => 787,1,Macro(laboral,${QS})
[macro-laboral]
exten => s,1,Answer
exten => s,n,Wait(2)
exten => s,n,SetMusicOnHold(default)
;Consultar con la base de datos si es VIP para pasar a la primera posicion de la cola
exten => s,n,MYSQL(Connect connid localhost root root agenda)
exten => s,n,MYSQL(Query resultid ${connid SELECT\ mant FROM\ clientes\ INNER\
JOIN\ telefono\ ON\ clientes.id=telefono.idEmp WHERE\ telefono="NUM2"})
exten => s,n,NoOp(resultid = ${resultid})
;Si es VIP --> POSICIONAR DELANTE EN LA COLA
exten => s,n,MYSQL(Fetch fetchid ${resultid} PRIO)
exten => s,n,NoOp( ${PRIO})
exten => s,n,GotoIf($["${PRIO}"="VIP"]?prio:no)
exten => s,n(prio),MYSQL(Disconnect ${connid})
;exten => s,n,GotoIf($["${NUM}"=2003]?prio2:no)
exten => s,n,Set(QUEUE_PRIO=10)
exten => s,n,Queue(${ARG1}|r)
exten => s,n,Hangup
exten => s,n(no),MYSQL(Disconnect ${connid})
exten => s,n,Queue(${ARG1}|r)
exten => s,n,Hangup

264

El log del CLI del apartado 2 es:


-- Executing [787@acceso:1] Set("SIP/2005-b6902d00", "NUM=787") in new stack
-- Executing [787@acceso:2] Macro("SIP/2005-b6902d00", "general|soportelaboral|pyastcal.py|787")
in new stack
-- Executing [s@macro-general:1] Answer("SIP/2005-b6902d00", "") in new stack
-- Executing [s@macro-general:2] Set("SIP/2005-b6902d00", "SALTO=soportelaboral") in new stack
-- Executing [s@macro-general:3] AGI("SIP/2005-b6902d00", "pyastcal.py") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py
-- AGI Script pyastcal.py completed, returning 0
-- Executing [s@macro-general:4] Goto("SIP/2005-b6902d00", "soportelaboral|787|1") in new stack
-- Goto (soportelaboral,787,1)
== Channel 'SIP/2005-b6902d00' jumping out of macro 'general'
-- Executing [787@soportelaboral:1] Macro("SIP/2005-b6902d00", "laboral|soportequeue") in new
stack
-- Executing [s@macro-laboral:1] Answer("SIP/2005-b6902d00", "") in new stack
-- Executing [s@macro-laboral:2] Wait("SIP/2005-b6902d00", "2") in new stack
-- Executing [s@macro-laboral:3] SetMusicOnHold("SIP/2005-b6902d00", "default") in new stack
-- Executing [s@macro-laboral:5] MYSQL("SIP/2005-b6902d00", "Query resultid ") in new stack
-- Executing [s@macro-laboral:6] NoOp("SIP/2005-b6902d00", "resultid = ") in new stack
-- Executing [s@macro-laboral:7] MYSQL("SIP/2005-b6902d00", "Fetch fetchid PRIO") in new stack
-- Executing [s@macro-laboral:8] NoOp("SIP/2005-b6902d00", " ") in new stack
-- Executing [s@macro-laboral:9] GotoIf("SIP/2005-b6902d00", "0?prio:no") in new stack
-- Goto (macro-laboral,s,14)
-- Executing [s@macro-laboral:14] MYSQL("SIP/2005-b6902d00", "Disconnect 1") in new stack
-- Executing [s@macro-laboral:15] Queue("SIP/2005-b6902d00", "soportequeue|r") in new stack
-- Called SIP/2001
-- SIP/2001-0a17d960 is ringing

El log del CLI del apartado 3 es:


-- Executing [787@acceso:1] Set("SIP/4000-b6900590", "NUM=787") in new stack
-- Executing [787@acceso:2] Macro("SIP/4000-b6900590", "general|soportelaboral|pyastcal.py|787")
in new stack
-- Executing [s@macro-general:1] Answer("SIP/4000-b6900590", "") in new stack
-- Executing [s@macro-general:2] Set("SIP/4000-b6900590", "SALTO=soportelaboral") in new stack
-- Executing [s@macro-general:3] AGI("SIP/4000-b6900590", "pyastcal.py") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py
-- AGI Script pyastcal.py completed, returning 0
-- Executing [s@macro-general:4] Goto("SIP/4000-b6900590", "soportelaboral|787|1") in new stack
-- Goto (soportelaboral,787,1)
== Channel 'SIP/4000-b6900590' jumping out of macro 'general'
-- Executing [787@soportelaboral:1] Macro("SIP/4000-b6900590", "laboral|soportequeue") in new
stack
-- Executing [s@macro-laboral:1] Answer("SIP/4000-b6900590", "") in new stack
-- Executing [s@macro-laboral:2] Wait("SIP/4000-b6900590", "2") in new stack
-- Executing [s@macro-laboral:3] SetMusicOnHold("SIP/4000-b6900590", "default") in new stack
-- Executing [s@macro-laboral:4] MYSQL("SIP/4000-b6900590", "Connect connid localhost root root
agenda") in new stack
-- Executing [s@macro-laboral:5] MYSQL("SIP/4000-b6900590", "Query resultid ") in new stack
-- Executing [s@macro-laboral:6] NoOp("SIP/4000-b6900590", "resultid = ") in new stack
-- Executing [s@macro-laboral:7] MYSQL("SIP/4000-b6900590", "Fetch fetchid PRIO") in new stack
-- Executing [s@macro-laboral:8] NoOp("SIP/4000-b6900590", " ") in new stack
-- Executing [s@macro-laboral:9] GotoIf("SIP/4000-b6900590", "0?prio:no") in new stack
-- Goto (macro-laboral,s,14)
-- Executing [s@macro-laboral:14] MYSQL("SIP/4000-b6900590", "Disconnect 1") in new stack

265

-- Executing [s@macro-laboral:15] Queue("SIP/4000-b6900590", "soportequeue|r") in new stack


-- Called SIP/2001
-- SIP/2001-0a1fb1b8 is ringing
-- Nobody picked up in 10000 ms

El log del CLI del apartado 4 es:


-- Executing [787@acceso:1] Set("SIP/2003-b6902d00", "NUM=787") in new stack
-- Executing [787@acceso:2] Macro("SIP/2003-b6902d00", "general|soportelaboral|pyastcal.py|787")
in new stack
-- Executing [s@macro-general:1] Answer("SIP/2003-b6902d00", "") in new stack
-- Executing [s@macro-general:2] Set("SIP/2003-b6902d00", "SALTO=soportelaboral") in new stack
-- Executing [s@macro-general:3] AGI("SIP/2003-b6902d00", "pyastcal.py") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py
-- AGI Script pyastcal.py completed, returning 0
-- Executing [s@macro-general:4] Goto("SIP/2003-b6902d00", "soportelaboral|787|1") in new stack
-- Goto (soportelaboral,787,1)
== Channel 'SIP/2003-b6902d00' jumping out of macro 'general'
-- Executing [787@soportelaboral:1] Macro("SIP/2003-b6902d00", "laboral|soportequeue") in new
stack
-- Executing [s@macro-laboral:1] Answer("SIP/2003-b6902d00", "") in new stack
-- Executing [s@macro-laboral:2] Wait("SIP/2003-b6902d00", "2") in new stack
-- Executing [s@macro-laboral:3] SetMusicOnHold("SIP/2003-b6902d00", "default") in new stack
-- Executing [s@macro-laboral:4] MYSQL("SIP/2003-b6902d00", "Connect connid localhost root root
agenda") in new stack
-- Executing [s@macro-laboral:5] MYSQL("SIP/2003-b6902d00", "Query resultid 1 SELECT mant FROM
clientes INNER JOIN telefono ON clientes.id=telefono.idEmp WHERE telefono=650664616") in new
stack
-- Executing [s@macro-laboral:6] NoOp("SIP/2003-b6902d00", "resultid = 2") in new stack
-- Executing [s@macro-laboral:7] MYSQL("SIP/2003-b6902d00", "Fetch fetchid 2 PRIO") in new stack
-- Executing [s@macro-laboral:8] NoOp("SIP/2003-b6902d00", " VIP") in new stack
-- Executing [s@macro-laboral:9] GotoIf("SIP/2003-b6902d00", "1?prio:no") in new stack
-- Goto (macro-laboral,s,10)
-- Executing [s@macro-laboral:10] MYSQL("SIP/2003-b6902d00", "Disconnect 1") in new stack
-- Executing [s@macro-laboral:11] Set("SIP/2003-b6902d00", "QUEUE_PRIO=10") in new stack
-- Executing [s@macro-laboral:12] Queue("SIP/2003-b6902d00", "soportequeue|r") in new stack
-- Called SIP/2001
-- SIP/2001-0a1ee040 is ringing
-- Nobody picked up in 10000 ms

El log del CLI del apartado 5 es:


-- SIP/2001-0a217400 answered SIP/2003-b69196e8
-- Native bridging SIP/2003-b69196e8 and SIP/2001-0a217400

Prueba 4) Llama a la centralita en un horario laboral un usuario no VIP.


Parte de cdigo utilizado:
[macro-general]
;1)COMPROBACION CON EL CALENDARIO
exten => s,1,Answer
exten => s,n,Set(SALTO=${ARG1})

266

exten => s,n,AGI(${ARG2})


exten => s,n,Goto(${SALTO},${ARG3},1)
[soportelaboral]
;PRUEBAS
exten => 787,1,Macro(laboral,${QS})
[macro-laboral]
exten => s,1,Answer
exten => s,n,Wait(2)
exten => s,n,SetMusicOnHold(default)
;Consultar con la base de datos si es VIP para pasar a la primera posicion de la cola
exten => s,n,MYSQL(Connect connid localhost root root agenda)
exten => s,n,MYSQL(Query resultid ${connid SELECT\ mant FROM\ clientes\ INNER\ JOIN\
telefono\ ON\ clientes.id=telefono.idEmp WHERE\ telefono="NUM2"})
;exten => s,n,MYSQL(Query resultid ${connid} SELECT\ mant FROM\ clientes\ INNER\ JOIN\
telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\ telefono=650664616)
exten => s,n,NoOp(resultid = ${resultid})
;Si es VIP --> POSICIONAR DELANTE EN LA COLA
exten => s,n,MYSQL(Fetch fetchid ${resultid} PRIO)
exten => s,n,NoOp( ${PRIO})
exten => s,n,GotoIf($["${PRIO}"="VIP"]?prio:no)
exten => s,n(prio),MYSQL(Disconnect ${connid})
;exten => s,n,GotoIf($["${NUM}"=2003]?prio2:no)
exten => s,n,Set(QUEUE_PRIO=10)
exten => s,n,Queue(${ARG1}|r)
exten => s,n,Hangup
exten => s,n(no),MYSQL(Disconnect ${connid})
exten => s,n,Queue(${ARG1}|r)
exten => s,n,Hangup

El log desde el CLI es el siguiente:


-- Executing [787@acceso:1] Set("SIP/2003-092dc808", "NUM=787") in new stack
-- Executing [787@acceso:2] Macro("SIP/2003-092dc808", "general|soportelaboral|pyastcal.py|787") in
new stack
-- Executing [s@macro-general:1] Answer("SIP/2003-092dc808", "") in new stack
-- Executing [s@macro-general:2] Set("SIP/2003-092dc808", "SALTO=soportelaboral") in new stack
-- Executing [s@macro-general:3] AGI("SIP/2003-092dc808", "pyastcal.py") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py
-- AGI Script pyastcal.py completed, returning 0
-- Executing [s@macro-general:4] Goto("SIP/2003-092dc808", "soportelaboral|787|1") in new stack
-- Goto (soportelaboral,787,1)
== Channel 'SIP/2003-092dc808' jumping out of macro 'general'
-- Executing [787@soportelaboral:1] Macro("SIP/2003-092dc808", "laboral|soportequeue") in new stack
-- Executing [s@macro-laboral:1] Answer("SIP/2003-092dc808", "") in new stack
-- Executing [s@macro-laboral:2] Wait("SIP/2003-092dc808", "2") in new stack
-- Executing [s@macro-laboral:3] SetMusicOnHold("SIP/2003-092dc808", "default") in new stack
-- Executing [s@macro-laboral:4] MYSQL("SIP/2003-092dc808", "Connect connid localhost root root
agenda") in new stack
-- Executing [s@macro-laboral:5] Set("SIP/2003-092dc808", "NUM = 2003") in new stack
-- Executing [s@macro-laboral:6] MYSQL("SIP/2003-092dc808", "Query resultid ") in new stack
-- Executing [s@macro-laboral:7] NoOp("SIP/2003-092dc808", "resultid = ") in new stack

267

-- Executing [s@macro-laboral:8] GotoIf("SIP/2003-092dc808", "0?prio:no") in new stack


-- Goto (macro-laboral,s,13)
-- Executing [s@macro-laboral:13] MYSQL("SIP/2003-092dc808", "Disconnect 1") in new stack
-- Executing [s@macro-laboral:14] Queue("SIP/2003-092dc808", "soportequeue|r") in new stack
-- Called SIP/2001
-- Called SIP/2004
-- Called SIP/2003
-- Called SIP/2002
-- SIP/2001-09337208 is ringing
-- Got SIP response 486 "Busy Here" back from 192.168.1.206
-- SIP/2004-0933b228 is busy
-- Nobody picked up in 1000 ms
-- Got SIP response 486 "Busy Here" back from 192.168.1.206
-- SIP/2003-0933f248 is busy
-- Nobody picked up in 1000 ms
-- Got SIP response 486 "Busy Here" back from 192.168.1.206
-- SIP/2002-09343268 is busy
-- Nobody picked up in 1000 ms
-- Nobody picked up in 10000 ms
-- Nobody picked up in 10000 ms
-- Called SIP/2001
-- Called SIP/2004
-- Called SIP/2003
-- Called SIP/2002
-- SIP/2001-09337208 is ringing
-- Got SIP response 486 "Busy Here" back from 192.168.1.206
-- SIP/2004-0933b228 is busy
-- Nobody picked up in 0 ms
-- Got SIP response 486 "Busy Here" back from 192.168.1.206
-- SIP/2003-0933f248 is busy
-- Nobody picked up in 0 ms
-- Got SIP response 486 "Busy Here" back from 192.168.1.206
-- SIP/2002-09343268 is busy
-- Nobody picked up in 1000 ms
== Spawn extension (macro-laboral, s, 14) exited non-zero on 'SIP/2003-092dc808' in macro 'laboral'
== Spawn extension (soportelaboral, 787, 1) exited non-zero on 'SIP/2003-092dc808'

Prueba 5) Comportamiento en el men


Parte de cdigo utilizado:
exten => 902147424,1,Answer
exten => 902147424,n,Background(menu)
exten => 902147424,n,Wait(10)
exten => 0,1,Goto(recepcion,${PHONE1},1)
exten => 1,1,Goto(comercial,${PHONE1},1)
exten => 2,1,Goto(soporte,${PHONE2},1)
exten => 3,1,Goto(twister,${PHONE3},1)
exten => 4000,1,Goto(acceso,${EXTEN},1)
exten => t,1,Goto(${PHONE1},1)
exten => i,1,Goto(${PHONE1},1)
exten => 4000,1,Macro(acceso,${EXTEN})

268

[macro-acceso]
exten => s,1,Dial(SIP/${ARG1},30,Ttm)
exten => s,n,Voicemail(${ARG1})
exten => s,n,Hangup

El log desde el CLI es el siguiente:


-- Executing [902147424@acceso:1] Answer("SIP/2003-b6900590", "") in new stack
-- Executing [902147424@acceso:2] BackGround("SIP/2003-b6900590", "menu") in new stack
-- <SIP/2003-b6900590> Playing 'menu' (language 'es')
== CDR updated on SIP/2003-b6900590
-- Executing [4000@acceso:1] Macro("SIP/2003-b6900590", "acceso|4000") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/2003-b6900590", "SIP/4000|30|Ttm") in new stack
-- Called 4000
-- Started music on hold, class 'default', on SIP/2003-b6900590
-- SIP/4000-0a17d5c8 is ringing
-- Stopped music on hold on SIP/2003-b6900590
== Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/2003-b6900590' in macro 'acceso'
== Spawn extension (acceso, 4000, 1) exited non-zero on 'SIP/2003-b6900590'

Configuracin de ficheros ms utilizados


Tabla de descripcin de ficheros de configuracin
Fichero

Descripcin

extensions.conf

En este fichero, junto con los ficheros


que incluye la carpeta dialplan se
concentra el ncleo de la centralita, el
plan de llamadas, explicado
anteriormente.

sip.conf

En este fichero se registran


los usuarios SIP

iax.conf

En este fichero se registran


los usuarios IAX

features.conf

En Este fichero se establece la


configuracin de Call Parking
y Call Pickup

269

manager.conf

En este fichero se configuran


los usuarios del AMI.

meetme.conf

En este fichero se configuran las


conferencias por defecto de la centralita.

queues.conf

En este fichero se configuran


las colas de la centralita.

voicemail.conf

En este fichero se configuran


los buzones de voz.

Fichero de configuracin: EXTENSIONS.CONF, SIP.CONF, IAX.CONF


Para visualizar estos ficheros acudir al anexo.
Fichero de configuracin: FEATURES.CONF

270

Fichero de configuracin: MANAGER.CONF

Fichero de configuracin: MEETME.CONF

Fichero de configuracin: QUEUES.CONF

271

Fichero de configuracin: VOICEMAIL.CONF

272

Bases de datos empleadas


Tabla de descripcin de las bases de datos utilizadas

Nombre de Base de Datos

Descripcin

cdr

En esta base de datos se guardan los


datos del registro de llamadas y los
canales de la aplicacin CDR Reports.

fop2

En esta base de datos se guardan los


datos del FOP 2.

qstats

En esta base de datos se guardan los


datos del Asternic Call Center Stats.

273

agenda

En esta base de datos se guardan los


usuarios, clientes y telfonos de estos de
la aplicacin YetBook.

nagios

En esta base de datos se guarda la


configuracin y los datos de Nagios.

Conocimiento de las tablas de cada base de datos mostrando parte de su contenido


Base de Datos: cdr

Tablas de cdr
cdr
channels

 Tabla cdr

calldate

clid

src

dst

dcontext

channel

dstchannel

lastapp

2009-12-22
21:44:43

"2000"
<2000>

2000

2003

acceso

SIP/2000b6800a38

SIP/20030a30b038

VoiceMail

lastdata

duration

billsec

disposition

amaflags

2003

34

ANSWERED

accountcode

uniqueid

userfield

 Tabla channels
id

channel

SIP/2003

SIP/2000

accountcode

name

David

274

Mikel

SIP/2001

Eduardo

SIP/2004

Josemi

SIP/2002

Josean

Base de Datos: fop2

Tablas de cdr
visual_phonebook

 Tabla visual_phonebook

id

firstname

lastname

company

phone1

Mikel

Yet Informatica

2000

Eduardo

Yet Informatica

2001

Josean

Yet Informatica

2002

David

Yet Informatica

2003

Josemi

Yet Informatica

2004

phone2

picture
1-mark.jpg

Base de Datos: qstats

Tablas de cdr
qagent
qevent
qname
queue_stats

275

 Tabla qagent

agent_id

agent

SIP/2001

SIP/2004

SIP/2003

SIP/2002

SIP/2000

SIP/2005

SIP/4000

 Tabla qevent

event_id

event

ABANDON

AGENTDUMP

AGENTLOGIN

AGENTCALLBACKLOGIN

AGENTLOGOFF

AGENTCALLBACKLOGOFF

COMPLETEAGENT

COMPLETECALLER

CONFIGRELOAD

10

CONNECT

11

ENTERQUEUE

12

EXITWITHKEY

13

EXITWITHTIMEOUT

14

QUEUESTART

15

SYSCOMPAT

16

TRANSFER

17

PAUSE

276

18

UNPAUSE

 Tabla qname

qname_id

queue

recepcionqueue

comercialqueue

soportequeue

 Table queue_stats

queue_stats_id

705

uniqueid
SIP/2003

SIP/2003

datetime

qname

qagent

qevent

2009-11-05
05:01:19

14

2009-12-22
23:35:20

info1

info2

Base de Datos: agenda

Tablas de agenda
clientes
telefono
usuarios

 Tabla clientes

id

nameEmp

cliente

mant

Calnaba

Yet

VIP

Puma

Yet

Completo

277

info3

Adidas

Yet

VIP

 Tabla telefono

idEmp

telefono

650664616

654545454

676767676

943212112

945787876

654323232

656997878

698987332

 Tabla usuarios

id

name

extension

tipo

Mikel

2000

Soporte

Valentin

5000

Direccion

Alberto Acosta

3000

Twister

Eduardo

2001

Soporte

Josean

2002

Soporte

10

Irune

1000

Administracion

Base de Datos: nagios

Tablas de nagios
nagios_acknowledgements
nagios_commands
nagios_commenthistory
nagios_comments

278

nagios_configfiles
nagios_configfilevariables
.
nagios_timedeventqueue
nagios_timedevents
nagios_timeperiod_timeranges
nagios_timeperiods

279

Explicacin terica y prctica de funcionalidades extra:


Agenda de Contactos: YetBook
Esta aplicacin Web se dise para solucionar varios problemas:


Necesidad de control exhaustivo de clientes de la empresa, as como, del


mantenimiento que tienen contratado con esta.

Control de nmero de extensin de los usuarios de la empresa y de las


opciones programadas en el Dialplan para satisfacer determinadas
funcionalidades de la centralita Asterisk. Por ejemplo, extensin para
agregarse a una cola en concreto o como realizar el desvo de llamadas de tu
extensin a tu mvil.

Acceso a las diferentes aplicaciones necesarias para el control de distintas


actividades a realizar, como por ejemplo la aplicacin FOP 2.

Como se puede ver en la siguiente imagen, la aplicacin est dividida en diferentes


apartados, en los cuales se puede aadir/eliminar/modificar usuarios y clientes, tener
acceso a las extensiones especiales del Dialplan y a las direcciones de las aplicaciones
integradas con la centralita.

A continuacin se explicar el funcionamiento de cada una de estas funciones:

280

En este apartado tenemos una visin de los usuarios de la centralita.

Aadir Usuarios: Permite agregar un usuario a la base de datos a la que est enlazada
la aplicacin, no modifica el fichero sip.conf, la idea es agregar el usuario y despus
modificar dicho fichero de configuracin.

281

En la imagen anterior hemos visto como es el proceso de adiccin de un usuario,


rellenando los campos Nombre, Extensin y Departamento, y en la imagen siguiente
vemos el resultado.

Eliminar Usuarios: Permite eliminar un usuario de la base de datos a la que est


enlazada la aplicacin, no modifica el fichero sip.conf, la idea es eliminar el usuario y
despus modificar dicho fichero de configuracin.

282

En la imagen anterior vemos el identificador del usuario a eliminar, en el ejemplo ser


el 8, y a continuacin en la siguientes imgenes vemos la eleccin de usuario a eliminar
y comprobamos que se ha eliminado.

283

Modificar Usuarios: Permite modificar un usuario en la base de datos a la que est


enlazada la aplicacin, no modifica el fichero sip.conf, la idea es modificar el usuario y
despus modificar dicho fichero de configuracin.
En la siguiente imagen vemos el usuario que vamos a modificar.

En la siguiente imagen vemos el formulario de modificacin de usuarios, rellenando el


identificador de usuario, Nombre, Extensin y Departamento.

284

En la imagen siguiente vemos el resultado de la modificacin:

En este apartado tenemos una visin de los clientes de la expresa.

285

Aadir Clientes: Permite agregar un cliente a la base de datos a la que est enlazada la
aplicacin.
En la siguiente imagen vemos como es el proceso de adiccin de un cliente, rellenando
los campos Nombre de Empresa, Mantenimiento (Parcial, Completo, VIP) y el n de
telfonos asociados a dicha empresa.

En la siguiente imagen vemos el formulario de introduccin de telfonos.

286

En la siguiente imagen vemos el resultado tras aadir el cliente:

Eliminar Clientes: Permite eliminar un cliente de la base de datos a la que est


enlazada la aplicacin.
En la imagen siguiente vemos el formulario es similar al de la eliminacin de usuarios.

287

Comprobamos que la eliminacin se ha efectuado adecuadamente.

Modificar Clientes: Permite modificar un cliente en la base de datos a la que est


enlazada la aplicacin.
A continuacin vemos los formularios de modificacin:

288

En las dos imgenes siguientes vemos como nos da la posibilidad de simplemente


modificar los valores actuales o agregar tambin ms telfonos al cliente.

289

Rellenamos el campo del telfono que vamos a aadir:

Vemos las modificaciones realizadas:

A continuacion veremos un recordatorio de las extensiones del Dialplan para que los
usuarios puedan consultarlo cuando quieran.

290

291

292

293

Por ltimo para recordar el acceso a la aplicaciones integradas con la centralita


Asterisk :

294

295

296

Integracin con Google Calendar

La utilizacin de Google Calendar ser la siguiente:

Para tener diferentes calendarios y as hacer una gestin ptima de las


llamadas, comprobando los eventos de dichos calendarios y redireccionando a
unos contextos u otros dependiendo de estos en el momento de las llamadas.

Uso de los recordatorios a travs de mensajes de texto en determinadas


situaciones.

Para tener un uso correcto de Google Calendar visualizar la Gua.


Pruebas de existencia de evento en el momento en un calendario
El cdigo de la aplicacin que comprueba la existencia de eventos es el siguiente:

297

Prueba 1 ) Hay un evento de 10:30 a 11:30


[root@localhost agi-bin]# python pyastcal.py
---------------------------------Fecha inicio evento:
2009-12-23
Fecha actual:
2009-12-23
Fecha fin evento:
2009-12-23
Hora inicio evento:
10:30:00
Hora actual:
10:48:47.174531
Hora fin evento:
11:30:00
---------------------------------SET VARIABLE "SALTO" "No Disponible Soporte"

298

El calendario tiene el siguiente aspecto:

Prueba 2 ) No hay ningun evento


[root@localhost agi-bin]# python pyastcal.py
---------------------------------Fecha inicio evento:
2009-12-23
Fecha actual:
2009-12-23
Fecha fin evento:
2009-12-24
Hora inicio evento:
23:00:00
Hora actual:
10:47:05.294826
Hora fin evento:
08:00:00
---------------------------------SET VARIABLE "SALTO" "soportelaboral"

299

El calendario tiene el siguiente aspecto:

Prueba 2 ) Hay un evento de dia completo


[root@localhost agi-bin]# python pyastcal.py
---------------------------------Fecha inicio evento:
2009-12-22
Fecha actual:
2009-12-23
Fecha fin evento:
2009-12-23
Hora inicio evento:
23:00:00
Hora actual:
10:50:29.834773
Hora fin evento:
23:00:00
---------------------------------SET VARIABLE "SALTO" "No Disponible Soporte"

300

El calendario tiene el siguiente aspecto:

Pruebas de envo de recordatorios a travs de SMS con Google Calendar


Configuracin de la extensin que ejecuta el programa que interacta con Google
Calendar para que se genere un evento en el calendario por el cual se enviar el SMS
como recordatorio:
exten => 1200,1,Answer
exten => 1200,n,NoOp("CallerID=${ARG1}")
exten => 1200,n,AGI(sms_send.php)
exten => 1200,n,NoOp("Sms_send.php ejecutado...")
exten => 1200,n,Hangup

Vemos el comportamiento de Asterisk al llamar a la extensin 1200 a travs del CLI:


-- Executing [1200@acceso:1] Answer("SIP/4000-b68150b0", "") in new stack
-- Executing [1200@acceso:2] NoOp("SIP/4000-b68150b0", ""CallerID="") in new stack
-- Executing [1200@acceso:3] AGI("SIP/4000-b68150b0", "sms_send.php") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/sms_send.php
-- AGI Script sms_send.php completed, returning 0
-- Executing [1200@acceso:4] NoOp("SIP/4000-b68150b0", ""Sms_send.php ejecutado..."") in
new stack
-- Executing [1200@acceso:5] Hangup("SIP/4000-b68150b0", "") in new stack
== Spawn extension (acceso, 1200, 5) exited non-zero on 'SIP/4000-b68150b0'

Comprobamos el log de la aplicacin para ver que los datos enviados son los correctos:

301

UserName=davidin073@gmail.com
Password=XXXXXXX
Minutos despues de la hora actual en la que empieza el evento=10
Duracion del Evento=10
Mensaje enviado: 'Asterisk: Tiene una llamada perdida de la extension: 100'
Enviado: Resource id #8

Miramos en el calendario para comprobar que se ha creado el evento:

Para ver el cdigo de los archivos utilizados acudir al anexo correspondiente.

302

Chan_Sebi
Qu?,Cmo? y Por qu?
Chan_sebi es un canal para Asterisk, que utiliza modems Huawei para proveer de
gateways gsm de voz y/o sms.
En principio se ha hecho pensando en los E169/K3520 de Huawei, modems que tienen
capacidades de llamada de voz. Internamente utilizan un chipset de Qualcomm (de la
serie MSM7200). Con un modem usb de estos modelos, tenemos un gateway de voz
que adems no tiene que hacer conversiones de audio como las que se hacen con un
FXO analgico, ni los problemas de sealizacin inherentes a los canales analgicos, ya
que toda la gestin de audio y de sealizacin se hace de forma digital (bien a travs
del canal de audio, bien a travs del canal de datos), pudiendo ser comparado a un
router RDSI=>GSM de un puerto.
La idea surgi, segn su creador Odicha, de la posibilidad de aprovechar las
capacidades de voz de estos modems para tener un gateway gsm a un costo muy
econmico. La mayor parte de los operadores los dan a costo cero cumpliendo unos
mnimos de permanencia o consumo, como cualquier otro terminal telefnico.
Tcnicamente estos modems son vistos por el S.O. como un hub usb con varios
dispositivos. En principio tres puertos seriales y un puerto de almacenamiento con dos
dispositivos (un cd y un lector de memoria). Asi los subid 00,01 y 02 sern los puertos
de comunicacin, cada uno con distintas funciones (audio, datos y gestin general) y el
subid 03 que nos dar control sobre el cd virtual y el lector de tarjetas.
A partir de esta base se construye un controlador de canal que toma como punto de
partida el chan_mobile, ya existente en Asterisk.
Para descargar asterisk-addons con chan_sebi:
svn export http://asterisk-es-rsp.irontec.com/svn/team/Odicha/asterisk-addons-1.4.9 asterisk-addons/

Instalacin y Configuracin de chan_sebi


A nivel de descarga e instalacin comentar cules son sus prerrequisitos.
El S.O. debe ser capaz de montar los subid 00, 01 y 02 del modem Huawei como
usbTTYx. Los kernels antiguos (por debajo de 2.6.20 generalmente) no son capaces de
hacerlo automticamente por lo que habr que modificar algunas cosas para que se
detecten de la forma adecuada y sean cargados por usbserial. Normalmente es
suficiente con /sbin/modprobe usbserial vendor=012d1 product=01003 o bien
/sbin/modprobe usbserial vendor=012d1 product=01001 dependiendo de si el modem es
1001 (169,k3520, e270,etc) o es 1003 (e220). A veces tambin entran en conflicto
con el driver de option resolviendose aadiendo al blacklist el mdulo option. Si aun
as sigue intentando cargar puede intentar resolverse eliminando el fichero option.ko y
ejecutando un depmod despus.
303

Los puertos ttyUSBx que se crean al conectar el modem tienen que tener permiso de
lectura y escritura para el usuario que ejecuta Asterisk, si no es as no ser posible que
Asterisk se comunique con el modem. Si no se ejecuta Asterisk como root lo mejor es
agregar el usuario que corre Asterisk al grupo propietario de los puertos que en
funcin de distros y kernels puede variar (en Fedora es uucp, por ej.).
Algo como esto por ejemplo:
chmod 660 /dev/ttyUSB*
chown asterisk:uucp /dev/ttyUSB*
echo KERNEL==ttyUSB[0-9*], MODE=0660, OWNER=asterisk, GROUP=uucp
>> /etc/udev/rules.d/92-sebi.rules

Cumpliendo esto podremos instalar asterisk-addons sobre nuestro asterisk 1.4.x con
chan_sebi incluido.
Al instalarlo y arrancarlo el canal analizar los dispositivos usb que tenemos
conectados y generar un fichero sebi_devices.conf en /etc/asterisk/ que contendr
algo similar a esto:
[2-1]
data = /dev/ttyUSB2
voice = /dev/ttyUSB1
imei = 35413702XXXXXXX

A partir de aqu sabemos que el modem est siendo detectado correctamente y


pasaremos a generar el fichero de configuracin sebi.conf. Si hicimos un make samples
al instalar asterisk-addons ya tendremos un fichero sebi.conf en /etc/asterisk/ que
tendremos que adaptar.
[huawei1]
imei=35xxxxxxxxxxx ; imei of modem
;pin=1234 ; pin (use only if sim card has pin request enabled)
csca=+34607003110 ; sms centre number (vodafone es example)
sms=yes ; enable sms send/receive
voice=yes ; enable voice for calls
context=from-pstn ; dialplan context for incoming calls
group=1 ; this phone is in channel group 1
volume=5 ; modem volume (1-5)
language=es ; channel language
;nocallsetup=yes ; set this only if you want override call status notifications

El campo imei del canal es el que combina la informacin de configuracin del modem
con el equipo fsico. No olviden que el nmero de puerto ttyUSB depende del orden en
que se cargan o de la cantidad de dispositivos usb que estn conectados en cada
momento. Los dems campos de configuracin creo que estn claros, prcticamente
se describen solos. Es interesante hacer notar que el nombre del canal lo asignamos
nosotros libremente en el identificador de seccin (en el ejemplo [huawei1])
Si reiniciamos Asterisk y todo ha ido bien tras cargar ejecutaremos el comando sebi
show devices y obtendremos algo parecido a esto:
304

*CLI> sebi show devices


Id
huawei1

Imei
Group
3541370xxxxxxxx 1

Provider
vodafone es

Connected State Voice SMS


yes
free yes
yes

A partir de aqu podemos usar el modem como una canal de voz realizando y
recibiendo llamadas y como gateway sms. Cabe observar que en los modelos que no
soporten voz el resultado ser como este:
*CLI> sebi show devices
Id
huawei1

Imei
Group
3541370xxxxxxxx
1

Provider
vodafone es

Connected State Voice SMS


yes
free no
yes

Nos dir que no tenemos servicios de voz en ese dispositivo, y lo usaremos solo como
gateway sms.
Para enviar y recibir sms, usaremos convenciones muy similares a las de chan_mobile.
Para recibir un sms y guardarlo en la base de datos tendremos las instruccciones
correspondientes en el Dialplan (por cierto, solo procesa sms recibidos mientras est
activo, por el momento).
[from-pstn]
exten => sms,1,verbose(incoming sms from ${smssrc} ${smstxt})
exten => sms,n,set(db(sms/${smssrc})=${smstxt})
exten => sms,n,hangup

Para enviar un sms:


originate sip/109 application sebisendsms huawei1|6xxxxxxxx|texto de prueba del sms

Para revisar si el canal est libre antes de enviar el sms tenemos la aplicacin
SebiStatus:
SebiStatus(device,variable)
Device : Id del dispositivo en sebi.conf
Variable: Variable donde almacenamos el estado (1-3)
1-Desconectado
2-Disponible
3-Ocupado

305

Pruebas realizadas con un Modem Huawei K3520

Tras introducir en el modem Huawei K3520 una tarjeta Orange y conectarlo a nuestro
servidor por un puerto USB, instalamos como se indica en los apartados anteriores el
chan_sebi y lo siguiente que tenemos que hacer es comprobar que Asterisk a captado
el modem, para esto comprobamos el contenido del fichero de configuracin situado
en la carpeta /etc/asterisk/ sebi_devices.conf:
[6-1]
data = /dev/ttyUSB2
imei = 353284021181626
voice = /dev/ttyUSB1

Si no lo hemos hecho antes, damos a los dispositivos USB los permisos adecuados:
chmod a+x /dev/ttyUSB*

Confuramos el chan_sebi desde el fichero de configuracin sebi.conf:


[huawei1]
dataport=/dev/ttyUSB2
voiceport=/dev/ttyUSB1
imei=35328XXXXXXXXXX
pin=1626
csca=+34644109030
sms=yes
voice=yes
context=from-sebi
group=1
volume=5
language=es

; SMS centre number (SYMYO)

Reiniciamos Asterisk y comprobamos que la configuracin realizada es la correcta:


*CLI> sebi show devices
ID
IMEI
Group Provider Connected State Voice SMS
huawei1 353284021181626
1
Orange
Yes
Free Yes Yes

Las 3 pruebas realizadas con el chan_sebi sern recepcin y envio de SMS y realizacin
de llamadas a travs de este canal.
Prueba 1) Llamada con chan_sebi
Configuracin del fichero extensions.conf:
[from-sebi]
;LLamadas con Chan_Sebi
exten => 650664616,1,NoOp(Outgoing call through the SEBI device to ${EXTEN})
exten => 650664616,n,Dial(Sebi/g1/${EXTEN},60)
exten => 650664616,n,Hangup

306

Miramos el log en el CLI de Asterisk al hacer una llamada:


-- Executing [650664616@acceso2:1] NoOp("SIP/100-08bedc70", "Outgoing call through the SEBI device
to 650664616") in new stack
-- Executing [650664616@acceso2:2] Dial("SIP/100-08bedc70", "Sebi/g1/650664616|60") in new stack
-- Called g1/650664616
-- Sebi/huawei1-4b5e is making progress passing it to SIP/100-08bedc70
== Spawn extension (acceso2, 650664616, 2) exited non-zero on 'SIP/100-08bedc70

Prueba 2) Envio de SMS con chan_sebi:


Configuracin del fichero extensions.conf:
[from-sebi]
include => acceso2
exten => 1111,1,NoOp(Envio de Sms)
exten => 1111,n,SebiSendSMS(huawei1,650664616,"sms prueba")
exten => 1111,n,Hangup
[acceso2]
exten => 100,1,Dial(SIP/100,30,Ttm)
exten => 100,n,Hangup

Hacemos la prueba marcando 1111 y vemos el log del CLI:


-- Executing [1111@acceso2:1] NoOp("SIP/100-08bf7548", "Envio de Sms") in new stack
-- Executing [1111@acceso2:2] SebiSendSMS("SIP/100-08bf7548", "huawei1|650664616|"sms
prueba"") in new stack
-- Executing [1111@acceso2:3] Hangup("SIP/100-08bf7548", "") in new stack
== Spawn extension (acceso2, 1111, 3) exited non-zero on 'SIP/100-08bf7548'

El sms ha llegado al instante.


Tambin se puede realizar esta prueba desde el CLI directamente, pero de esta forma
suena la extensin que le indicas, en este caso la 100, y al contestar se enva el SMS:
*CLI> originate sip/100 application SebiSendSMS huawei1|650664616|"SMS DE PRUEBA"
-- Launching SebiSendSMS(huawei1|650664616|SMS DE PRUEBA) on SIP/100-b7780b98

Prueba 3) Recepcin de SMS desde el chan_sebi:


Configuracin del fichero extensions.conf:
[from-sebi]
exten => sms,1,NoOp(Incoming SMS from ${SMSSRC})
exten => sms,n,System(/usr/src/recvSMS.sh "${SMSSRC}" "${SMSTXT}")
exten => sms,n,Hangup

Para esta prueba hacemos uso de un ejecutable que enviar un email a una direccin
indicada al recibir el SMS, el cdigo de este archivo es:

307

#!/bin/bash
if [ $# -ne 2 ]
then
echo "Invalid parameters."
exit 0
fi
echo $2 | mail -s "SMS from $1" davidin073@gmail.com

Miramos el log en el CLI de Asterisk al hacer una llamada:


-- Executing [sms@from-sebi:1] NoOp("Sebi/huawei1-1de3", "Incoming SMS from +34650664616") in
new stack
-- Executing [sms@from-sebi:2] System("Sebi/huawei1-1de3", "/usr/src/recvSMS.sh "+34650664616"
"Prueba recepcion de SMS."") in new stack
-- Executing [sms@from-sebi:3] Hangup("Sebi/huawei1-1de3", "") in new stack
== Spawn extension (from-sebi, sms, 3) exited non-zero on 'Sebi/huawei1-1de3'

308

Flash Operator Panel 2 (FOP 2)


Qu es FOP2?
Flash Operator Panel 2 es una aplicacin de tipo panel de control para las PBX Asterisk.
Se ejecuta en un navegador web con el plugin de flash. Es capaz de mostrar
informacin sobre su actividad PBX en tiempo real. El diseo es configurable (tamao y
color de los botones, etc.).
Su creador, Nicolas Gudio, fue ganador hace unos meses del premio que otorga
Digium, Digium Innovation Awards, y es que FOP 2 es un producto ideal y muy
recomendable.
Caractersticas

Acciones
o
o
o
o
o
o
o
o
o
o
o

Botones de Extensin
o
o
o
o
o

2 lneas por botn


Callerid y temporizador
Indicador de pausa
Indicador de pertenencia a una cola
Indicador de grabacin

Botones Trunk
o

Iniciar llamadas
Acceso telefnico a cualquier nmero
Acceso a la agenda de llamadas
Notificacin de entrada de llamadas
Agenda de Contactos (Visual Phonebook)
Transferencia de llamadas
Transferencia al buzn de voz
Registro de llamadas
Atencin de llamadas directas (Pick Up)
Colgar llamadas
Funcionalida Spy & Whisper (Escuchar llamada y comunicarse con uno de
los hablantes sin que el otro escuche)

Muestra una lista con los trunks establecidos o configurados

Botones de Conferencia
o
o
o
o
o

Lista de miembros de la conferencia


Bloqueo / Desbloqueo de conferencias
Silenciar / Activar audio a los miembros
Silenciar / Activar a todos los miembros
Expulsar miembros de la conferencia
309

Botones de Cola
o
o
o
o
o
o

Lista de agentes/miembros
Lista de llamadas en espera
Miembros en pausa
Miembros ocupados
Miembros disponibles
Miembros invalidos

A quin va dirigido FOP 2?


A los recepcionistas:
Desarrollado con una recepcionista en la mente. Todas las acciones estn disponibles
en dos clics del ratn.

Ver quin est disponible o no.


Transferencia en forma directa a la extensin de destino o al buzn de voz.
Habilitar los permisos de PickUp.
Bsqueda en tiempo real y filtro de extensiones (ideal para las grandes
empresas con cientos de extensiones).

A los supervisores del centro de llamadas:


No slo puede ver el estado de la extensin, sino tambin una rpida visin de las
colas:

Ver agentes registrados en una cola.


Ver estado del agente (en pausa, ocupado, disponible, no vlido).
Ver todas las llamadas en espera en la cola con su temporizador.
Espiar y/o susurrar a sus agentes.

A los usuarios finales:


Usted no necesita ser un recepcionista o tener un centro de llamadas para aprovechar
las caractersticas de FOP2, ya que este permite controlar sus propias llamadas, incluso
antes de cogerlas.

Notificaciones de llamadas (nmero y nombre de callerid, llamada de la cola).


Bsqueda de llamada o marcarcin a cualquier nmero escrito.
Control de llamadas: Trasferencia, Colgar, etc.

310

Instalacin
Requisitos del Sistema
El programa consta de dos componentes, un demonio del lado del servidor que se
conecta a la interfaz de Asterisk y ser el mediador entre Asterisk y los clientes Web.
Si tiene instalada una distribucin de Linux Red Hat y va a instalar el panel desde un
tarball(.tar), tendr que obtener el tarball correcto dependiendo de su versin de glibc.
Puede averiguar la versin de glibc escribiendo en la consola:
#> /lib/libc.so.6

La respuesta ser similar a esta:


GNU C Library stable release version 2.3.6, by Roland McGrath et al.
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 3.4.4 20050721 (Red Hat 3.4.4-2).
Compiled on a Linux 2.4.20 system on 2005-11-03.
Available extensions:
GNU libio by Per Bothner
crypt add-on version 2.1 by Michael Glad and others
linuxthreads-0.10 by Xavier Leroy
The C stubs add-on version 2.1.2.
BIND-8.2.3-T5B
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Glibc-2.0 compatibility add-on by Cristian Gafton
GNU Libidn by Simon Josefsson
libthread_db work sponsored by Alpha Processor Inc
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.

El otro componente es la aplicacin web, que consiste en su mayora en Javascript,


HTML, CSS y un componente Flash. Por esa razn se necesita un servidor web
corriendo para servir a estos archivos. Para la agenda de llamadas necesita soporte
para PHP en el servidor web y base de datos MySQL instalada.
Por ltimo, su navegador necesita Adobe Flash Player (versin 9) y el Javascript
activado.
Instalacin desde tarball
Despus de descargar el paquete adecuado, tendr que extraerlo y comenzar la
instalacin:
#> tar zxvf fop2-001-i386-glibc2.5-centos5.tgz
#> cd fop2
#> make install

311

La instalacin copiar los archivos del servidor en / usr/local/fop2 y las pginas web
bajo / var/www/html/fop2.
Before starting the service, some basic configuration is required in fop2.cfg and
probably in /etc/asterisk/manager.conf, because the FOP2 daemon connects via TCP
to the Asterisk Manager Interface (AMI) using a username and secret. Antes de iniciar
el servicio, es necesaria la configuracin bsica de fop2.cfg y de manager.conf en /etc
/asterisk/, porque el demonio FOP2 se conecta a travs de TCP a la interfaz de Asterisk
Manager (IAM), utilizando un nombre de usuario y una clave.
Una vez configurado esto habr que iniciar el servicio.
#> cd / usr/local/fop2
#> ./fop2_server

Configuracin
El archivo principal de configuracin del servidor es / usr/local/fop2/fop2.cfg. Los
parmetros ms importantes y necesarios para este fichero son los establecidos en el
manager.conf.
Ejemplos de configuracin:
/usr/local/fop2/fop2.cfg
[general]
; AMI definitions
manager_host = 127.0.0.1
manager_port = 5038
manager_user = admin
manager_secret = amp111

/etc / asterisk / manager.conf


[general]
enabled = yes
port = 5038
bindaddr = 127.0.0.1
[admin]
secret = amp111
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.0
read = system,call,command,agent,user,originate
write = system,call,command,agent,user,originate

Tambin es recomendable la configuracin siguiente:


/etc/asterisk/sip.conf
callevents=yes

312

Para que se efectue el envio de eventos al FOP2.


/etc/asterisk/queues.conf
[testqueue]
eventwhencalled=yes

Para que efectue el envio de eventos relacionados con las colas y los agentes.
Configuracin de botones
Adems de la configuracin del servidor, es importante la configuracin de los botones
que desea mostrar.
Los botones de configuracin se realizan en distintos archivos de configuracin para
que sean ms fciles de mantener y organizar. En el fichero / usr/local/fop2/fop2.cfg
hay que especificar el parmetro buttonfile, que apunta al archivo que contendr las
definiciones de los botones.
/usr/local/fop2/fop2.cfg
... ...
buttonfile= buttons.cfg

Botones de Extensin
Este tipo de botones representan una extension. Se mostrarn dos lneas para cada
botn y algunos datos especficos, como la presencia, estado de pausa, etc.
/usr/local/fop2/ buttons.cfg
[SIP/600]
type=extension
extension=600
context=from-internal
label=John
mailbox=600@default
extenvoicemail=*600@default

Botones de cola
Similares a los botones de extensin, los botones de cola hacen uso de los mismos
parmetros con la diferencia que no slo el tipo se debe establecer en la cola, sino
tambin el nombre, entre parntesis, debe estar precedido de "QUEUE /".
/usr/local/fop2/buttons.cfg
[QUEUE/101]
type=queue
label=Sales

313

extension=101
context=from-internal

Los botones de cola no aceptan los parmetros mailbox o extenvoicemail, ya que slo
se aplican a los botones de extensin.
Botones de Conferencia
Al igual que los botones de cola, los botones de conferencia tienen que ser definidos
como type=conference y el contexto debe empezar con el prefijo "CONFERENCE/".
/usr/local/fop2/buttons.cfg
[CONFERENCE/1000]
type=conference
label=Main Conference
extension=1000
context=from-internal

Botones Trunk
Para los trunks que hay muy pocos parmetros que establecer. Un trunk no se puede
marcar, por esa razn no es necesario especificar la extensin ni el contexto. Slo el
type que sera trunk debe ser especificado, junto con la etiqueta del botn.
/usr/local/fop2/buttons.cfg
[DAHDI/1]
type=trunk
label=DAHDI 1-4
server=1

Tenga en cuenta que tambin hay que establecer el parmetro server, ya que si se
supervisa ms de un servidor, y tiene DAHDI / 1 definido sin especificar el servidor,
usted experimentar una colisin por el canal, y la situacin no ser correcta.
Configuracin de Visual Phonebook
La agenda requiere php y mysql para ser instalada y funcionar. Es necesario crear una
base de datos con una tabla y dar los adecuados permisos. Tambin tienes que
configurar el idioma de la aplicacin PHP. Con el fin de empezar, asegrese de crear
una base de datos MySQL utilizando la contrasea correcta (sustituir XXXXX con su
contrasea de root de MySQL):
#> cd /var/www/html/fop2
#> mysqladmin -u root -pXXXXX create fop2
#> mysql -u root -pXXXXX < mysql.db

Despus de crear una base de datos y la tabla, dar permisos:

314

#> mysql -u root -pXXXXX -e \"grant all privileges on fop2.* to root@localhost \"
identified by 'myPassw0rd'"

Por ltimo hay que editar el archivo de configuracin y seleccionar el idioma


adecuado:
/var/www/html/fop2/config.php
<?
// Database connection details
$DBHOST = 'localhost';
$DBNAME = 'fop2';
$DBUSER = 'fop2';
$DBPASS = ' myPassw0rd ';
$language=en ;
// --------------------------------------------------------- / / ------------------------------------------------ -------// Do not modify below this line
// --------------------------------------------------------- / / ------------------------------------------------ -------.. ..

Para tener una informacin amplia revise el Manual de uso de FOP 2.

315

Practicas de la aplicacin con FOP 2


1) Acceso a FOP 2: http://192.168.1.200/fop2

Panel Principal de FOP 2:

2) Configurar el archivo principal del FOP 2 (fop2.cfg)


[general]
; AMI definitions
manager_host=localhost
manager_port=5038
manager_user=admin
manager_secret=amp111
;event_mask=call,agent
; Daemon definitios
listen_port = 4445
restrict_host = www.asternic.org
web_dir
= /var/www/html/fop2
; Global Config
language
= en

316

poll_interval = 86400
poll_voicemail = 1
monitor_ipaddress = 0
;master_key = 5678
user=2000:1234:all
user=2001:1234:all
user=2002:1234:all
user=2003:1234:all
user=2004:1234:all
user=2005:1234:all
user=2006:1234:all
buttonfile=autobuttons.cfg
#exec autoconfig-users-freepbx.sh

Configurar el archive de botones (autobuttons.cfg)


[SIP/2000]
type=extensin
extension=2000
context=acceso
label=Mikel
mailbox=2000@default
extenvoicemail=20008@acceso
[SIP/2001]
type=extensin
extension=2001
context=acceso
label=Eduardo
mailbox=2001@default
extenvoicemail=20018@acceso
[SIP/2002]
type=extensin
extension=2002
context=acceso
label=Josean
mailbox=2002@default
extenvoicemail=20028@acceso
[SIP/2003]
type=extensin
extension=2003
context=acceso
label=David
mailbox=2003@default
extenvoicemail=20038@acceso
[SIP/2004]
type=extensin
extension=2004
context=acceso
label=Josemi
mailbox=2004@default
extenvoicemail=20048@acceso
[SIP/2005]
type=extensin

317

extension=2005
context=acceso
label=Usuario1
mailbox=2005@default
extenvoicemail=20058@acceso
[SIP/2006]
type=extensin
extension=2006
context=acceso
label=Usuario2
mailbox=2006@default
extenvoicemail=20068@acceso
[QUEUE/ soportequeue]
type=queue
label= soportequeue
extension=784
context= soportelaboral
[DAHDI/2]
type=trunk
label=DAHDI
[CONFERENCE/600]
type=conference
label=Conferencia Estatica
server=1
extension=600
context=meetme

3) Agregar usuarios/clientes a la Visual phonebook para que al recibir una llamada


aparezca el perfil de dicho usuario/cliente en vez de la imagen siguiente:

Con el usuario/cliente que llama agregado a la agenda la llamada sera as:

318

Tras rellenar la agenda queda de la siguiente forma:

4) Pruebas de la barra de herramientas de FOP 2:

 Botn de llamada:
La realizacin de llamadas desde FOP 2 se realiza como se describe en el
siguiente ejemplo, en el cual la llamada se realizar entre la extensin 2003,
con la que nos logueamos en FOP 2, y la extensin 2005.

319

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


> Channel SIP/2003-09349390 was answered.
-- Executing [2005@acceso:1] Macro("SIP/2003-09349390", "acceso|2005") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/2003-09349390", "SIP/2005|30|Ttm") in new stack
-- Called 2005
-- Started music on hold, class 'default', on SIP/2003-09349390
-- SIP/2005-09346740 is ringing
-- SIP/2005-09346740 answered SIP/2003-09349390
-- Stopped music on hold on SIP/2003-09349390
== Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/2003-09349390' in macro 'acceso'
== Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/2003-09349390'

 Botn de transferencia:

Cuando se est llevando a cabo


una llamada el receptor de
esta, usuario de la centralita,
puede transferir la llamada a
otro usuario.
En el ejemplo siguiente la
llamada entre el usuario 4000 y
el 2003 es transferida por este
ltimo a la extensin 2005,
como se puede ver en la
siguiente imagen.

320

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2003@acceso:1] Macro("SIP/4000-08b81180", "acceso|2003") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/4000-08b81180", "SIP/2003|30|Ttm") in new stack
-- Called 2003
-- Started music on hold, class 'default', on SIP/4000-08b81180
-- SIP/2003-08b8b550 is ringing
-- SIP/2003-08b8b550 answered SIP/4000-08b81180
-- Stopped music on hold on SIP/4000-08b81180
== Spawn extension (acceso, 2005, 0) exited non-zero on 'SIP/4000-08b81180' in macro 'acceso'
== Spawn extension (acceso, 2005, 0) exited non-zero on 'SIP/4000-08b81180'
-- Executing [2005@acceso:1] Macro("SIP/4000-08b81180", "acceso|2005") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/4000-08b81180", "SIP/2005|30|Ttm") in new stack
-- Called 2005
-- Started music on hold, class 'default', on SIP/4000-08b81180
-- SIP/2005-08b99410 is ringing
-- SIP/2005-08b99410 answered SIP/4000-08b81180
-- Stopped music on hold on SIP/4000-08b81180
== Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/4000-08b81180' in macro 'acceso'
== Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/4000-08b81180'

 Botn de transferencia a voicemail:


Cuando se est llevando a cabo una llamada el receptor de esta, usuario de la
centralita, puede transferir la llamada a su buzn de voz.
En el ejemplo siguiente la llamada entre el usuario 4000 y el 2003 es transferida
por este ltimo a su buzn de voz, como se puede ver en la siguiente imagen.

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2003@acceso:1] Macro("SIP/4000-08b87368", "acceso|2003") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/4000-08b87368", "SIP/2003|30|Ttm") in new stack
-- Called 2003
-- Started music on hold, class 'default', on SIP/4000-08b87368
-- SIP/2003-08b8f570 is ringing
-- SIP/2003-08b8f570 answered SIP/4000-08b87368
-- Stopped music on hold on SIP/4000-08b87368
== Spawn extension (acceso, 20038, 0) exited non-zero on 'SIP/4000-08b87368' in macro 'acceso'
== Spawn extension (acceso, 20038, 0) exited non-zero on 'SIP/4000-08b87368'
-- Executing [20038@acceso:1] VoiceMail("SIP/4000-08b87368", "2003") in new stack

321

-- <SIP/4000-08b87368> Playing 'vm-intro' (language 'es')


-- <SIP/4000-08b87368> Playing 'beep' (language 'es')
-- Recording the message
-- x=0, open writing: /var/spool/asterisk/voicemail/default/2003/tmp/RMyVLR format: gsm, 0x8b70578
-- x=1, open writing: /var/spool/asterisk/voicemail/default/2003/tmp/RMyVLR format: wav, 0x8b23bb8
-- User hung up
== Parsing '/var/spool/asterisk/voicemail/default/2003/INBOX/msg0000.txt': Found
== Parsing '/var/spool/asterisk/voicemail/default/2003/INBOX/msg0000.txt': Found
== Parsing '/var/spool/asterisk/voicemail/default/2003/INBOX/msg0000.txt': Found
== Spawn extension (acceso, 20038, 1) exited non-zero on 'SIP/4000-08b87368'

 Botn de PickUp de llamadas:


Cuando una extensin est llamando a otra, el usuario con el que te registraste
en FOP 2, si es del mismo grupo de la extensin llamada puede contestarla.
En el ejemplo siguiente la extensin 4000 est llamando a la 2005 y como este
no la acepta, la extensin con la que nos registramos acepta la llamada..

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2005@acceso:1] Macro("SIP/4000-08b87368", "acceso|2005") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/4000-08b87368", "SIP/2005|30|Ttm") in new stack
-- Called 2005
-- Started music on hold, class 'default', on SIP/4000-08b87368
-- SIP/2005-08b8df48 is ringing
> Channel SIP/2003-08b81180 was answered.
> Launching Pickup(2005@acceso) on SIP/2003-08b81180
-- SIP/2003-08b81180 answered SIP/4000-08b87368
-- Stopped music on hold on SIP/4000-08b87368
== Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/4000-08b87368' in macro 'acceso'
== Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/4000-08b87368'

322

 Botn de escucha de llamadas:


Cuando se est llevando a cabo una llamada, la extensin con la que nos
registramos en FOP 2 puede escucharla sin que ambas extensiones lo sepan.
En el ejemplo siguiente la llamada entre el usuario 4000 y el 2005 es escuchada
por la 2003, como se puede ver en la siguiente imagen.

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2005@acceso:1] Macro("SIP/4000-08b81180", "acceso|2005") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/4000-08b81180", "SIP/2005|30|Ttm") in new stack
-- Called 2005
-- Started music on hold, class 'default', on SIP/4000-08b81180
-- SIP/2005-08b8b550 is ringing
-- SIP/2005-08b8b550 answered SIP/4000-08b81180
-- Stopped music on hold on SIP/4000-08b81180
> Channel SIP/2003-08b8f570 was answered.
> Launching ChanSpy(SIP/2005) on SIP/2003-08b8f570
-- <SIP/2003-08b8f570> Playing 'beep' (language 'es')
-- <SIP/2003-08b8f570> Playing 'spy-sip' (language 'es')
-- <SIP/2003-08b8f570> Playing 'digits/2' (language 'es')
-- <SIP/2003-08b8f570> Playing 'digits/0' (language 'es')
-- <SIP/2003-08b8f570> Playing 'digits/0' (language 'es')
-- <SIP/2003-08b8f570> Playing 'digits/5' (language 'es')
== Spying on channel SIP/2005-08b8b550
[Dec 17 04:58:48] NOTICE[8836]: app_chanspy.c:218 start_spying: Attaching SIP/2003-08b8f570 to
SIP/2005-08b8b550
== Done Spying on channel SIP/2005-08b8b550
== Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/4000-08b81180' in macro 'acceso'
== Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/4000-08b81180'

323

 Botn de escucha y susurro en llamadas:


Cuando se est llevando a cabo una llamada entre dos extensiones, la
extensin con la que nos registramos en FOP 2 puede escuchar e incluso
susurrar a una de las partes sin que la otra oiga nada.
En el ejemplo siguiente la llamada entre el usuario 4000 y el 2005 es escuchada
por la extensin 2003 que puede hablar a la extensin 2005 sin que la 4000 se
entere.

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2005@acceso:1] Macro("SIP/4000-08b81180", "acceso|2005") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/4000-08b81180", "SIP/2005|30|Ttm") in new stack
-- Called 2005
-- Started music on hold, class 'default', on SIP/4000-08b81180
-- SIP/2005-08b8b550 is ringing
-- SIP/2005-08b8b550 answered SIP/4000-08b81180
-- Stopped music on hold on SIP/4000-08b81180
> Channel SIP/2003-08b90b98 was answered.
> Launching ChanSpy(SIP/2005|w) on SIP/2003-08b90b98
-- <SIP/2003-08b90b98> Playing 'beep' (language 'es')
-- <SIP/2003-08b90b98> Playing 'spy-sip' (language 'es')
-- <SIP/2003-08b90b98> Playing 'digits/2' (language 'es')
-- <SIP/2003-08b90b98> Playing 'digits/0' (language 'es')
-- <SIP/2003-08b90b98> Playing 'digits/0' (language 'es')
-- <SIP/2003-08b90b98> Playing 'digits/5' (language 'es')
== Spying on channel SIP/2005-08b8b550

La extensin 2005 escucha a la 2003 pero la 4000 no.

324

 Botn de colgar llamadas:


Cuando se est llevando a cabo una llamada entre dos extensiones, la
extensin con la que nos registramos puede colgar dicha llamada sin que
ambas partes sepan quien fue.
En el ejemplo siguiente la llamada entre el usuario 4000 y el 2005 es colgada
por la 2003, como se puede ver en la siguiente imagen.

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2005@acceso:1] Macro("SIP/4000-08b872d8", "acceso|2005") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/4000-08b872d8", "SIP/2005|30|Ttm") in new stack
-- Called 2005
-- Started music on hold, class 'default', on SIP/4000-08b872d8
-- SIP/2005-08b8df48 is ringing
-- SIP/2005-08b8df48 answered SIP/4000-08b872d8
-- Stopped music on hold on SIP/4000-08b872d8
== Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/4000-08b872d8' in macro 'acceso'
== Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/4000-08b872d8'

Cabe destacar que en el CLI no se ve si cuelga uno u otro, simplemente se acaba


la llamada.

325

 Botn de grabar llamadas:


Cuando se est llevando a cabo una llamada entre dos extensiones, la
extensin que se registr en el FOP 2 puede grabar dicha llamada.
En el ejemplo siguiente la llamada entre el usuario 4000 y el 2005 es grabada
por la extensin 2003, como se puede ver en la siguiente imagen.

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2005@acceso:1] Macro("SIP/4000-08b872d8", "acceso|2005") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/4000-08b872d8", "SIP/2005|30|Ttm") in new stack
-- Called 2005
-- Started music on hold, class 'default', on SIP/4000-08b872d8
-- SIP/2005-08b8df48 is ringing
-- SIP/2005-08b8df48 answered SIP/4000-08b872d8
-- Stopped music on hold on SIP/4000-08b872d8
[Dec 17 05:23:21] DEBUG[9112]: res_monitor.c:328 ast_monitor_stop: monitor executing ( nice -n 19 sox m "/var/spool/asterisk/monitor/1261023719.156-2005-in.wav"
"/var/spool/asterisk/monitor/1261023719.156-2005-out.wav"
"/var/spool/asterisk/monitor/1261023719.156-2005.wav" && rm -f
"/var/spool/asterisk/monitor/1261023719.156-2005-"* ) &
== Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/4000-08b872d8' in macro 'acceso'
== Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/4000-08b872d8'

Se generan dos archivos:

1261023719.156-2005-in.wav
1261023719.156-2005-out.wav

326

Escuchamos los dos archives de grabacin:


exten => 1122,1,Playback(/var/spool/asterisk/monitor/1261023719.156-2005-in)
exten => 1123,1,Playback(/var/spool/asterisk/monitor/1261023719.156-2005-out)
-- Executing [1122@acceso:1] Playback("SIP/2003-08b872d8",
"/var/spool/asterisk/monitor/1261023719.156-2005-in") in new stack
-- <SIP/2003-08b872d8> Playing '/var/spool/asterisk/monitor/1261023719.156-2005-in' (language 'es')
-- Executing [1123@acceso:1] Playback("SIP/2003-08b872d8",
"/var/spool/asterisk/monitor/1261023719.156-2005-out") in new stack
-- <SIP/2003-08b872d8> Playing '/var/spool/asterisk/monitor/1261023719.156-2005-out' (language 'es')

5) Pruebas de funcionamiento de botones de colas, conferencias y trunks


 Botn de Colas:
El cdigo utilizado en estas pruebas es:
[soportelaboral]
exten => 784,1,Queue(${QS}|tThH)
exten => _XXXX22,1,PauseQueueMember(${QS}|SIP/${EXTEN:0:4})
exten => _XXXX22,n,Hangup

Pausamos los miembros 2000 y 2001 de la cola soportequeue y vemos el aspecto


de estos en FOP 2 y el de la cola:
-- Executing [200122@acceso:1] PauseQueueMember("SIP/2003-b6800a38",
"soportequeue|SIP/2001") in new stack
-- Executing [200122@acceso:2] Hangup("SIP/2003-b6800a38", "") in new stack
== Spawn extension (acceso, 200122, 2) exited non-zero on 'SIP/2003-b6800a38'
-- Executing [200022@acceso:1] PauseQueueMember("SIP/2003-b6800a38",
"soportequeue|SIP/2000") in new stack
-- Executing [200022@acceso:2] Hangup("SIP/2003-b6800a38", "") in new stack
== Spawn extension (acceso, 200022, 2) exited non-zero on 'SIP/2003-b6800a38'

327

Vemos cual es el comportamiento visual del boton de cola de FOP2 al realizarse


una llamada a la cola desde la extensin 4000 que ser cogida por el miembro
2004 (Josemi):

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [784@acceso:1] Queue("SIP/4000-08b88260", "soportequeue|r") in new stack
-- Called SIP/2004
-- Called SIP/2000
-- Called SIP/2005
-- SIP/2000-08b9a368 is ringing
-- SIP/2005-08ba85f0 is ringing
-- SIP/2004-08b89f28 is ringing
-- Nobody picked up in 1000 ms
-- SIP/2004-08b89f28 answered SIP/4000-08b88260
-- Native bridging SIP/4000-08b88260 and SIP/2004-08b89f28

328

 Botn de Trunks:
Como hemos visto en la configuracin del fichero de botones del FOP 2. Es
posible generar botones de Trunk.
En la aplicacin para la realizacin de pruebas se configur el botn del canal 2
de la tarjeta de telefona anteriormente instalada (ENLACEEE).
De esta forma tras configurar la extensin 783 para llamar a ese canal:
exten => 783,1,Dial(DAHDI/2,30,tTm)
exten => 783,n,Hangup

Al realizar una llamada a esta extensin desde la 2003 el resultado obtenido es el


siguiente:

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [783@acceso:1] Dial("SIP/2003-08b89f98", "DAHDI/2|30|tTm") in new stack
-- Called 2
-- Started music on hold, class 'default', on SIP/2003-08b89f98
-- DAHDI/2-1 is ringing
-- DAHDI/2-1 is ringing
-- Stopped music on hold on SIP/2003-08b89f98
-- Hungup 'DAHDI/2-1'
== Spawn extension (acceso, 783, 1) exited non-zero on 'SIP/2003-08b89f98'

 Botn de Conferencias
Como hemos visto en la configuracin del fichero de botones del FOP 2. Es
tambin es posible generar botones de Conferencia. Se ha configurado un botn y
vamos a ver su funcionamiento frente a llamadas a la conferencia.
Registramos dos extensiones en la conferencia y vemos el efecto en el botn
de conferencia.

329

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [600@acceso:1] MeetMe("SIP/2005-08b876a8", "600|i|1234") in new stack
== Parsing '/etc/asterisk/meetme.conf': Found
-- Created MeetMe conference 1023 for conference '600'
-- Recording
-- <SIP/2005-08b876a8> Playing 'vm-rec-name' (language 'es')
-- <SIP/2005-08b876a8> Playing 'beep' (language 'es')
-- x=0, open writing: /var/spool/asterisk/meetme/meetme-username-600-1 format: sln, 0x8b7b718
-- User ended message by pressing #
-- <SIP/2005-08b876a8> Playing 'auth-thankyou' (language 'es')
-- <SIP/2005-08b876a8> Playing 'vm-review' (language 'es')
-- <SIP/2005-08b876a8> Playing 'vm-msgsaved' (language es')
-- <SIP/2005-08b876a8> Playing 'conf-onlyperson' (language 'es')
-- Executing [600@acceso:1] MeetMe("SIP/2003-08b8df48", "600|i|1234") in new stack
-- Recording
-- <SIP/2003-08b8df48> Playing 'vm-rec-name' (language 'es')
-- <SIP/2003-08b8df48> Playing 'beep' (language 'es')
-- x=0, open writing: /var/spool/asterisk/meetme/meetme-username-600-2 format: sln, 0x8b2e168
-- User ended message by pressing #
-- <SIP/2003-08b8df48> Playing 'auth-thankyou' (language 'es')
-- <SIP/2003-08b8df48> Playing 'vm-review' (language 'es')
-- <SIP/2003-08b8df48> Playing 'vm-msgsaved' (language 'es')
-- <DAHDI/pseudo-1935991902> Playing '/var/spool/asteriskmeetme/meetme-username-600-2' (language 'es')
-- <DAHDI/pseudo-1935991902> Playing 'conf-hasjoin' (language 'es')
== Spawn extension (acceso, 600, 1) exited non-zero on 'SIP/2003-08b8df48'
-- <DAHDI/pseudo-1935991902> Playing '/var/spool/asterisk/meetme/meetme-username-600-2' (language 'es')
-- <DAHDI/pseudo-1935991902> Playing 'conf-hasleft' (language 'es')
-- Hungup 'DAHDI/pseudo-1935991902'
== Spawn extension (acceso, 600, 1) exited non-zero on 'SIP/2005-08b876a8'

330

Asternic Call Center Stats


Qu es Asternic Call Center Stats?
Esta sencilla y poderosa herramienta le permitir analizar los registros de cola de su
centralita Asterisk y mostrarlos de manera amigable en su navegador web. Es de los
creadores de FOP 2.
Caractersticas

Reportes detallados: Los reportes muestran informacin exacta sobre la


activdad de su call center en tablas amistosas y grficos flash vistosos.Tambin
puede exportar los reportes a pdf o csv (Excel). Hay una gran cantidad de
mtricas disponibles: nivel de servicio, nivel de abandonos, distribucin de
llamados, actividad de agentes, y mucho ms.

Asequible: Asternic Call Center Stats viene en dos versiones, una gratuita con
capacidad limitada que se distribuye bajo la licencia GPL v3, y una versin
comercial con un montn de caractersticas adicionales e informes. La
concesin de licencias se realiza por servidor, no hay licencias por puesto, y el
cdigo fuente completo se incluye en ambas versiones.

Estado en tiempo real: Tanto la version Lite como la Pro le permiten ver el
estado de sus colas y agentes en tiempo real.

Slido y probado: La herramienta est siendo utilizada en pequeas oficinas y


en grandes call centers por igual, reportando cientos de miles de llamadas de
forma consistente.

Requisitos:
En el servidor
1. Servidor web con soporte PHP.
2. Base de datos MySQL.
3. Asterisk 1.2, 1.4 o 1.6.
En el cliente
1. Navegador web con soporte javascript.
2. Plugin Flash para los grficos.

331

Instalacin
Estas instrucciones se aplican para la versin Lite del Asternic Call Center Stats.
-

Descargamos la aplicacin:
cd /usr/src
wget http://www.asternic.org/stats/asternic-stats-1.0.1.tgz

Descomprimimos:
tar zvxf asternic-stats-1.0.1.tgz
cd asternic-stats

Creamos la base de datos:


mysqladmin create qstats

Cargamos la estructura de la base de datos:


mysql -u root < sql/qstat.sql

Editamos /usr/src/asternic-stats/html/config.php e ingresamos la informacin


referente a la base de datos:
$dbhost = 'localhost';
$dbname = 'qstat';
$dbuser = 'root';
$dbpass = '';
$language = "es";

Editar /usr/src/asternic-stats/html/config_realtime.php la informacin


referente a Asterisk Manager, esta la podemos encontrar en el archivo
/etc/asterisk/manager.conf :
<?
$manager_host = "127.0.0.1";
$manager_user = "admin";
$manager_secret = "amp111";
session_start();
session_register("QSTATS");
?>

Editamos /usr/src/asternic-stats/parselog/config.php con informacin


referente a la base de datos y manager de asterisk:
$queue_log_dir = '/var/log/asterisk/';
$queue_log_file = 'queue_log';
$dbhost = 'localhost';
$dbname = 'qstat';

332

$dbuser = 'root';
$dbpass = '';

Copiamos la carpeta html a /var/www/:


cp -Rf /usr/src/asternic-stats /var/www/queue-stats
cp -Rf /usr/src/asternic-stats/parselog /var/www/queue-stats

Creamos una tarea programada para consolidar la informacin del archivo


queue_log:
php -q /var/www/queue-stats/parselog/parselog.php

Visualizamos unas bonitas y completas estadsiticas de cada una de las colas


disponibles desde:
http://ip.asterisk/queue_stats

333

Practicas de la aplicacin con Asternic Call Center Stats


Tras el acceso a la aplicacin ( http://192.168.1.200/stats/ ) elegimos las colas, los
agentes y el intervalo de tiempo del que realizaremos el reporte.

Pulsamos el botn Mostrar Reporte y vemos las llamadas atendidas por cada cola y
agente seleccionados y las no atendidas.

334

335

A continuacin vemos las llamadas atendidas por hora, da y por da de la semana.

Para una mejor visualizacin vemos 3 grficas:

La relacin entre llamadas atendidas y desatendidas por hora.


336

Nmero de horas desatendidas de las recibidas.


Tiempo de espera por hora.

337

Vemos la distribucin de llamadas por da de la semana:

Vemos a tiempo real que sucede cuando se est haciendo una llamada a la cola.

338

Cuando se contesta la llamada la aplicacin lo refleja de la siguiente forma:

339

Asternic CDR Reports


Qu es Asternic CDR Reports?
Es una herramienta de fcil manejo que le permitir analizar los registros de llamadas
de cada uno de los usuarios de la centralita Asterisk y mostrarlos a travs de diversas
tablas y grficos en su navegador web.Es de los creadores de FOP 2 y Asternic Call
Center Stats.
Caractersticas

Versin de Prueba: Para obtener esta aplicacin y probarla es necesario


ponerse en contacto con los creadores de esta.

Referencias: El xito de FOP 2 y lo consistente y solida que es la aplicacin


Asternic Call Center Stats nos da un punto de confianza.

Estado en tiempo real: Esta versin permite ver el estado de una llamada en
tiempo real.

Reportes Detallados: La herramienta permite ver reportes de las llamadas


entrantes y salientes por usuario y duracin total de todas estas, tambin es
posible ver la distribucin en minutos mensual de cada usuario.

Requisitos:
En el servidor
4. Servidor web con soporte PHP.
5. Base de datos MySQL.
6. Asterisk 1.2, 1.4 o 1.6.
En el cliente
3. Navegador web con soporte javascript.
4. Plugin Flash para los grficos.

340

Instalacin
Con estas simples instrucciones instalaremos la aplicacin en nuestro servidor:
- Obtenemos la aplicacin:
En este caso gracias a Nicolas Gudio.
- Descomprimimos en /var/www/html/ y cambiamos de nombre a la carpeta a "cdr":
tar zvxf asternic-cdr-free.tgz
mv asternic-cdr-free cdr
cd cdr

- Agregamos el contenido de el fichero db.sql a la base de datos "cdr" anteriormente


creada para llevar los registros de llamadas desde MySQL:
service mysqld start
mysql -u root -p root
use cdr;

Pegamos el contenido del fichero db.sql.


- Editamos el archivo config.php de la siguiente manera:
// Credentials for MYSQL databases
$dbhost = 'localhost';
$dbname = 'cdr';
$dbuser = 'root';
$dbpass = 'root';
// Credentials for AMI (for the realtime tab to work)
// See /etc/asterisk/manager.conf
$manager_host = "localhost";
$manager_user = "admin";
$manager_secret = "amp111";
// Available languages "es", "en", "ru", "de", "fr"
$language = "es";

- Visualizamos el registro de llamadas desde:


http://ip.asterisk/cdr

341

Practicas de la aplicacin con Asternic CDR Reports


Tras el acceso a la aplicacin ( http://192.168.1.200/cdr/ ) configuramos los usuarios y
establecemos el intervalo de tiempo del que realizaremos el reporte.

Agregamos uno a uno los usuarios de los que registraremos las llamadas.

Tras agregar todos los usuarios este es el aspecto de la aplicacin y ya podemos hacer
el reporte.

342

Elegimos el intervalo de tiempo y pulsamos el botn Mostrar Reporte.

Tras hacer el reporte empezamos a observar las tablas y grficos que se realizan
empezando por las llamadas salientes por usuario.

A partir de esa tabla se generan las siguientes grficas:

343

Ahora vemos las llamadas entrantes recibidas por usuario:

344

A partir de la tabla de llamadas entrantes se generan las siguientes grficas:

345

Vemos la distribucin de llamadas en los 23 dias de los que se ha hecho el reporte:

346

Por ltimo se visualiza como se muestra una llamada a tiempo real:

347

Verbio

Verbio Technologies S.L. es una empresa


especializada en el desarrollo de tecnologas del
habla, bsicamente sntesis y reconocimiento de voz.
Verbio disea, desarrolla y comercializa productos software de tecnologas del habla y
ofrece los servicios asociados de soporte tcnico, consultora, desarrollos I+D a
medida, ajuste y tuning de aplicaciones de voz y mantenimiento.
Por suerte nos han concedido una versin de prueba para aplicar y probar el
funcionamiento del reconocimiento y sntesis de voz a nuestra centralita Asterisk.

Qu es Verbio TTS?

Verbio TTS es el motor de sntesis de voz o


conversin de texto en voz de Verbio.

Qu es la Conversin de texto en voz?


La conversin de texto en habla o sntesis de voz (TTS - Text-to-Speech) es la
tecnologa que permite convertir, de forma automtica, un texto escrito en una
locucin de voz natural, con la mejor naturalidad e inteligibilidad. Permite al
sistema que dispone de dicho motor "leer en voz alta" un texto escrito.

Cundo es indicado utilizarlo?


-

Es una herramienta imprescindible en aplicaciones cuyo texto a pasar a


voz, a priori, es desconocido o muy cambiante y por lo tanto hay que
comunicar informacin dinmica.

La sntesis no pretende sustituir nunca a la calidad de una grabacin


profesional hecha en un estudio de grabacin, pero s que se dispone de
calidad suficiente como para sustituir temporalmente cuando se
necesitan de forma inmediata mensajes o locuciones estticas o
definitivamente cuando lo que se pretende es un ahorro directo de
costes.

Cuando se persigue mayor calidad que lo que representa la simple


concatenacin directa de ficheros .wav de pequeas locuciones
grabadas en estudio, ya que con ellas se perdera la entonacin
dinmica necesaria en un idioma concreto. Un ejemplo tpico de ello es
la locucin de cantidades numricas.

348

Qu es Verbio ASR?
Verbio ASR es el motor de reconocimiento del habla de
Verbio muy orientado a aplicaciones telefnicas e
independientes del locutor, si bien es aplicable tambin en
muchas otras aplicaciones microfnicas y multimedia.

Qu es el Reconocimiento del habla?


El reconocimiento del habla (ASR - Automatic Speech Recognition) es la
tecnologa que permite convertir, de forma automtica, una locucin de voz
natural en un texto que se corresponda con sta con la mxima fiabilidad
posible. Permite al sistema que dispone de dicho motor "entender" o
interpretar el contenido de una locucin con independencia de la voz del
locutor.

Cundo es indicado utilizarlo?


-

Verbio ASR es una herramienta imprescindible en aplicaciones


interactivas entre usuarios y sistemas automticos o de control por voz,
ya sean IVR, Portales de voz o dispositivos en general.

Muy orientado para el entorno telefnico, si bien el canal de voz forma


parte de otros muchos sistemas multicanal o multimodal que requieren
ASR para ser automatizados.

Cuando se requiere una navegacin ms flexible, con iniciativa y control


por parte del usuario.

Para ahorrar tiempos de interaccin y evitar memorizacin de mens


muy largos.

En aplicaciones en las que el telfono, o simplemente la voz, sigue


siendo el nico canal o medio de interaccin.

Introduccin a Verbio-Asterisk
Para poder poner en marcha el sistema Verbio-Asterisk, deberemos disponer de los
siguientes componentes:

Servidor Verbio (voxserver).


Servidor Asterisk con las aplicaciones Verbio instaladas.

Ambos componentes pueden estar instalados en el mismo equipo.

349

Servidor Asterisk
Mediante las aplicaciones (Dialplan)
Verbio, se realizan peticiones de
sntesis y reconocimiento al voxserver.

Servidor Verbio (voxserver)


Proporciona recursos de sintesis y
reconocimiento.

Listado de paquetes de Verbio:


El listado de paquetes disponibles es el siguiente:


Motor de sntesis/recnocimiento (servidor voxserver (verbiod)):


verbio-engines: Este paquete es de obligada instalacin cuando estamos
montando el servidor de sntesis/reconocimiento.
En este caso el paquete necesario es: verbio-engines-8.02-0.i386.rpm

Cliente verbio (Verbio Developer):


verbio-clients: Contiene las libreras, ejemplos y documentacin necesaria, para
el desarrollo de aplicaciones de voz.
En este caso el paquete necesario es: verbio-clients-8.02-0.i386.rpm

Text To Speech (sntesis):

Id. Locutor

Nombre del paquete

Descripcin

esAO
esAO
esEB

verbio-tts-laura-esao
verbio-tts-laura-esao-16k
verbio-tts-carlos-eseb

locutor de sntesis espaol (mujer -Laura-) 8KHz


locutor de sntesis espaol (mujer -Laura-) 16KHz
locutor de sntesis espaol (hombre -Carlos-) 8KHz

350

esEB
esVA
esVA
ca-c0CD
ca-c0CD
ca-c0FE
ca-c0FE
caJO
caJO
euSK
euSK
euVZ
euVZ
ca-v0EM
ca-v0EM
gaFR
es-mxYO
es-mxYO
ptMU
ptMU
pt-brPA
pt-brPA
frIF
frIF
en-usJA
en-usJA
es-arLO
es-arLO

verbio-tts-carlos-eseb-16k
verbio-tts-amaya-esva
verbio-tts-amaya-esva-16k
verbio-tts-pau-ca-c0cd
verbio-tts-pau-ca-c0cd-16k
verbio-tts-meritxell-ca-c0fe
verbio-tts-meritxell-ca-c0fe -16k
verbio-tts-oriol-cajo
verbio-tts-oriol-cajo-16k
verbio-tts-ainhoa-eusk
verbio-tts-ainhoa-eusk-16k
verbio-tts-amaia-euvz
verbio-tts-amaia-euvz-16k
verbio-tts-empar-ca-v0em
verbio-tts-empar-ca-v0em-16k
verbio-tts-freire-gafr
verbio-tts-celia-es-mxyo
verbio-tts-celia-es-mxyo-16k
verbio-tts-adriana-ptmu
verbio-tts-adriana-ptmu-16k
verbio-tts-julia-pt-brpa
verbio-tts-julia-pt-brpa-16k
verbio-tts-brigitte-frif
verbio-tts-brigitte-frif-16k
verbio-tts-jane-en-usja
verbio-tts-jane-en-usja-16k
verbio-tts-javier-es-arlo
verbio-tts-javier-es-arlo-16k

locutor de sntesis espaol (hombre -Carlos-) 16KHz


locutor de sntesis espaol (mujer -Amaya-) 8KHz
locutor de sntesis espaol (mujer -Amaya-) 16KHz
locutor de sntesis cataln (hombre -Pau-) 8KHz
locutor de sntesis cataln (hombre -Pau-) 16KHz
locutor de sntesis cataln (mujer -Meritxell-) 8KHz
locutor de sntesis cataln (mujer -Meritxell-) 16KHz
locutor de sntesis cataln (hombre -Oriol-) 8KHz
locutor de sntesis cataln (hombre -Oriol-) 16KHz
locutor de sntesis euskera (mujer -Ainhoa-) 8KHz
locutor de sntesis euskera (mujer -Ainhoa-) 16KHz
locutor de sntesis euskera (mujer -Amaia-) 8KHz
locutor de sntesis euskera (mujer -Amaia-) 16KHz
locutor de sntesis valenciano (mujer -Empar-) a 8KHz
locutor de sntesis valenciano (mujer -Empar-) a 16KHz
locutor de sntesis gallego (hombre -Freire-) 8KHz/16KHz
locutor de sntesis mexicano (mujer -Celia-) 8KHz
locutor de sntesis mexicano (mujer -Celia-) 16KHz
locutor de sntesis portugus (mujer -Adriana-) 8KHz
locutor de sntesis portugus (mujer -Adriana-) 16KHz
locutor de sntesis portugus brasileo (mujer -Julia-) 8KHz
locutor de sntesis portugus brasileo (mujer -Julia-) 16KHz
locutor de sntesis francs (mujer -Brigitte-) 8KHz
locutor de sntesis francs (mujer -Brigitte-) 16KHz
locutor de sntesis ingls (mujer -Jane-) 8KHz
locutor de sntesis ingls (mujer -Jane-) 16KHz
locutor de sntesis argentino (hombre -Javier-) 8KHz
locutor de sntesis argentino (hombre -Javier-) 16KHz

Se instalarn los paquetes segn los locutores que necesitemos.


Hay que tener en cuenta que, a la hora de realizar la instalacin de los locutores (TTS)
de Verbio, deberemos usar la versin a 8Khz de los mismos.
En este caso los paquetes necesarios son: verbio-tts-amaia-euvz-8.02-0.i386.rpm
y verbio-tts-amaya-esva-8.02-0.i386.rpm


Configuraciones de reconocimiento (ASR):

Id. configuracin

Nombre del paquete

Descripcin (lenguajes que proporciona)

es
es_ca
es_eu
es_ga

verbio-asr-es
verbio-asr-es_ca
verbio-asr-es_eu
verbio-asr-es_ga

es_ca_eu_ga

verbio-asr-es_ca_eu_ga

es-ar
es-cl
es-co
es-mx

verbio-asr-es-ar
verbio-asr-es-cl
verbio-asr-es-co
verbio-asr-es-mx

es-ve

verbio-asr-es-ve

pt

verbio-asr-pt

reconocimiento espaol (es).


reconocimiento espaol + cataln (es,ca)
reconocimiento espaol + euskera (es,eu)
reconocimiento espaol + gallego (es,ga)
reconocimiento espaol + cataln + euskera + gallego
(es,ca,eu,ga)
reconocimiento argentino/uruguayo/paraguayo (es-ar)
reconocimiento chileno (es-cl)
reconocimiento Colombiano/panameo (es-co)
reconocimiento mexicano (es-mx)
reconocimiento venezolano/portorriqueo/cubano/
dominicano (es-ve)
reconocimiento portugus (pt)

351

pt-br
fr
en-us
es16k
ca16k

verbio-asr-pt-br
verbio-asr-fr
verbio-asr-en-us
verbio-asr-es16k
verbio-asr-ca16k

reconocimiento portugus brasileo (pt-br)


reconocimiento francs (fr)
reconocimiento ingls americano (en-us)
reconocimiento espaol 16Khz (es16k).
reconocimiento cataln 16Khz (ca16k).

Se instalarn los paquetes segn los locutores que necesitemos.


En este caso el paquete necesario es: verbio-asr-es_eu-8.02-0.i386.
Instalacin de Verbio
1. Desinstalar (si tenemos alguna instalacin previa) todos los paquetes Verbio:

Encontrar los paquetes Verbio que tengamos instalados en nuestro


sistema.
# rpm -qa | grep -i verbio
verbio-tts-*
verbio-engines
verbio-asr-*
verbio-clients
[...]

Desinstalar los paquetes encontrados (verbio-engines deber ser el


ltimo).
[...]
# rpm -e verbio-tts-*
# rpm -e verbio-asr-*
# rpm -e verbio-clients
# rpm -e verbio-engines

2. Instalar los nuevos paquetes Verbio (verbio-engines deber ser el primero)


# rpm -ivh verbio-engines-x.yy.i386.rpm
# rpm -ivh --force verbio-clients-x.yy.i386.rpm
# rpm -ivh --force verbio-tts-*-x.yy.i386.rpm
# rpm -ivh --force verbio-asr-*-x.yy.i386.rpm

3. Si disponemos de una mochila con licencia, deberemos instalar el paquete (que


encontraremos en: /usr/share/doc/verbio/) que contiene el driver de dicho
dispositivo:
# rpm -ivh sntl-sud-x.y.z.i386.rpm

Si disponemos de una licencia en fichero, copiarla en: /opt/verbio/lic/


4. Copiar el directorio /usr/share/doc/verbio/samples/ a nuestra 'home' (por
ejemplo),para poder compilar y ejecutar algunos ejemplos que all
encontraremos.
352

5. La documentacin de verbio la podemos encontrar en: /usr/share/doc/verbio/:

library-sdk_es.pdf (documentacin sdk verbio).


guide_es.pdf (captulos 4 y 5 para aprender sobre reconocimiento y
sntesis del habla)

Configuracin y puesta en marcha del sevidor voxserver (verbiod)


La configuracin del servidor voxserver, reside en el fichero:
/etc/software-verbio-server.
Los parmetros ms importantes de dicho fichero son:
VERBIO_ASR_CONF

: debe contener todas las configuraciones de ASR


instaladas.
VERBIO_START_CONF : debe contener todas las configuraciones ASR que
queremos arrancar.
VERBIO_START_LANG : lenguaje por defecto.
VERBIO_TTS_SPK
: debe contener todos los locutores TTS instalados.
VERBIO_START_SPK
: debe contener los locutores TTS que queremos tener
disponibles.
VERBIO_IN_MEMORY : 1 --> cargar todo el locutor en memoria, 0 --> carga
parcial.
FREQUENCY
: 8000 o 16000 (segn la version que hayamos
instalado)
Nota: podemos usar la aplicacin 'verbioconf' (como root desde un terminal) para
llevar a cabo la configuracin del fichero '/etc/software-verbio-server'.
Cada vez que instalemos/eliminemos un paquete de sntesis y/o reconocimiento,
deberemos ejecutar 'verbioconf' para reflejar los cambios en el fichero /etc/softwareverbio-server.
Puesta en marcha del servidor Verbio:
Comprobamos el correcto funcionamiento del servidor verbio ejecutando (como
'root'):
# verbiod -d (con -d indicamos modo debug)

Si todo est correctamente instalado deberemos obtener una salida similar a:


verbiod-6: StartUp TTS Speakers: esEB,esAO
verbiod-3: Serial number = H9D1CCE7
verbiod-3: ERROR mc_libinit(, , 262144) failed: NO LICENSE FILE WAS FOUND

Si disponemos de licencia, y el servidor est correctamente instalado y configurado, el


mensaje "NO LICENSE FILE WAS FOUND" no aparecer y 'verbiod' quedar arrancado.
353

Si no tenemos licencia, una vez comprobada la correcta instalacin de 'verbiod',


podemos arrancar en modo evaluacin, para realizar las pruebas que consideremos
oportunas.
Para ello ejecutaremos (como 'root'):
# verbiod -e

El servidor quedar arrancado (ejecutar 'pgrep verbiod' para comprobar).


Tambin podemos comprobar el estado del servidor 'verbiod' ejecutando (como
'root'):
# grep verbiod /var/log/syslog o

# grep verbiod /var/log/messages

Nota: en modo evaluacin, 'verbiod' permanecer arrancado durante, nicamente,


30/60 minutos. Esta opcin de evaluacin nicamente es vlida para comprobar el
correcto funcionamiento del sistema. Se recomienda adquirir una licencia de
evaluacin una vez comprobado el correcto funcionamiento de verbio.
Los parmetros que acepta verbiod son: -d (modo debug), -e (modo evaluacin) o
ningn parmetro para iniciar en modo 'normal'.
Instalacin de las aplicaciones de Verbio en Asterisk
Para instalar las aplicaciones Asterisk de Verbio, hay que seguir los siguientes pasos:
1.) Copiar el fichero 'app_verbio_speech.c' a la carpeta 'apps' de las fuentes de
Asterisk.
2.) Editar el fichero 'Makefile' de dicha ubicacion (carpeta 'apps') y aadir:
Si usamos Asterisk 1.4 o 1.6 (aadir justo antes de la etiqueta 'all:')
MENUSELECT_DEPENDS_app_verbio_speech+=VOX
VOX_LIB=-lvoxlib

Nota: para que la aplicacin compile y linkee correctamente deberemos tener,


como mnimo, el paquete 'verbio-clients' instalado.
3.) Ejecutar 'make install' (desde el directorio principal de nuestras fuentes de
Asterisk).
4.) Crear las siguientes carpetas (si conviene):
/var/lib/asterisk/verbio/text
/var/lib/asterisk/verbio/gram
/var/lib/asterisk/verbio/audio

5.) Copiar el fichero 'verbio.conf' (que encontramos en el paquete verbioasterisk)a: /etc/asterisk/.


354

Carga y descarga de las aplicaciones de Verbio en Asterisk.


Las aplicaciones Verbio se cargan y descargan automticamente al iniciar o parar
Asterisk. Si, desde el CLI de Asterisk, queremos cargar las aplicaciones Verbio pedemos
ejecutar:
*CLI> module load app_verbio_speech.so

Para la descarga de las aplicaciones Verbio podemos ejecutar:


*CLI> module unload app_verbio_speech.so

Si hay algn error de configuracin/conexin se nos reportar por pantalla.


Nota: al cargar las aplicaciones Verbio (bien cuando arranca Asterisk o bien cuando
cargamos manualmente con '(module) load app_verbio_speech.so'). Se intentar
establecer la conexin con el servidor Verbio por lo cual, es muy importante que
tengamos el servidor de sntesis/ reconocimiento arrancado.
La conexin con el servidor Verbio se mantiene abierta hasta que paremos Asterisk o
ejecutemos '(module) unload app_verbio_speech.so'.
Configuracin de verbio.conf (en /etc/asterisk/)
;; Verbio ASR and TTS engines Configuration
;;;;;;;;;;;;;;;;;;;;;;
;General options ;
;;;;;;;;;;;;;;;;;;;;;;
[general]
primary_vox_server
= 127.0.0.1
backup_vox_server
= 127.0.0.1
; default 5
net_timeout
=5
;;;;;;;;;;;;;;;;;;;;;;
; TTS Engine Options ;
;;;;;;;;;;;;;;;;;;;;;;
[tts]
default_language
= es
; es (espaol)
;default_language
= eu
; eu (euskera)
default_speaker
= amaya
;default_speaker
= amaia
text_prompts_path
=/var/lib/asterisk/verbio/text
init_delay = 300
end_delay = 20
;;;;;;;;;;;;;;;;;;;;;;
; ASR Engine Options ;
;;;;;;;;;;;;;;;;;;;;;;
[asr]
;default_config = es
default_config = es_eu ;(espaol, euskera)
default_language = es
grammar_path = /var/lib/asterisk/verbio/gran
; default: 300

355

init_sil = 300
; default: 200
max_sil = 200
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; VAD (client-side) options ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[vad]
;min_ref = 5
;mode = standard
;default: 2.5
;low_factor = 2.5
;default: 4.5
;high_factor = 4.5
; default: 0.8
;final_factor = 0.8
; default: 2.5
;final_high_factor = 2.5
; default: 500.0
;min_high_thresh = 500.0
; default: 50
;aam_min = 50
; default: 200
;aam_max = 200
;;;;;;;;;;;;;;;;;;;;;;
; Debug options ;
;;;;;;;;;;;;;;;;;;;;;;
[debug]
verbose
=1
extended_verbose
=1
keep_recorded_files
=1
recorded_files_path
= /var/lib/asterisk/verbio/audio
recorded_files_exten
= pcm
mark_recorded_files = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Wordspotting options (future application) ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[ws]
;path = /var/lib/asterisk/verbio/ws
;silence = 500
;threshold = 30
;command = /var/lib/asterisk/verbio/ws/ws.sh

Descripcion de las diferentes aplicaciones.


Nota: Si los parmetros marcados como opcionales se omiten, estos tomaran los
valores del fichero /etc/asterisk/verbio.conf.
o
o
o
o
o
o
o

VerbioLoadVcb
VerbioUnloadVcb
VerbioRec
VerbioPrompt
VerbioPromptAndRec
VerbioStreamAndRec
VerbioLastErr

356

o
o

VerbioInfo
VerbioFreeChannel

o VerbioLoadVcb(gram_file|gram_type[|config][|lang][|options])
Descripcin: Esta funcion carga una gramatica (sobre un puerto verbio asociado al
canal Asterisk).
Parametros: gram_file : fichero de gramatica.
gram_type : tipo de gramatica ((ISOLATED, CONNECTED, ABNF o
BUILTIN)).
config : configuracion de reconocimiento (opcional).
lang : lenguaje a utilizar (opcional).
options : opciones. Las opciones disponibles son:
- v (verbose)
- n (no ejecutar colgado cuando se produzca un error referente a
Verbio)
Una vez cargada la gramatica, se establecera una variable de canal (VVCB_HANDLE) la
cual contiene el identificador de la gramatica cargada.
o VerbioUnloadVcb(vcb_handle[|config][|lang][|options])
Descripcin: Descarga una gramatica.
Parametros: vcb_handle : identificador de gramatica (-1 para descargar todas)
config : configuracion de reconocimiento (opcional).
lang : lenguaje a utilizar (opcional).
options : opciones. Las opciones disponibles son:
- v (verbose)
- n (no ejecutar colgado cuando se produzca un error referente a
Verbio).
o VerbioRec([|config][|lang][|initsil][|maxsil][|abs_timeout][|options])
Descripcion: Lanza el reconocimiento. Antes de hacer cualquier llamada a esta
aplicacin, deberemos haber cargado alguna gramatica con la funcin
'VerbioLoadVcb'.
Parametros: config : configuracion de reconocimiento (opcional).
lang : lenguaje a utilizar (opcional).
initsil : maxima duracion de silencio de inicio (unidades de 10ms).
maxsil : maxima duracion de silencio final (unidades de 10ms).
abs_timeout : timeout absoluto de reconocimiento (segundos)(opcional)
options : opciones. Las opciones disponibles son:
- b (beep antes de lanzar el reconocimiento)
- v (verbose)
- a (descolgar el canal)
357

- d (habilitar la deteccion de dtmf)


- n (no ejecutar colgado cuando se produzca un error referente a
Verbio)
Para acceder al resultado del reconocimiento, podemos consultar (desde el dialplan de
Asterisk) las siguientes variables de canal:
VASR_WORDS : Numero de palabras reconocidas (n).
VASR_INDEXn : Indice (dentro de la gramatica) de la palabra-n reconocida.
VASR_RESULTn : Resultado-n del reconocimiento.
VASR_SCOREn : Score-n (confianza) del reconocimiento.
VASR_UTTERANCEn : Utterance el resultado n.
VASR_WEIGHTn : Peso del resultado n dentro de la gramatica.
VASR_RULEn : Regla a la que pertenece el resultado n.
Para compatibilidad con anteriores versiones:
VASR_INDEX = VASR_INDEX0
VASR_RESULT = VASR_RESULT0
VASR_SCORE = VASR_SCORE0
VASR_UTTERANCE = VASR_UTTERANCE0
VASR_WEIGHT = VASR_WEIGHT0
VASR_RULE = VASR_RULE0
Si la deteccion de dtmf (opcion 'd') est habilitada, podemos consultar su estado con
las siguientes variables de canal:
VDTMF_DETECTED:TRUE (se ha detectado un tono) o FALSE (no se ha
detectado tono)
VDTMF_RESULT :si VDTMF_DETECTED = TRUE, VDTMF_RESULT contiene el
valor de la tecla pulsada -0,1,2,3,4,5,6,7,8,9,*,#...-.
Se puede configurar el nmero maximo de dtmf a detectar y el dtmf de terminacin,
configurando (set) las siguientes variables del dialplan:
VERBIO_DTMF_MAXLEN
VERBIO_DTMF_TERMINATOR
Nota: si la opcion 'keep_recorded_files' esta activada en 'verbio.conf', podemos
consultar el nombre del fichero generado (una vez la aplicacion de reconocimiento ha
terminado), mediante la siguiente variable del dialplan: VASR_REC_FILE.
o

VerbioPrompt(text_or_file[|lang][|speaker][|options])

Descripcin: Sintetiza un texto o fichero de texto.


Parmetros: text_or_file : texto (o fichero - ver opciones -) a sintetizar.
lang : lenguaje a utilizar (opcional).
358

speaker : locutor a utilizar (opcional).


options : opciones. Las opciones disponibles son:
- f (tratar el parametro fichero_o_texto como si fuera un fichero)
- v (verbose)
- p (habilitar pausa/reproduccion mediante dtmf -tecla por
defecto '#'.Para especificar una tecla: p0,p1,..,p*,p#. p. para
cualquier tecla)
- s (habilitar parada del prompt mediante dtmf -tecla por defecto
'#'. Para especificar una tecla: s0,s1,..,s*,s#. s. para cualquier
tecla)
- a (descolgar el canal)
- n (no ejecutar colgado cuando se produzca un error referente a
Verbio)
Si la opcion de parar el prompt ('s') esta habilitada, podemos consultar su estado con
las siguientes variables de canal:
VDTMF_DETECTED (TRUE -si el usuario ha pulsado la tecla de parada del
prompt- or FALSE)
VDTMF_RESULT (si VDTMF_DETECTED = TRUE, contiene el valor de la
tecla pulsada)
Al trabajar con la opcion 'f', los ficheros de texto a sintetizar, se buscaron en la ruta
definida por el parametro 'text_prompts_path', del fichero de configuracion
('/etc/asterisk/verbio.conf').
Si queremos sintetizar un fichero de texto que se encuentre en una ubicacion distinta,
deberemos introducir el path completo al fichero.
No olvidarse de escapar las comas (',') del texto que queremos sintetizar (ejemplo:
"Hola\, buenas tardes.").(Si usamos un fichero de texto -opcion 'f'-esto ltimo no
aplica).
o VerbioPromptAndRec(text_or_file[|initsil][|maxsil][|tts_lang][|tts_spkr][|asr
_conf][|asr_lang][|abs_timeout][|options])
Descripcin: Lanza (al mismo tiempo) una sintesis y un reconocimiento. Dicha
aplicacion permite, si la opcion bargein esta activada, que el usuario
interrumpa la maquina (si durante la locucion el reconocedor detecta
que el usuario ha dicho algo, se parara la sintesis y la aplicacion
terminara. Permitiendonos, as, consultar el resultado del
reconocimiento efectuado).
Parametros: text_or_file : texto (o fichero - ver opciones -) a sintetizar.
initsil : maxima duracion de silencio de inicio (unidades de 10ms)
(opcional).
maxsil : maxima duracion de silencio final (unidades de 10ms) (opcional)
359

tts_lang : lenguaje (del sintetizador) a utilizar (opcional).


tts_spkr : locutor (del sintetizador) a utilizar (opcional).
asr_conf : configuracion de reconocimiento (opcional).
asr_lang : lenguaje (del reconocedor) a utilizar (opcional).
abs_timeout : timeout absoluto de reconocimiento (segundos)(opcional)
options : opciones. Las opciones disponibles son:
- f (tratar el parametro fichero_o_texto como si fuera un fichero)
- v (verbose)
- a (descolgar el canal)
- b (beep antes de reconocer)
- g (activar bargein. Permitir al usuario interrumpir a la maquina.
Esta opcin desactivara 'b'.)
- i (interrumpir de manera inmediata el prompt al detectar voz.
Esta opcin activara 'g'.)
- d (habilitar la deteccion de dtmf)
- n (no ejecutar colgado cuando se produzca un error referente a
Verbio).
Al trabajar con la opcion 'f', los ficheros de texto a sintetizar, se buscaran en la ruta
definida por el parametro 'text_prompts_path' del fichero de configuracin
(/etc/asterisk/verbio.conf).
Si queremos sintetizar un fichero de texto que se encuentre en una ubicacion distinta,
deberemos introducir el path completo al fichero.
No olvidarse de escapar las comas (',') del texto que queremos sintetizar (ejemplo:
"Hola\, buenas tardes.").(Si usamos un fichero de texto -opcion 'f'- esto ultimo no se
aplica).
Cuando usemos bargein, hay que tener mucho cuidado al seleccionar los parametros
'initsil', 'maxsil' y 'abs_timeout'.
Si, por ejemplo, seleccionamos un 'initsil' o 'abs_timeout' demasiado pequeo, no le
daremos suficiente tiempo de escucha al usuario, y nuestro mensaje (prompt) se vera
interrumpido.
Si no indicamos un valor para 'initsil', 'maxsil' o 'abs_timeout', se utilizaran los valores
indicados en el fichero de configuracion (verbio.conf).
Para acceder al resultado del reconocimiento, podemos consultar (desde el dialplan de
Asterisk) las siguientes variables de canal (una vez la aplicacion 'VerbioPromptAndRec'
haya terminado):
VASR_WORDS : Numero de palabras reconocidas (n).
VASR_INDEXn : indice (dentro de la gramatica) de la palabra-n reconocida.
VASR_RESULTn : Resultado-n del reconocimiento.
VASR_SCOREn : Score-n (confianza) del reconocimiento.
360

VASR_UTTERANCEn : Utterance el resultado n.


VASR_WEIGHTn : Peso del resultado n dentro de la gramatica.
VASR_RULEn : Regla a la que pertenece el resultado n.
Para compatibilidad con anteriores versiones:
VASR_INDEX = VASR_INDEX0
VASR_RESULT = VASR_RESULT0
VASR_SCORE = VASR_SCORE0
VASR_UTTERANCE = VASR_UTTERANCE0
VASR_WEIGHT = VASR_WEIGHT0
VASR_RULE = VASR_RULE0
Si la deteccion de dtmf (opcion 'd') esta habilitada, podemos consultar su estado con
las siguientes variables de canal:
VDTMF_DETECTED :TRUE (se ha detectado un tono) o FALSE (no se ha
detectado tono)
VDTMF_RESULT :si VDTMF_DETECTED = TRUE, VDTMF_RESULT contiene el
valor de la tecla pulsada -0,1,2,3,4,5,6,7,8,9,*,#...-.
Se puede configurar el numero maximo de dtmf a detectar y el dtmf de terminacion,
configurando (set) las siguientes variables del dialplan:
VERBIO_DTMF_MAXLEN
VERBIO_DTMF_TERMINATOR
Nota: si la opcion 'keep_recorded_files' esta activada en 'verbio.conf', podemos
consultar el nombre del fichero generado (una vez la aplicacion de reconocimiento ha
terminado), mediante la siguiente variable del Dialplan: VASR_REC_FILE.
o VerbioStreamAndRec(audio_file[|initsil][|maxsil][|asr_conf][|asr_lang][|abs
_timeout][|options])
Descripcion: Lanza (al mismo tiempo) la reproduccion de un fichero de sonido y un
reconocimiento. Esta aplicacion, igual que la anterior, nos permite
realizar 'bargein'.
Parametros: audio_file : fichero a reproducir.
initsil : maxima duracion de silencio de inicio (unidades de 10ms)
(opcional)
maxsil : maxima duracion de silencio final (unidades de 10ms) (opcional)
asr_conf : configuracion de reconocimiento (opcional).
asr_lang : lenguaje (del reconocedor) a utilizar (opcional).
abs_timeout : timeout absoluto de reconocimiento (segundos)(opcional)
options : opciones.Las opciones disponibles son:
- v (verbose)
- a (descolgar el canal)
361

- b (beep antes de reconocer)


- g (activar bargein. Permitir al usuario interrumpir a la maquina.
Esta opcin desactivara 'b'.)
- i (interrumpir de manera inmediata el stream al detectar voz.
Esta opcin activara 'g'.)
- d (habilitar la deteccion de dtmf)
- n (no ejecutar colgado cuando se produzca un error referente a
Verbio)
Cuando usemos bargein, hay que tener mucho cuidado al seleccionar los parametros
'initsil', 'maxsil' y 'abs_timeout'. Si, por ejemplo, seleccionamos un 'initsil' o
'abs_timeout' demasiado pequeno, no le daremos suficiente tiempo de escucha al
usuario, y nuestro fichero a reproducir se vera interrumpido.
Si no indicamos un valor para 'initsil', 'maxsil' o 'abs_timeout', se utilizaran los valores
indicados en el fichero de configuracion (verbio.conf).
Para acceder al resultado del reconocimiento, podemos consultar (desde el dialplan de
Asterisk)las siguientes variables de canal (una vez la aplicacion 'VerbioPromptAndRec'
haya terminado):
VASR_WORDS : Numero de palabras reconocidas (n).
VASR_INDEXn : indice (dentro de la gramatica) de la palabra-n reconocida.
VASR_RESULTn : Resultado-n del reconocimiento.
VASR_SCOREn : Score-n (confianza) del reconocimiento.
VASR_UTTERANCEn : Utterance el resultado n.
VASR_WEIGHTn : Peso del resultado n dentro de la gramatica.
VASR_RULEn : Regla a la que pertenece el resultado n.
Para compatibilidad con anteriores versiones:
VASR_INDEX = VASR_INDEX0
VASR_RESULT = VASR_RESULT0
VASR_SCORE = VASR_SCORE0
VASR_UTTERANCE = VASR_UTTERANCE0
VASR_WEIGHT = VASR_WEIGHT0
VASR_RULE = VASR_RULE0
Si la deteccion de dtmf (opcion 'd') esta habilitada, podemos consultar su estado con
las siguientes variables de canal:
VDTMF_DETECTED :TRUE (se ha detectado un tono) o FALSE (no se ha
detectado tono)
VDTMF_RESULT :si VDTMF_DETECTED = TRUE, VDTMF_RESULT contiene el
valor de la tecla pulsada -0,1,2,3,4,5,6,7,8,9,*,#...-.

362

Se puede configurar el numero maximo de dtmf a detectar y el dtmf de terminacion,


configurando (set) las siguientes variables del dialplan:
- VERBIO_DTMF_MAXLEN
- VERBIO_DTMF_TERMINATOR
Nota: si la opcion 'keep_recorded_files' esta activada en 'verbio.conf', podemos
consultar el nombre del fichero generado (una vez la aplicacion de reconocimiento ha
terminado), mediante la siguiente variable del dialplan: VASR_REC_FILE.
o VerbioLastErr(var)
Descripcion: Esta aplicacion permite consultar el ltimo mensaje de error referente a
las funciones Verbio.
Parametros: var: variable de canal donde guardaremos el mensaje de error. Las
aplicaciones Verbio deberan ser ejecutadas con la opcion 'n' (para
evitar,cuando se produzca un error por parte de las funciones de
Verbio, el cuelgue de la llamada).
Codigos de error:
EVX_NOERROR NO ERROR
EVX_INVSETUP Vox ERROR (Files may be corrupted.Check disk and
repeat Vox Setup)
EVX_NOMEM OUT OF MEMORY. (Check memory leakages).
EVX_VCBFILE THE VOCABULARY FILE NAME IS NOT VALID. (Check the
vocabulary file name and
path writing permission).
EVX_INVWORD THE VOCABULARY CONTAINS AN INVALID WORD. (Check
and correct invalid words).
EVX_NOLICFILE NO LICENSE FILE WAS FOUND. (Use Setup and CheckOut
to obtain the Vox
directory structure and
the license file).
EVX_INVLIC THE LICENSE FILE IS NOT VALID. (Use CheckOut to obtain a
valid license file).
EVX_SYSTEM SYSTEM ERROR (Check errno).
EVX_NOLIBINIT VOXLIB WAS NOT SUCCESSFULLY LOADED. (Call
vox_libinit() before using any Vox function).
EVX_NOLIC NO LICENSE
EVX_NOSETVCB NO ACTIVE VOCABULARY. (Use vox_setvcb() to set the
active vocabulary).
EVX_NORECSTR NO RECOGNITION. (Use vox_recstr() to init recognition).
EVX_NOLINE NO MORE LINES ARE AVAILABLE FOR THE SPECIFIED
CHANNEL DEVICE
EVX_BADPARM INVALID PARAMETER IN FUNCTION CALL
363

EVX_NOTIMP NOT IMPLEMENTED


EVX_NORECIND NO RECIND OR NBEST. (Call vox_recind() before calling
ATVOX_NIND()).
EVX_INVFILE INVALID FILENAME
EVX_NETWORK NETWORK ERROR
EVX_DICFILE THE DICTIONARY FILE NAME IS NOT VALID
EVX_PARSER ABNF PARSER ERROR
EVX_INVVER THE VOXSERVER VERSION DOES NOT MATCH THE CLIENT
VERSION
EVX_UNKNOWN Unknown error
o VerbioInfo()
Descripcion: Esta aplicacion imprimira informacion diversa sobre la configuracion de
Verbio (locutores instalados,configuraciones de reconocimiento
instaladas, versiones, licencias, etc...).
Esta aplicacion creara las siguientes variables de canal:
VTTS_SPEAKERS : locutores disponibles (formato:
'id1:name1:gender1:age1:lang1;
id2:name2:gender2:age2:lang2;')
VASR_CONFIGS : configuraciones de reconocimiento disponibles.
o VerbioFreeChannel()
Descripcion: Esta aplicacion liberara los recursos (licencias y memoria) del servidor
Verbio para el canal actual. Esta aplicacion debera ser ejecutada SIEMPRE,
antes de terminar una llamada que haga uso de las aplicaciones Verbio.
Esta aplicacion es equivalente a ejecutar VerbioUnloadVcb con el
parametro vcb_handle a -1.

364

Pruebas con Verbio


Prueba 1) En la prueba siguiente se utiliza Verbio para saber el nmero de incidencia
del llamante para que, por ejemplo en un horario no laboral, se compruebe este con
una base de datos con los diferentes cdigos de incidencia y se le informe.
Lo primero que se hace es carga el diccionario, en este caso es el archivo david.txt cuyo
contenido es el siguiente:
0
1
2
3
4
5
6
7
8
9
SI
NO

cero
uno
dos
tres
cuatro
cinco
seis
siete
ocho
nueve
si
no

Despues se indica que al llamante que deletree el nmero de incidencia que tiene 4
dgitos, se comprueba que se ha dicho algo que este por encima de un umbral
determinado de acierto y se consulta con el llamante lo captado.Si este indica que es
correcto se le dice Gracias y lo siguiente sera revisar en la base de datos.
Al tratarse de una versin no Premium de Verbio, al finalizar la llamada bien sea
colganda por el Dialplan o por el llamante se debe descargar el diccionario y dejar libre
el canal, para esto se ha dejado la extensin 8091.
El cdigo utilizado es el siguiente:
[verbio]
include => acceso
exten => 8000,1,Answer()
exten => 8000,n,Set(UMBRAL=90)
exten => 8000,n,VerbioLoadVcb(david.txt,connected,,,v)
exten => 8000,n,Goto(8090,1)
exten => 8090,1,VerbioPromptAndRec(Indique el numero de incidencia para consultar su
estado.Recuerde que tiene cuatro digitos.)
exten => 8090,n,NoOp(PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT0}
${VASR_RESULT1} ${VASR_RESULT2} ${VASR_RESULT3}. Score: ${VASR_SCORE} Umbral:
${UMBR$})
exten => 8090,n,GotoIf($[$[${VASR_RESULT} != ERROR] &
$[${VASR_SCORE}>${UMBRAL}]]?si:no)
exten => 8090,n(si),VerbioPromptAndRec(Su numero de incidencia es: ${VASR_RESULT0}
${VASR_RESULT1} ${VASR_RESULT2} ${VASR_RESULT3}\, no?)
exten => 8090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}. Score:
${VASR_SCORE} Umbral: ${UMBRAL}",,,v)

365

exten => 8090,n,GotoIf($[$[${VASR_RESULT} != ERROR] &


$[${VASR_SCORE}>${UMBRAL}]]?si2:no2)
exten => 8090,n(si2),VerbioPrompt(Gracias.)
exten => 8090,n,Hangup
exten => 8090,n,VerbioFreeChannel()
exten => 8090,n(no),VerbioPrompt(Repita por favor.)
exten => 8090,n,Goto(8090,1)
exten => 8090,n(no2),VerbioPrompt(Repita por favor.)
exten => 8090,n,Goto(8090,1)
exten => 8091,1,VerbioFreeChannel()

El resultado que se visualiza en el CLI de Asterisk tras llamar a la extensin 8000 es la


siguiente:
-- Executing [8000@acceso:1] Answer("SIP/2003-0a1926d0", "") in new stack
-- Executing [8000@acceso:2] Set("SIP/2003-0a1926d0", "UMBRAL=90") in new stack
-- Executing [8000@acceso:3] VerbioLoadVcb("SIP/2003-0a1926d0", "david.txt|connected|||v") in
new stack
== Parsing '/etc/asterisk/verbio.conf': Found
NOTICE[3774]: app_verbio_speech.c:4549 verbio_load_vcb: Verbose enabled in config file.
NOTICE[3774]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598275.3
NOTICE[3774]: app_verbio_speech.c:746 verbio_get_dev: dev: 3
NOTICE[3774]: app_verbio_speech.c:4597 verbio_load_vcb: -------------------------NOTICE[3774]: app_verbio_speech.c:4598 verbio_load_vcb: VerbioLoadVcb param summary:
NOTICE[3774]: app_verbio_speech.c:4599 verbio_load_vcb: Prim vox srv : 127.0.0.1
NOTICE[3774]: app_verbio_speech.c:4600 verbio_load_vcb: Bckp vox srv : 127.0.0.1
NOTICE[3774]: app_verbio_speech.c:4601 verbio_load_vcb: Gram path :
/var/lib/asterisk/verbio/gram/david.txt
NOTICE[3774]: app_verbio_speech.c:4602 verbio_load_vcb: ASR config : es_eu
NOTICE[3774]: app_verbio_speech.c:4603 verbio_load_vcb: ASR lang : es
NOTICE[3774]: app_verbio_speech.c:4607 verbio_load_vcb: Grammar type: CONNECTED
NOTICE[3774]: app_verbio_speech.c:4615 verbio_load_vcb: Voxlib device: 3
NOTICE[3774]: app_verbio_speech.c:4616 verbio_load_vcb: -------------------------== Parsing '/etc/asterisk/verbio.conf': Found
NOTICE[3774]: app_verbio_speech.c:501 verbio_md5_grammar_exists: Grammar
/var/lib/asterisk/verbio/gram/david.txt exists in cache
(/var/lib/asterisk/verbio/gram/.cache/9488d95d905801b3ece8a8a7d4cdc88a).
NOTICE[3774]: app_verbio_speech.c:4747 verbio_load_vcb: vc_handle 0
-- Executing [8000@acceso:4] Goto("SIP/2003-0a1926d0", "8090|1") in new stack
-- Goto (acceso,8090,1)
-- Executing [8090@acceso:1] VerbioPromptAndRec("SIP/2003-0a1926d0", "Indique el numero de
incidencia para consultar su estado.Recuerde que tiene cuatro digitos.") in new stack
== Parsing '/etc/asterisk/verbio.conf': Found
NOTICE[3774]: app_verbio_speech.c:2585 verbio_prompt_and_rec: Verbose enabled in config file.
NOTICE[3774]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598275.3
NOTICE[3774]: app_verbio_speech.c:746 verbio_get_dev: dev: 3
NOTICE[3774]: app_verbio_speech.c:2800 verbio_prompt_and_rec: -------------------------NOTICE[3774]: app_verbio_speech.c:2801 verbio_prompt_and_rec: VerbioPromptAndRec param
summary:
NOTICE[3774]: app_verbio_speech.c:2802 verbio_prompt_and_rec: Prim vox srv : 127.0.0.1
NOTICE[3774]: app_verbio_speech.c:2803 verbio_prompt_and_rec: Bckp vox srv : 127.0.0.1
NOTICE[3774]: app_verbio_speech.c:2804 verbio_prompt_and_rec: TTS language : es
NOTICE[3774]: app_verbio_speech.c:2805 verbio_prompt_and_rec: TTS speaker : amaya

366

NOTICE[3774]: app_verbio_speech.c:2808 verbio_prompt_and_rec: Text to synth: Indique el numero


de incidencia para consultar su estado.Recuerde que tiene cuatro digitos.
NOTICE[3774]: app_verbio_speech.c:2809 verbio_prompt_and_rec: Init delay : 300
NOTICE[3774]: app_verbio_speech.c:2810 verbio_prompt_and_rec: End delay : 20
NOTICE[3774]: app_verbio_speech.c:2813 verbio_prompt_and_rec: ASR config : es_eu
NOTICE[3774]: app_verbio_speech.c:2814 verbio_prompt_and_rec: ASR lang : es
NOTICE[3774]: app_verbio_speech.c:2815 verbio_prompt_and_rec: Init sil : 300
NOTICE[3774]: app_verbio_speech.c:2816 verbio_prompt_and_rec: Max sil : 200
NOTICE[3774]: app_verbio_speech.c:2817 verbio_prompt_and_rec: Abs timeout : 30
NOTICE[3774]: app_verbio_speech.c:2842 verbio_prompt_and_rec: Rec ASR file
:/var/lib/asterisk/verbio/audio/verbio-rec-126259827-1262598275.3.alaw
NOTICE[3774]: app_verbio_speech.c:2843 verbio_prompt_and_rec: Voxlib device: 3
NOTICE[3774]: app_verbio_speech.c:2844 verbio_prompt_and_rec: --------------------------- Executing [8090@acceso:2] NoOp("SIP/2003-0a1926d0", ""PALABRAS 4. Resultado: 1 1 1 1. Score:
95 Umbral: 90"|||v") in new stack
-- Executing [8090@acceso:3] GotoIf("SIP/2003-0a1926d0", "1?si:no") in new stack
-- Goto (acceso,8090,4)
-- Executing [8090@acceso:4] VerbioPromptAndRec("SIP/2003-0a1926d0", "Su numero de incidencia
es: 1 1 1 1, no?") in new stack
== Parsing '/etc/asterisk/verbio.conf': Found
NOTICE[3774]: app_verbio_speech.c:2585 verbio_prompt_and_rec: Verbose enabled in config file.
NOTICE[3774]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598275.3
NOTICE[3774]: app_verbio_speech.c:746 verbio_get_dev: dev: 3
NOTICE[3774]: app_verbio_speech.c:2800 verbio_prompt_and_rec: -------------------------NOTICE[3774]: app_verbio_speech.c:2801 verbio_prompt_and_rec: VerbioPromptAndRec param
summary:
NOTICE[3774]: app_verbio_speech.c:2802 verbio_prompt_and_rec: Prim vox srv : 127.0.0.1
NOTICE[3774]: app_verbio_speech.c:2803 verbio_prompt_and_rec: Bckp vox srv : 127.0.0.1
NOTICE[3774]: app_verbio_speech.c:2804 verbio_prompt_and_rec: TTS language : es
NOTICE[3774]: app_verbio_speech.c:2805 verbio_prompt_and_rec: TTS speaker : amaya
NOTICE[3774]: app_verbio_speech.c:2808 verbio_prompt_and_rec: Text to synth: Su numero de
incidencia es: 1 1 1 1, no?
NOTICE[3774]: app_verbio_speech.c:2809 verbio_prompt_and_rec: Init delay : 300
NOTICE[3774]: app_verbio_speech.c:2810 verbio_prompt_and_rec: End delay : 20
NOTICE[3774]: app_verbio_speech.c:2813 verbio_prompt_and_rec: ASR config : es_eu
NOTICE[3774]: app_verbio_speech.c:2814 verbio_prompt_and_rec: ASR lang : es
NOTICE[3774]: app_verbio_speech.c:2815 verbio_prompt_and_rec: Init sil : 300
NOTICE[3774]: app_verbio_speech.c:2816 verbio_prompt_and_rec: Max sil : 200
NOTICE[3774]: app_verbio_speech.c:2817 verbio_prompt_and_rec: Abs timeout : 30
NOTICE[3774]: app_verbio_speech.c:2842 verbio_prompt_and_rec: Rec ASR file
:/var/lib/asterisk/verbio/audio/verbio-rec-126259828-1262598275.3.alaw
NOTICE[3774]: app_verbio_speech.c:2843 verbio_prompt_and_rec: Voxlib device: 3
NOTICE[3774]: app_verbio_speech.c:2844 verbio_prompt_and_rec: --------------------------- Executing [8090@acceso:5] NoOp("SIP/2003-0a1926d0", ""PALABRAS 1. Resultado: 6. Score: 99
Umbral: 90"|||v") in new stack
-- Executing [8090@acceso:6] GotoIf("SIP/2003-0a1926d0", "1?si2:no2") in new stack
-- Goto (acceso,8090,7)
-- Executing [8090@acceso:7] VerbioPrompt("SIP/2003-0a1926d0", "Gracias.") in new stack
== Parsing '/etc/asterisk/verbio.conf': Found
NOTICE[3774]: app_verbio_speech.c:1298 verbio_prompt: Verbose enabled in config file.
NOTICE[3774]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598275.3
NOTICE[3774]: app_verbio_speech.c:746 verbio_get_dev: dev: 3
NOTICE[3774]: app_verbio_speech.c:1371 verbio_prompt: -------------------------NOTICE[3774]: app_verbio_speech.c:1372 verbio_prompt: VerbioPrompt param summary:
NOTICE[3774]: app_verbio_speech.c:1373 verbio_prompt: Prim vox srv : 127.0.0.1
NOTICE[3774]: app_verbio_speech.c:1374 verbio_prompt: Bckp vox srv : 127.0.0.1
NOTICE[3774]: app_verbio_speech.c:1375 verbio_prompt: TTS language : es

367

NOTICE[3774]: app_verbio_speech.c:1376 verbio_prompt: TTS speaker : amaya


NOTICE[3774]: app_verbio_speech.c:1379 verbio_prompt: Text to synth: Gracias.
NOTICE[3774]: app_verbio_speech.c:1380 verbio_prompt: Init delay : 300
NOTICE[3774]: app_verbio_speech.c:1381 verbio_prompt: End delay : 20
NOTICE[3774]: app_verbio_speech.c:1394 verbio_prompt: Voxlib device: 3
NOTICE[3774]: app_verbio_speech.c:1395 verbio_prompt: --------------------------- Executing [8090@acceso:8] Hangup("SIP/2003-0a1926d0", "") in new stack
== Spawn extension (acceso, 8090, 8) exited non-zero on 'SIP/2003-0a1926d0'

Prueba 2) En la prueba siguiente se utiliza Verbio para saber el Dpto con el que desea
hablar el llamante para que, por ejemplo, se le redireccione directamente sin pasar por
Administracin.
De nuevo lo primero que se realiza es cargar el diccionario, en este caso el archivo
datos.txt cuyo contenido es:
SOPORTE
ADMINISTRACION
COMERCIAL
TWISTER

soporte
administracion
comercial
twister

A continuacin se le dan las posibilidades a elegir al llamante y se comprueba que lo


dicho por este, es muy parecido a alguna palabra del diccionario dependiendo del
umbral establecido, si es as, tras cargar otro archivo con las palabras si y no se le
indica el resultado al llamante para que acepte o no si es el Dpto correcto. Despues de
esto se le redireccionaria al Dpto adecuado o se le hara repetir lo dicho.
El cdigo utilizado en el ejemplo es el siguiente:
[verbio]
include => acceso
exten => 7000,1,Answer()
exten => 7000,n,Set(UMBRAL=20)
exten => 7000,n,VerbioLoadVcb(datos.txt,isolated,,,v)
exten => 7000,n,Goto(7090,1)
exten => 7090,1,VerbioPromptAndRec(Bienvenido a Yet Informatica \, de los siguientes
departamentos indiquenos con cual desea hablar\, Soporte\, Administracio$
exten => 7090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}. Score:
${VASR_SCORE} Umbral: ${UMBRAL}",,,v)
exten => 7090,n,GotoIf($[$[${VASR_RESULT} != ERROR] &
$[${VASR_SCORE}>${UMBRAL}]]?si:no)
exten => 7090,n,VerbioFreeChannel()
exten => 7090,n(si),VerbioLoadVcb(sino.txt,isolated,,,v)
exten => 7090,n,Set(DPTO= ${VASR_RESULT})
exten => 7090,n,VerbioPromptAndRec(El departamento elegido es: ${VASR_RESULT} \, no?)
exten => 7090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}. Score:
${VASR_SCORE} Umbral: ${UMBRAL}",,,v)
exten => 7090,n,GotoIf($[$[${VASR_RESULT} != ERROR] &
$[${VASR_SCORE}>${UMBRAL}]]?si2:no2)
exten => 7090,n(si2),NoOp(" Vamos a llamar: ${DPTO}")
exten => 7090,n,GotoIf($[${DPTO} = SOPORTE ]?soporte:otro)

368

exten => 7090,n(soporte),Dial(SIP/2000,30,Ttm)


exten => 7090,n,Hangup
exten => 7090,n,VerbioFreeChannel()
exten => 7090,n(otro),GotoIf($[${DPTO} = TWISTER ]?twister:otro1)
exten => 7090,n(twister),Dial(SIP/2003,30,Ttm)
exten => 7090,n,Hangup
exten => 7090,n,VerbioFreeChannel()
exten => 7090,n(otro1),GotoIf($[${DPTO} = COMERCIAL ]?comercial:otro2)
exten => 7090,n(comercial),Dial(SIP/4000,30,Ttm)
exten => 7090,n,Hangup
exten => 7090,n,VerbioFreeChannel()
exten => 7090,n(otro2),Dial(SIP/5000,30,Ttm)
exten => 7090,n,Hangup
exten => 7090,n,VerbioFreeChannel()
exten => 7090,n(no),VerbioPrompt(Repita por favor.)
exten => 7090,n,Goto(7090,1)
exten => 7090,n(no2),VerbioPrompt(Repita por favor.)
exten => 7090,n,Goto(7090,si)

El resultado visualizado en el CLI al llamar a la extensin 7000 es:


-- Executing [7000@acceso:1] Answer("SIP/2003-0a197d18", "") in new stack
-- Executing [7000@acceso:2] Set("SIP/2003-0a197d18", "UMBRAL=20") in new stack
-- Executing [7000@acceso:3] VerbioLoadVcb("SIP/2003-0a197d18", "datos.txt|isolated|||v") in new
stack
== Parsing '/etc/asterisk/verbio.conf': Found
NOTICE[3797]: app_verbio_speech.c:4549 verbio_load_vcb: Verbose enabled in config file.
NOTICE[3797]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598382.5
NOTICE[3797]: app_verbio_speech.c:746 verbio_get_dev: dev: 5
NOTICE[3797]: app_verbio_speech.c:4597 verbio_load_vcb: -------------------------NOTICE[3797]: app_verbio_speech.c:4598 verbio_load_vcb: VerbioLoadVcb param summary:
NOTICE[3797]: app_verbio_speech.c:4599 verbio_load_vcb: Prim vox srv : 127.0.0.1
NOTICE[3797]: app_verbio_speech.c:4600 verbio_load_vcb: Bckp vox srv : 127.0.0.1
NOTICE[3797]: app_verbio_speech.c:4601 verbio_load_vcb: Gram path :
/var/lib/asterisk/verbio/gram/datos.txt
NOTICE[3797]: app_verbio_speech.c:4602 verbio_load_vcb: ASR config : es_eu
NOTICE[3797]: app_verbio_speech.c:4603 verbio_load_vcb: ASR lang : es
NOTICE[3797]: app_verbio_speech.c:4605 verbio_load_vcb: Grammar type: ISOLATED
NOTICE[3797]: app_verbio_speech.c:4615 verbio_load_vcb: Voxlib device: 5
NOTICE[3797]: app_verbio_speech.c:4616 verbio_load_vcb: -------------------------== Parsing '/etc/asterisk/verbio.conf': Found
NOTICE[3797]: app_verbio_speech.c:501 verbio_md5_grammar_exists: Grammar
/var/lib/asterisk/verbio/gram/datos.txt exists in cache
(/var/lib/asterisk/verbio/gram/.cache/893dfb11158fc1ad4aa7d5e09fc1605f).
NOTICE[3797]: app_verbio_speech.c:4747 verbio_load_vcb: vc_handle 0
-- Executing [7000@acceso:4] Goto("SIP/2003-0a197d18", "7090|1") in new stack
-- Goto (acceso,7090,1)
-- Executing [7090@acceso:1] VerbioPromptAndRec("SIP/2003-0a197d18", "Bienvenido a Yet
Informatica , de los siguientes departamentos indiquenos con cual desea hablar, Soporte,
Administracion, Twister, Comercial.") in new stack
== Parsing '/etc/asterisk/verbio.conf': Found
NOTICE[3797]: app_verbio_speech.c:2585 verbio_prompt_and_rec: Verbose enabled in config file.
NOTICE[3797]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598382.5
NOTICE[3797]: app_verbio_speech.c:746 verbio_get_dev: dev: 5
NOTICE[3797]: app_verbio_speech.c:2800 verbio_prompt_and_rec: --------------------------

369

NOTICE[3797]: app_verbio_speech.c:2801 verbio_prompt_and_rec: VerbioPromptAndRec param


summary:
NOTICE[3797]: app_verbio_speech.c:2802 verbio_prompt_and_rec: Prim vox srv : 127.0.0.1
NOTICE[3797]: app_verbio_speech.c:2803 verbio_prompt_and_rec: Bckp vox srv : 127.0.0.1
NOTICE[3797]: app_verbio_speech.c:2804 verbio_prompt_and_rec: TTS language : es
NOTICE[3797]: app_verbio_speech.c:2805 verbio_prompt_and_rec: TTS speaker : amaya
NOTICE[3797]: app_verbio_speech.c:2808 verbio_prompt_and_rec: Text to synth: Bienvenido a Yet
Informatica , de los siguientes departamentos indiquenos con cual desea hablar, Soporte,
Administracion, Twister, Comercial.
NOTICE[3797]: app_verbio_speech.c:2809 verbio_prompt_and_rec: Init delay : 300
NOTICE[3797]: app_verbio_speech.c:2810 verbio_prompt_and_rec: End delay : 20
NOTICE[3797]: app_verbio_speech.c:2813 verbio_prompt_and_rec: ASR config : es_eu
NOTICE[3797]: app_verbio_speech.c:2814 verbio_prompt_and_rec: ASR lang : es
NOTICE[3797]: app_verbio_speech.c:2815 verbio_prompt_and_rec: Init sil : 300
NOTICE[3797]: app_verbio_speech.c:2816 verbio_prompt_and_rec: Max sil : 200
NOTICE[3797]: app_verbio_speech.c:2817 verbio_prompt_and_rec: Abs timeout : 30
NOTICE[3797]: app_verbio_speech.c:2842 verbio_prompt_and_rec: Rec ASR file
:/var/lib/asterisk/verbio/audio/verbio-rec-126259839-1262598382.5.alaw
NOTICE[3797]: app_verbio_speech.c:2843 verbio_prompt_and_rec: Voxlib device: 5
NOTICE[3797]: app_verbio_speech.c:2844 verbio_prompt_and_rec: --------------------------- Executing [7090@acceso:2] NoOp("SIP/2003-0a197d18", ""PALABRAS 1. Resultado: SOPORTE.
Score: 58 Umbral: 20"|||v") in new stack
-- Executing [7090@acceso:3] GotoIf("SIP/2003-0a197d18", "1?si:no") in new stack
-- Goto (acceso,7090,5)
-- Executing [7090@acceso:5] VerbioLoadVcb("SIP/2003-0a197d18", "sino.txt|isolated|||v") in new
stack
== Parsing '/etc/asterisk/verbio.conf': Found
NOTICE[3797]: app_verbio_speech.c:4549 verbio_load_vcb: Verbose enabled in config file.
NOTICE[3797]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598382.5
NOTICE[3797]: app_verbio_speech.c:746 verbio_get_dev: dev: 5
NOTICE[3797]: app_verbio_speech.c:4597 verbio_load_vcb: -------------------------NOTICE[3797]: app_verbio_speech.c:4598 verbio_load_vcb: VerbioLoadVcb param summary:
NOTICE[3797]: app_verbio_speech.c:4599 verbio_load_vcb: Prim vox srv : 127.0.0.1
NOTICE[3797]: app_verbio_speech.c:4600 verbio_load_vcb: Bckp vox srv : 127.0.0.1
NOTICE[3797]: app_verbio_speech.c:4601 verbio_load_vcb: Gram path :
/var/lib/asterisk/verbio/gram/sino.txt
NOTICE[3797]: app_verbio_speech.c:4602 verbio_load_vcb: ASR config : es_eu
NOTICE[3797]: app_verbio_speech.c:4603 verbio_load_vcb: ASR lang : es
NOTICE[3797]: app_verbio_speech.c:4605 verbio_load_vcb: Grammar type: ISOLATED
NOTICE[3797]: app_verbio_speech.c:4615 verbio_load_vcb: Voxlib device: 5
NOTICE[3797]: app_verbio_speech.c:4616 verbio_load_vcb: -------------------------== Parsing '/etc/asterisk/verbio.conf': Found
NOTICE[3797]: app_verbio_speech.c:501 verbio_md5_grammar_exists: Grammar
/var/lib/asterisk/verbio/gram/sino.txt exists in cache
(/var/lib/asterisk/verbio/gram/.cache/6343121acb03e3e93cf7cbf7ff3b38ba).
NOTICE[3797]: app_verbio_speech.c:4747 verbio_load_vcb: vc_handle 1
-- Executing [7090@acceso:6] Set("SIP/2003-0a197d18", "DPTO= SOPORTE") in new stack
-- Executing [7090@acceso:7] VerbioPromptAndRec("SIP/2003-0a197d18", "El departamento elegido
es: SOPORTE , no?") in new stack
== Parsing '/etc/asterisk/verbio.conf': Found
NOTICE[3797]: app_verbio_speech.c:2585 verbio_prompt_and_rec: Verbose enabled in config file.
NOTICE[3797]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598382.5
NOTICE[3797]: app_verbio_speech.c:746 verbio_get_dev: dev: 5
NOTICE[3797]: app_verbio_speech.c:2800 verbio_prompt_and_rec: -------------------------NOTICE[3797]: app_verbio_speech.c:2801 verbio_prompt_and_rec: VerbioPromptAndRec param
summary:
NOTICE[3797]: app_verbio_speech.c:2802 verbio_prompt_and_rec: Prim vox srv : 127.0.0.1

370

NOTICE[3797]: app_verbio_speech.c:2803 verbio_prompt_and_rec: Bckp vox srv : 127.0.0.1


NOTICE[3797]: app_verbio_speech.c:2804 verbio_prompt_and_rec: TTS language : es
NOTICE[3797]: app_verbio_speech.c:2805 verbio_prompt_and_rec: TTS speaker : amaya
NOTICE[3797]: app_verbio_speech.c:2808 verbio_prompt_and_rec: Text to synth: El departamento
elegido es: SOPORTE , no?
NOTICE[3797]: app_verbio_speech.c:2809 verbio_prompt_and_rec: Init delay : 300
NOTICE[3797]: app_verbio_speech.c:2810 verbio_prompt_and_rec: End delay : 20
NOTICE[3797]: app_verbio_speech.c:2813 verbio_prompt_and_rec: ASR config : es_eu
NOTICE[3797]: app_verbio_speech.c:2814 verbio_prompt_and_rec: ASR lang : es
NOTICE[3797]: app_verbio_speech.c:2815 verbio_prompt_and_rec: Init sil : 300
NOTICE[3797]: app_verbio_speech.c:2816 verbio_prompt_and_rec: Max sil : 200
NOTICE[3797]: app_verbio_speech.c:2817 verbio_prompt_and_rec: Abs timeout : 30
NOTICE[3797]: app_verbio_speech.c:2842 verbio_prompt_and_rec: Rec ASR file
:/var/lib/asterisk/verbio/audio/verbio-rec-126259841-1262598382.5.alaw
NOTICE[3797]: app_verbio_speech.c:2843 verbio_prompt_and_rec: Voxlib device: 5
NOTICE[3797]: app_verbio_speech.c:2844 verbio_prompt_and_rec: --------------------------- Executing [7090@acceso:8] NoOp("SIP/2003-0a197d18", ""PALABRAS 1. Resultado: SI. Score: 93
Umbral: 20"|||v") in new stack
-- Executing [7090@acceso:9] GotoIf("SIP/2003-0a197d18", "1?si2:no2") in new stack
-- Goto (acceso,7090,10)
-- Executing [7090@acceso:10] NoOp("SIP/2003-0a197d18", "" Vamos a llamar: SOPORTE"") in new
stack
-- Executing [7090@acceso:11] GotoIf("SIP/2003-0a197d18", "1?soporte:otro") in new stack
-- Goto (acceso,7090,12)
-- Executing [7090@acceso:12] Dial("SIP/2003-0a197d18", "SIP/2000|30|Ttm") in new stack
-- Called 2000
-- Started music on hold, class 'default', on SIP/2003-0a197d18
-- SIP/2000-0a1926d0 is circuit-busy
== Everyone is busy/congested at this time (1:0/1/0)
-- Stopped music on hold on SIP/2003-0a197d18
-- Executing [7090@acceso:13] Hangup("SIP/2003-0a197d18", "") in new stack
== Spawn extension (acceso, 7090, 13) exited non-zero on 'SIP/2003-0a197d18'

371

Skype

Qu es Skype?
Es el ms conocido de los SoftPhones y quizs un responsable importante de la
popularizacin de la VozIP. Creado por los fundadores de Kazaa: Zennstrm y Friis.
Segn su pgina web www.skype.com ha sido descargado 236.259.232 veces.
Skype fue comprado por la firma de subastas por Internet EBay por 2.100 millones de
dolares.
Las comunicaciones de Voz viajan cifradas por la red y utiliza un protocolo propietario.
Ventajas

Disponible para muchas plataformas: Windows, Mac OSX, GNU Linux.

Codificacin de audio con mucha calidad y gran compresin: 3-16 kbytes/seg.

Conferencias de llamadas. Envo de Video (V2.x).

Firewall / Nat discover: En casi todas las situaciones funciona sin necesidad de
configurar PNAT.

Problemas: Protocolo cerrado

Qu estn haciendo con mis paquetes de voz?


Los creadores de la Red Kazaa estn bajo sospecha de distribuir spyware de
forma intencionada.

Qu estn haciendo con mi ancho de banda?


Utilizarlo para otros clientes de Skype.

No es posible programar nuevos clientes a medida.

Interconexin con otras redes: el salto a la red telefnica pblica solo puede
realizarse con el sistema SkypeOut, lo cual no favorece la competencia.

Integracin profesional: No existen centralitas (exceptuando Asterisk) que


soporten el protocolo de Skype, tampoco telfonos puros (USB s).

372

Alternativas a Skype

Gizmo Project (http://www.gizmoproject.com/


http://www.gizmoproject.com/):
Multiplataforma.
Interconexin con Asterisk.
Protocolo SIP.

Open Wengo (http://www.openwengo.org/


http://www.openwengo.org/):
#include gizmo.h
Posibilidad de usarlo solo como softphone.

Servidor Asterisk:
Extensiones SIP o IAX2.
Varios proveedores IP.
Conexin con la PSTN.

Skype para Asterisk (SfA)


Digium en Septiembre de 2009 sac
un modulo de Skype para Asterisk,
Asterisk
y es que este controvertido
controvertido
mdulo dio y est dando bastante
de qu hablar, tanto a favor como
en contra entre los seguidores y
usuarios de Asterisk.
Como tanto los drivers como la estructura de Asterisk son libres (cualquiera
(cualquiera puede ver
cmo es por dentro el comportamiento de los mdulos que dan soporte al hardware
para hacerlo compatible con Asterisk),
Asterisk , muchas otras empresas cuando surgi crearon
otras tarjetas para aprovechar el tirn de esta aplicacin, por lo que Digium contina
pensando nuevas formas de conseguir beneficios. Una de estas formas es
compatibilizando una aplicacin conocida y muy utilizada
utili
como es Skype,
Skype con Asterisk.
No obstante, lo que Skype (como
(como protocolo cerrado y como empresa monopolizadora
del concepto VoIP)) representa, provoca que muchas personas de la comunidad
Asterisk no vean este producto con buenos ojos. Quiz lo que menos ha gustado ha
sido que Digium empleara recursos en crear un canal para Skype en lugar de mejorar el
canal SIP. Quiz desde el punto de vista de la comunidad sea esta accin algo
reprochable, aunque desde el
e punto de vista empresarial (yy al contrario de lo que
pensaba en un principio),
), ha sido todo un xito.
373

Skype es un buen SoftPhone, utiliza un protocolo propio, pero no hay duda que su
sencillez de configuracin y la forma de saltarse los problemas de NAT lo hacen un
candidato excelente para aquellas extensiones tanto locales como externas a la vez
que aporta caractersticas de mensajera instantnea (chat, comparticin de archivos,
etc.) algo que tambin existe en otros SoftPhones compatibles con SIP, pero que al
requerir introducir determinados valores (cdecs a utilizar, servidor SIP, dominio, tipo
de NAT, etc.) lo hace una aplicacin difcil y anti-intuitiva para muchas personas.
En todo buen proyecto existen dos formas de ver el desarrollo y la evolucin de este:
-

Cmo proyecto de software libre: donde todo lo que se desarrolle debe ser
libre y gratis (algo nicamente libre no causa buena impresin).

Cmo proyecto empresarial: donde la obtencin de un beneficio econmico es


el principal objetivo.

Ambas visiones son irreconciliables: o se desarrolla algo pensando en la comunidad


(donde otras empresas sacarn tajada tanto como puedan mientras t te centras en
desarrollar el producto que luego ofrecers) o creas un producto cerrado (donde t
seas el nico que saques provecho del tiempo invertido).
Son muchas las voces que defienden un modelo de desarrollo basado en software libre
basado en la venta de servicios (soporte, documentacin, formacin, etc.) pero
muchas de estas voces son las que defienden el soporte gratuito mediante foros y
listas, aprender por cuenta propia con lo que se encuentra por Internet, y ahorrar
hasta el ltimo cntimo si otro servicio similar puede salir ms barato que un servicio
confiable. Es decir lo gratuito, o si no lo hay, lo ms econmico. Por desgracia, el
concepto de Software libre sigue siendo el de Software gratis y con esta
mentalidad, se termina dando la razn a las empresas de software comercial.
Skype para Asterisk (SFA) es el primer y nico controlador de canal nativo que conecta
Asterisk a la red de Skype. El controlador de canal soporta un nmero ilimitado de
usuarios simultneos y un nmero ilimitado de llamadas simultneas por usuario.
SFA es un producto que ofrecer una solucin a muchas empresas que utilizan Skype y
a las que no les interesa cambiar de SoftPhone porque su personal ya conoce esta
aplicacin y lo usan en su casa como Windows. Uno puede estar ms o menos de
acuerdo con que Digium se haya metido a desarrollar esta solucin en lugar de mejorar
los protocolos IAX2 y SIP, pero mejorar esto no da de comer y crear un canal para
Skype, s.
El canal Skype cuesta 66$ e incluye las licencias G.729 para poder utilizarlo.
Ventajas:
-

Llamadas salientes: llama ms, por ms tiempo y paga menos.

Llama a usuarios de Skype directamente desde una centralita Asterisk.


374

Reduce los gastos en comunicaciones a telfonos fijos y mviles de todo


el mundo gracias a las tarifas econmicas para llamadas de Skype.
Skype para Asterisk complementa tu sistema de comunicacin actual.
Aade Skype a tus tablas de enrutamiento de llamadas para optimizar
los gastos de llamadas internacionales.

Llamadas entrantes: integra tu empresa a la comunidad de Skype.


Clientes

Con botones para hacer clic y llamar, los clientes pueden comunicarse
contigo directamente desde tu sitio o correo electrnico.
Los clientes pueden llamar gratis a tu empresa desde Skype.
Funcin de volver a llamar al cliente a travs de Skype.
Permite que los clientes te llamen a travs de un nmero de Internet
local.
Tu empresa estar presente en una comunidad de ms de 440 millones
de usuarios registrados de Skype.

Empleados que trabajan a distancia y personas que lo hacen desde el hogar

Llamadas gratis de Skype a la oficina mientras viajas.


Para quienes trabajan desde el hogar, la actividad empresarial no
cambia, ya que la oficina est a un solo clic.
El estado de conexin de Skype permite trabajar de manera ms
inteligente, traspasa zonas horarias y posibilita el trabajo a distancia.

Proveedores y socios

Se visible y accesible internacionalmente para la comunidad de Skype y


para socios potenciales.
Mejora tus relaciones comerciales a larga distancia con llamadas
entrantes gratis.

No se necesita PC
Aprovecha las llamadas a tarifas formidables sin necesidad de usar un
equipo de PC.
Facil integracin
Implementa Skype para Asterisk fcilmente dentro de tu infraestructura
actual.

375

Inconvenientes
-

Las versiones de Asterisk 1.4 anteriores a 1.4.25 tienen un error que hace que
Skype no funcione correctamente. No utilice dichas versiones con SFA.
La versin de nuestro servidor es 1.4.26.2 lo que nos permite usarlo sin
problemas, no obstante las versiones ms estables de la rama 1.4 estn por
debajo de la 1.4.25.

Slo los usuarios de Skype que se crean en Skype Business Control Panel
(http://skype.com/business/) se pueden utilizar con Skype para Asterisk. La
cuenta utilizada para administrar el BCP y los miembros que se han aadido a
travs de invitaciones a los nombres de Skype o direccin de correo electrnico
no se podrn utilizar con Skype para Asterisk por el momento.

Lo que puedes hacer con Skype para Asterisk


Cuando complementas tu centralita Asterisk con Skype puedes hacer lo siguiente:

Hacer llamadas entre usuarios de Skype a telfonos fijos y mviles.


Recibir llamadas de Skype.
Habilitar llamadas mltiples y simultneas de Skype desde la misma cuenta de
Skype.
Transferir llamadas de Skype.
Usar asistencia para DTMF (multifrecuencia bitonal) para llamadas salientes y
entrantes.
Leer los campos del perfil de usuario de Skype de llamadas entrantes.
Recuperar el saldo del crdito de Skype de cuentas que iniciaron sesin en
Asterisk.
Establecer y recuperar el estado de conexin.
Establecer la configuracin de privacidad.
Usar los cdecs G.711 y G.729.

Instalacin
1. Adquirir la licencia del canal Skype.
2. Descarga de paquetes necesarios:
http://downloads.digium.com/pub/telephony/skypeforasterisk/asterisk-1.4/x8632/skypeforasterisk-1.4_1.0.6-x86_32.tar.gz
http://downloads.digium.com/pub/register/x86-32/register

3. Instalar el chan_skype en Asterisk para ello descomprimiremos el paquete


tar.gz:
tar xvzf skypeforasterisk-1.4_1.0.6-x86_32.tar.gz
cd skypeforasterisk-1.4_1.0.6-x86_3
make && make install && make samples

376

4. Dar permisos de ejecucin a la aplicacin register y ejecutarla:


chmod a+x register
./register

[root@localhost skypeasterisk]# ./register


Digium Product Registration - Version 3.0.4
Copyright (C) 2004-2007, Digium, Inc.
Use the '-l' option to see license information for software
included in this program.
Please select a category
1 - Digium Products
2 - Cepstral Products
0 - Quit
Your Choice: 1
You selected 1, Digium Products
Please select a product
1 - Asterisk Business Edition
2 - Asterisk Business Edition C Expansion
3 - Asterisk For Smart Cube
4 - Asterisk For Smart Cube Expansion
5 - G.729 Codec
6 - High Performance Echo Can
7 - Skype For Asterisk
8 - Fax for Asterisk
9 - Free Fax for Asterisk
10 - Vestec Speech Engine
0 - Quit
Your Choice: 7
You selected 7, Skype For Asterisk
Please enter your Key-ID: S4A-YE76MXLEJW7W
Product available to be registered.
Do you want to register this key now(y/n) y

5. Con esto ya tendremos instalado Skype para Asterisk en Asterisk 1.4.26.2 y


slo nos faltar cargar los dos mdulos:
- res_skypeforasterisk.so
Este mdulo contiene el motor de Skype, junto con varias librerias
y otros componentes necesarios para hablar con el motor de Skype y
administrar cuentas de usuario, las llamadas, etc.
- chan_skype.so

377

Este mdulo es el controlador del canal Asterisk que ofrece los servicios de
llamadas desde y hacia la red de Skype, utilizando laqs libreras
proporcionadas por res_skypeforasterisk.so.
Si su archivo modules.conf Asterisk contiene 'autoload=yes', estos mdulos
sern cargados automticamente la prxima vez que se reinicie Asterisk. Si no,
tendr que aadir las siguientes lneas a modules.conf:
load = res_skypeforasterisk.so
load = chan_skype.so

Cargamos los mdulos:


*CLI> module load res_skypeforasterisk.so
Loading Skype For Asterisk engine
NOTICE[4957]: res_skypeforasterisk.c:17 load_module: Skype For Asterisk module,
Copyright (C) 2008-2009 Digium, Inc.
NOTICE[4957]: res_skypeforasterisk.c:18 load_module: This module is supplied under a
commercial license granted by Digium, Inc.
NOTICE[4957]: res_skypeforasterisk.c:19 load_module: Please see the full license text
supplied by the accompanying
NOTICE[4957]: res_skypeforasterisk.c:20 load_module: "register" utility, or ask for a
copy from Digium.
NOTICE[4957]: res_skypeforasterisk.c:23 load_module: This product includes software
developed by the OpenSSL Project
NOTICE[4957]: res_skypeforasterisk.c:24 load_module: for use in the OpenSSL Toolkit.
(http://www.openssl.org/)
NOTICE[4957]: res_skypeforasterisk.c:25 load_module: Copyright (C) 1998-2008 The
OpenSSL Project
Loaded res_skypeforasterisk.so => (Skype For Asterisk Engine)
*CLI> module load chan_skype.so
== Parsing '/etc/asterisk/chan_skype.conf': Found
DEBUG[4957]: core.cpp:1285 sfa_startup: License directory set to:
/var/lib/asterisk/licenses
NOTICE[4957]: core.cpp:1122 skype_cp_handler: Found license 'S4A-YE76MXLEJW7W'
providing 1 concurrent calls
NOTICE[4957]: core.cpp:963 display_host: Skype For Asterisk Host-ID:
6c:cf:7a:1b:1a:f0:29:43:11:2d:06:8c:d9:65:76:4b:81:50:f3:ed
NOTICE[4957]: core.cpp:1299 sfa_startup: Found a total of 1 Skype For Asterisk licenses
DEBUG[4989]: core.cpp:1403 sfa_startup: starting skyhost as: skypeforasterisk -z -f
/var/spool/asterisk/skype/data
DEBUG[4989]: core.cpp:1405 sfa_startup: [Jan 11 13:37:51] DEBUG[4988]:
core.cpp:1491 sfa_startup: skyhost environment is : HOME=/var/spool/asterisk/skype
starting skypewatcher as: skypewatcher 4989
DEBUG[4987]: core.cpp:440 skyhost_watcher: got SkyHost Copyright (C) 2003-2008
Skype Technologies S.A.
DEBUG[4987]: core.cpp:440 skyhost_watcher: got Proprietary and confidential, do not
share this application.
DEBUG[4987]: core.cpp:440 skyhost_watcher: got Ready to accept connections
DEBUG[4987]: core.cpp:445 skyhost_watcher: skyhost is ready!
== Registered channel type 'Skype' (Skype For Asterisk Channel Driver)
== Manager registered action SkypeBuddies

378

== Manager registered action SkypeBuddy


== Manager registered action SkypeAccountProperty
== Manager registered action SkypeAddBuddy
== Manager registered action SkypeRemoveBuddy
== Manager registered action SkypeLicenseStatus
== Manager registered action SkypeLicenseList
== Registered custom function SKYPE_CALL_PROPERTY
== Registered custom function SKYPE_ACCOUNT_PROPERTY
== Registered custom function SKYPE_BUDDIES
== Registered custom function SKYPE_BUDDY_FETCH
Loaded chan_skype.so => (Skype For Asterisk Channel Driver)

6. Configurar la cuenta de Skype.


Skype necesita que los usuarios que vayan a hacer uso de Skype para Asterisk ,
esten dados de alta en una cuenta Skype Business.
Por lo que tendris que hacer login en https://secure.skype.com/business/
info/login con vuestra cuenta actual de Skype o bien si queris dar de alta otra
podis darla en ese mismo momento usando el cliente de Skype.
A continuacin pulsamos el botn de agregar persona:

379

Creamos una cuenta comercial:

7. Probamos la correcta instalacin del chan_skype:


Comprobamos la versin de SFA:
*CLI> skype show version
Skype For Asterisk Components:
Channel Driver: 1.4_1.0.6
Library: 1.4_1.0.6

Comprobamos la configuracin general:


*CLI> skype show settings
Skype For Asterisk Settings:
engine_directory: /tmp
data_directory: /var/spool/asterisk/skype
defaultuser:
bind_address: 0.0.0.0
bind_port: 0
rtp_address: 127.0.0.1
https_proxy:
https_proxy_user:
https_proxy_password:
socks5_proxy:
socks5_proxy_user:
socks5_proxy_password:
disable_tcpauto: no
disable_udp: no

380

debug: no

Comprobamos si hemos activado la licencia correctamente:


*CLI> skype show licenses
Skype For Asterisk Licensing Information
========================================
Total licensed channels: 1
Licenses Found:
File: S4A-YE76MXLEJW7W.lic -- Key: S4A-YE76MXLEJW7W -- Expires: 2030-01-11 - Host-ID: 6c:cf:7a:1b:1a:f0:29:43:11:2d:06:8c:d9:65:76:4b:81:50:f3:ed -Channels: 1 (OK)

8. Configuramos el fichero chan_skype.conf situado en /etc/asterisk/:


[general]
engine_directory=/usr/src/skypeengine
default_user=davidea11
debug=yes
bind_address=0.0.0.0
bind_port=0
[davidea11]
secret=pkxarc11
context=incoming
exten=7000
disallow=all
allow=ulaw
direction=both
auth_policy=accept

Comprobamos tras reiniciar Asterisk que se han configurado bien los


usuarios:
*CLI> skype show users
Skype Users
davidea11: Logged In

Para acceder a Asterisk desde cualquier cuenta Skype comunicaremos la


cuenta de Skype con la que se ha creado en Skype Business de forma que las
llamadas sern gratuitas. Para hacer las pruebas con SFA creamos una cuenta
de Skype: davidin99.
Configuramos el Dialplan de Asterisk (extensions.conf) para recibir las
llamadas en el telfono de extensin 3000 y hacer llamadas a la cuenta de
Skype creada:
[skype]
include => acceso
exten => 7000,1,Goto(acceso,3000,1)
exten => 8000,1,Dial(Skype/davidin99,30,tT)

381

Hacemos una llamada desde la extensin 5000 a la cuenta de Skype


davidin99:
El log del CLI muestra lo siguiente:
-- Executing [8000@acceso:1] Dial("SIP/5000-09936608", "Skype/davidin99|30|tT") in new
stack
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
NOTICE[29792]: core.cpp:2096 sfa_call_ring: calling create_control_socket for oid 32
DEBUG[29792]: core.cpp:265 create_control_socket: creating socket sfa-control-0x96a0f7800000020
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
-- Called davidin99
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:790 queue_event: got control event type 4 with subclass 3.
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
-- Skype/davidea11-098e0218 is ringing
DEBUG[29792]: core.cpp:1642 sfa_call_process: accepting socket connection from voice
engine
DEBUG[29792]: core.cpp:1615 process_ve_frame: received audio socket address
127.0.0.1:38065
DEBUG[29792]: core.cpp:1752 sfa_call_set_audio_socket_address: sending audio socket
address 127.0.0.1:14568
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:790 queue_event: got control event type 4 with subclass 4.
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
-- Skype/davidea11-098e0218 answered SIP/5000-09936608
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
DEBUG[29792]: chan_skype.c:3433 unlink_client_call: channel 0x98e0218
NOTICE[29792]: core.cpp:2126 sfa_call_hangup: ending call
DEBUG[29792]: chan_skype.c:3447 destroy_client_call: channel 0x98e0218
== Spawn extension (acceso, 8000, 1) exited non-zero on 'SIP/5000-09936608'
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: ACallMember.cpp:209 OnDelete: call member deleted
DEBUG[26468]: ACall.cpp:71 OnDelete: call deleted
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds

382

En la cuenta de Skype se ve asi:

Llamamos desde la cuenta de Skype davidin99 a la cuenta creada en Skype Business


davidea11 registrada en SFA:
El log del CLI de Asterisk muestra:
-- Executing [7000@incoming:1] Goto("Skype/davidea11-b7d7e3c8", "acceso|3000|1") in
new stack
-- Goto (acceso,3000,1)
-- Executing [3000@acceso:1] Macro("Skype/davidea11-b7d7e3c8", "acceso|3000") in
new stack
-- Executing [s@macro-acceso:1] Dial("Skype/davidea11-b7d7e3c8", "SIP/3000|30|Ttm")
in new stack
-- Called 3000
-- Started music on hold, class 'default', on Skype/davidea11-b7d7e3c8
-- SIP/3000-098ee660 is ringing
-- SIP/3000-098ee660 answered Skype/davidea11-b7d7e3c8
-- Stopped music on hold on Skype/davidea11-b7d7e3c8
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
DEBUG[28850]: core.cpp:1642 sfa_call_process: accepting socket connection from voice
engine
DEBUG[28850]: core.cpp:1615 process_ve_frame: received audio socket address
127.0.0.1:57238
DEBUG[28850]: core.cpp:1752 sfa_call_set_audio_socket_address: sending audio socket
address 127.0.0.1:14690
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds

383

DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1


DEBUG[26468]: chan_skype.c:790 queue_event: got control event type 4 with subclass 4.
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
== Spawn extension (macro-acceso, s, 1) exited non-zero on 'Skype/davidea11-b7d7e3c8' in
macro 'acceso'
== Spawn extension (acceso, 3000, 1) exited non-zero on 'Skype/davidea11-b7d7e3c8'
DEBUG[28850]: chan_skype.c:3433 unlink_client_call: channel 0xb7d7e3c8
NOTICE[28850]: core.cpp:2126 sfa_call_hangup: ending call
DEBUG[28850]: chan_skype.c:3447 destroy_client_call: channel 0xb7d7e3c8
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds
DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1
DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds

384

Nagios
Qu es Nagios?
Nagios es un software de monitorizacin de redes. Con Nagios podremos saber en
cada momento, que mquinas y dispositivos de la red estn encendidas, cuales estn
apagadas, cuales estn fallando, cuales funcionan correctamente, que servicios van
bien y cules van mal, en definitiva, sirve para mirar el estado casi en tiempo real de
una red, sea grande o pequea.
Originalmente se llamaba Netsaint, fue creado y es mantenido actualmente por Ethan
Galstad, junto con un grupo de desarrolladores de Software que mantienen tambin
varios plugins.
Nagios fue diseado para ser ejecutado en Linux, pero tambin se ejecuta bien en
variantes de Unix.
Nagios est licenciada bajo la GNU (General Public License Version 2 ) publicada por la
Free Software Fundation.
Qu podemos realizar con Nagios?
-

Monitoreo de servicios de red (SMTP, POP3, HTTP, NTTP, ICMP, SNMP).


Monitoreo de los recursos de un host (carga del procesador, uso de los
discos, logs del sistema) en varios sistemas operativos, incluso Microsoft
Windows con el plugin NRPE_NT.
Monitoreo remoto, a travs de tneles SSL cifrados o SSH.
Diseo simple de plugins, que permiten a los usuarios desarrollar sus
propios chequeos de servicios dependiendo de sus necesidades, usando sus
herramientas preferidas (Bash, C++, Perl, Ruby, Python, PHP, C#, etc.).
Chequeo de servicios paralizados.
Posibilidad de definir la jerarqua de la red, permitiendo distinguir entre
host cados y host inaccesibles.
Notificaciones a los contactos cuando ocurren problemas en servicios o
hosts, as como cuando son resueltos (via email, pager, SMS, o cualquier
mtodo definido por el usuario junto con su correspondiente plugin).
Posibilidad de definir manejadores de eventos que ejecuten al ocurrir un
evento de un servicio o host para resoluciones de problemas proactivas.
Rotacin automtica del archive de log.
Soporte para implementar host de monitores redundantes.
Interfaz web opcional, para observar el estado de la red actual,
notificaciones, historial de problemas, archivos de logs, etc.

385

Descarga de Nagios
http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.2.0/nagios3.2.0.tar.gz/download
http://sourceforge.net/projects/nagiosplug/files/nagiosplug/1.4.14/nagios-plugins1.4.14.tar.gz/download
http://sourceforge.net/projects/nagios/files/nrpe-2.x/nrpe-2.12/nrpe-2.12.tar.gz/download
http://sourceforge.net/projects/nagios/files/nsca-2.x/nsca-2.7.2/nsca-2.7.2.tar.gz/download
http://sourceforge.net/projects/nagios/files/ndoutils-1.x/ndoutils-1.4b9/ndoutils1.4b9.tar.gz/download

Instalacin de Nagios
Descomprimimos el tar:
tar xvf nagios.3.2.0.tar.gz

Creamos los usuarios y grupos para Nagios:


useradd nagios
groupadd nagios
groupadd nagcmd

Nos ubicamos dentro de la carpeta Nagios, y procedemos a compilarlo:


./configure --with-command-group=nagcmd
make all
make install
make-webconf
make install-init (no necesario)
make install-config (no necesario)
make install-commandmode (no necesario)

Ahora vamos a compilar los plugins para Nagios (descomprirlo dentro de la carpeta
donde se encuentra Nagios):
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

Ahora agregaremos el usuario nagios para la autenticacin va web:


htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Reiniciamos servicios e iniciamos otros:


service httpd restart
service nagios start

386

Accedemos a Nagios:
http://localhost/nagios

Configuracin de Nagios
Configurando nagios.cfg
Por defecto no hace falta tocar este fichero, tal y como viene de "serie" funciona
perfectamente. Posteriormente, debers cambiar cosas si quieres aprovechar al
mximo el poder de Nagios.
Deberemos asegurarnos de tener bien configurados las lneas referentes a los ficheros
principales de configuracin:
# LOG FILE
log_file=/usr/local/nagios/var/nagios.log
# OBJECT CONFIGURATION FILE(S)
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg
.....

Configurando cgi.cfg
Configuramos las siguientes lneas para que "nagiosadmin" tenga acceso total a
Nagios. No queremos que nadie ms tenga acceso a l.
# MAIN CONFIGURATION FILE
main_config_file=/usr/local/nagios/etc/nagios.cfg
# PHYSICAL HTML PATH
physical_html_path=/usr/local/nagios/share
# URL HTML PATH
url_html_path=/nagios
# SYSTEM/PROCESS INFORMATION ACCESS
authorized_for_system_information=nagiosadmin
# CONFIGURATION INFORMATION ACCESS
authorized_for_configuration_information=nagiosadmin
# SYSTEM/PROCESS COMMAND ACCESS
authorized_for_system_commands=nagiosadmin
# GLOBAL HOST/SERVICE VIEW ACCESS
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin

387

# GLOBAL HOST/SERVICE COMMAND ACCESS


authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
......

Configurando localhost.cfg
En el fichero hosts.cfg deberemos incluir todas las mquinas que queremos
monitorizar. Cada mquina debe tener al menos un servicio.Puede funcionar tambin
sin configurarle ningn servicio, pero no obtendramos un resultado "profesional", lo
nico que haramos sera aadir la maquina o dispositivo al MAPA de RED.
define host{
use linux-server

; Name of host template to use


; This host definition will inherit all variables that are defined
; in (or inherited by) the linux-server host template definition.

host_name localhost
alias
localhost
address
127.0.0.1
}

Cada host, debe pertenecer a un hostgroups.


define hostgroup{
hostgroup_name linux-servers ; The name of the hostgroup
alias
Linux Servers ; Long name of the group
members
localhost ; Comma separated list of hosts that belong to this group
}

Ms adelante veremos como se configuran los servicios de monitorizacin de Asterisk.


Configurando contacts.cfg
Los contactos, son las personas a las que se les notificar de las posibles incidencias de
las mquinas de la Red. En nuestro caso, como solo somos un nico administrador,
nagios y se le notificar mediante un e-mail.
define contact{
contact_name
use
alias
email
}

nagiosadmin
generic-contact
David
davidin073@gmail.com

Cada contacto, debe pertenecer a un grupo de contacto.


define contactgroup{
contactgroup_name
admins
alias
Nagios Administrators
members
nagiosadmin
}

388

Configurando commands.cfg
Este es posiblemente el fichero de configuracin ms importante, ya que en l, vamos
a definir absolutamente todos los servicios que queremos monitorizar.En nuestro caso
slo sern servicios de Asterisk, ms adelante veremos dicha configuracin.
Verificando la configuracin
Una vez configurados todos los ficheros de Nagios, hay que verificar la configuracin:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios/nagios.cfg

Si todo sale bien, deberemos obtener un total de CERO errores. Puede que tengamos
algn warning, pero funcionar .
Arrancamos el demonio
# service nagios restart

Configuracin para entrar a Nagios via Web:


ln -s /usr/share/nagios/htdocs/ /var/www/nagios/

Monitorizando Asterisk
Lo que nos interesa conseguir con la monitorizacin de Asterisk con Nagios es lo
siguiente:








Saber si Asterisk esta arrancado o no


Estado de la tarjeta
Estado del proveedor IP Gizmo 5
Estado del Chan_sebi
Estado del Chan_skype
Comprobar si hay usuarios SIP registrados
Comprobar si hay usuarios IAX registrados

La configuracin para conseguir esto ser la configuracin de cada comando, de cada


servicio y de los scripts Perl que obtendrn la informacin a travs de comandos CLI.
Como ejemplo la configuracin de la obtencin del estado del chan_skype es la
siguiente:
commands.cfg
define command{
command_name check_asterisk_skype
command_line /usr/src/SCRIPTS/skype.pl
}

389

localhost.cfg
define service{
use
local-service
host_name
localhost
service_description Chan_skype
check_command
check_asterisk_skype
}

skype.pl
#!/usr/bin/perl -w
use Getopt::Std;
use strict;
my $asterisk_bin="/usr/bin/sudo /usr/sbin/asterisk";
my $asterisk_option="-rx";
my $asterisk_skype="skype show version";
my $return;
my $cmd = qq($asterisk_bin $asterisk_option "$asterisk_skype" );
foreach (`($cmd)`) {
if (/Skype\ For\ Asterisk/) {
$return = 0;
}
}
if($return==0){
print(" Chan_skype activado. \n");
exit($return);
}
else{
print(" Chan_skype desconectado. \n ");
exit(1);
}

Tras la configuracin en la interfaz de Nagios podemos ver lo siguiente:


Despues de configurar el archivo contacts.cfg:

390

Despues de configurar el archivo contactgroups.cfg:

Despues de configurar los archivos localhost.cfg y commands.cfg:

Teniendo Asterisk en marcha y sin conectar el chan_sebi veremos esto:

Si Asterisk no est arrancado lo que veremos ser:

391

392

Actualizacin de firmware del Telfono Cisco 7941 de SCCP a SIP


Tenemos un Telfono Cisco 7941 de la centralita actual, uno de los requisitos para la
implantacin de una centralita nueva, en este caso Asterisk, es el aprovechamiento de
Hardware. Teniendo en cuenta el coste de los telfonos Cisco por la serie de
funcionalidades que traen el traspaso del protocolo Skynny Client Control Protocol
(SCCP) al SIP es lo ms adecuado para poder usarlos.

Para hacer este cambio de protocolo hay que tener en cuenta la configuracin del
telfono que se centra en un fichero XML llamado SEP<MAC-del-Telfono>.conf.xml.
De este fichero se realizar el registro con la centralita por eso es importante.
El contenido en nuestro caso es el siguiente:
<device xsi:type="axl:XIPPhone" ctiid="1566023366">
<deviceProtocol>SIP</deviceProtocol>
<sshUserId>5000</sshUserId>
<sshPassword>1234</sshPassword>
<devicePool>
<dateTimeSetting>
<dateTemplate>D/M/Y</dateTemplate>
<timeZone>W. Europe Standard/Daylight Time</timeZone>
<ntps>
<ntp>
<name>192.168.1.200</name>
<ntpMode>Unicast</ntpMode>
</ntp>
</ntps>
</dateTimeSetting>
<callManagerGroup>
<members>
<member priority="0">
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
</ports>
<processNodeName>192.168.1.200</processNodeName>
</callManager>
</member>
</members>

393

</callManagerGroup>
</devicePool>
<commonProfile>
<phonePassword>1234</phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>
<vendorConfig>
<disableSpeaker>false</disableSpeaker>
<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
<pcPort>0</pcPort>
<settingsAccess>1</settingsAccess>
<garp>1</garp>
<voiceVlanAccess>0</voiceVlanAccess>
<videoCapability>0</videoCapability>
<autoSelectLineEnable>0</autoSelectLineEnable>
<webAccess>1</webAccess>
<spanToPCPort>1</spanToPCPort>
<loggingDisplay>1</loggingDisplay>
<loadServer></loadServer>
</vendorConfig>
<userLocale>
<name>Spanish</name>
<uid>1</uid>
<langCode>es</langCode>
<version>4.1(3)</version>
<winCharSet>iso-8859-1</winCharSet>
</userLocale>
<networkLocale>Spain</networkLocale>
<networkLocaleInfo>
<name>Spain</name>
<uid>64</uid>
<version>4.1(3)</version>
</networkLocaleInfo>
<deviceSecurityMode>1</deviceSecurityMode>
<sipProfile>
<sipProxies>
<registerWithProxy>true</registerWithProxy>
</sipProxies>
<enableVad>false</enableVad>
<preferredCodec>g711ulaw</preferredCodec>
<natEnabled></natEnabled>
<phoneLabel>Usuario 5000</phoneLabel>
<stutterMsgWaiting>1</stutterMsgWaiting>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
<callStats>false</callStats>
<silentPeriodBetweenCallWaitingBursts>10
</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
<callHoldRingback>2</callHoldRingback>
<localCfwdEnable>true</localCfwdEnable>
<semiAttendedTransfer>true</semiAttendedTransfer>
<anonymousCallBlock>2</anonymousCallBlock>
<callerIdBlocking>2</callerIdBlocking>
<dndControl>1</dndControl>
<remoteCcEnable>true</remoteCcEnable>
<startMediaPort>10000</startMediaPort>

394

<stopMediaPort>20000</stopMediaPort>
<sipLines>
<line button="1">
<featureID>9</featureID>
<featureLabel>Usuario 5000</featureLabel>
<proxy>192.168.1.200</proxy>
<name>5000</name>
<displayName>Valentin</displayName>
<authName>5000</authName>
<authPassword>1234</authPassword>
<messagesNumber>50008</messagesNumber>
</line>
</sipLines>
<dialTemplate>dialplan.xml</dialTemplate>
</sipProfile>
<loadInformation>SIP41.8-4-2S</loadInformation>
<versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp>
<directoryURL></directoryURL>
<servicesURL></servicesURL>
</device>

Tambin es necesaria la configuracin de otro fichero XML llamado dialplan.xml.


En este archivo se especifica el tiempo de espera a llamar que tendrn los diferentes
patrones. El contenido de este fichero es el siguiente:
<DIALTEMPLATE>
<TEMPLATE MATCH="3..." TIMEOUT="0"/>
<TEMPLATE MATCH="9........" TIMEOUT="0"/>
<TEMPLATE MATCH="6........" TIMEOUT="0"/>
<TEMPLATE MATCH="*" TIMEOUT="4"/>
</DIALTEMPLATE>

Todos los nmeros que empiecen por 3 y tengan 4 dgitos.


Todos los nmeros que empiecen por 9 y tengan 9 dgitos.
Todos los nmeros que empiecen por 6 y tengan 9 dgitos.
El resto, espera 4 segundos a marcar, a menos que le des al botn de llamada.
Lo siguiente ser la actualizacin del firmware del telfono a un firmware SIP para eso
debemos seguir los siguientes pasos:
1) Debemos tener instalado un servidor TFTP, al que los telfonos se conectarn
para descargarse la versin ms moderna del firmware.
En la configuracin del servidor DHCP debe estar la IP del servidor TFTP:
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.3;
option subnet-mask 255.255.255.0;
range 192.168.1.201 192.168.1.203;
default-lease-time 86400;
max-lease-time 608400;
option domain-name-servers 194.179.1.100;
option tftp-server-name "192.168.1.210"; }

395

2) Obtener el firmware adecuado para la actualizacin.


La versin de firmware que utilizaremos es la jar41sip.8-4-1-23 y consta de
diversos archivos entre ellos uno llamado term41.default donde tendremos
que nombrar los 5 archivos .sbn que se instalarn, concretamente son:
-

apps41.8-4-1-23
cnu41.8-4-1-23
cvm41sip.8-4-1-23
dsp41.8-4-1-23
jar41sip.8-4-1-23

Estos archivos componen la imagen que se instalar el telfono cuando


actualice su firmware.
Ahora ya tenemos listos todos los archivos que necesitaremos para actualizar el
firmware del telefono, por lo que pasaremos a formatear el telfono.
3) Metemos los ficheros del firmware y los dos anteriormente configurados en la
carpeta del servidor TFTP, por defecto es /tftpboot/.
4) Si queremos restaurar el telfono a los valores de fabrica tenemos que
encender el telfono con la tecla # pulsada, en unos segundos el telfono
pasar a modo actualizacin, hecho que veremos por un parpadeo alterno de
los dos leds superiores del telfono (los de lnea).
El parpadeo indica que el telfono espera la secuencia de reseteo para
llevarlo a cabo. Esta secuencia es 123456789*0#.
Una vez hayamos pulsado esta combinacin debemos esperar, veremos como
el telfono se resetea, quedndose con sus valores de fbrica. Luego el solo
ira a buscar su archivo de actualizacin term41.default y se descargar la
imagen que este indica mediante TFTP.
Una vez se haya terminado este proceso, el telfono se reiniciar con el nuevo
firmware y buscara su SEP<MAC-del-telefono>.conf.xml.

Si tras la descarga y posterior instalacin del firmware en la pantalla del


telfono aparece la palabra UNPROVISIONED significa que no se ha
registrado el telfono contra la centralita Asterisk, la parte del fichero de
configuracin del telfono que no est bien configurada es la de los botones
de lnea, el featureID es muy importante:
<line button="1">
<featureID>9</featureID>
<featureLabel>Usuario 5000</featureLabel>
<proxy>192.168.1.200</proxy>
<name>5000</name>
<displayName>Valentin</displayName>
<authName>5000</authName>

396

<authPassword>1234</authPassword>
<messagesNumber>50008</messagesNumber>
</line>

Tras estos pasos vamos a comprobar que funcionan las llamadas salientes y entrantes
al telfono a travs de unas pruebas:
La configuracin de los archivos sip.conf y voicemail.conf para las extensiones del
telfono es la misma que para otros telfonos, la configuracin del archivo
extensions.conf es:
[cisco]
include => acceso
exten => 5000,1,Dial(SIP/5000)
exten => 5000,n,Hangup()

Comprobamos que se ha registrado correctamente:


localhost*CLI> sip show peers
Name/username
Host
Dyn Nat ACL Port Status
5000/5000
192.168.1.202 D
5060 Unmonitored

Llamada de un telfono IP ALL Net 7960 a Cisco 7941 reconvertido a SIP:


-- Executing [5000@acceso:1] Dial("SIP/2003-08e0ffb0", "SIP/5000") in new stack
-- Called 5000
-- SIP/5000-08e85c98 is ringing
-- SIP/5000-08e85c98 answered SIP/2003-08e0ffb0
-- Native bridging SIP/2003-08e0ffb0 and SIP/5000-08e85c98
== Spawn extension (acceso, 5000, 1) exited non-zero on 'SIP/2003-08e0ffb0'

Llamada de telfono IP Cisco 7941 reconvertido a SIP a Sipura 841:


-- Executing [4000@acceso:1] Macro("SIP/5000-08e0ffb0", "acceso|4000") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/5000-08e0ffb0", "SIP/4000|30|Ttm") in new
stack
-- Called 4000
-- Started music on hold, class 'default', on SIP/5000-08e0ffb0
-- SIP/4000-08e85c98 is ringing
-- SIP/4000-08e85c98 answered SIP/5000-08e0ffb0
-- Stopped music on hold on SIP/5000-08e0ffb0
== Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/5000-08e0ffb0' in macro
'acceso'
== Spawn extension (acceso, 4000, 1) exited non-zero on 'SIP/5000-08e0ffb0'

397

Actualizacin de firmware del Telfono Cisco 7905 de SCCP a SIP


Esta vez el telfono es un Cisco 7905, de gama ms baja que el anterior, pero igual de
importante su aprovechamiento en la nueva centralita.
Tras la configuracin detallada del proceso de cambio de
firmware del telfono anterior evitaremos la repeticin pasando
directamente, tras obtener el firmware SIP para este modelo, a
la configuracin de los ficheros que introduciremos en la carpeta
del servidor TFTP /tftp/:
-

CP7905080001SIP060412A.sbin
CP7905080001SIP060412A.zup
ld00127fae8c7c.cfg
SEP00127FAE8C7C.cnf
XMLDefault.cnf

Los dos ltimos son los ficheros de configuracin, a continuacin vemos el cdigo de
estos dos ficheros.
SEP0012FAE8C7C.cnf.xml: (Fichero por telfono)
<device xsi:type="axl:XIPPhone" ctiid="1566023366">
<deviceProtocol>SIP</deviceProtocol>
<sshUserId>3000</sshUserId>
<sshPassword>1234</sshPassword>
<devicePool>
<dateTimeSetting>
<dateTemplate>D/M/Y</dateTemplate>
<timeZone>W. Europe Standard/Daylight Time</timeZone>
<ntps>
<ntp>
<name>192.168.1.200</name>
<ntpMode>Unicast</ntpMode>
</ntp>
</ntps>
</dateTimeSetting>
<callManagerGroup>
<members>
<member priority="0">
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
</ports>
<processNodeName>192.168.1.200</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
</devicePool>

398

<commonProfile>
<phonePassword>1234</phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>
<vendorConfig>
<disableSpeaker>false</disableSpeaker>
<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
<pcPort>0</pcPort>
<settingsAccess>1</settingsAccess>
<garp>1</garp>
<voiceVlanAccess>0</voiceVlanAccess>
<videoCapability>0</videoCapability>
<autoSelectLineEnable>0</autoSelectLineEnable>
<webAccess>1</webAccess>
<spanToPCPort>1</spanToPCPort>
<loggingDisplay>1</loggingDisplay>
<loadServer></loadServer>
</vendorConfig>
<loadInformation>CP7905080001SIP060412A</loadInformation>
<versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp>
<directoryURL></directoryURL>
<servicesURL></servicesURL>
</device>

XMLDefault.cnf.xml: (Fichero para varios telfonos)


<Default>
<callManagerGroup>
<members>
<member priority="0">
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
</ports>
<processNodeName>192.168.1.200</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
<loadInformation20000 model="IP Phone 7905">
CP7905080001SIP060412A
</loadInformation20000>
</Default>

Encendemos el telfono y tras obtener la IP del servidor DHCP se descargar la nueva


versin del firmware del servidor TFTP y se actualizar.
El cambio de versin de firmware es el siguiente:
 CP7905080001SCCP061117A
 CP7905080001SIP060412A

399

Lo siguiente ser configurar la extensin que tendr el telfono desde la configuracin


SIP del mismo. Para poder actualizar los valores que haiga por defecto se deben pulsar
las teclas **#.
Comprobamos el registro de la extensin en Asterisk:
localhost*CLI> sip show peers
3000/3000 192.168.1.204 D 5060 Unmonitored

Llamamos del Cisco 7941 (5000) a este telfono (3000):


-- Executing [3000@acceso:1] Macro("SIP/5000-09f1fcf8", "acceso|3000") in new stack
-- Executing [s@macro-acceso:1] Dial("SIP/5000-09f1fcf8", "SIP/3000|30|Ttm") in new stack
-- Called 3000
-- Started music on hold, class 'default', on SIP/5000-09f1fcf8
-- SIP/3000-09f3c250 is ringing
-- SIP/3000-09f3c250 answered SIP/5000-09f1fcf8
-- Stopped music on hold on SIP/5000-09f1fcf8
== Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/5000-09f1fcf8' in macro
'acceso'
== Spawn extension (acceso, 3000, 1) exited non-zero on 'SIP/5000-09f1fcf8'

Llamamos de este telfono (3000) al Cisco 7941 (5000):


-- Executing [5000@acceso:1] Dial("SIP/3000-09f35eb0", "SIP/5000") in new stack
-- Called 5000
-- SIP/5000-09f47448 is ringing
-- SIP/5000-09f47448 answered SIP/3000-09f35eb0
-- Native bridging SIP/3000-09f35eb0 and SIP/5000-09f47448
== Spawn extension (acceso, 5000, 1) exited non-zero on 'SIP/3000-09f35eb0'

400

Descripcin breve de la centralita actual: Cisco y mejoras


realizadas en la nueva.
Esquema Conceptual de la centralita actual: Cisco

401

Mejoras de la nueva centralita Asterisk:


Agenda de clientes
La empresa requiere una agenda de contactos con posibilidad de aadir a ms de 100
clientes, en la actual centralita el Call Manager posee una agenda de clientes limitada.
La centralita Asterisk soluciona esto a travs de dos aplicaciones: FOP 2 que posee una
agenda de contactos de forma que cuando te llaman se ve la etiqueta de dicho cliente,
y la agenda creada para la clasificacin de los clientes segn mantenimiento, YetBook,
dndoles de esta forma una atencin especial en caso de ser clientes VIP.
Usuarios o extensiones remotas
Para posibilitar el teletrabajo y la conexin con la oficina de Elche son necesarias las
extensiones remotas, algo que en la central actual supondra la compra de Softphones
Cisco o Telefonos IP, mientras que en la central Asterisk con cualquier Softphone con
posibilidad de extensiones IAX el problema estara solucionado.
Gestin de horarios y festivos con calendarios
Algo de lo que no se dispone en la actualidad es la gestin y posterior redireccin de
llamadas en das festivos o en horarios no laborales por ejemplo a la oficina de Elche
en caso de ser festivo slo en el Pas Vasco o la redireccin en horario no laboral de
clientes VIP.
Conferencias
En la central actual no es posible la realizacin de conferencias mientras que con
Asterisk la configuracin del fichero meetme.conf soluciona este problema.
Sistema de Colas
Por el mal funcionamiento del sistema de colas de la central Cisco no se pudo
implantar un IVR, problema solucionado de forma sencilla en la centralita Asterisk con
la configuracin a medida de las colas en el fichero queues.conf, pudiendo adems
priorizar la posicin de entrada a las colas en funcin del contrato de mantenimiento.
Grabaciones por defecto
Hay una mayor cantidad de grabaciones castellanizadas en Asterisk que en las
centralitas Cisco lo que nos evitar la realizacin de bastantes grabaciones.
Reporting de llamadas y estadsticas de Colas
Otras funcionalidades necesarias y muy requeridas por el Dpto Contable de la empresa,
son la realizacin de un listado detallado de llamadas y la obtencin de estadsticas de
las colas como la duracin de las llamadas de todo el da o que agente atendi a un
402

mayor nmero de llamadas. Estas funcionalidades no son satisfechas por la centralita


actual y por el contrario en la central Asterisk sern solucionadas con la integracin con
las aplicaciones Asternic Call Center Stats y Asternic CDR Reports.
Implantacin en la empresa
Esquema Conceptual de la centralita para Yet Informtica S.L.

403

Tipo de Implantacin y Anlisis de Riesgos


La implantacin de la centralita en la empresa, por su reducido tamao, ser por
sustitucin, teniendo en cuenta que con las pruebas realizadas en el Demo, una
formacin adecuada al personal, con una serie de clases prcticas explicando las
nuevas funcionalidades, y habiendo hecho un estudio sobre el funcionamiento de la
centralita vieja, modificando ligeramente, si as fuera el caso, la configuracin de la
nueva para que el cambio fuese lo menos brusco posible los problemas pequeos
problemas que se pudieran llegar a dar son:
 Problemas de Funcionamiento por fallo de configuracin: Posible por falta del
trato en la configuracin de algn detalle del funcionamiento requerido.
 Problemas de aprovisionamiento del personal: Posible por la falta de fluidez en
el manejo de las nuevas aplicaciones integradas con la centralita o las nuevas
funcionalidades.
Ambos tipos de problemas son sencillos de detectar y solucionar con un simple
periodo de prueba de funcionamiento y correccin de errores.
Hardware y Software necesario para la implantacin de la centralita:

Recurso

Descripcin

Precio

Unidades

Suma

Cisco 7941

Telfono IP (SCCP)

163,85

20 **

3.277,00

Cargador Cisco

Cargador PA100

12,95

20

259,00

UPS

Suministrador de
energa elctrica.

250,00

500,00

Hardware

4.036,00
Software
Licencia FOP 2

Licencia

27,83

27,83

Licencia Call
Center Stats

Licencia

347,87

347,87

Licencia CDR
Reports

Licencia

00,00

00,00

404

Licencia Verbio

Licencia *

375,70

Concepto

Importe ()

PRESUPUESTO

1.847,28

Hw de Implantacin

4.036,00

Sw de Implantacin

375,70

PRESUPUESTO DE IMPLANTACIN

6.258,98

* - El nmero de telfonos Cisco 7941 depender de la rapidez por implantar la


centralita y de la posibilidad de pasar a SIP otros modelos de telfono Cisco de la
actual centralita.
** -No se ha especificado el precio de la licencia de Verbio ya que finalmente no se
adquir por las dimensiones de la empresa y por la cantidad de llamadas que se
reciben a diario.
Estos dos apuntes hacen que el presupuesto de implantacin sea poco fiable pero si
representativo en cuanto a la importancia del Hardware en una centralita telfonica
propietaria.

Lneas Futuras y Conclusin


Una vez realizado lo expuesto hasta ahora lo siguiente a hacer sera un estudio
exahustivo sobre el funcionamiento de la central Cisco actual, y es que por las
dimensiones de la empresa, como ya he comentado, el tipo de implantacin ser de
sustitucin de una centralita por la otra y uno de los factores fundamentales es que el
personal que utilice habitualmente dicha centralita no note un peor funcionamiento
del que haba, se trata de que las funcionalidades que si recoge la centralita actual se
lleven a cabo aparentemente igual en la nueva y slo se noten avances en aquellas
funcionalidades nuevas.
De esta forma se puede evitar parte del rechazo habitual a lo nuevo.

405

A parte de esto y antes de la implantacin se debera seguir intentando cambiar al


protocolo SIP los telfonos IP CISCO de la centralita actual para evitarnos hacer una
inversin intil.
Una vez establecidos estos dos puntos se elegira una etapa del ao de menos trabajo
para realizar la implantacin y as poder solucionar cualquier contratiempo con mayor
fluidez.
Por ltimo algo que tambin se podra llevar a cabo es un servidor de Fax segn los
requerimientos y necesidades de la empresa.
Como conclusin cabe destacar que est centralita Asterisk es una solucin ejemplar
para efectuar una mejora en la empresa por su flexibilidad y por el simple hecho de no
requerir Hardware propietario especifico y por tanto poder aprovechar este en caso de
que se necesite.Y es que en la actualidad Asterisk es considerado el futuro de la
telefona.

406

ANEXOS

ANEXO A: Security.txt
==== Security Notes with Asterisk ====
PLEASE READ THE FOLLOWING IMPORTANT SECURITY RELATED INFORMATION.
IMPROPER CONFIGURATION OF ASTERISK COULD ALLOW UNAUTHORIZED USE OF YOUR
FACILITIES, POTENTIALLY INCURRING SUBSTANTIAL CHARGES.
Asterisk security involves both network security (encryption, authentication) as well as dialplan
security (authorization - who can access services in your pbx). If you are setting up Asterisk in
production use, please make sure you understand the issues involved.
* NETWORK SECURITY*
407

If you install Asterisk and use the "make samples" command to install a demonstration
configuration, Asterisk will open a few ports for accepting VoIP calls. Check the channel
configuration files for the ports and IP addresses.If you enable the manager interface in
manager.conf, please make sure that you access manager in a safe environment or protect it
with SSH or other VPN solutions.
For all TCP/IP connections in Asterisk, you can set ACL lists that will permit or deny network
access to Asterisk services. Please check the "permit" and "deny" configuration options in
manager.conf and the VoIP channel configurations - i.e. sip.conf and iax.conf.
The IAX2 protocol supports strong RSA key authentication as well as AES encryption of voice
and signalling. The SIP channel does not support encryption in this version of Asterisk.
By default, if you have libcap available, Asterisk will try to retain the CAP_NET_ADMIN
capability when running as a non-root user. If you do not need that capability you may want to
configure Asterisk with --without-cap; however, this will prevent Asterisk from being able to
mark high ToS bits under Linux.
More information on CAP_NET_ADMIN is available at:
http://www.lids.org/lids-howto/node48.html
* DIALPLAN SECURITY*
First and foremost remember this:
USE THE EXTENSION CONTEXTS TO ISOLATE OUTGOING OR TOLL SERVICES FROM ANY
INCOMING CONNECTIONS.
You should consider that if any channel, incoming line, etc can enter an extension context that
it has the capability of accessing any extension within that context.
Therefore, you should NOT allow access to outgoing or toll services in contexts that are
accessible (especially without a password) from incoming channels, be they IAX channels, FX or
other trunks, or even untrusted stations within you network. In particular, never ever put
outgoing toll services in the "default" context. To make things easier, you can include the
"default" context within other private contexts by using:
include => default
in the appropriate section. A well designed PBX might look like this:
[longdistance]
exten => _91NXXNXXXXXX,1,Dial(Zap/g2/${EXTEN:1})
include => local
[local]
exten => _9NXXNXXX,1,Dial(Zap/g2/${EXTEN:1})
include => default
[default]
exten => 6123,Dial(Zap/1)
DON'T FORGET TO TAKE THE DEMO CONTEXT OUT OF YOUR DEFAULT CONTEXT.
There isn't really a security reason, it just will keep people from wanting to play with your
Asterisk setup remotely.
* LOG SECURITY*

408

Please note that the Asterisk log files, as well as information printed to the Asterisk CLI, may
contain sensitive information such as passwords and call history. Keep this in mind when
providing access to these resources.

ANEXO B: Aplicaciones de Asterisk

Aplicacin

Explicacin

AbsoluteTimeout(length)

Establece el tiempo mximo de una


llamada (en segundos).

AddQueueMember(queue
[,interface[,penalty]])

ADSIProg(script)
(script=telcordia-1.adsi)
AgentCallbackLogin
([AgentNum][,[options][exten]])

AgentLogin
([AgentNum][,options])

Aade a una Cola de Llamadas la extensin


desde la que se llama, o el agente o extensin
determinada por el parmetro Interface.
Adems es posible "penalizar" la extensin
con un nivel de prioridad.

Script con informacin que se pasa a la


pantalla del terminal ADSI.

Loguea como Agente del sistema. La extensin


recibe las llamadas del Agente especificado.

Loguea como Agente del sistema, en modo


exclusivo. Es decir, el telfono siempre est
activo y escuchar un tono de beep cuando se
le asigne una llamada.

AgentMonitorOutgoing
([options])

Muestra el Identificador del Agente que


realiza una llamada usar con
AgentCallbackLogin.

AGI(program[,arguments])

Ejecuta un script o programa


creado por el usuario.

AlarmReceiver()

Recepcin de Seal de Alarma desde un


dispositivo especial.

409

AMD()

Intenta detectar un contestador automtico


en el extremo remoto de una llamada.

Answer()

Descuelga inmediatamente.

AppendCDRUserField(value)

Aade el valor especificado en el campo User


del registro de la llamada en el CDR.

Authenticate
(password[,options])

BackGround
(filename1[&filename2...]
[,options[,language]])

BackgroundDetect(filename)

Pide al interlocutor que introduzca una clave


vlida para continuar.

Reproduce una meloda o mensaje de audio


mientras se espera la marcacin de las teclas.

Reproduce una meloda o un mensaje


mientras intenta detectar un digito que
corresponda con una extension.

Busy([timeout])

Establece el canal como "ocupado".

Callingpres(presentation)

Cambia la representacin del CID en una


llamada externa.

ChangeMonitor(filename_base)

Cambia el nombre del archivo de control de


un canal.

ChanIsAvail
(technology1/resource1[&
technology2/resource2...]
[,option])

ChannelRedirect
(channel,[context,]
extension, priority)

Indica si el canal especificado


est disponible.

Redirecciones de un canal a
otra extensin y prioridad.

410

ChanSpy([channelprefix
[,options]])

CheckGroup(max[category])

Permite la escucha en un canal.

Controla que no se desborda el tope de las


llamadas en el grupo activo (SetGroup).

Congestion([timeout])

Reproduce el sonido de "Congestion en la


lnea" hasta que finalice la llamada o expire el
valor de Timeout.

ContinueWhile()

Vuelve al inicio de un bucle while.

ControlPlayback(filename)

DateTime
([time][,timezone[,format]])

DBdel(family/key)

DBdeltree(family/keytree)

DBget(varname=family/key)

DBput(family/key=value)

Reproduce un archivo, y se controla con


algunas teclas su reproduccin siempre que
no coincida con una extensin.

Dice la hora actual.

Elimina un dato de la base de datos interna, la


cual se organiza en Familias de datos, y datos
con valores dentro de la familia. De esta
manera, para acceder a una variable, hay que
especificar su Familia y el Valor determinado.

Elimina una Familia de datos de la base de


datos interna. A veces es necesario indicar una
clave para realizar esta operacin.

Obtiene el valor de un campo de la base de


datos interna, especificado por la familia y el
nombre del campo, y lo almacena en la
variable especificada.

Inserta el valor especificado, dentro de un


campo de la base de datos interna,
especificado por la familia y el nombre del
campo.

411

DeadAGI(program,args)

Ejecuta un script o programa creado por el


usuario, al colgar la llamada en curso.

Dial (username /extension,


ring-timeout,flags)

Conecta los canales.

DigitTimeout(seconds)

Nmero de segundos vlidos entre una y otra


pulsacin de los dgitos.

Dictate([<filename>])

Mquina de dictado virtual

Directory(vm-context
[,dial-context[,options]])

DISA(password[,context[,callerid
[,mailbox[@vmcontext]]]])

DumpChan
([min_verbose_level])

Accede a un servicio de directorio, apoyado en


la informacin almacenada para la gestin de
un contexto de Voicemail, en este caso el
Apellido y Nombre de los usuarios. Con ello,
se consigue que un usuario pueda acceder a la
extensin "escribiendo el nombre" del usuario
de la extensin a quien llama, de manera
similar a como se dan de alta los nombres en
una agenda de un mvil. SOLO FUNCIONA con
aquellos usuarios que tengan activado el
buzn de voz.

Acceso directo al sistema permite a personas


que llaman fuera de entrar en el sistema y les
proporciona un tono de marcado interno.

Muestra informacin sobre el canal de


llamada en la consola.

DUNDiLookup
(number[,context[,options]])

Busca un nmero de telfono con DUNDi.

EAGI()

Ejecuta un script o programa creado por el


usuario, con la particularidad de que EAGI
permite controlar el flujo de audio.

412

Echo()

Permite escuchar el eco de lo que se est


hablando.

EndWhile()

Fin de un bucle while

EnumLookup(number)

Establece el valor de la variable ENUM de


acuerdo a la extension pasada.

Eval (newvar=string)

Exec (variable (arguments))

Evala una variable y se asigna a otra nueva.


Formato: Nueva Variable = Algo (que puede
ser otra variable representada por ${Variable})

Ejecuta una aplicacin de las de esta lista,


cuando es invocada, de tal manera que no
est establecida en el Dialplan de manera fija.

ExecIf (expression,application,
arguments)

Ejecuta una aplicacin de Asterisk en


condiciones especficas.

ExecIfTime (times|daysofweek
|daysofmonth|months?
application [,arguments])

Ejecuta una aplicacin basada


en la hora actual.

ExitWhile()

Sale de un bucle while, con


independencia de si su
condicin se ha cumplido.

ExtenSpy
(extension[@context][,options])

ExternalIVR (shell-command
[,arg1[,arg2[,...]]])

Festival (text[,intkeys])

Escuchar en un canal unido a


una extensin especfica.

Inicio de una aplicacin IVR externa.

Reproduce una cadena de texto


usando el software Festival.

413

Flash()

Enva el evento Flash a la lnea (es usado


dentro de un AGI normalmente para
producir una transferencia).

FollowMe (followMeID,options)

Aplicacin Find-Me/Follow-Me.

ForkCDR()

Inserta un nuevo Registro en la tabla CDR


contando a partir de este instante el
temporizador.

GetCPEID()

Obtiene de telfonos ADSI la informacin


CPE ID, para configurar al canal zaptel
adecuadamente en operaciones "on-hook".

GetGroupCount
([group][@category])

Obtiene el nmero de llamadas al grupo de


llamadas en un momento dado. El valor
obtenido actualiza la variable GROUPCOUNT.

Gosub (named_priority)

Salta a la prioridad especificada, extensin


y contexto, y permite regresar.

GosubIf (condition?labeliftrue:
labeliffalse)

Salta a la prioridad determinada si una


condicin se cumple y permite regresar.

Goto
([[context,]extension,]priority)

GotoIf (condition?label1:label2)

GotoIfTime
(times,days_of_week,
days_of_month,months?label)

Salta a una prioridad especificada,


extensin y contexto.

Salta a una prioridad especificada,


extensin y contexto, si se cumple
una condicin.

Salta a la prioridad indicada si se


cumple la condicin de tiempo.

414

Hangup()

HasNewVoicemail
(vmbox[@context][:folder]
[,varname])

IAX2Provision ([template])

Cuelga inmediatamente.

Esta aplicacin permite determinar si


el usuario del buzn tiene mensajes
almacenados. Si no existen mensajes,
el flujo de la llamada salta a la regla
siguiente; mientras que el flujo de la
llamada se desva a la regla con el
ndice n+101 si existen mensajes en
el buzn especificado.

Dispone de un dispositivo de IAX y llama,


utilizando opcionalmente la plantilla
especificada.

ImportVar
(newvar=channel,variable)

Establece una variable con el contenido


de una variable del canal de otro canal.

Log (level,message)

Enva un mensaje especificado al nivel


de registro especificado.

LookupBlacklist ([options])

Mira si el CallID de la llamada est dentro


de la lista negra de llamantes. Si est,
salta a la regla n+101.

LookupCIDName()

Mira si el CallID de la llamada est dentro


de la lista "cidname". Si est, establece la
variable CIDNAME al valor de la lista.

Macro (macroname,arg1,arg2...)

Ejecuta una macro previamente definida.

MacroExclusive
(macroname[,arg1[,arg2[,...]]])

MacroExit()

Ejecuta una macro definida previamente, pero


slo permite una nica instancia de la macro
para ejecutar en cualquier punto dado en el
tiempo.

Interrumpe la ejecucin de una macro.

415

MacroIf
(expression?macronameA[,
argA1][:macronameB[,argB1]])

MailboxExists
(mailbox[@context])

MeetMe
([confno][,[options][,pin])

MeetMeAdmin
(confno,command[,pin])
MeetMeCount
(confno[,variable])

Condicional comienzan macros diferentes.

Es una funcin que permite un salto


condicional a la regla n+101. Comprueba
si existe el Buzn de Voz. En caso de que
exista salta a la regla n+101.

Coloca la llamada en una


conferencia de MeetMe.

Administra una conferencia MeetMe.

Cuenta el nmero de participantes en una


conferencia de MeetMe.

Milliwatt()

Genera un tono constante


de 1000Hz a 0dbm (mu-law).

MixMonitor
(fileprefix.format[,options
[,command]])

Registra el audio en el canal actual, pero lo


mezcla antes de escribirla en un archivo.

Monitor ([file_format[:urlbase]
[, fname_base][,options]])

Morsecode (string)

Graba el canal actual en dos


archivos independientes.

Transmite la condicin de cadena


como el cdigo Morse.

MP3Player (location)

Ejecuta a travs del programa mpg123


un fichero o un stream de audio
(especificar URL).

MusicOnHold (class)

Reproduce msica de forma indefinida.

416

NBScat()

Reproduce una corriente NBS locales.

NoCDR()

Suprime la generacin de un
Registro de detalle de llamadas
para la llamada en el canal actual.

NoOp (text)

No ejecuta nada.

Page (technology/resource[&
technology2/resource2[&...]]
[,options])

Pginas de una prrroga.

Park (exten)

Auto Aparca al usuario en el espacio de


"parking" de llamadas, normalmente para
poder determinar cmo est ese espacio. Se
usa junto a una transferencia supervisada.
Debe existir el contexto "parkedcalls".

ParkAndAnnounce
(template,timeout,channel
[,return_context])

Aparca la llamada indicando dnde es


aparcada, y qu hacer si expira un
tiempo mximo de segundos en espera
sin ser atendida.

ParkedCall (exten)

Recupera una llamada aparcada.

PauseMonitor()

Detiene la supervisin de un canal.

PauseQueueMember
([queuename],interface)

Se detiene un dispositivo de cola de manera


que no puede recibir llamadas de la cola.

Pickup (extension[@context]
[& extension2@context2[&...]])

Responder a una llamada dirigida


a otra extensin.

Playback (filename[,options])

Reproduce un archivo de sonido a


la persona que llama.

417

PlayTones (tonelist)

Reproduce uno o ms tonos.

PrivacyManager()

Pide a la entrada del nmero de telfono del


llamante, en caso de identificador de llamadas
no se puede obtener.

Progress()

Indica el progreso de la llamada.

Queue (queuename[,options[,
URL [,announceoverride
[,timeout]]]])

Envia la llamada en curso a una cola de


llamadas, previamente dada de alta. Adems
se puede acompaar de diversas acciones.

QueueLog
(queue,uniqueID,agent,
event[, additionalInfo])

Escribe una entrada en el registro de cola.

Random
([probability]:[[context,]
extension,]priority)

Salto condicional basado en una probabilidad.

Read
(variable[,filename][,maxdigits]
[,option][,attempts][,timeout])

Lee un numero de dgitos (que finalizan


con la tecla # o al llegar a un lmite
marcado) y se asignan a una variable.

ReadFile
(variable=filename,length)

Lee un archivo.

RealTime
(family,colmatch,value[,prefix])

Obtiene informacin de configuracin


de la base de datos de configuracin
en tiempo real.

RealTimeUpdate
(family,colmatch,value,
newcol, newval)

Actualizaciones de un valor en la base de


datos de configuracin en tiempo real

Record (filename:format,
silence[,maxduration][,options])

Graba en un archivo un mensaje de voz


en el formato especificado.

418

RemoveQueueMember
(queuename[,interface])

ResetCDR ([options])

Elimina los miembros de la cola de forma


dinmica.

Pone a Cero el registro con la informacin de


la llamada en curso, que va a ser almacenado
en la tabla CDR. La opcin CDR almacena
previamente el contenido.

RetryDial
(announce,sleep,loops,
technology/resource[&
Technology2/resource2...]
[,timeout][,options][,URL])

Intentos para marcar y reintentos


si el intento falla.

Return()

Devoluciones de una subrutina.

Ringing()

Devuelve la seal de RING

SayAlpha (string)

Deletrea la cadena de texto. Esta cadena


puede tener letras, nmeros o los smbolos!
@ # $ * - + = / (espacio en blanco).

SayDigits (digits)

Deletrea los dgitos pasados, en el


lenguaje activo en ese canal.

SayNumber (digits[,gender])

Dice el Nmero pasado, en el lenguaje


activo en ese canal.

SayPhonetic (string)

Deletrea la cadena pasada.

SayUnixTime
([unixtime][,[timezone]
[,format]])

Anunciar el tiempo en un formato


personalizado.

SendDTMF (digits[,timeout_ms])

Enva una cadena de dgitos, a travs de la


seal DTMF establecida en el canal.

419

SendImage (filename)

SendText (text)

SendURL (url[,option])

Enva una imagen.

Enva un mensaje de texto al cliente. Si el


cliente no soporta la recepcin de texto, el
Dialplan continuar en la regla n+101, si
existe.

Enva una direccin URL al cliente, siempre


que lo soporte. En caso de no soportarlo, se
desva la ejecucin a la regla n+101.

Set (n=value)

Establece una variable para el valor


especificado.

SetAccount (account)

Establece el valor del campo Account en el


CDR, para control de llamada.

SetAMAFlags (flag)

Establece el valor del campo amaflags en el


CDR, para control de llamada.

SetCallerID (clid[,a])

Establece un nuevo valor para el CallerID de la


llamada.

SetCallerPres (presentation)

Juegos de identificacin de llamadas banderas


de presentacin.

SetCDRUserField (value)

Establece el valor del campo User en el


registro CDR para la llamada en curso.

SetCIDName (cname[,a])

SetCIDNum (cnum[,a])

Establece un nuevo valor para la parte del


Identificador de Nombre (no el nmero)
del CallerID de la llamada.

Establece un nuevo valor para la parte


del Nmero (no el nombre) del CallerID
de la llamada.

420

SetGlobalVar (n=value)

Establece una variable Global, que se puede


usar en otro canal de comunicacin al ser
de mbito global a todo el Dialplan.

SetGroup
(groupname[@category])

Especifica la creacin de un grupo


para control de acceso.

SetLanguage (language)

Establece el directorio por defecto de dnde


coger los archivos de voz para los mensajes.

SetMusicOnHold (class)

SetTransferCapability
(transferCapability)

SetVar (n=value)

Establece la "clase" musical por defecto,


para MusicOnHold.

Establece el valor de una variable global.

Establece el valor de una variable global,


que se puede usar durante la comunicacin
de cualquier canal.

SIPAddHeader (header: value)

Agrega un encabezado SIP para el cuadro


de dilogo SIP.

SIPDtmfMode (mode)

Establece el parmetro dtmfmode para


una llamada a travs de un canal SIP.

SMS (queue[,options])

Enva o recibe SMS (Short Message


System) mensajes.

SoftHangup
(technology/resource,options)

Cuelga el canal especificado.

StopMonitor()

Finaliza la grabacin de la llamada en curso.

StopPlayTones()

Finaliza la reproduccin de la lista de tonos


especificada en Playtones.

421

System (command)

Transfer ([technology/]
destination [,options])

TryExec
(application(arguments))

Ejecuta un comando de shell.

Transfiere la llamada en curso a otra


extensin, siempre que est dentro de su
mismo Contexto. En caso de ser fallida, salta a
la regla n+101.

Intenta ejecutar una aplicacin Dialplan.

TrySystem (command)

Ejecuta una aplicacin en Linux. Si existe un


error en la ejecucin sigue en la regla n+101.

UnpauseMonitor()

Reanudar la grabacin de un canal.

UserEvent (eventname[,body])

Enva al subsistema "Manager" un evento que


podr ser usado por el usuario. Como
parmetros se pasa al Manager, un nombre
de evento y opcionalmente un campo con ms
opciones.

Verbose ([level,]message)

Nivel de detalle de la presentacin de


mensajes en consola.

VMAuthenticate
([mailbox][@context])

Autentica la persona que llama con la


contrasea de correo de voz del buzn
especificado.

VoiceMail
([s|u|b]mailbox[@context]
[&mailbox[@context]][...])

Permite que la persona que llama para dejar


un mensaje de correo de voz en el buzn
especificado.

VoiceMailMain
([[s|p]mailbox][@context])

Permite que la persona que llama para


comprobar los mensajes de correo de voz.

Wait (seconds)

Espera un tiempo expresado en segundos


antes de continuar.

422

WaitExten ([seconds])

Espera los segundos expresados, que se


marque una nueva extensin antes de
continuar.
Espera los segundos especificados
a recibir la seal de Ring.

WaitForRing (timeout)

WaitForSilence (wait[,repeat])

WaitMusicOnHold (delay)

Espera a que el silencio de una duracin


determinada.

Durante el tiempo que se especifique se


retiene la llamada con Msica, la que est
establecida en la clase "default".

While (expr)

Inicia un bucle while.

Zapateller (options)

Genera un tono que bloquea a los televendedores que llamen. Opciones: answer
(responde despus del tono), nocallerid
(genera el tono si no hay CID).

ANEXO C: Funciones de Asterisk

Nombre

AGENT

Sintaxis

Descripcin

AGENT(<agentId>[:item])
(item =status, password, name,
channel, mohclass, exten)

Obtiene informacin
sobre un agente.

ARRAY

ARRAY(var1[|var2[...][|varN]])

BASE64_
DECODE

BASE64_DECODE(<base64_string>)

Permite establecer mltiples


variables a la vez.

Decodifica una
cadena base64.

423

BASE64_
ENCODE

BASE64_ENCODE(<string>)

BLACKLIST

BLACKLIST()

CALLERID

CALLERID(<item>) (item=all, num, name)

Obtiene o establece los datos


de identificacin de llamada.

CDR

CDR(<name>[|options])

Obtiene o establece una


variable de CDR.

CHANNEL

CHANNEL(item)(item= audioreadformat,
audionativeformat, videonativeformat,
audiowriteformat, callgroup, channeltype,
language, musicclass, )

Codifica una
cadena en base64.

Comprueba en la base de
datos de Asterisk si el Callerid
est en la lista negra.

Obtiene o establece
informacin sobre el canal.

CHECKSIP
DOMAIN

CHECKSIPDOMAIN(<domain|IP>)

Comprueba si un dominio
es un dominio local.

CUT

CUT(<varname>,< delimiter> ,<range-s>)

Divide una variable segn


un delimitador de nombre.

DB

DB(<family>/<key>)

Lee o escribe en la base de


datos de Asterisk.

DB_DELETE

DB_EXISTS

DUNDI
LOOKUP

DB_DELETE(<family>/<key>)

DB_EXISTS(<family>/<key>)

DUNDILOOKUP(number[|context[|option)

Devuelve un valor de la base


de datos y lo elimina.

Comprueba si la clave existe


en la base de datos de
Asterisk.

Realiza una bsqueda DUNDi


de un nmero de telfono.

424

Permite la consulta de un
carcter general o especfico
de los registros NAPTR o de los
tipos de NAPTR para ENUM o
de los punteros DNS
ENUMlike.

ENUM
LOOKUP

ENUMLOOKUP(number[|Method-type[|option)

ENV

ENV(<envname>)

Obtiene o establece la variable


de entorno especificada.

EVAL

EVAL(<variable>)

Evala las variables


almacenadas.

EXISTS

EXISTS(<data>)

Prueba de existencia: Retorna


1 si existe, 0 en caso contrario.

FIELDQTY

FIELDQTY(<varname>|<delim>)

Cuenta los campos, con un


delimitador arbitrario.

FILTER

FILTER(<allowed-chars>|<string>)

Filtra la cadena de caracteres


para incluir slo los caracteres
permitidos.

GLOBAL

GLOBAL(<varname>)

Obtiene o establece la variable


global especificada.

GROUP

GROUP([category])

Obtiene o establece el
grupo de canales.

GROUP_
COUNT

GROUP_COUNT([groupname][@category])

Cuenta el nmero de canales


en el grupo especificado.

GROUP_LIST

GROUP_LIST()

GROUP_
MATCH_
COUNT

GROUP_MATCH_COUNT
(groupmatch [@category])

Obtiene una lista de los


grupos creados en un canal.

Cuenta el nmero de canales


en los grupos que coinciden
con el patrn especificado.

425

IAXPEER

IF

IFTIME

ISNULL

KEYPAD HASH

IAXPEER(<peername|CURRENTCHANNEL>)
(peername=ip,status,mailbox,context,
expire,dynamic,callerid_name,
callerid_num, codecs)

IF(<expr>?[<true>][:<false>])

Obtiene informacin del


usuario IAX.

Condicional: Devuelve los


datos siguientes a ? si es
cierto sino los datos
siguientes a :.

IFTIME(<timespec>?[<true>][:<false>])
(timespec=times,day_of_week,
day_of_month,months)

Temporal condicional:
Devuelve los datos siguientes
a ? si es cierto sino los
datos siguientes a :.

ISNULL(<data>)

NULL test: Retorna 1 si NULL


0 en caso contrario.

KEYPADHASH(<string>)

Pasa la clave de string a


nmero.

LEN

LEN(<string>)

Devuelve la longitud del


argumento dado.

MATH

MATH(<number1><op>
<number 2> [,<type>])

Realiza Funciones
matemticas.

MD5

MD5(<data>)

Calcula el MD5 del dato.

MUSICCLASS

MUSICCLASS()

Lee o define la clase


MusicOnHold.

QUEUE_
MEMBER_
COUNT

QUEUE_MEMBER_COUNT(<queuename>)

Cuenta el nmero de
miembros de una cola.

QUEUE_
MEMBER_LIST

QUEUE_MEMBER_LIST(<queuename>)

Devuelve una lista con los


miembros de una cola.

426

QUEUE_
WAITING_
COUNT

QUEUE_WAITING_COUNT(<queuename>)

Cuenta el nmero de llamadas


en espera de una cola.

RAND

RAND([min][|max])

Elije un nmero al azar


en un rango.

REALTIME

REALTIME(family|fieldmatch[value])

En tiempo real lee / escribe


funciones.

REGEX

REGEX (<regular expression> <data>)

Expresiones regulares.

SET

SET(<varname>=[<value>])

Asigna un valor a una


variable de canal.

SHA1

SHA1(<data>)

Calcula un algoritmo SHA1.

SIP_HEADER

SIP_HEADER(<name>[,<number>])

Obtiene el encabezado
SIP especificado.

SIPCHANINFO

SIPCHANINFO(item)(item=peername,
peerip, useragent, peername)

Obtiene el parmetro del


canal SIP especificado.

SIPPEER(<peername>[|item])(tem=ip, mailbox,
context, expire, dynamic, callerid_name,
callerid_number, status, language, useragent, )

Obtiene informacin del


usuario SIP.

SIPPEER

SORT

SORT(key1:val1[...][,keyN:valN])

STAT

STAT(<flag>,<filename>)

STRFTIME

STRFTIME([<epoch>][|[timezone][|for)

Ordena una lista de


clave/valor en una lista de
claves, basada en los valores.
Hace un chequeo del archivo
especificado.

Devuelve la fecha / hora


actual en el formato
especificado.

427

STRPTIME

STRPTIME(<datetime>|<timezone>|<for)

Devuelve la fecha como se


describe en el formato.

TIMEOUT

TIMEOUT(timeouttype)

Obtiene o establece los


tiempos de espera en el canal.

URIDECODE

URIDECODE(<data>)

Decodifica un string de
acuerdo a RFC 2396.

URIENCODE

URIENCODE(<data>)

Codifica un string de acuerdo


a RFC 2396.

VMCOUNT

VMCOUNT(vmbox[@context][|folder])

Aade el mensaje de voz


en el buzn especificada.

ANEXO D: Ficheros de Configuracin de Asterisk

modules.conf

enum.conf

oss.conf

amd.conf

extconfig.conf

phone.conf

telcordia-1.adsi

extensions.conf

privacy.conf

adsi.conf

extensions.ael

queues.conf

adtranvofr.conf

features.conf

res_mysql.conf

agents.conf

festival.conf

res_odbc.conf

alarmreceiver.conf

followme.conf

res_snmp.conf

alsa.conf

func_odbc.conf

rpt.conf

asterisk.conf

gtalk.conf

rtp.conf

chan_dahdi.conf

http.conf

say.conf

cdr.conf

iax.conf

sip.conf

cdr_manager.conf

iaxprov.conf

sip_notify.conf

cdr_mysql.conf

indications.conf

skinny.conf

cdr_odbc.conf

jabber.conf

sla.conf

428

cdr_pgsql.conf

logger.conf

smdi.conf

cdr_tds.conf

manager.conf

udptl.conf

codecs.conf

meetme.conf

users.conf

dahdi_channels.conf

mgcp.conf

voicemail.conf

dnsmgr.conf

musiconhold.conf

vpb.conf

dundi.conf

osp.conf

modules.conf
Este archivo controla los mdulos que se cargan y los que no al iniciar Asterisk a travs
de load=> o noload =>.Este archivo es un componente clave para construir una
instalacin segura de Asterisk.
El archivo modules.conf empieza con el contexto [modules].
La opcin autoload hace que Asterisk al inicio cargue todos los mdulos contenidos en
el fichero modules que est situado en /usr/lib/asterisk/.Lo recomendable es cargar
solo los mdulos que se necesiten rellenando este archivo con sentencias load=> y
evitar que se carguen los no necesarios con sentencias noload=>.
Un ejemplo es:
[modules]
autoload=no ; set this to yes and Asterisk will load any
; modules it finds in /usr/lib/asterisk/modules
load => res_adsi.so
load => pbx_config.so ; Requires: N/A
load => chan_iax2.so ; Requires: res_crypto.so, res_features.so
load => chan_sip.so ; Requires: res_features.so
load => codec_alaw.so ; Requires: N/A
load => codec_gsm.so ; Requires: N/A
load => codec_ulaw.so ; Requires: N/A
load => format_gsm.so ; Requires: N/A
load => app_dial.so ; Requires: res_features.so, res_musiconhold.so

Puesto que Asterisk se basa en Linux los mdulos acaban en .so.


adsi.conf
El ADSI (Analog Display Services Interface) fue diseado para permitir a las compaas
de telefona ofrecer mejores servicios a travs de circuitos analgicos de telefona.
En Asterisk, puedes usar este fichero para enviar comandos ADSI a telfonos
compatibles con esta tecnologa.
Hay que tener en cuenta que el telfono debe estar conectado a un canal Zap/Dahdi.

429

Los mensajes ADSI no se envan a travs de una conexin VoIP a un telfono


analgico remoto.
El modulo res_adsi.so es necesario para la aplicacin Voicemail() sin embargo este
fichero no hace falta usarlo.
El archivo por defecto que tenemos al instalar Asterisk es:
;
; Sample ADSI Configuration file
;
[intro]
alignment = center
greeting => Welcome to the
greeting => Asterisk
greeting => Open Source PBX

Para obtener una informacin debemos mirar el script telcordia-1.adsi.


telcordia-1.adsi
;
; Asterisk default ADSI script
;
;
; Begin with the preamble requirements
;
DESCRIPTION "Telcordia Demo"
; Name of vendor
VERSION 0x02
; Version of stuff
;SECURITY "_AST"
; Security code
SECURITY 0x0000
; Security code
FDN 0x0000000f
; Descriptor number
;
; Predefined strings
;
DISPLAY "talkingto" IS "Talking To" "$Call1p" WRAP
DISPLAY "titles" IS "20th Century IQ Svc"
DISPLAY "newcall" IS "New Call From" "$Call1p" WRAP
DISPLAY "ringing" IS "Ringing"
;
; Begin state definitions
;
STATE "callup"
; Call is currently up
STATE "inactive" ; No active call
;
; Begin soft key definitions
;
KEY "CB_OH" IS "Block" OR "Call Block"
OFFHOOK
VOICEMODE
WAITDIALTONE
SENDDTMF "*60"
SUBSCRIPT "offHook"
ENDKEY

430

KEY "CB" IS "Block" OR "Call Block"


SENDDTMF "*60"
ENDKEY
;
; Begin main subroutine
;
SUB "main" IS
IFEVENT NEARANSWER THEN
CLEAR
SHOWDISPLAY "talkingto" AT 1
GOTO "stableCall"
ENDIF
IFEVENT OFFHOOK THEN
CLEAR
SHOWDISPLAY "titles" AT 1
SHOWKEYS "CB"
GOTO "offHook"
ENDIF
IFEVENT IDLE THEN
CLEAR
SHOWDISPLAY "titles" AT 1
SHOWKEYS "CB_OH"
ENDIF
IFEVENT CALLERID THEN
CLEAR
SHOWDISPLAY "newcall" AT 1
ENDIF
ENDSUB
SUB "offHook" IS
IFEVENT FARRING THEN
CLEAR
SHOWDISPLAY "ringing" AT 1
ENDIF
IFEVENT FARANSWER THEN
CLEAR
SHOWDISPLAY "talkingto" AT 1
GOTO "stableCall"
ENDIF
ENDSUB
SUB "stableCall" IS
ENDSUB

adtranvofr.conf
Antes de la VoIP, la VoFR gozo de una breve fama por ser un medio de llevar voz
empaquetada. El apoyo que lo presto el equipo Adtran, es parte de la historia de
Asterisk.
A pesar de que esta caracterstica esta es desuso, el archivo ejemplo que nos
proporciona Asterisk es:
; ; Voice over Frame Relay (Adtran style)

431

;
; Configuration file
[interfaces]
;
; Default language
;
;language=en
;
; Lines for which we are the user termination. They accept incoming
; and outgoing calls. We use the default context on the first 8 lines
; used by internal phones.
;
context=default
;user => voice00
;user => voice01
;user => voice02
;user => voice03
;user => voice04
;user => voice05
;user => voice06
;user => voice07
; Calls on 16 and 17 come from the outside world, so they get
; a little bit special treatment
context=remote
;user => voice16
;user => voice17
;
; Next we have lines which we only accept calls on, and typically
; do not send outgoing calls on (i.e. these are where we are the
; network termination)
;
;network => voice08
;network => voice09
;network => voice10
;network => voice11
;network => voice12

agents.conf
Para configurar los agentes que atendern las llamadas entrantes a las colas
configuradas tenemos este archivo.
El fichero tiene la siguiente estructura:

[general] ; empieza la parte general.


persistentagents=yes ; define si el callbacklogin tiene que ser almacenado en la base de
;datos interna de Asterisk. De esta forma cuando volvemos a arrancar asterisk estos datos sern
;recargados.
multiplelogin=yes ; define si es permitido a una misma extensin conectarse como agente
;mltiple.
[agents] ; desde aqu comienza la configuracin de los agentes.
maxlogintries=3 ; numero mximo de intentos que tiene un agente para conectarse.

432

autologoff=15 ; si un agente no contesta una llamada dentro de 15 segundos ser


;automticamente desconectado.
autologoffunavail=yes ; si la extensin desde la cual el agente se conecta se vuelve no
;disponible, automticamente el agente ser desconectado.
endcall=yes ; un agente puede terminar una llamada hundiendo la tecla *.
musiconhold => default ; la clase de msica en espera que escuchar el agente cuando est
;conectado.
;Definimos un grupo para los agentes que vamos a configurar:
group=1
;La ultima parte es dedicada a la configuracin de los agentes siguiendo la sintaxis:
;agent => IDagente,contraseaagente,nombre
;Ponemos dos ejemplos:
agent => 2000,1234,Fulano
agent => 2001,2345,Sutano
;Para que un agente se pueda loguer tenemos que escribir estas lneas en el plan de llamadas
;(extensions.conf):
exten => _200[01],1,Agentlogin(${EXTEN})
exten => _200[01],n,Hangup

alarmreceiver.conf
El archivo ALARMRECEIVER.CONF es utilizado por la aplicacin AlarmReceiver(), que
permite a Asterisk aceptar las alarmas con el protocolo SIA (Ademco Contact ID
protocol). Cuando se recibe una llamada de un panel de alarma, es redirigida a un
contexto que llama a la aplicacin AlarmReceiver() que a su vez lee el archivo de
configuracin ALARMRECEIVER.CONF y realiza las acciones configuradas segn las
necesidades.
El fichero de ejemplo es el siguiente:
[general]
;Especifica el formato de fecha y hora
timestampformat = %a %b %d, %Y @ %H:%M:%S %Z
; Especifica el comando que se ejecutar cuando la persona que llama cuelga
;eventcmd = yourprogram -yourargs
;Especifica el directorio de impresin para los archivos de eventos.
eventspooldir = /tmp
;Almacena los eventos hasta que la persona se conecta ,entonces los guarda en un archivo.
logindividualevents = no
;El tiempo de espera para recibir el primer dgito DTMF.
fdtimeout = 2000
;El tiempo de espera para la recepcin de dgitos DTMF posterior al primero
sdtimeout = 200

alsa.conf
La alsa.conf archivo de configuracin de Asterisk permite la configuracin de los
canales de ALSA (Advanced Linux Sound Architecture) dentro de Asterisk.
433

Los canales de ALSA permiten las llamadas a / desde dispositivos ALSA, usando
dispositivos de entrada / salida. Esto permite que unos auriculares y un micrfono
conectado a una tarjeta de sonido, por ejemplo, sean utilizados como un SoftPhone.
El fichero de ejemplo es el siguiente:
[general]
autoanswer=yes ;Contestar automticamente a llamadas a canales ALSA
context=local ;contexto en el que estn las extensiones que utilizan ALSA
extension=s ;Extensin a marcar
;language=en
;input_device=hw:0,0 ;Indica el nombre del dispositivo ALSA a utilizar para la captura
;de sonido, es decir, para hablar
;output_device=hw:0,0 ;Indica el nombre del dispositivo ALSA a usar para reproducir
;sonido, es decir, para escuchar.

Un archivo similar a este pero para el servicio OSS es el oss.conf, slo uno de los dos
canales pueden ser cargados al mismo tiempo, por lo que si queremos utilizar ALSA
hay que modificar el archivo modules.conf:
noload => chan_oss.so
load => chan_alsa.so

amd.conf
Este es el fichero de configuracin de la aplicacin AMD(Answering Machine
Detection) que detecta la existencia de un contestador automtico.
El fichero ejemplo es el siguiente:
[general]
initial_silence = 2500; mximo tiempo en silencio antes del saludo(greeting).Si se pasa la
;variable AMDSTATUS=MACHINE.
greeting = 1500 ;longitud mxima de un saludo. Si se pasa la variable AMDSTATUS=MACHINE.
after_greeting_silence = 800; silencio despus de detectar un saludo. Si se pasa la variable
;AMDSTATUS=HUMANOS.
total_analysis_time = 5000 ; tiempo mximo permitido para el algoritmo para decidir si es
;HUMAN o MACHINE
min_word_length = 100 ;la duracin mnima de la voz a considerarse como una palabra.
between_words_silence = 50 ; duracin mnima de silencio despus de una palabra.
maximum_number_of_words = 3 ; el nmero mximo de palabras en el saludo. Si se pasa la
;variable AMDSTATUS=MACHINE.

asterisk.conf
El archivo asterisk.conf define las ubicaciones de los ficheros de configuracin, el
fichero de cola(spool), y un lugar para escribir los ficheros de log. Se recomienda que
se entienda configuracin predeterminada y las consecuencias de cambiarla.
El asterisk.conf se genera automticamente cuando se ejecuta make samples en la
instalacin de Asterisk basndose en la informacin que recopila sobre su sistema.
El fichero consta de dos/tres contextos:
434

El contexto de directorios [directories]:


[directories]
astetcdir => /etc/asterisk ;Todos los archivos (*. conf) sern almacenados en el
;directorio anterior (/ etc / asterisk /).
astmoddir => /usr/lib/asterisk/modules ;Fichero donde se encuentran los mdulos de
;Asterisk.
astvarlibdir => /var/lib/asterisk ;Fichero de libreras ,en su interior se pueden encontrar
;los sonidos de Asterisk (*. GSM).
astdatadir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin ;Fichero donde estn los scripts agi.
astspooldir => /var/spool/asterisk ;Fichero donde se guardan los voicemail y las
;grabaciones de llamadas entre otras cosas.
astrundir => /var/run ;Fichero donde Asterisk almacena su archivo PID.
astlogdir => /var/log/asterisk ;Fichero que indica donde estn los archivos de log que
;se generan.

El contexto [files]: Indica la configuracin y permisos del archivo asterisk.ctl que


se utliza para conectar el CLI remoto.
;[files]
;astctlpermissions = 0660
;astctlowner = root
;astctlgroup = apache
;astctl = asterisk.ctl

El contexto de opciones que le permite definir las opciones de inicio [options]:


[options]
languageprefix = yes ; Use the new sound prefix path syntax
;verbose = 3
;debug = 3
;alwaysfork = yes ; same as -F at startup
;nofork = yes ; same as -f at startup
;quiet = yes ; same as -q at startup
;timestamp = yes ; same as -T at startup
;execincludes = yes ; support #exec in config files
;console = yes ; Run as console (same as -c at startup)
;highpriority = yes ; Run realtime priority (same as -p at startup)
;initcrypto = yes ; Initialize crypto keys (same as -i at startup)
;nocolor = yes ; Disable console colors
;dontwarn = yes ; Disable some warnings
;dumpcore = yes ; Dump core on crash (same as -g at startup)
;internal_timing = yes
;systemname = my_system_name ; prefix uniqueid with a system name for global
;uniqueness issues
;maxcalls = 10 ; Maximum amount of calls allowed
;maxload = 0.9 ;Asterisk stops accepting new calls if the load average exceed this
;limit
;cache_record_files = yes ;Cache recorded sound files to another directory during
;recording
;record_cache_dir = /tmp ; Specify cache directory (used in cnjunction with
;cache_record_files)
;transmit_silence_during_record = yes ; Transmit SLINEAR silence while a channel is
;being recorded

435

;transmit_silence = yes ; Transmit SLINEAR silence while a channel is being recorded


;or DTMF is being generated
;transcode_via_sln = yes ; Build transcode paths via SLINEAR, instead of directly
;runuser = asterisk ; The user to run as
;rungroup = asterisk ; The group to run as
;dahdichanname = yes ; Channels created by chan_dahdi will be called 'DAHDI',
;otherwise 'Zap'

chan_dahdi.conf
Asterisk interpreta los canales definidos en dahdi-channels.conf a travs de este
fichero de configuracin.
Como mnimo su contenido debe ser:
[channels]
#include dahdi-channels.conf

cdr.conf
El archivo cdr.conf se utiliza para habilitar el registro de llamadas en una base de datos.
El almacenamiento de los registros de llamadas es til para todo tipo de propsitos,
incluyendo la facturacin, la prevencin del fraude, las evaluaciones de calidad de
servicio. Este fichero contiene algunos parmetros generales que no estn
especificados para cualquier base de datos, sino que indican cmo se deben manejar
Asterisk en el paso de informacin a la base de datos. Todas estas opciones estn en el
contexto [general]:
batch : Acepta s o no. Permite escribir datos en un buffer en lugar de escribir a la base
de datos al final de cada llamada, para reducir la carga en el sistema.
enable : Acepta s o no. Especifica si utilizar o no el registro CDR. El valor por defecto
es s.
safeshutdown :Acepta s o no. Si safeshutdown = s evitar queAsterisk se cierre por
completo hasta que el buffer se vace y toda la informacin se escriba en la base de
datos. Si este parmetro es No y se apaga Asterisk la informacin que an resida en
los buffers se perder.
scheduleronly :Acepta s o no. Si est generando un gran volumen de CDR en un
sistema que estn guardndose en una base de datos remota, scheduleronly =s puede
beneficiarnos.
Dado que el scheduler no inicia una nueva tarea hasta que no finaliza la anterior y que
el CDR escribe lentamente esto puede ser negativo para otros procesos que requieren
dicho scheduler.
size :Acepta un entero .Define el nmero de CDRs a acumularse en el bfer antes de
escribir en la base de datos. El valor por defecto es 100.
time :Accepts an integer (in seconds) as its argument. Sets the number of seconds
before Asterisk flushes the buffer and writes the CDRs to the database, regardless of
the number of records in the buffer (as defined by size ). Acepta un nmero entero (en
segundos). Establece el nmero de segundos antes de que Asterisk vace el buffer y
436

escriba los CDR en la base de datos. El valor por defecto es 300 segundos (5 minutos).
[general]
;batch=no
;enable=yes
;safeshutdown=yes
;scheduleronly=no
;size=100
;time=300

cdr_manager.conf
El archivo cdr_manager.conf slo contiene un contexto [general] y una nica opcin,
activada, que se puede utilizar para especificar si la API de Asterisk Manager genera
Eventos CDR.
[general]
enabled = s

Los eventos CDR contienen los campos siguientes:


Event: Cdr
AccountCode:
Source:
Destination:
DestinationContext:
CallerID:
Channel:
DestinationChannel:
LastApplication:
LastData:
StartTime:
AnswerTime:
EndTime:
Duration:
BillableSeconds:
Disposition:
AMAFlags:
UniqueID:
UserField:

cdr_mysql.conf
Asterisk puede almacenar los datos de CDR en una base de datos MySQL configurando
aqu los datos de dicha base de datos.De esta manera:
[global]
hostname=127.0.0.1
dbname=nombredatabase
table=cdr
password=passdemysql
user=mysqluser
port=3306
sock=/tmp/mysql/mysql.sock

437

cdr_odbc.conf
Asterisk puede almacenar los datos de CDR en una base de datos local o remota a
travs de la interfaz ODBC. El archivo cdr_odbc.conf contiene la informacin que
necesita Asterisk para conectarse a la base de datos.
El mdulo de cdr_odbc.so intentar cargar el archivo cdr_odbc.conf, y si esta la
informacin para conectarse a la base de datos, los datos del CDR se registrarn all.
El archivo que se genera al hacer make samples en la instalacin de Asterisk es:
;[global]
;dsn=MySQL-test
;username=username
;password=password
;loguniqueid=yes
;dispositionstring=yes
;table=cdr
;usegmtime=no

cdr_pgsql.conf
Asterisk puede almacenar los datos de CDR en una base de datos PostgreSQL a travs
del mdulo cdr_pgsql.so. Cuando el mdulo se carga la informacin necesaria se
puede leer en el archivo cdr_pgsql.conf, y Asterisk se conectar a la base de datos
PostgreSQL.
El archivo que se genera al hacer make samples en la instalacin de Asterisk es:
[global]
;hostname=localhost
;port=5432
;dbname=asterisk
;password=password
;user=postgres
;table=cdr ;SQL table where CDRs will be inserted

cdr_tds.conf
Asterisk puede tambin almacenar los datos de los CDR en una base de datos FreeTDS
(incluidos los de MS SQL) usando el mdulo de cdr_tds.so. El archivo cdr_tds.conf se
lee tras cargar el mdulo y tras establecerse la conexin, los datos de CDR se escribirn
en la base de datos.
;[global]
;hostname=fs.malico.loc
;port=1433
;dbname=MalicoHN
;user=mangUsr
;password=
;charset=BIG5
;table=cdr

438

codecs.conf
La mayora de los cdecs no tienen parmetros configurables.
Sin embargo algunos cdecs son capaces de comportarse de maneras diferentes. Esto
significa principalmente que pueden ser optimizados para un objetivo particular.
El archivo codecs.conf es bastante nuevo en Asterisk, y permite solamente la
configuracin de los parmetros de Speex . La configuracin se explica por s misma,
mientras usted est familiarizado con el protocolo Speex.
Este fichero tambin le permite configurar el PLC (Packet Loss Ocultacin).
Es necesario definir un contexto [PLC] en la seccin e indicar genericplc => true.
Un ejemplo de este archivo es:
[speex]
; CBR encoding quality [0..10] used only when vbr = false
quality => 3
; codec complexity [0..10] tradeoff between cpu/quality
complexity => 2
; perceptual enhancement [true / false] improves clarity of decoded speech
enhancement => true
; voice activity detection [true / false] reduces bitrate when no voice detected, used
;only for CBR (implicit in VBR/ABR)
vad => true
; variable bit rate [true / false] uses bit rate proportionate to voice complexity
vbr => true
; available bit rate [bps, 0 = off] encoding quality modulated to match this target bit
;rate not recommended with dtx or pp_vad - may cause bandwidth spikes
abr => 0
; VBR encoding quality [0-10] floating-point values allowed
vbr_quality => 4
; discontinuous transmission [true / false] stops transmitting completely when silence
; is detected pp_vad is far more effective but more CPU intensive
dtx => false
; preprocessor configuration these options only affect Speex v1.1.8 or newer enable
;preprocessor [true / false] allows dsp functionality below but incurs CPU overhead
preprocess => false
; preproc voice activity detection [true / false] more advanced equivalent of DTX,
;based on voice frequencies
pp_vad => false
; preproc automatic gain control [true / false]
pp_agc => false
pp_agc_level => 8000
; preproc denoiser [true / false]
pp_denoise => false
; preproc dereverb [true / false]
pp_dereverb => false
pp_dereverb_decay => 0.4
pp_dereverb_level => 0.3
[plc]
; for all codecs which do not support native PLC this determines whether to perform
;generic PLC there is a minor performance penalty for this
genericplc => true

439

dahdi_channels.conf
Este archivo se genera durante la configuracin de DAHDI y contiene los datos de las
tarjetas de las que disponemos, bien sean de RDSI/Primarios como de telefona con
varios puertos FXS y FXO. Podremos configurar el canal de cada una de estas.
dnsmgr.conf
Este archivo se utiliza para configurar Asterisk si se deben realizar bsquedas de DNS
de forma regular, y para saber con qu frecuencia se deben realizar las operaciones de
bsqueda.
[general]
;enable=yes ; enable creation of managed DNS lookups default is 'no'
;refreshinterval=1200 ; refresh managed DNS lookups every <n> seconds default is
; 300 (5 minutes)

dundi.conf
El protocolo de DUNDi se utiliza para buscar de forma dinmica direcciones de
telfonos VoIP y conectarse a ellas. A diferencia de ENUM, DUNDi no tiene autoridad
central.
El [general] de dundi.conf contiene los parmetros relacionados con el funcionamiento
global del cliente y el servidor de DUNDi:
[general]
department=IT
organization= toronto.example.com
locality=Toronto
stateprov=ON
country=CA
email=support@toronto.example.com
phone=+19055551212
; Specify bind address and port number.Default is 4520 El valor predeterminado
;es 4520
;bindaddr=0.0.0.0
port=4520
entityid=FF:FF:FF:FF:FF:FF
ttl=32
autokill=yes
;secretpath=dundi

enum.conf
El sistema ENUM (Electronic Numbering) se usa junto con el DNS para asignar E.164 a
direcciones de correo electrnico, sitios web, direcciones de VoIP, etc.
Un nmero ENUM se crea en DNS invirtiendo el nmero de telfono, la separacin de
cada dos dgitos con un punto, y anexar e164.arpa (la zona principal DNS).
Si desea Asterisk para realizar bsquedas ENUM, es necesario configurar el dominio (s)
en el que se van a realizar las bsquedas dentro del archivo enum.conf.
440

El fichero de ejemplo de enum.conf es:


[general]
search => e164.arpa

extconfig.conf
Asterisk puede escribir los datos de configuracin y cargar los datos de configuracin
en una base de datos utilizando el motor de configuracin externa (tambin conocido
como de tiempo real).
Esto nos permite asignar entradas especiales en tiempo de ejecucin que permiten la
creacin dinmica y la carga de objetos, entidades y peers.
Estos mappings se asignan y se configuran en el archivo extconfig.conf, siendo
utilizados tanto por res_odbc como en tiempo real.
extensions.conf
El archivo de configuracin extensions.conf es seguramente el fichero ms
importante para la puesta en marcha de nuestra centralita. En l se define todo lo
relacionado con el plan de llamadas. Cualquier nmero marcado desde una extensin
ser procesado dentro de este archivo.
Est dividido en tres bloques:

El contexto general donde se configuran algunos parmetros generales


El contexto globals donde se definen las variables globales que se van a utilizar
en la centralita
El resto donde queda toda la configuracin de las llamadas

Aqu vamos a ver los dos primeros bloques:


[general]
static=yes ; static = yes y writeprotect =no,hace que para guardar los cambios hechos
;desde la consola de Asterisk tendremos que escribir el comando dialplan reload.
writeprotect=no ; En caso contrario se actualizar automticamente pero
;perderemos todos los comentarios presentes en el archivo .
autofallthrough=yes ; si es yes cuando alguna llamada, por algn motivo se sale del
;plan se terminar .
priorityjumping=yes ; Algunas aplicaciones y/o funciones tienen la capacidad, bajo
;algunas circunstancias de "saltar" desde la prioridad donde se encuentran a otra
;prioridad . Si est en yes har ese salto sino no.
[globals]
DAVID = SIP/2100

En Globals configuramos las variables que queremos usar en el Dialplan, por ejemplo si
llamamos a menudo un nmero y queremos configurarlo con una sigla o un nombre es
en esta parte del archivo donde lo podemos hacer.

441

extensions.ael
La equivalencia del extensions.conf en AEL2.
features.conf
El archivo features.conf es donde vamos a configurar el parqueo de las llamadas y
asignar una funcin a una determinada combinacin de teclas. Es aqu, por ejemplo,
donde definimos cuales son las teclas que tenemos que hundir para transferir una
llamada, grabarla, iniciar una aplicacin, y muchas ms.
[general]
parkext => 700 ; La extensin donde transferir la llamada a parquear
parkpos => 701-710 ; el numero de extensiones reservadas para parquear las llamadas .
context => parkedcalls ; el contexto usado para parquear las llamadas (luego hay que
; definirlo en extension.conf).
parkinghints = yes ; si est en yes podemos monitorear las extensiones para ver el
; parking.
parkingtime => 45 ; Numero de segundos despus de los cuales la llamada parqueada es
; transferida a la extensin definida por el prximo parmetro.
comebacktoorigin = yes ; si est en yes la llamada parqueda, despus del parkingtime,
; vuelve a la extensin que la parque, si est en no la llamada
; ser transferida al contexto parkedcallcallstimeout a la
; extensin 's' y la prioridad '1' que tendremos que crear en
; extensions.conf.
courtesytone = beep ; El sonido que ser enviado a la llamada parqueada cuando alguien
; la llama o cuando empieza y termina la grabacin de la llamada .
parkedplay = caller ; A quien enviar el beep cuando se llama la extensin parqueada.
; Puede ser: parked(canal parqueado), caller(llamante) o both(ambos) .
parkedcalltransfers = caller ; Habilita o deshabilita la secuencia de tonos para transferir
; la llamada cuando es una llamada parqueada. Puede ser:
; habilitar para: callee(llamado), caller (llamante)o both
; (ambos). Si se quiere deshabilitar hay que poner no.
parkedcallreparking = caller ; Habilita o deshabilita la secuencia de tonos para parquear
; una llamada cuando era ya una llamada parqueada. Puede
; ser: habilitar para: callee(llamado), caller (llamante)o
; both(ambos). Si se quieres deshabilitar hay que poner no.
parkedmusicclass=default ; La clase de msica en espera que escuchar la extensin que
; ha sido parqueada.
transferdigittimeout => 5 ; Numero de segundos de espera entre cada dgito cuando se
; esta transfiriendo una llamada.
xfersound = beep ; El sonido que indicar que la transferencia de la llamada "asistida" se
; complet.
xferfailsound = beeperr ; El sonido que indicar que la transferencia de la llamada fracas
pickupexten = *8 ; Secuencia a marcar para poder recibir una llamada de un usuario de tu
; mismo grupo.
featuredigittimeout = 2000 ;numero de milisegundos entre cada dgito cuando se activan
; le funcionalidades que veremos ms adelante.
atxfernoanswertimeout = 15 ; Tiempo mximo para contestar una llamada transferida .
atxferdropcall = no ; Si quien transfiere una llamada con el mtodo "asistido" (indicando a
; quien trasfiere) cuelga antes que la llamada sea transferida
; completamente, Asterisk devuelve la llamada a quien la estaba
; transfiriendo. Si est en yes la llamada no se devuelve y se
; considera terminada.
atxferloopdelay = 10 ; Numero de segundos de espera antes de devolver la llamada (si

442

; atxferdropcall = no)
atxfercallbackretries = 2 ; Las veces que se intentar devolver la llamada.
;Si en sip.conf tenemos el parmetro careinvite igual a yes es probable que las funcionalidades
; que veremos en el contexto siguiente no resulten.
[featuremap]
blindxfer => # ; la tecla que hay que marcar para empezar la transferencia de una llamada .Tras
; marcar esta secuencia marcamos la extensin a transferir.
disconnect => * ; la tecla que hay que marcar para terminar la llamada .
automon => *1 ; La secuencia de teclas que hay que hundir para grabar la llamada (en dos
; archivo, uno para cada interlocutor) .
atxfer => *2 ; La secuencia de teclas para una transferencia de llamada "asistida". Tras marcar
; esta secuencia marcamos la extensin a transferir. La diferencia con blindxfer es
; que nos permite hablar con el interlocutor al que le transferiremos la llamada .
parkcall => *7 ; La secuencia de teclas para parquear la llamada. Podemos usar esta secuencia
;o transferir directamente la llamada a la extensin 700.
automixmon => *3 ; La secuencia de teclas que hay que marcar para grabar la llamada en un
; nico archivo mezclando las voces de los dos interlocutores.
; En el siguiente contexto del archivo podemos aadir funcionalidades particulares que luego
; podremos usar a lo largo de una llamada.
[applicationmap]
; la sintaxis para estas funcionalidades es:
;<FeatureName> => <DTMF_sequence>,<ActivateOn>[/<ActivatedBy>], <Application>
;[,<AppArguments>[,MOH_Class]]
; FeatureName -> El nombre de la funcionalidad;
; DTMF_sequence -> la secuencia de teclas para activar la funcionalidad.
; ActivateOn -> Aqu se define para quien activar la funcionalidad. Los valores son self y peer.
; Con self la funcionalidad se activa para quien la requiere, con peer para el otro canal.
; ActivatedBy -> Este parmetro define quien tiene acceso a la funcionalidad. Las opciones son:
; caller (llamante), callee (llamado) o both (ambos). ;Predefinido es both.
;Application -> La aplicacin que se va a ejecutar.
;AppArguments -> Las opciones que queremos usar con la aplicacin.
; MOH_Class -> la clase de msica en espera que escuchar el canal libre mientras se ejecuta la
; funcionalidad.

festival.conf
La aplicacin Festival permite a Asterisk pasar de texto a voz .Tras la instalacin de la
aplicacin la configuracin del fichero festival.conf es sencilla, estas son la lneas que
hay que modificar/activar:
[general]
host=localhost
port=1314
festivalcommand=(tts_textasterisk "%s" 'file)(quit)\N

followme.conf
El archivo followme.conf se utiliza para configurar La aplicacin FollowMe ().Este
archivo nos permite hacer una cosa muy sencilla: definir una serie de nmeros
(extensiones) donde desviar la llamada si a la extensin predefinida nadie contesta o si
ha sido activada esta opcin. Claramente si el desvo es hacia otras extensiones
internas no tendr ningn costo, si lo hacemos hacia nmeros fijos y/o mviles para

443

hacer la llamada tendremos que utilizar proveedores VoIP o la lnea de telefona


tradicional (PSTN).
[general]
featuredigittimeout=>5000 ; numero de milisegundos que tiene el llamado para aceptar o
; rechazar la llamada .
takecall=>1 ; para aceptar la llamada, el llamado, despus de descolgar, tendr que hundir la
; tecla 1 del telfono.
declinecall=>2 ; para rechazarla la tecla 2 .
call-from-prompt=>followme/call-from ; esta es la voz predefinida que escuchar el llamado
; anuncindole quien lo est llamando
norecording-prompt=>followme/no-recording ; la voz predefinida si el llamante no ha
; registrado el propio nombre o si la opcin
; para registrarlo no ha sido activada .
;options-prompt=>followme/options ; esta voz anunciar al llamado que tendr que pulsar 1
; para aceptar la llamada y dos para rechazarla.
pls-hold-prompt=>followme/pls-hold-while-try ; El llamante escuchar esta voz que le dir
;que espere mientras se intentar localizar el llamado .
status-prompt=>followme/status ; Esta voz anunciar al llamante que la persona llamada no
;se encuentra en ese momento en su oficina/casa/etc.
sorry-prompt=>followme/sorry ; si al final de todos los desvos nadie contestar la llamada,
; esta voz anunciar al llamante que no se ha podido localizar
; la persona buscada.
;Ahora empieza la configuracin especfica de cada extensin. En este ejemplo definiremos a
; que nmeros llamaremos si la extensin 1000 no contesta.
[1000] ; numero de la extensin que queremos configurar.
musicclass=>default ; tipo de msica en espera que escuchar el llamante mientras se
; intentar localizar el destinatario de la llamada.
context=>default ; el contexto que usar la aplicacin followme para localizar el llamado. Si
; hemos incluido (como veremos ms abajo) nmeros fijos y moviles este
; contexto tiene que tener acceso a las llamadas externas.
number=>1100,15 ; Aqu empieza la lista de nmeros que se intentar llamar para localizar el
; destinatario de la llamada. En este ejemplo si el destinatario no contesta a
; la extensin 1000 llamaremos como segunda opcin la extensin 1100 en
; 15 segundos.
number=> 945000000,15;si a la extensin 1100 nadie contesta intentaremos llamar el nmero
; fijo que aparece en esta lnea en otros 15 segundos.
takecall=>1 ; ahora sigue los mismo parmetros que hemos visto en la parte general. Por si
; queremos personalizarlos para esta extension.
declinecall=>2
call-from-prompt=>followme/call-from
followme-norecording-prompt=>followme/no-recording
followme-options-prompt=>followme/options
followme-pls-hold-prompt=>followme/pls-hold-while-try
followme-status-prompt=>followme/status
followme-sorry-prompt=>followme/sorry

func_odbc.conf
La funcin func_odbc proporciona un mecanismo sencillo para conectarse a bases de
datos ODBC mediante el Dialplan. Las consultas SQL se definen en el presente archivo
de configuracin, y una funcin Dialplan se crea automticamente.
El fichero de configuracin que genera Asterisk al hacer make samples en su
instalacin es:
444

; ODBC_SQL - Allow an SQL statement to be built entirely in the dialplan


[SQL]
dsn=mysql1
read=${ARG1}
; ODBC_ANTIGF - A blacklist.
[ANTIGF]
dsn=mysql1
read=SELECT COUNT(*) FROM exgirlfriends WHERE callerid='${SQL_ESC(${ARG1})}'
; ODBC_PRESENCE - Retrieve and update presence
[PRESENCE]
dsn=mysql1
read=SELECT location FROM presence WHERE id='${SQL_ESC(${ARG1})}'
write=UPDATE presence SET location='${SQL_ESC(${VAL1})}' WHERE
id='${SQL_ESC(${ARG1})} ;prefix=OFFICE ; Changes this function from
ODBC_PRESENCE to OFFICE_PRESENCE
;escapecommas=no ; Normally, commas within a field are escaped such that each
;field may be separated into individual variables with ARRAY.
;This option turns that behavior off [default=yes].

gtalk.conf
Este archivo es utilizado para especificar los parmetros para la conexin con Google
Talk. El fichero de configuracin que genera Asterisk al hacer make samples en su
instalacin es:
;[general]
;context=default
;allowguest=yes
;[guest]
;disallow=all
;allow=ulaw
;context=guest
;[ogorman]
;username=ogorman@gmail.com
;disallow=all
;allow=ulaw
;context=default
;connection=asterisk

http.conf
Como ya se explico en el apartado AMI y AJAM Asterisk posee un demonio HTTP muy
sencillo, que es utilizado por el Asterisk GUI y AJAM.
El fichero de configuracin que genera Asterisk al hacer make samples en su
instalacin es:
[general]
;enabled=yes
;enablestatic=yes
bindaddr=127.0.0.1
bindport=8088
;prefix=asterisk ; Prefix allows you to specify a prefix for all requests to the server.
;The default is "asterisk" so that all requests must begin with /asterisk.

445

;[post_mappings]
;uploads = /var/lib/asterisk/uploads/

iax.conf
Similar a sip.conf, el archivo iax.conf es donde se configuran las opciones relacionadas
con el protocolo IAX.
[general]
bindport=4569 ; el puerto UDP usado por este protocolo. Este parmetro va configurado antes
; del bindaddr.
bindaddr=192.168.1.200 ; la IP que Asterisk usar para "escuchar" los pedidos de conexiones.
;0.0.0.0 para todas las IP del computador.
delayreject=yes ; Mejora la seguridad contra "brute force password attacks" retrasando el
; envo de los rechazos de autenticacin.
srvlookup=yes ; permite una gestin optimizada de los DNS .
accountcode=lss0101 ;genera una cuenta general con la cual grabar las llamadas.
language=en ; lenguaje predefinido de la voces (ingles).
disallow=all ; desactivamos todos los codecs (audio y video).
allow=ulaw ; definimos unos cuantos codecs de audio predefinido's para todas las extensiones.
allow=alaw
allow=gsm
;Ahora empezamos con la configuracin de las extensiones iax2.
[guest] ; dejamos esta parte si queremos configurar un usuario husped (sin contrasea)
type=user ; puede solo recibir llamadas .
context=default ; el contexto que usar en extensions.conf .
callerid="Guest IAX User" ; el identificativo del usuario husped.
;Ahora configuramos una extensin de prueba
[david]
type=friend ; tipo friend es peer y user a la vez .
host=dynamic ; si el cliente no se conecta siempre desde un IP
;determinado hay que indicar dynamic .
secret=password ;contrasea .
context=default ; contexto asociado a este usuario en extensions.conf
mailbox= 1234@default ; casilla del correo de voz del usuario.
qualify=yes; para averiguar peridicamente con un ping si el usuario est conectado al
;servidor.
callerid = "marko" ; identificativo de llamada del usuario.

iaxprov.conf
Este archivo es utilizado por Asterisk para la actualizacin del firmware del dispositivo
IAXy.
indications.conf
El archivo de indications.conf se usa para indicarle a Asterisk cmo generar los
distintos tonos caractersticos de diferentes partes del mundo, ya que un tono de
llamada en Inglaterra es diferente de un tono de marcado en Canad. Este archivo
consta de una lista de sonidos de un sistema de telfono que pueden ser necesitados
(tono de llamada, seales de ocupado, y as sucesivamente), seguida por las
446

frecuencias utilizadas para generar esos sonidos.


Por defecto Asterisk utiliza los tonos comunes de Estados Unidos.
Como ejemplo aqu tenemos los tonos de Espaa y los de Estados Unidos:
[general]
country=es
; default location
[es]
description = Spain
ringcadence = 1500,3000
dial = 425
busy = 425/200,0/200
ring = 425/1500,0/3000
congestion = 425/200,0/200,425/200,0/200,425/200,0/600
callwaiting = 425/175,0/175,425/175,0/3500
dialrecall = !425/200,!0/200,!425/200,!0/200,!425/200,!0/200,425
record = 1400/500,0/15000
info = 950/330,0/1000
dialout = 500
[us]
description = United States / North America
ringcadence = 2000,4000
dial = 350+440
busy = 480+620/500,0/500
ring = 440+480/2000,0/4000
congestion = 480+620/250,0/25
callwaiting = 440/300,0/10000
dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440
record = 1400/500,0/15000
info = !950/330,!1400/330,!1800/330,0
stutter = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!
350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440

jabber.conf
El archivo jabber.conf especifica la informacin necesaria para permitir que Asterisk
interactue con un servidor XMPP (Jabber).
El fichero que Asterisk genera durante su instalacin al hacer make samples es:
[general]
;debug=yes
;;Turn on debugging by default.
;autoprune=yes ;;Auto remove users from buddy list.
;autoregister=yes ;;Auto register users from buddy list.
;[asterisk]
;type=client
;;Client or Component connection
;serverhost=astjab.org
;;Route to server for example, talk.google.com
;username=asterisk@astjab.org/asterisk ;;Username with optional roster.
;secret=blah
;;Password
;port=5222
;;Port to use defaults to 5222
;usetls=yes
;;Use tls or not
;usesasl=yes
;;Use sasl or not
;buddy=mogorman@astjab.org
;;Manual addition of buddy to list.
;statusmessage="I am available"
;;Have custom status message for
;;Asterisk.
;timeout=100
;;Timeout on the message stack.

447

logger.conf
En el archivo logger.conf es donde vamos a configurar todos los registros
(/var/log/asterisk/) de las actividades de Asterisk.
Tiene dos secciones, [general] y [logfile].
[general]
; si queremos que cada archivo de registro termine con el nombre de nuestro dominio tenemos
; que activar el parmetro que siguiente.
appendhostname = yes
; con queue_log decidimos si queremos tener un registro de las colas de espera (predefinido es
;yes).
queue_log = yes
; El nombre del archivo donde guardamos los registros de las colas en
;espera (predefinido queue_log)
queue_log_name = queue_log ; Los archivos de registro se pueden volver de un tamao
;bastante grande volviendo poco cmoda su consulta. Para evitar esto podemos usar el
; programa logrotate. En esta parte del archivo decidimos como queremos "rotar" los archivos.
; de este modo el archivo ms viejo tendr el numero secuencial ms alto.
rotatestrategy = rotate
; De manera predefinida Asterisk registra en un archivo los eventos genricos .
event_log = yes
[logfiles] ;El [logfiles] define los tipos de informacin que desea registrar. Hay filas mltiples
; para la varios bits de informacin que se registran y se fuera necesario para las
; entradas de registro por separado en archivos diferentes. El formato general para las
; lneas en el [logfiles] es : filename=> nivels, donde filename es el nombre del archivo
; donde se guarda la informacin registrada y los niveles son los tipos de informacin
;que se desea guardar.
; Podemos registrar en cada archivo y consola los siguientes eventos: debug ,notice ,warning
; error,verbose ,dtmf
console => notice,warning,error,debug,dtmf
messages => notice,warning,debug
full => error

manager.conf
La interfaz de Asterisk Manager es una API que los programas externos pueden utilizar
para comunicarse y controlar Asterisk igual que si lo hara desde la consola de Asterisk.
El Manager le da a los programas la capacidad de ejecutar comandos y solicitar
informacin desde el servidor de Asterisk. Sin embargo, no es muy seguro y por esto
slo debe utilizarse en una red de rea local de confianza y negar el permiso de
construcciones permitiendo restringir el acceso a determinadas extensiones o
subredes.
Un ejemplo del manager.conf es:
[general]
enabled = yes
port = 5038
bindaddr = 127.0.0.1

448

[admin]
secret = amp111
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.0
read = system,call,command,agent,user,originate
write = system,call,command,agent,user,originate

meetme.conf
MeetMe() es una de las aplicaciones ms notables de Asterisk. Le permite crear
salas de conferencias de audio. Este concepto bastante simple ha demostrado ser
extremadamente costoso de implementar en todas las PBX de otros, pero lo que
parece ser un gran negocio para ellos es fcil en Asterisk.
Ya sea mediante el uso de un servidor dedicado, o mediante el uso de un servicio,
Asterisk ofrece esta funcionalidad como una aplicacin estndar.
El meetme.conf sirve para crear estticamente conferencias:
[general]
audiobuffers=32 ; Numero de paquetes audio de 20ms que sern guardados en un buffer de
; memoria cuando pertenecen a canales que no son DADHI. Esto permite sincronizar el audio de
; los distintos participantes y evitar retrasos. Puede ser un valor entre 2 y 32 .
schedule=yes ; con este parmetro le decimos a Asterisk que las conferencias pueden ser
; programadas (solamente en realtime).
logmembercount=yes ; este parmetro sirve para actualizar el realtime cada vez que un
; usuario entra/sale de una conferencia.
fuzzystart=300 ; Tenemos una conferencia programada a las 8 de la maana. Este parmetro
; sirve para definir si un usuario puede o no entrar a la conferencia si esta no ha empezado. 300
; es el numero de segundos. Ejemplo. Si el usuario entra a la 7:55 ser aceptado porque puede
; entrar hasta 5 minutos (300 segundos) antes del comienzo de la conferencia. Si entra a las
; 7:50 ser rechazado.
earlyalert=3600 ; Este valor (siempre en segundos) define si al usuario que intenta entrar en
; una conferencia programada le ser anunciado o no que la conferencia todava no ha
; empezado. Si entra cuando falta menos de una hora recibir este aviso. Si entra ms de
;una hora antes se le anunciar que la conferencia no existe.
endalert=120 ; cuando faltarn 120 segundos para terminar la conferencia programada, se le
; anunciar a todos los participantes.
[rooms] ; desde esta etiqueta empieza la configuracin de las conferencias .
; la sintaxis es conf => confno[,pin][,adminpin]
;un cuarto de conferencias cuya extensin es 3500 y a todos los usuarios es permitido entrar.
conf => 3500
;Un cuarto de conferencias cuya extensin es la 3501 y para entrar los usuarios tendrn
; que marcar el PIN 1234.
conf => 3501,1234 .
;En esta conferencia los usuarios tendrn que usar el PIN 1234 y los
;administradores el PIN 5678.
conf => 3502,1234,5678

mgcp.conf
El protocolo MGCP (Media Gateway Control Protocol ) est prcticamente obsoleto
probablemente debido al hecho de que la SIP ha robado la atencin a los dems
449

protocolos VoIP (excepto al IAX, por supuesto). Debido a esto, para utilizar en Asterisk
un canal de MCGP en un entorno de produccin debe estar preparado para llevar a
cabo extensas pruebas, estar dispuestos a pagar por tener caractersticas y parches y
si tienen conocimientos altos sobre el protocolo.
Dicho esto, no estamos dispuestos a pronunciar que MGCP ha muerto y es que
muchos creen que MGCP va a llenar un hueco o vaco que todava no ha sido
descubierto...
musiconhold.conf
El archivo de musiconhold.conf se utiliza para configurar las diferentes clases de
msica y sus ubicaciones para su uso en aplicaciones de msica en espera.
osp.conf
El OSP (Open Settlement Protocol) est un documentado oficialmente en ETSI TS 101
321 un Instituto Europeo de Normas de Telecomunicacin (ETSI), que sali de la labor
de la TIPHON grupo de trabajo.
oss.conf
El archivo de oss.conf se utiliza para usar el OSS (Open Sound System) y permitir la
comunicacin con una tarjeta de sonido compatible. Es similar a ALSA pero es este
ltimo el preferido.
phone.conf
El archivo phone.conf se utiliza para configurar una tarjeta de QuickNet PHONEJACK.
La tarjeta de PHONEJACK parece proporcionar algo as como una interfaz FXS, en la
que puede conectar un telfono analgico y pasar las llamadas a travs de Asterisk.
El fichero de ejemplo de Asterisk es:
[interfaces]
mode=immediate
;mode=dialtone
;mode=fxo
;mode=sig
format=slinear
;format=g723.1
echocancel=medium
;silencesupression=yes
;context=local
;txgain=100%
;rxgain=1.0
;device => /dev/phone0

450

privacy.conf
El archivo de privacy.conf se utiliza para controlar el nmero mximo de intentos que
un usuario tiene de introducir su nmero telefnico.
La aplicacion PrivacyManager () es la que determina si un identificador de llamadas se
establece para la llamada entrante.
[general]
maxretries = 2

queues.conf
Asterisk proporciona como funcionalidad bsica un sistema de colas. Usted puede
hacer esto en el archivo de personalizacin queues.conf.
[general]
persistentmembers = yes ; si usamos agentes dinmicos su configuracin se guardar
; en la base de datos de Asterisk. De esta forma si Asterisk se vuelve a arrancar, cada
; agente ser enrutado a su correspondiente cola.
keepstats = no ; mantiene las estadsticas de la cola durante un reload de Asterisk
autofill = yes ; normalmente una cola funciona de la siguiente manera. Hay unos
; cuantos usuarios esperando por ser atendidos por los agentes. Cuando el usuario que
; est de primero en la cola es atendido el segundo se vuelve primero y ser atendido
; por el primer agente disponible. Este comportamiento no tiene en cuenta del hecho
; de que pueden haber muchos agentes disponibles pero que cada usuario tendr que
; esperar a estar el primero de la lista para ser atendido. Con este parmetro definimos
; otro tipo de comportamiento. Los usuarios sern atendidos como se ha explicado
; hasta que haya agentes disponibles .
monitor-type = MixMonitor ; si vamos a grabar las conversaciones, con este parmetro
; los archivos audios de los dos canales sern mesclados en uno solo.
shared_lastcall=yes ; en el caso de agentes que pertenecen a ms de una cola
; poniendo a yes este parmetro se respetarn los tiempos de espera entre las distintas
; colas.

res_mysql.conf
Este archivo funciona igual al cdr_mysql.conf pero a tiempo real y por tanto la
configuracin es muy similar:
[general]
dbhost=127.0.0.1
dbname=nombredatabase
dbuser=mysqluser
dbpass=passmysql
dbport=3306
dbsock=/tmp/mysql/mysql.sock

res_odbc.conf
El propsito del mdulo de res_odbc.so es almacenar informacin en la base de datos
y recuperar esa informacin. El archivo res_odbc.conf especfica cmo hay que acceder
a la tabla en la base de datos. El archivo extconfig.conf, ya explicado, se utiliza para
451

determinar la forma de conectarse a la base de datos.


res_snmp.conf
El archivo res_snmp.conf se utiliza para configurar el soporte de SNMP en Asterisk. Hay
dos opciones en el contexto general. La opcin de subagente res_snmp especifica si
debe ejecutar como un sub-agente o como un agente SNMP completo. Asterisk por
como un sub-agente. La otra opcin es la enabled que especifica si est habilitado el
soporte SNMP en Asterisk.El valor por defecto es no. Este es un ejemplo del archivo:
[general]
subagent = yes
enabled = yes

rpt.conf
El archivo rpt.conf se utiliza para configurar el proyecto ms reciente de Jim Dixon,
Jims Radio Repeater Application (app_rpt), Asterisk permite comunicarse usando VoIP
a travs de un repetidor de radio .Esto permite a la gente tener una gran rea de
cobertura inalmbrica.
rtp.conf
El archivo rtp.conf controla el protocolo RTP (Real-time Transport Protocol).
El protocolo RTP es utilizado por SIP, H.323, MGCP, y posiblemente otros protocolos
para el transporte de datos entre los extremos.
El archivo rtp.conf por defecto usa el rango de puertos RTP entre 10.000 y 20.000. Sin
embargo, puede que la apertura de un rango tal alto puertos no se cmoda por esto
usted puede limitar el rango de puertos RTP cambiando los lmites superior e inferior
en el archivo de rtp.conf.
Por cada llamada SIP bidireccional entre dos extremos, cinco puertos se utilizan
generalmente:

Puerto 5060 para la sealizacin SIP.

2 Puertos RTP: Un puerto para el flujo de datos y un puerto para el Real-Time


Control Protocol (RTCP) en una direccin, y otros dos en la direccin opuesta.

El fichero de rtp.conf tiene este aspecto:


[general]
rtpstart = 10000
rtpend = 20000
rtpchecksums = no ;Control de las cuentas RTP

452

say.conf
El archivo say.conf se utiliza para configurar reglas de gramtica de la lengua hablada
de aplicaciones, tales como SayNumber (). Si usted est buscando usar Asterisk en un
idioma que actualmente no se admite, puede solucionarlo en la configuracin de este
archivo.
sip.conf
El archivo sip.conf define todas las opciones de protocolo SIP para Asterisk. La
autenticacin para los puntos finales, tales como telfonos SIP y proveedores de
servicios, tambin se configuran en este archivo.
sip_notify.conf
Asterisk tiene la capacidad de reiniciar un telfono SIP de forma remota mediante el
envo de un mensaje especial.El telfono recibe este evento, que se interpreta como
una solicitud de reinicio. Varios fabricantes permiten esto pero solamente se ha
testeado para los telfonos Polycom.
Un ejemplo:
[polycom-check-cfg]
Event=>check-sync
Content-Length=>0

skinny.conf
Si desea conectar telfonos que utilizan la patente de Cisco puede utilizar este archivo
para definir los parmetros y los canales de que va a usar.
sla.conf
A pesar de que Asterisk es una centralita moderna, mucha gente todava quiere que se
comporte como un viejo sistema de claves con las lneas compartidas. Asterisk puede
emular un sistema de claves compartidas mediante la configuracin del sla.conf.
smdi.conf
Este archivo configura SMDI (Station Message Desk Interface). SMDI es una opcin
muy til a Asterisk, ya que le permitir actuar como un sistema de correo de voz.
El archivo de ejemplo que proporciona Asterisk es:
[interfaces]
;twostopbits = no
;charsize = 7
;paritybit = even
;baudrate = 1200
;msdstrip = 0
;msgexpirytime = 30000
;smdiport => /dev/ttyS0

453

[mailboxes]
;pollinginterval=10
; Syntax:
; <SMDI mailbox ID>=<Asterisk Mailbox Name>[@Asterisk Voicemail Context]
;smdiport=/dev/ttyS0
;2565551234=1234@vmcontext1
;2565555678=5678@vmcontext2
;smdiport=/dev/ttyS1
;2565559999=9999

udptl.conf
Este archivo se usa para la configuracin los paquetes de UDPTL, uno de los
transportes utilizados por T.38 (fax)a travs de conexiones IP.
El fichero por defecto es:
[general]
udptlstart=4000
udptlend=4999
;udptlchecksums=no
T38FaxUdpEC = t38UDPFEC
;T38FaxUdpEC = t38UDPRedundancy
T38FaxMaxDatagram = 400
udptlfecentries = 3
udptlfecspan = 3

users.conf
Con la aparicin de la GUI de Asterisk, sus desarrolladores encontraron que sera til
para crear un archivo de configuracin donde las cuentas de usuario se pudieran
especificar, en lugar de tener las diferentes piezas que se reparten entre el
extensions.conf , sip.conf y voicemail.conf , entre otros.
Este archivo se actualiza por la GUI de Asterisk, cuando se aaden los nuevos usuarios
o cuando se modifica la configuracin de un usuario.
El archivo de ejemplo es el siguiente:
[general]
; Full name of a user
fullname = New User
; Starting point of allocation of extensions
userbase = 6000
; Create voicemail mailbox and use use macro-stdexten
hasvoicemail = yes
; Set voicemail mailbox 6000 password to 1234
vmsecret = 1234
; Create SIP Peer
hassip = yes
; Create IAX friend
hasiax = yes
; Create H.323 friend

454

;hash323 = yes
; Create manager entry
hasmanager = no
; Set permissions for manager entry (see manager.conf.sample for
; documentation) (defaults to *all* permissions)
;managerread = system,call,log,verbose,command,agent,user,config
;managerwrite = system,call,log,verbose,command,agent,user,config
; Remaining options are not specific to users.conf entries but are general.
callwaiting = yes
threewaycalling = yes
callwaitingcallerid = yes
transfer = yes
canpark = yes
cancallforward = yes
callreturn = yes
callgroup = 1
pickupgroup = 1
;[6000]
;fullname = Joe User
;email = dav@foo.bar
secret = 1234
;zapchan = 1
;hasvoicemail = yes
;vmsecret = 1234
;hassip = yes
;hasiax = no
;hash323 = no
;hasmanager = no
;callwaiting = no
;context = international

voicemail.conf
En el archivo voicemail.conf es donde se configura todo lo relacionado con el buzn
de voz. Si recibimos una llamada y no contestamos o la lnea est ocupada, entrar en
funcin el contestador, grabar el mensaje de voz dejado por quien llama y nos enviar
un correo electrnico para avisarnos. Adems podemos anexar el mensaje de voz al
correo electrnico en el formato audio que nos ms guste.
[general]
format=gsm|wav ; el codec audio utilizado para grabar los mensajes
; de voz dejados en el contestador .
serveremail=davidin073@gmail.com ; el remitente del correo electrnico
; que nos avisa de un nuevo mensaje de voz.
attach=yes ; Si attach est en yes el mensaje de voz se enviar como anexo al
; correo
maxmsg=100 ; numero mximo de mensajes de voz para cada casilla
; configurada .
maxsecs=300 ; numero mximo de segundos por cada mensaje de voz.
minsecs=3 ; numero mnimo de segundos para que un mensaje de voz sea
; reconocido como tal y enviado a la casilla del destinatario.
maxgreet=60 ; podemos grabar un mensaje de bienvenida para nuestro
; buzon de voz personal. Este parmetro define la duracin mxima
; del mensaje .

455

skipms=3000 ; cuando escuchamos los mensaje de voz, si esta configurado,


; podemos usar el teclado para adelantar o atrasar el mensaje
; mismo. Por ejemplo: hundiendo el numero 8 nos
; adelantamos 3000 milisegundos, es decir 3 segundos, con el 9
; nos devolvemos de 3 segundos.
maxsilence=10 ; si mientras se graba un mensaje de voz hay un silencio de 10
; segundos, la llamada se termina y tambin la grabacin.
silencethreshold=128 ; este numero representa el nivel de audio y sirve para
; definir que se considera silencio. Ms bajo el numero,
; ms sensible al ruido.
maxlogins=3 ; numero mximo de veces que nos podemos equivocar
; insertando la contrasea para entrar a nuestra buzon de voz .
moveheard=yes ; Una vez escuchados los mensajes de voz podemos pasarlos
; a la carpeta OLD (viejos) automticamente sino tenemos
; que hacerlo desde el men del contestador.
userscontext=default ; el contexto predefinido para los usuarios de las
; casillas de voz .
;externnotify=/usr/bin/myapp ; si cada vez que recibimos un mensaje de
; voz queremos arrancar un programa tenemos que
; configurarlo aqu.
;smdienable=yes ; esto es para configurar SMDI (Simple Message Desk
; Interface).
;smdiport=/dev/ttyS0
;externpass=/usr/bin/myapp ; Si queremos que un programa arranque cada
; vez que cambiamos la contrasea de nuestro
; buzon de voz tenemos que configurarlo aqu.
;externpassnotify=/usr/bin/myapp ; si externpass est configurado
; queremos que la contrasea se actualice tambin
; en voicemail.conf tenemos que configurar este
; parmetro.
directoryintro=dir-intro ; el mensaje de introduccin de la aplicacin
; directory (para buscar las extensiones en la
; centralita).
charset=ISO-8859-1 ; el estndar ISO para los mensajes de texto que
; se enviaran para notificar la llegada de un nuevo
; mensaje de voz.
pbxskip=yes ; quitar la abreviacin [PBX] en el remitente del mensaje .
fromstring=David ; el nombre que aparecer como remitente del correo
; electrnico.
usedirectory=yes ; Los mensajes de voz que recibimos podemos reenviarlos a
; otro usuario/extension del servidor Asterisk. Tambin
; podemos dejar directamente mensajes de voz en
; determinados buzones. Esta opcin permite buscar en el
; directorio la persona a la que queremos dejar o reenviar el
; correo de voz.
;odbcstorage=asterisk ;podemos guardar los mensajes de voz en un base de
; datos usando el driver ODBC. Aqu es donde hay que
; configurar esta opcin.
;odbctable=voicemessages; el nombre de la tabla de la base de datos donde
; guardar los mensajes de voz
; Change the from, body and/or subject, variables:
; VM_NAME, VM_DUR, VM_MSGNUM, VM_MAILBOX, VM_CALLERID,
;VM_CIDNUM, VM_CIDNAME, VM_DATE
;Todo el bloque de arriba son las variables y el texto del correo electrnico que
; enviaremos para notificar la llegada de un nuevo mensaje de voz. Lo
; podemos modificar y adaptarlo a nuestras exigencias.

456

pagerfromstring= ; si enviamos un aviso tambin a un Pager esta lnea define


; el remitente del mensaje.
pagersubject=Nuevo VM ; el objeto del mensaje al Pager.
pagerbody=Nuevo mensaje de ${VM_DUR} de duracin en la casilla
${VM_MAILBOX}\nde ;${VM_CALLERID}, en ${VM_DATE} ; el cuerpo del
; mensaje.
mailcmd=/usr/sbin/sendmail -t ; sendmail es el programa predefinido para
; enviar los correos electrnicos.
; Si en lugar ODBC queremos usar el protocolo IMAP para guardar nuestros
; mensajes de voz, aqu va indicada la ;configuracin.
;imapgreetings=no; para guardar el mensaje de bienvenida en la carpeta de
; IMAP. Igual a no si no usamos IMAP .
;greetingsfolder=INBOX ; Si imapgreetings es igual a yes aqu es donde
; definimos la carpeta donde guardar el mensaje audio de bienvenida .
;imapparentfolder=INBOX ; si queremos crear una carpeta dentro de la
; carpeta INBOX para cada buzon de voz.
tz=central ; huso horario predefinido para indicar la fecha y la hora del correo
; de voz recibido.
attach=yes; Si es igual a yes el mensaje de voz se anexar al correo
; electrnico de notifica.
attachfmt=wav El formato audio con que se enviar el mensaje audio anexo
; al correo electrnico.
saycid=yes; Si es igual a yes antes de escuchar el correo de voz se escuchar
el identificativo (numero de telfono o extensin) de quien lo dej.
sayduration=no; Anunciar o no la duracin del correo de voz
saydurationm=2; Definir la duracin mnima del correo de voz para que sea
; anunciada (en minutos).
dialout=phones; Contexto de utilizar para efectuar llamadas desde el men
; del contestador [opcin 4 del men avanzado].
sendvoicemail=yes ; permitir o no de enviar un correo de voz a otra
; extensin [opcin 5 del men avanzado].
; callback=fromvm; Contexto para llamar desde el men del buzn de voz al
; remitente de un mensaje de voz.
; exitcontext=fromvm ; Contexto donde enviar el usuario si mientras
; usa los men del buzon oprime el tecla * o 0.
review=yes; Si es igual a yes permite a quien est dejando un correo de voz
; de escucharlo antes de enviarlo.
; operator=yes; permite a quien llama de presionar 0
; antes/despus/mientras est dejando un correo de voz para buscar una
; operadora.
; envelope=no ; antes de reproducir el mensaje audio, reproduce los datos
; del mensaje.
; delete=yes; Si es igual a yes y activado una vez que se notifique la llegada de
; un correo de voz, ste se borrar del servidor.
; volgain=0.0; si el correo de voz se grab con un volumen muy bajo con esta
; opcin podemos mejorar su calidad. Para que se pueda utilizar debemos
; tener instalado sox.
; nextaftercmd=yes; ir al correo de voz que sigue si presionamos las teclas 7
; o 9 (borrar/ guardar el mensaje corriente).
forcename=yes; Obligar a cada usuario con buzon de voz a grabar su
; nombre la primera vez que accede. Un usuario se considerar nuevo si su
; contrasea coincide con el numero de su extensin.
forcegreetings=no; parecido al de arriba. Obliga al nuevo usuario a grabar un

457

; mensaje de bienvenida.
hidefromdir=no; el usuario no aparecer en el directorio.
tempgreetwarn=yes; recordar al usuario que el mensaje de bienvenida
; temporneo es l que se est usando.
;vm-password=custom_sound ; configurar un archivo de voz distinto para
; pedir la contrasea de la casilla.
; vm-newpassword=custom_sound ; como arriba para cuando se avisa de
; insertar una nueva contrasea para el buzon.
; vm-passchanged=custom_sound ; Voz personalizada para decir : "Tu
; contrasea ha sido cambiada".
; vm-reenterpassword=custom_sound ; Voz personalizada para decir
; "Introduce nuevamente tu contrasea seguida del botn numeral.
; vm-mismatch=custom_sound; Voz personalizada de "la contrasea
; insertada y repetida no son iguales".
listen-control-forward-key=# ; tecla numrica para adelantar el mensaje que
; se est escuchando.
listen-control-reverse-key=*; tecla numrica para ir atrs en el mensaje que
; se est escuchando.
listen-control-pause-key=0; tecla numrica para poner en pausa el mensaje.
listen-control-restart-key=2; tecla numrica para volver a escuchar el
; mensaje desde el inicio.
listen-control-stop-key=13456789; teclas numricas para parar el mensaje y
; volver al men del contestador.
backupdeleted=100; numero mximo de mensajes en la carpeta "borrados".
[zonemessages]
colombia=America/Bogota|'vm-received' aebY 'digits/at' HM
eastern=America/New_York|'vm-received' Q 'digits/at' IMp
central=America/Chicago|'vm-received' Q 'digits/at' IMp
central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours'
military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'
european=Europe/Copenhagen|'vm-received' a d b 'digits/at' HM
[default]
100 => 1234,100,ramon@hotmail.com
101 => 1234,101,davidin073@gmail.com

vpb.conf
Este archivo se utiliza para configurar las tarjetas de Voicetronix con Asterisk.

458

ANEXO E: Instalacin de CentOs 5


Arrancamos la instalacin desde el DVD.

Seleccionamos idioma de sistema y de teclado.


Pasamos a la parte de seleccin de destino de instalacin.

** Atencin. Si dnde vas a instalar tenas datos, con esta opcin los pierdes.

459

Configuramos la red.

Pulsamos en modificar. Desactivamos IPV6 (a no ser que se vaya a usar). Lo que no est
en marcha, no da problemas. Colocamos la direccin IP y la mscara de red que le
otorgamos a nuestra mquina.

Y a continuacin el nombre del equipo, del servidor DNS y de la puerta de enlace.


460

Seleccionamos nuestra zona horaria y colocamos nuestra contrasea de root.


Ahora pasamos a la configuracin de paquetes que vamos a instalar.
Pulsamos en personalizar ahora y en Siguiente.

461

Opciones a aadir adems de las que ya estn seleccionadas por defecto.


Seleccionamos Servidor de Nombres (DNS), Servidor Web, Servidor de Correo y Base
de Datos MySQL en la opcin de Servidores.
En Desarrollo seleccionamos Bibliotecas de Desarrollo y Herramientas de Desarrollo.
En Sistema Base seleccionamos Herramientas del Sistema y pulsamos Paquetes
Opcionales.
Aqu agregamos mc si queremos tener un gestor de archivos en consola al estilo
Norton Conmmander, y podemos continuar pulsando siguiente.

462

Esperamos mientras se instala.


Proceso de post-instalacin (si seleccionamos el Gnome/KDE Desktop y si
elegimos server habr que desactivarlo manualmente tras la instalacin).
Desactivamos el firewall.

Desactivamos SE Linux.

463

Y creamos un usuario (si slo queremos tener el usuario administrador, root, pulsamos
Adelante).

El sistema se reiniciar.
Post-instalacin si no seleccionamos entorno grfico.

Seleccionamos Configuracin de la red. Aqu deshabilitamos Iptables (Nivel de


Seguridad-> Deshabilitado) y SE Linux.

464

Reiniciamos el equipo.
Actualizamos el sistema con el comando:
yum y update

Reiniciamos el equipo de nuevo.

465

ANEXO E: Gua de Google Calendar

Inicio de Sesin

Para hacer uso de Google Calendar es necesario


disponer de una cuenta Gmail.


Primero abra la pgina:


http://calendar.google.com

 En el campo nombre de usuario escriba el


correo electrnico que tiene asociado a la cuenta
de Google. Y en el campo Password escriba la
contrasea y luego pulse el botn Acceder.

466

El calendario

Cambiar el idioma

Para cambiar el idioma de un calendario primero debemos hacer clic en el


botn Configuracin, el cual est ubicado en la esquina superior derecha de
la pagina.
Luego debe seleccionar el Idioma deseado en el campo Idioma como se
muestra en la figura.
Finalmente debe guardar los cambios pulsando el botn Guardar.

467

Crear un Calendario







Para crear un calendario, primero debe hacer clic sobre el botn Aadir.
Seleccione la opcin Crear un calendario nuevo .
En el Campo Nombre del calendario , se debe escribir el nombre del
calendario, por ejemplo Itinerario Grupo 3.
En el campo Descripcin se escribe la describe el calendario. Por ejemplo:
Este es el calendario de las actividades a realizar en el Grupo 3.
En el campo Ubicacin se escribe el lugar donde se van a realizar las
actividades. Por ejemplo: Medelln.
Pulse el botn Crear calendario .

Crear eventos en un calendario




Para crear un evento en Google Calendar existen dos mtodos. El primero es


haciendo clic sobre la opcin Crear evento que se encuentra debajo del logo
de Google Calendar, la otra opcin es hacer clic sobre el calendario y aparecer
un cuadro con los datos bsicos del evento.

Si escogemos la segunda opcin; en el campo evento debemos escribir el


nombre del evento, y se debe seleccionar el calendario al que pertenece el
evento de la lista desplegable Qu calendario .

Para agregar ms detalles al evento debemos hacer clic sobre Editar detalles
del evento , si no se desea agregar otros detalles pulsamos el botn Crear
evento
468

Si pulsamos el botn Crear evento , aparecer de inmediato la imagen


siguiente, que es donde se crea un evento de forma detallada.

Esta pantalla tambin aparece cuando se pulsa Editar el evento.

Aqu no solo se ponen datos generales sino que tambin se puede especificar la
fecha y hora de inicio y finalizacin de cada evento. La opcin todo el da se
puede utilizar por ejemplo para un cumpleaos.

En el campo se repite , se escoge la frecuencia de repeticin de un evento.

En el cuadro Opciones se configura la privacidad del evento, el recordatorio


y el estado cuando este evento est ocurriendo.

469

Eliminar un calendario
Para eliminar de forma permanente los calendarios de
la lista de calendarios, se deben
seguir los pasos siguientes:


Clic en Configuracin en la parte inferior de


la lista de calendarios de la izquierda. Si lo
prefieres, puedes hacer clic en la ficha
Calendarios.

Clic en el icono Suprimir situado junto al calendario que


desees eliminar.

Clic en Aceptar.

Es de anotar que no es posible eliminar el calendario


principal. Sin embargo, puedes borrar los eventos del
calendario principal, cambiar su nombre o planificar
eventos nuevos, lo que, a efectos prcticos, equivale
a eliminar el calendario principal.

Configuracin para mviles


Para poder recibir recordatorios de evento en forma de mensaje de texto hay que
seguir los pasos siguientes:


Clic en Configuracin en la parte inferior de la lista de calendarios de la


izquierda. Si lo prefieres, puedes hacer clic en la ficha Calendarios.

Clic en Configuracin para mviles.

470

Rellenar el formulario:
o Seleccionar el Pas.
o Introducir el nmero de telfono dnde llegarn las notificaciones.
o Pulsamos el botn Enviar cdigo de verificacin y si hemos ingresado
correctamente el nmero de telfono nos llegar un SMS con el cdigo
de verificacin que tendremos que ingresar en la casilla siguiente.

o Pulsamos en Finalizar configuracin y la configuracin del mvil en


Google Calendar estar hecha.


Ahora para configurar que un recordatorio o cita sea notificado en nuestro


telfono mvil, crearemos una cita nueva o haremos clic en una ya existente
para entrar en sus configuraciones.

Seleccionamos SMS en el apartado Recordatorio y al lado elegiremos cuanto


tiempo antes de la hora del evento queremos que nos sea notificado.

De esta manera 10 minutos antes de la hora del evento recibiremos un SMS


con el contenido en el formato siguiente:
Recordatorio: Contenido del evento Fecha y Hora (Nombre del calendario)

471

ANEXO F: Manual de Usuario de FOP 2


Inicio de Sesin
Abra su navegador y escriba la direccin web para acceder al panel:
http://IPservidor/fop2
Si todo est en su lugar y el servidor fop2 se est ejecutando, aparecer este cuadro:

Utilice su extensin y la contrasea del buzn de dicha extensin, tal como estn
definidas en /usr/local/fop2/fop2.cfg para iniciar sesin.
Panel Principal
Despus de la conexin con xito, aparecer el panel principal:

472

Hay una barra de herramientas que est siempre visible en la parte superior, y cuatro
secciones en el rea de contenido: una para cada tipo de botn.
El botn correspondiente a su extensin (la misma que utiliz para iniciar sesin),
siempre est en la parte superior izquierda de la seccin de Extensin, con la etiqueta
en negrita.
Si usted no est interesado en los trunks, puede ocultar la seccin y que
que seguir
estando minimizada hasta que haga clic en el signo de nuevo.
Barra de herramientas

En la parte superior del panel hay una barra de herramientas. Desde aqu podrs
realizar la mayora de las acciones que se pueden hacer con FOP2.
Podemos dividir la barra en diferentes secciones:
La barra de accin
La barra de accin consiste en una fila de botones que representan las acciones que
deben adoptarse para las llamadas activas. Dependiendo
Dependiendo de los permisos que el
usuario tiene los botones se mostrarn o no. Para estas acciones a trabajar, primero
debe seleccionar el destino o el botn de destino con un clic de ratn. Cuando lo
hagas, el contorno del botn pasa a color rojo.
Despus de seleccionar
ccionar una extensin de destino, puede efectuar la accin haciendo
clic en el botn apropiado.
Las acciones posibles son:
Dial
(Requiere el permiso: dial)
Cuando se hace clic se origin una llamada a la tecla seleccionada anteriormente en la
lista de extensiones. Su telfono sonar y cuando descuelgues se marcar la extensin
de destino.
Transfer
(Requiere el permiso: transfer)
Cuando se hace clic, iniciar
ciar una transferencia de llamada al botn previamente
seleccionado en la lista de extensiones.

473

Transfer to voicemail
(Requiere el permiso: transfer)
Cuando se hace clic, iniciar una transferencia a la extensin de correo de voz tal como
se define en el dialplan y en la configuracin del botn con el parmetro
voicemailexten.
Pickup
(Requiere el permiso: pickup)
Cuando se hace clic se contexta a la llamada del botn pulsado.
Listen
(Requiere el permiso: spy)
Cuando se hace clic se iniciar un espionaje en la llamada que se esta realizando en el
botn pulsado.
Whisper
(Requiere el permiso: whisper)
Cuando se hace clic se iniciar un espionaje con voz baja habilitada, permitiendo poder
hablar con la extensin de destino sin que la otra parte pueda orte.
Hangup
(Requiere el permiso: hangup)
Cuando se hace clic se cuelga la llamada activa en el botn pulsado.
Record
(Requiere el permiso: record)
Cuando se hace clic se pondr en marcha la grabacin de la llamada en el botn
pulsado. Una llamada que se est grabando ser sealada con un icono
icono de casette.
La caja del filtro
Permite ver el estado del boton escrito en la caja. Si
usted tiene un panel con 100 botones esta bsqueda es
beneficiosa.
La caja de llamada
Utilizando este elemento de la interfaz puede realizar
varias bsquedas:

474

Llamar a un nmero de telfono: basta con escribir el nmero y pulsar ENTER, su


telfono sonar y se originar una llamada a ese nmero.
Llamada de lnea directa VOIP: Usted puede escribir una direccin SIP con este
formato: SIP / $ (exten) @ $ (dominio) y se originar una llamada a la extensin SIP @
servidor.
Bsqueda por Agenda:
Todo lo que escriba aqu ser buscado en la agenda a medida
que se escribe, y los resultados aparecern en una lista de
seleccin en la parte inferior de la caja. Usted puede utilizar
las teclas de flecha para seleccionar el resultado correcto, y
ENTER para originar la llamada.

Bsqueda por el dominio tel:


Si escribe un dominio. tel, se activar el sistema de
bsqueda a travs de DNS del dominio y dar resultados si
encuentra algn nmero asociado al dominio. Puede
obtener los nmeros de voz, marcacin directa de VoIP y
sitios web. Si selecciona un resultado y pulse ENTER se
origina la llamada.

Cuadro de presencia
Aqu usted puede configurar su informacin de presencia, tal
como est configurada en el archivo de presence.js. La
informacin es almacenada en la base de datos inmediatamente y
presentada en tiempo real. Esto no afectar al comportamiento
de marcacin, slo mostrar a los dems usuarios FOP2 su
disponibilidad actual.
El botn reflejar su estado con un icono de poca presencia, al pasar el ratn sobre el
icono de presencia de cualquier extensin, se ver una descripcin textual con el
estado (adems del color).
La ltima opcin en el cuadro de seleccin, llamado "other", le permite especificar
cualquier texto para su estado de presencia, si las predefinidas no son suficientemente
buenas para usted.

475

Extensiones
Los botones de Extensin muestran gran cantidad de informacin envasada en un
pequeo rectngulo. Hay dos colores para el botn ,verde cuando la extensin no est
involucrada en una llamada, o rojo cuando lo est. Cuando
Cuando el telfono est sonando,
seguir siendo verde, pero el icono de la lnea indica el estado de llamada.
Esta imagen muestra un botn sonando:

Hay varios elementos a explicar:


1. Icono de Presencia:
Este icono indica el estado de presencia de la extensin.
Un crculo verde indica que la extensin no est involucrada en una llamada.
Un crculo rojo indica que la extensin est ocupada o en una llamada.
Por ltimo, si alguien inici una grabacin de llamadas
llamadas desde el interior FOP2,
un icono de una cinta indica que la llamada est siendo grabada.
2. Botn de etiqueta:
Esta es la etiqueta de texto para la extensin. Se muestra el nmero de
extensin, seguido de la etiqueta de texto que se configur
configur en la definicin del
botn.
3. Icono de Informacin:
Este icono muestra si la extensin est en pausa a travs de un reloj. Si la
extensin se est involucrada en una llamada que provena de una cola, se
mostrar un icono de informacin que se mostrar en la cola de dnde vienen
las llamadas cuando se pase sobre ella el ratn.
4. Icono de voicemail:

Si hay voicemail almacenados en espera, aparecer un sobre. El nmero de


mensajes se puede leer al pasar el ratn sobre l.
5. Icono de actividad en lnea:

476

The handset icon will indicate if the line is ringing, it is engaged in an outgoing
call (right arrow), and incoming call (left arrow), or held (hourglass) El icono de
telfono indicar si la lnea est sonando, est involucrado en una llamada
saliente (flecha derecha),
derecha), y la llamada entrante (flecha izquierda), o lugar (reloj
de arena)
6. Linea de callerid
Si est disponible, se mostrar el nombre y el nmero de callerid.
7. Linea de temporizador
El temporizador de la llamada actual.
Visual Phonebook
En la parte superior izquierda de la ventana del panel principal, hay un icono de
agenda. Al hacer clic se le presentar una aplicacin de libreta de telfonos donde se
puede agregar, editar o borrar usuarios.

El uso es sencillo. Puede hacer clic en el botn Agregar para insertar nuevos registros,
o haga clic en los botones de accin para ver, editar o borrar cada registro. Hay un
cuadro de bsqueda que le permite buscar cualquier cadena o nmero. Y un botn de
exportacin que le permite exportar a CSV su
s agenda.

477

Las entradas del directorio sern buscadas a tiempo real, cuando se escribe algo en el
cuadro de marcacin, por lo que se puede utilizar como un directorio de la empresa.
Tambin buscar al recibir una llamada entrante. Si el identificador de llamadas
l
coincide con una de las entradas, usar el nombre y la imagen del contacto dando un
aviso de llamada aparecer en la parte inferior derecha de la pantalla del FOP2 como
se muestra en la imagen siguiente.

Colas
Los botones de cola tienen algunas particularidades. Adems del nombre de la cola, se
le mostrar la lista de miembros o agentes de la cola, con un pequeo icono que
representa el estado del miembro, y tambin la lista de llamadas en espera en la cola
con sus extensiones de llamada y su temporizador, como se muestra a continuacin:

Tambin se pueden utilizar para filtrar los botones de extensin. Cuando se selecciona
un botn de cola, slo las extensiones que forman parte de la cola se mostrarn. Esto
Es
es particularmente til para los administradores de centros de llamada, usted puede
centrarse en una actividad de determinada cola, eliminando
eliminando el "ruido" de las otras
colas.

478

El icono de estado de los miembros de la cola puede ser:


= ready

= busy

= unavailable /invalid

= paused.

FOP2 tambin supervisar el agente o los nombres de dispositivo y cambiar el


nombre de los botones de extensin en consecuencia.
Conferencias
Los botones de Conferencia mostrarn a todos los participantes de la conferencia.
Tambin se incluyen acciones especiales que se realizarn en la propia conferencia o
de un participante en particular.

Hay un pequeo icono a la izquierda de la etiqueta


etiqueta de la conferencia, al hacer clic se le
presentar un men especial de accin que le permitir bloquear o desbloquear una
conferencia, o de activacin/desactivacin de todos los participantes de la conferencia

A la izquierda de todos los participantes


participantes tambin hay un icono de miembro, ser un
usuario verde para que los participantes regulares, o azul cuando el participante es
administrador o el usuario marcado.

ANEXO G: Cdigo de las pruebas de envio de SMS


sms_send.php

#!/usr/bin/php -q
<?php
// -----------// Configuracion de Google Calendar
// -----------$usr="davidin073@gmail.com"; // Usuario
$pwd="XXXXXXXX";
";
// Password
$min="30"; //empieza 30 min de la hora actual
$dur="10";//la duracion del evento es de 10 min

479

// Cambiar por el directorio de instalacin


$sms_tool_path="/usr/src/SMSGoogle";
// Opciones de depuracion:
// Si tienes problemas revisa el archivo de log
$parm_error_log = '/usr/src/SMSGoogle/wakeup.log';
// Poner a true si queremos habilitar la depuracin
$parm_debug_on = true;
GLOBAL

$stdin, $stdout, $stdlog, $result, $parm_debug_on, $parm_test_mode;

// Settings de la WIKI http://www.voip-info.org


ob_implicit_flush(false);
set_time_limit(30);
error_reporting(0);
$stdin = fopen( 'php://stdin', 'r' );
$stdout = fopen( 'php://stdout', 'w' );
// Se escribe log en modo depuracion
if ($parm_debug_on)
{
$stdlog = fopen( $parm_error_log, 'w' );
fputs( $stdlog, "---Start---\n" );
fputs($stdlog."---------------\n");
}
// Poner en un array todas las variables que manda Asterisk
// http://www.voip-info.org/tiki-index.php?page=Asterisk%20AGI%20php
$agivars = array();
while (!feof(STDIN))
{
$agivar = trim(fgets(STDIN));
if ($agivar === '') {
break;
}
$agivar = explode(':', $agivar);
$agivars[$agivar[0]] = trim($agivar[1]);
}
extract($agivars);
// Obtenemos el Caller ID
$callerid = $agi_callerid;
// Mandamos el mensaje usando el API de Google
$msg="'Asterisk: Tiene una llamada perdida de: $callerid'";
$cmd = "$sms_tool_path/enviaSMS.sh $usr $pwd $min $dur $msg &";
$p = popen($cmd, 'r');
if ($parm_debug_on)
{
$stdlog = fopen( $parm_error_log, 'w' );
fputs( $stdlog, "UserName=".$usr."\n");
fputs( $stdlog, "Password=".$pwd."\n");
fputs( $stdlog, "Minutos despues de la hora actual en la que empieza el
evento=".$min."\n");
fputs( $stdlog, "Duracion del Evento=".$dur."\n");

480

fputs( $stdlog, "Mensaje enviado: ".$msg."\n");


fputs( $stdlog, "Enviado: ".$p );
}
?>

enviaSMS.sh
#!/bin/sh
SMS_HOME=/usr/src/SMSGoogle
CLASSPATH=$SMS_HOME/lib/activation.jar:$SMS_HOME/lib/gdata-calendar1.0.jar:$SMS_HOME/lib/gdata-client-1.0.jar:$SMS_HOME/lib/mail.jar:$SMS_HOME
java -classpath $CLASSPATH EnviaSMS $@

EnviaSMS.java
import java.net.URL;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import com.google.gdata.client.calendar.CalendarService;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.Person;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.data.extensions.EventEntry;
import com.google.gdata.data.extensions.Reminder;
import com.google.gdata.data.extensions.When;

public class EnviaSMS {


public static void main(String[] args) {
// Comprobamos los argumentos necesarios: usuario, password y texto del mensaje
if (args.length < 5) {
System.err.println("Uso: EnviaSMS <usuario> <password> <minInit> <duracion> <texto> ");
return;
}
String userName = args[0];
String userPassword = args[1];
String min1 = args[2];
int min = Integer.parseInt(min1);
String duracion = args[3];
int dur = Integer.parseInt(duracion);
String sms = "";
// El mximo son 57 caracteres
for(int i=4; i<args.length; i++) {
sms = sms + args[i] + " ";
}
sms = sms.trim();
try {

481

URL feedUrl = new URL("http://www.google.com/calendar/feeds/" + userName +


"/private/full");
CalendarService myService = new CalendarService("EnviaSMS");
// Nos autenticamos en google Calendar
myService.setUserCredentials(userName, userPassword);
// Creamos el evento
EventEntry myEntry = new EventEntry();
myEntry.setTitle(new PlainTextConstruct(sms));
Person author = new Person(userName, null, userName);
myEntry.getAuthors().add(author);
// Definimos la zona horaria
TimeZone tz = TimeZone.getTimeZone("Europe/Madrid");
Calendar cal = GregorianCalendar.getInstance();
cal.add(Calendar.MINUTE, min);
DateTime startTime = new DateTime(cal.getTime(), tz); //7m
cal.add(Calendar.MINUTE, dur);
DateTime endTime = new DateTime(cal.getTime(), tz); //11m
// Definimos la hora de comienzo y de fin del evento
When eventTimes = new When();
eventTimes.setStartTime(startTime);
eventTimes.setEndTime(endTime);
myEntry.addTime(eventTimes);
// Aadimos el recordatorio slo como SMS y que avise 10 minutos antes
Reminder reminder = new Reminder();
reminder.setMinutes(new Integer(10));
reminder.setMethod(Reminder.Method.SMS);
myEntry.getReminder().add(reminder);
// Enviamos la peticin para insertar el evento en el calendario
EventEntry insertedEntry = (EventEntry)myService.insert(feedUrl, myEntry);
} catch (Exception e) {
e.printStackTrace();
}
}
}

ANEXO H: Dialplan de la aplicacin


(extensions.conf, sip.conf, iax.conf)
extensions.conf
[general]
static=yes
writeprotect=yes
clearglobalvars=no

482

autofallthrough=yes
language=es
[globals]
;TELEFONOS Y MOVILES
MOVIL2=945003910
MOVIL1=650664616
PHONE1=902147424
PHONE2=902147423
PHONE3=945003903
;CALENDARIOS
CALR=calendariorecepcion.py
CALC=calendariocomercial.py
;CALS=calendariosoporte.py
CALT=calendariotwister.py
CALS=pyastcal.py
;QUEUES
QR=recepcionqueue
QC=comercialqueue
QS=soportequeue
QT=twisterqueue
;BUZONES
BR=1111
BC=2222
BS=3333
BT=4444
[incoming]
include =>administracin
include =>chansebi
include =>spe
[administracion]
include =>acceso
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;MENU:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;---->0)Pasar con una operadora
;;;---->1)Duda en la utilizacion del programa :Comerciales
;;;---->2)Pasar con el Departamento de Soporte
;;;---->3)Pasar con el Departamento de Desarrollo :Twister
;;;---->t)Volver al menu: Excesivo tiempo en contestar
;;;---->i)Volver al menu: Se ha pulsado una tecla errnea
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 902147424,1,Answer
exten => 902147424,n,Background(menu)
exten => 0,1,Goto(recepcion,${PHONE1},1)
exten => 1,1,Goto(comercial,${PHONE1},1)
exten => 2,1,Goto(soporte,${PHONE2},1)
exten => 3,1,Goto(twister,${PHONE3},1)

483

exten => 1000,1,Goto(acceso,${EXTEN},1)


exten => 1001,1,Goto(acceso,${EXTEN},1)
exten => 1002,1,Goto(acceso,${EXTEN},1)
exten => 1003,1,Goto(acceso,${EXTEN},1)
exten => 1004,1,Goto(acceso,${EXTEN},1)
exten => 1005,1,Goto(acceso,${EXTEN},1)
exten => 1006,1,Goto(acceso,${EXTEN},1)
exten => 2000,1,Goto(acceso,${EXTEN},1)
exten => 2001,1,Goto(acceso,${EXTEN},1)
exten => 2002,1,Goto(acceso,${EXTEN},1)
exten => 2003,1,Goto(acceso,${EXTEN},1)
exten => 2004,1,Goto(acceso,${EXTEN},1)
exten => 2005,1,Goto(acceso,${EXTEN},1)
exten => 2006,1,Goto(acceso,${EXTEN},1)
exten => 3000,1,Goto(acceso,${EXTEN},1)
exten => 3001,1,Goto(acceso,${EXTEN},1)
exten => 3002,1,Goto(acceso,${EXTEN},1)
exten => 3003,1,Goto(acceso,${EXTEN},1)
exten => 3004,1,Goto(acceso,${EXTEN},1)
exten => 3005,1,Goto(acceso,${EXTEN},1)
exten => 3006,1,Goto(acceso,${EXTEN},1)
exten => 3007,1,Goto(acceso,${EXTEN},1)
exten => 4000,1,Goto(acceso,${EXTEN},1)
exten => 5000,1,Goto(cisco,${EXTEN},1)
;Usuario Remoto
exten => 6000,1,Goto(acceso,,${EXTEN},1)
exten => t,1,Goto(${PHONE1},1)
exten => i,1,Goto(${PHONE1},1)
exten => 902147423,1,Goto(soporte,${PHONE2},1)
exten => 945003903,1,Goto(twister,${PHONE3},1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;PRUEBAS CHAN_SEBI;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[chansebi]
include => acceso
; Incomming SMS
exten => sms,1,NoOp(Incoming SMS from ${SMSSRC})
exten => sms,n,System(/usr/src/recvSMS.sh "${SMSSRC}" "${SMSTXT}")
exten => sms,n,Hangup
;Envio SMS
exten => 1111,1,NoOp(Envio de Sms)
exten => 1111,n,SebiSendSMS(huawei1,650664616,"sms prueba")
exten => 1111,n,Hangup
;LLamadas con Chan_Sebi
exten => 650664616,1,NoOp(Outgoing call through the SEBI device to ${EXTEN})
exten => 650664616,n,Dial(Sebi/g1/${EXTEN},60)
exten => 650664616,n,Hangup
[macro-general]
;1)COMPROBACION CON EL CALENDARIO

484

exten => s,1,Answer


exten => s,n,Set(SALTO=${ARG1})
exten => s,n,AGI(${ARG2})
exten => s,n,Goto(${SALTO},${ARG3},1)
[recepcion]
exten => 902147424,1,Set(NUM=${EXTEN})
exten => 902147424,n,Macro(general,recepcionlaboral,${CALR},${NUM})
[comercial]
exten => 902147424,1,Set(NUM=${EXTEN})
exten => 902147424,n,Macro(general,comerciallaboral,${CALC},${NUM})
[soporte]
exten => 902147423,1,Set(NUM=${EXTEN})
exten => 902147423,n,Macro(general,soportelaboral,${CALS},${NUM})
[twister]
exten => 945003903,1,Set(NUM=${EXTEN})
exten => 945003903,n,Macro(general,twisterlaboral,${CALT},${NUM})
[macro-laboral]
exten => s,1,Answer
exten => s,n,Wait(2)
exten => s,n,SetMusicOnHold(default)
;Consultar con la base de datos si es VIP para pasar a la primera posicion de la cola
exten => s,n,MYSQL(Connect connid localhost root root agenda)
exten => s,n,MYSQL(Query resultid ${connid SELECT\ mant FROM\ clientes\ INNER\
JOIN\ telefono\ ON\ clientes.id=telefono.idEmp WHERE\ telefono="NUM2"})
exten => s,n,NoOp(resultid = ${resultid})
;Si es VIP --> POSICIONAR DELANTE EN LA COLA
exten => s,n,MYSQL(Fetch fetchid ${resultid} PRIO)
exten => s,n,NoOp( ${PRIO})
exten => s,n,GotoIf($["${PRIO}"="VIP"]?prio:no)
exten => s,n(prio),MYSQL(Disconnect ${connid})
exten => s,n,Set(QUEUE_PRIO=10)
exten => s,n,Queue(${ARG1}|r)
exten => s,n,Hangup
exten => s,n(no),MYSQL(Disconnect ${connid})
exten => s,n,Queue(${ARG1}|r)
exten => s,n,Hangup
[recepcionlaboral]
exten => 902147424,1,Macro(laboral,${QR})
[comerciallaboral]
exten => 902147424,1,Macro(laboral,${QC})
[soportelaboral]
exten => 902147423,1,Macro(laboral,${QS})
[twisterlaboral]
exten => 945003903,1,Macro(laboral,${QT})

485

[macro-nodisponible]
exten => s,1,PLayBack(grabacion2)
exten => s,n,Voicemail(${ARG1})
exten => S,n,Hangup
[No Disponible Recepcion]
exten => 902147424,1,Macro(nodisponible,${BR})
[No Disponible Comercial]
exten => 902147424,1,Macro(nodisponible,${BC})
[No Disponible Soporte]
;Comprobar en la base de datos si el cliente es VIP(contrato de mantenimiento de
24h).Si lo es se le envia a la prioridad 100 sino lo es a la 90.
exten => 902147423,1,MYSQL(Connect connid localhost root root agenda)
exten => 902147423,n,NoOp(connid = ${connid})
exten => 902147423,n,Set(NUM = ${CALLERID(num)})
exten => 902147423,n,MYSQL(Query resultid ${connid SELECT\ mant FROM\ clientes\
INNER\ JOIN\ telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\
telefono="${NUM}"})
exten => 902147423,n,NoOp(resultid = ${resultid})
exten => 902147423,n,MYSQL(Fetch fetchid ${resultid} MANT)
exten => 902147423,n,MYSQL(Disconnect ${connid})
exten => 902147423,n,GotoIf($["${MANT}"="VIP"]?100:90)
exten => 902147423,90,Macro(nodisponible,${BS})
exten => 902147423,100,NoOp(${NUM})
exten => 902147423,n,Gotoif($["${NUM:0:1}" = "6"]?200:300)
exten => 902147423,200,Dial(SIP/+34${MOVIL1}@proxy01.sipphone.com,20,r)
exten => 902147423,n,Dial(Sebi/g1/${MOVIL1},30)
exten => 902147423,n,Dial(SIP/+34${MOVIL2}@proxy01.sipphone.com,20,r)
exten => 902147423,n,Dial(Sebi/g1/${MOVIL2},30)
exten => 902147423,n,AGI(sms_send.php)
exten => 902147423,n,Voicemail(${ARG1})
exten => 902147423,n,Hangup
exten => 902147423,300,Dial(DAHDI/${MOVIL1},20,r)
exten => 902147423,n,Dial(DAHDI/${MOVIL2},20,r)
exten => 902147423,n,AGI(sms_send.php)
exten => 902147423,n,Voicemail(3333)
exten => 902147423,n,Hangup
[No Dispnible Twister]
exten => 945003903,1,Macro(nodisponible,${BT})
[macro-acceso]
exten => s,1,Dial(SIP/${ARG1},30,Ttm)
exten => s,n,Voicemail(${ARG1})
exten => s,n,Hangup
[acceso]
include => skype
include => cisco
include => meetme
include => verbio
include => administracion
include => soportelaboral

486

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;PRUEBAS TRUNK IAX2;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 100,1,Dial(IAX2/portatil/${EXTEN},90,tr)
exten => 100,n,Hangup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;VERBIO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 802,1,Goto(VERBIO_TEST,s,1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;VOICEMAIL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => _XXXX8,1,VoiceMail(${EXTEN:0:4})
exten => _XXXX9,1,VoiceMailMain(${EXTEN:0:4}@default)
;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;RECEPCION;;
;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 1000,1,Macro(acceso,${EXTEN})
exten => 1001,1,Macro(acceso,${EXTEN})
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;COMERCIALES;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 1002,1,Macro(acceso,${EXTEN})
exten => 1003,1,Macro(acceso,${EXTEN})
exten => 1004,1,Macro(acceso,${EXTEN})
exten => 1005,1,Macro(acceso,${EXTEN})
exten => 1006,1,Macro(acceso,${EXTEN})
;;;;;;;;;;;;;;;;;;;;;
;;;;SOPORTE;;
;;;;;;;;;;;;;;;;;;;;;
exten => 2000,1,Macro(acceso,${EXTEN})
exten => 2001,1,Macro(acceso,${EXTEN})
exten => 2002,1,Macro(acceso,${EXTEN})
exten => 2003,1,Macro(acceso,${EXTEN})
exten => 2004,1,Macro(acceso,${EXTEN})
exten => 2005,1,Macro(acceso,${EXTEN})
exten => 2006,1,Macro(acceso,${EXTEN})
;;;;;;;;;;;;;;;;;;;;
;;;;TWISTER;;
;;;;;;;;;;;;;;;;;;;;
exten => 3000,1,Macro(acceso,${EXTEN})
exten => 3001,1,Macro(acceso,${EXTEN})

487

exten => 3002,1,Macro(acceso,${EXTEN})


exten => 3003,1,Macro(acceso,${EXTEN})
exten => 3004,1,Macro(acceso,${EXTEN})
exten => 3005,1,Macro(acceso,${EXTEN})
exten => 3006,1,Macro(acceso,${EXTEN})
exten => 3007,1,Macro(acceso,${EXTEN})
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;DIRECTOR Y CONTABLE;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 4000,1,Macro(acceso,${EXTEN})
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;Usuario Remoto;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 6000,1,Dial(IAX2/${EXTEN},90,tr)
exten => 6000,n,Hangup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Para permitir agregarnos/eliminarnos a/de cualquier cola :
;;;;;;;;;;COLAS:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;--->0: Recepcion
;--->1: Comercial
;--->2: Soporte
;--->3: Twister
;Para agregar: exten+0+numCola
;Para eliminar: exten+1+numCola
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => _XXXX00,1,AddQueueMember(${QR}|SIP/${EXTEN:0:4})
exten => _XXXX00,n,Hangup
exten => _XXXX01,1,AddQueueMember(${QC}|SIP/${EXTEN:0:4})
exten => _XXXX01,n,Hangup
exten => _XXXX02,1,AddQueueMember(${QS}|SIP/${EXTEN:0:4})
exten => _XXXX02,n,Hangup
exten => _XXXX03,1,AddQueueMember(${QT}|SIP/${EXTEN:0:4})
exten => _XXXX03,n,Hangup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => _XXXX10,1,RemoveQueueMember(${QR}|SIP/${EXTEN:0:4})
exten => _XXXX10,n,Hangup
exten => _XXXX11,1,RemoveQueueMember(${QC}|SIP/${EXTEN:0:4})
exten => _XXXX11,n,Hangup
exten => _XXXX12,1,RemoveQueueMember(${QS}|SIP/${EXTEN:0:4})
exten => _XXXX12,n,Hangup

488

exten => _XXXX13,1,RemoveQueueMember(${QT}|SIP/${EXTEN:0:4})


exten => _XXXX13,n,Hangup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => _XXXX20,1,PauseQueueMember(${QR}|SIP/${EXTEN:0:4})
exten => _XXXX20,n,Hangup
exten => _XXXX21,1,PauseQueueMember(${QC}|SIP/${EXTEN:0:4})
exten => _XXXX21,n,Hangup
exten => _XXXX22,1,PauseQueueMember(${QS}|SIP/${EXTEN:0:4})
exten => _XXXX22,n,Hangup
exten => _XXXX23,1,PauseQueueMember(${QT}|SIP/${EXTEN:0:4})
exten => _XXXX23,n,Hangup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => _XXXX30,1,UnpauseQueueMember(${QR}|SIP/${EXTEN:0:4})
exten => _XXXX30,n,Hangup
exten => _XXXX31,1,UnpauseQueueMember(${QC}|SIP/${EXTEN:0:4})
exten => _XXXX31,n,Hangup
exten => _XXXX32,1,UnpauseQueueMember(${QS}|SIP/${EXTEN:0:4})
exten => _XXXX32,n,Hangup
exten => _XXXX33,1,UnpauseQueueMember(${QT}|SIP/${EXTEN:0:4})
exten => _XXXX33,n,Hangup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;CALLBACK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 900,1,Answer
exten => 900,n,Wait(1)
;Asigna a la variable id el numero del llamante
exten => 900,n(inicio),Set(id=${CALLERID(num)})
;Tenemos que indicar el numero de telefono que llamaremos
;(ej: el numero de un cliente).
exten => 900,n,Playback(telephone-number&astcc-followed-by-the-pound-key)
;Asterisk se pondra a la espera de recibir el numero de telefono.
;La aplicacion Read lee literalmente los digitos que presionaremos y los asignara a la
variable appunt.
exten => 900,n,Read(appunt,,15,,2,10)
exten => 900,n,SayDigits(${appunt})
exten => 900,n,Wait(1)
exten => 900,n,Playback(year&month&day)
;Asterisk se pondra a la espera de recibir ao, mes y dia de esta forma:
;
4 digitos para el ao,

489

;
2 digitos para el mes y
;
2 digitos para el da.
;La aplicacion Read asignara esta fecha a la variable fecha.
;Esta sera la fecha en que se efectuara la llamada
exten => 900,n,Read(fecha,,8,,2,10)
exten => 900,n,SayDigits(${fecha})
exten => 900,n,Playback(hours)
;Asterisk se pondr a la espera de recibir la hora de esta forma:
;
2 digitos para las hora y
;
2 digitos para los minutos
;(ej 1130 para las once y treinta, 20:10 para las veinte y diez).
;La aplicacion Read asignara esta hora a la variable hora.
;Esta es la hora programada para la llamada.
exten => 900,n,Read(hora,,4,,2,10)
exten => 900,n,Saydigits(${hora})
exten => 900,n,Playback(if-this-is-correct-press&digits/1&if-this-is-notcorrect&digits/2)
;Asterisk se pondra a la espera de recibir nuestra respuesta (digito 1 o digito 2).
; La variable Read asignara nuestra respuesta a la variable sino.
exten => 900,n,Read(sino,,1,,,5)
;Si la variable sino es igual a 1 iremos directamente a la prioridad marcada con la
etiqueta (cita).
;sino a la prioridad con la etiqueta (inicio).
exten => 900,n,GotoIf($["${sino}" = "1"]?cita:inicio)
;Si confirmamos los datos seguiremos desde esta linea.
;Aqui empieza la creacion del archivo de texto callback
;en la carpeta /tmp que tendra la sintaxis requerida para los callfiles.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;La estructura de un callfiles es la siguiente:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Channel: <channel> ; La extension que queremos llamar
exten => 900,n(cita),System(echo Channel:SIP/${id} >> /tmp/callback)
; Callerid: <callerid> ; El identificativo de llamada que queremos enviar a la
;extension llamada
exten => 900,n,System(echo Callerid:CallBackCita >> /tmp/callback)
; WaitTime: <number> ; Cuantos segundos esperamos antes de considerar la
;llamada sin xito
exten => 900,n,System(echo WaitTime:30 >> /tmp/callback)
; Maxretries: <number> ; Numero de veces que intentaremos llamar la extensin
exten => 900,n,System(echo Maxretries:3 >> /tmp/callback)
; RetryTime: <number> ; Cuantos segundos debe esperar asterisk para volver a
;marcar
exten => 900,n,System(echo RetryTime:300 >> /tmp/callback)
; Account: <account> ; El nombre de la cuenta con la cual queremos grabar esta
;llamada (CDR)
exten => 900,n,System(echo Account:${id} >> /tmp/callback)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

490

;Una vez que la extension llamada conteste tenemos que decirle a asterisk lo que tiene
;que hacer.
;Esto tambien se define en el mismo archivo. Hay dos opciones:
; * Ejecutar una aplicacion:
; Application: <appname> ; la aplicacion que queremos utilizar
; Data: <args> ; aqui podemos definir las opciones de la aplicacion
; * Ejecutar un punto exacto del plan de llamadas (dial plan)
; Context: <context> ; El contexto en el dial plan
; Extension: <exten> ; La extension que queremos usar en el contexto especificado
; Priority: <priority> ; El numero de la prioridad o la etiqueta si definir
; Setvar: <var=value> ; Variables que se pueden necesitar en el contexto,
;extension y prioridad que definimos.
;Elegimos la primera opcion.
exten => 900,n,System(echo Application:Dial >> /tmp/callback)
;Ahora podemos tener dos situaciones:
;
a) el numero de destinacion es una extension interna de la centralita,
;
b) el numero es externo (por ejemplo un celular).
;Si el numero es externo el dialplan seguira desde la etiqueta (gizmo),
;es decir que utilizaremos el proveedor VoIP gizmo5 para hacer la llamada, sino desde
;la etiqueta (local).
exten => 900,n,Gotoif($["${appunt:0:1}" = "6"]?gizmo:local)
;Representa las opciones con las cuales la aplicacion Dial sera ejecutada por ;Asterisk.
exten => 900,n(local),System(echo Data:SIP/${appunt},45,m >> /tmp/callback)
;Con el comando touch cambiamos la fecha y la hora del archivo callback segun
;fecha y hora escogidas.
;Esta sera la fecha y la hora a la que se ejecutara la llamada programada.
exten => 900,n,System(touch -t ${fecha}${hora} /tmp/callback)
;Movemos el archivo callback en la carpeta usada por asterisk para buscar los callfiles ;
;y, para que no hayan duplicados le cambiamos el nombre usando la fecha y la hora de
;la llamada programada.
exten => 900,n,System(mv /tmp/callback/var/spool/asterisk/outgoing /${fecha}
${hora})
exten => 900,n,Hangup
exten => 900,n(gizmo),System(echo Data:SIP/+34${appunt}@proxy01.sipphone.com
>> /tmp/callback)
exten => 900,n,System(touch -t ${fecha}${hora} /tmp/callback)
exten => 900,n,System(mv /tmp/callback /var/spool/asterisk/outgoing/${fecha}
${hora})
exten => 900,n,Hangup
;Ahora a la fecha y hora programadas, asterisk llamara la extension que reservo
;la llamada, una vez que conteste, ejecutara la aplicacion Dial y llamara el numero de
;telefono escogido para la llamada programada y podremos hablar, por ejemplo, con
;nuestro cliente.
;Limites:
;;;;;;;;;;;;;;--------->las llamadas pueden ser programadas solamente desde una extension
;interna de nuestra centralita.
;;;;;;;;;;;;;;--------->Una vez programadas, las llamadas no se pueden borrar.
;Estos archivos se guardan en la carpeta : /var/spool/asterisk/outgoing.

491

[meetme]
;Agregarse a la conferencia 600
exten => 600,1,Meetme(600,i,1234)
;Saber cuantas personas hay en la conferencia
exten => 601,1,Playback(conf-thereare)
exten => 601,n,MeetMeCount(600)
exten => 601,n,Playback(conf-peopleinconf)
;Retringir Numero de personas en la conferencia
exten => 610,1,Set(confmax=2)
exten => 610,n,Macro(meetme)
exten => 602,1,Playback(conf-thereare)
exten => 602,n,MeetMeCount(610)
exten => 602,n,Playback(conf-peopleinconf)
;Crear una conferencia dinamica
exten => 620,1,Meetme(,scDM(default))
exten => 620,n,Hangup
exten => 621,1,Meetme()
exten => 621,n,Hangup
[macro-meetme]
exten => s,1,MeetMeCount(${MACRO_EXTEN},count)
exten => s,n,Gotoif($[${count} >= ${confmax}]?103)
exten => s,n,MeetMe(${MACRO_EXTEN})
exten => s,n,Hangup
exten => s,103,Playback(conf-invalid)
exten => s,104,Hangup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;VERBIO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[verbio]
include => acceso
exten => 8000,1,Answer()
exten => 8000,n,Set(UMBRAL=90)
exten => 8000,n,VerbioLoadVcb(david.txt,connected,,,v)
exten => 8000,n,VerbioLoadVcb(david2.txt,connected,,,v)
exten => 8000,n,Goto(8090,1)
exten => 8090,1,VerbioPromptAndRec(Indique el numero de incidencia para consultar
su estado.Recuerde que tiene cuatro digitos.)
exten => 8090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT0}
${VASR_RESULT1} ${VASR_RESULT2} ${VASR_RESULT3}. Score: ${VASR_SCORE}
Umbral: ${UMBRAL}",,,v)
exten => 8090,n,GotoIf($[$[${VASR_RESULT} != ERROR] &
$[${VASR_SCORE}>${UMBRAL}]]?si:no)
exten => 8090,n(si),VerbioPromptAndRec(Su numero de incidencia es:
${VASR_RESULT0} ${VASR_RESULT1} ${VASR_RESULT2} ${VASR_RESULT3}\, no?)
exten => 8090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}.
Score: ${VASR_SCORE} Umbral: ${UMBRAL}",,,v)
exten => 8090,n,GotoIf($[$[${VASR_RESULT} != ERROR] &
$[${VASR_SCORE}>${UMBRAL}]]?si2:no2)

492

exten => 8090,n(si2),VerbioPrompt(Gracias.)


exten => 8090,n,Hangup
exten => 8090,n,VerbioFreeChannel()
exten => 8090,n(no),VerbioPrompt(Repita por favor.)
exten => 8090,n,Goto(8090,1)
exten => 8090,n(no2),VerbioPrompt(Repita por favor.)
exten => 8090,n,Goto(8090,1)
exten => 8091,1,VerbioFreeChannel()
exten => 7000,1,Answer()
exten => 7000,n,Set(UMBRAL=20)
exten => 7000,n,VerbioLoadVcb(datos.txt,isolated,,,v)
exten => 7000,n,Goto(7090,1)
exten => 7090,1,VerbioPromptAndRec(Bienvenido a Yet Informatica \, de los
siguientes departamentos indiquenos con cual desea hablar\, Soporte\,
Administracion\, Twister\, Comercial.)
exten => 7090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}.
Score: ${VASR_SCORE} Umbral: ${UMBRAL}",,,v)
exten => 7090,n,GotoIf($[$[${VASR_RESULT} != ERROR] &
$[${VASR_SCORE}>${UMBRAL}]]?si:no)
exten => 7090,n,VerbioFreeChannel()
exten => 7090,n(si),VerbioLoadVcb(sino.txt,isolated,,,v)
exten => 7090,n,Set(DPTO= ${VASR_RESULT})
exten => 7090,n,VerbioPromptAndRec(El departamento elegido es: ${VASR_RESULT} \,
no?)
exten => 7090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}.
Score: ${VASR_SCORE} Umbral: ${UMBRAL}",,,v)
exten => 7090,n,GotoIf($[$[${VASR_RESULT} != ERROR] &
$[${VASR_SCORE}>${UMBRAL}]]?si2:no2)
exten => 7090,n(si2),NoOp(" Vamos a llamar: ${DPTO}")
exten => 7090,n,GotoIf($[${DPTO} = SOPORTE ]?soporte:otro)
exten => 7090,n(soporte),Dial(SIP/2000,30,Ttm)
exten => 7090,n,Hangup
exten => 7090,n,VerbioFreeChannel()
exten => 7090,n(otro),GotoIf($[${DPTO} = TWISTER ]?twister:otro1)
exten => 7090,n(twister),Dial(SIP/2003,30,Ttm)
exten => 7090,n,Hangup
exten => 7090,n,VerbioFreeChannel()
exten => 7090,n(otro1),GotoIf($[${DPTO} = COMERCIAL ]?comercial:otro2)
exten => 7090,n(comercial),Dial(SIP/4000,30,Ttm)
exten => 7090,n,Hangup
exten => 7090,n,VerbioFreeChannel()
exten => 7090,n(otro2),Dial(SIP/5000,30,Ttm)
exten => 7090,n,Hangup
exten => 7090,n,VerbioFreeChannel()
exten => 7090,n(no),VerbioPrompt(Repita por favor.)
exten => 7090,n,Goto(7090,1)
exten => 7090,n(no2),VerbioPrompt(Repita por favor.)
exten => 7090,n,Goto(7090,si)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;Ultimas llamadas recibidas;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 76,1,MYSQL(Connect connid localhost root root cdr)
exten => 76,n,NoOp(connid = ${connid})

493

;Con LIMIT 1 indicamos que queremos solo el ultimo registro de esa columna.
;La variable resultid contendra el numero de resultados de la busqueda.
exten => 76,n,MYSQL(Query resultid ${connid} SELECT src FROM cdr WHERE
dst="${CALLERID(num)}" ORDER BY calldate DESC LIMIT 1)
exten => 76,n,NoOp(resultid = ${resultid})
exten => 76,n,MYSQL(Fetch fetchid ${resultid} var1)
exten => 76,n,NoOp(Variable = ${fetchid},${var1})
exten => 76,n,MYSQL(Clear ${resultid})
exten => 76,n,MYSQL(Disconnect ${connid})
exten => 76,n,GotoIf($[ ${fetchid} != 0 ]?bien:mal)
exten => 76,n,NoOp(La ultima llamada recibida ha sido del numero ${var1}.)
;Para llamar a ese numero:
exten => 76,n(bien),Dial(SIP/${var1},30,Ttm)
;Se podria tener en cuenta si el numero es externo o interno para sacarlo por un
;Operador VoIP o no.
exten => 76,n,Hangup
exten => 76,n(mal),NoOp(No hay ninguna llamada recibida.)
exten => 76,n,Hangup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;Ultima llamada realizada;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 75,1,MYSQL(Connect connid localhost root root cdr)
exten => 75,n,NoOp(connid = ${connid})
;Con LIMIT 1 indicamos que queremos solo el ultimo registro de esa columna).
;La variable resulid contendra numero de resultados de la busqueda.
exten => 75,n,MYSQL(Query resultid ${connid} SELECT dst FROM cdr WHERE
src="${CALLERID(num)}" ORDER BY calldate DESC LIMIT 1)
exten => 75,n,NoOp(resultid = ${resultid})
exten => 75,n,MYSQL(Fetch fetchid ${resultid} var1)
exten => 75,n,NoOp(Variable = ${fetchid},${var1})
exten => 75,n,MYSQL(Clear ${resultid})
exten => 75,n,MYSQL(Disconnect ${connid})
;exten => 76,n,VerbioPrompt(La ultima llamada realizada ha sido al numero ${var1})
;Para llamar a ese numero de nuevo:
exten => 75,n,Dial(SIP/${var1},30,Ttm)
exten => 75,n,GotoIf($[${DIALSTATUS} = UNKNOW]?uno)
;Se podria tenern en cuenta si el numero es externo o interno para sacarlo por un
;Operador VoIP o no.
exten => 75,n(uno),NoOp(No se puede llamar a este numero, posiblemente sea una
extension del dialplan.Si quiere llamar a la extension anterior pulse 1.)
exten => 75,n,Set(${DIALSTATUS}=CHANUNAVAIL)
exten => 75,n,GotoIf($[${DIALSTATUS} = CHANUNAVAIL]?dos)
exten => 75,n(dos),MYSQL(Connect connid localhost root root cdr)
exten => 75,n,NoOp(connid = ${connid})
;Con LIMIT 1 indicamos que queremos solo el ultimo registro de esa columna).
;La variable resulid contendra numero de resultados de la busqueda.
exten => 75,n,MYSQL(Query resultid ${connid} SELECT dst FROM cdr WHERE
src="${CALLERID(num)}" ORDER BY calldate DESC LIMIT 2)
exten => 75,n,NoOp(resultid = ${resultid})
exten => 75,n,MYSQL(Fetch fetchid ${resultid} var2)
exten => 75,n,NoOp(Variable = ${fetchid},${var2})
exten => 75,n,MYSQL(Clear ${resultid})
exten => 75,n,MYSQL(Disconnect ${connid})
;Para llamar a ese numero de nuevo:
exten => 75,n,Dial(SIP/${var2},30,Ttm)

494

exten => 75,n,GotoIf($[${DIALSTATUS} = UNKNOW]?uno)


;Se podria tenern en cuenta si el numero es externo o interno para sacarlo por un
;Operador VoIP o no.
exten => 75,n(uno),NoOp(No se puede llamar tampoco este numero.Lo sentimos.)
exten => 75,n,Hangup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;DISA;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;1)
;;;;;;;;;;DESCRIPCION:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;sI LLAMO DESDE MI MOVIL COMPRUEBA QUE ES MI NUMERO Y ;;
;GENERA UN CALL FILE , ESTE ME LLAMA Y ME DA TONO PARA;;
;QUE YO LLAME A TRAVES DE LA CENTRALITA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;exten => _6XXXXXXXX,1,Answer() ;
;Le asignamos a la variable ID el CALLERID
;exten => _6XXXXXXXX,n,Set(ID=${CALLERID(num)}) ;
;Si quiero que sea un servicio privado para mi movil hace falta el GotoIf
;Si quiero que sea un servicio accesible desde cualquier mvil
;Si estoy llamando yo desde mi movil va a la etiqueta llamada, sino cuelga
;exten => _6XXXXXXXX,n,GotoIf($[${ID}=650664616]?llamada:normal)
;;;;;;;;;;;;;;;;;;;Creamos un archivo de texto llamado callback;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;exten => _6XXXXXXXX,n(llamada),System(echo
Channel:SIP/+34${ID}@proxy01.sipphone.com >> /tmp/disa) ;
;exten => _6XXXXXXXX,n,System(echo Callerid:RECALL >> /tmp/disa) ;
;exten => _6XXXXXXXX,n,System(echo WaitTime:30 >> /tmp/disa) ;
;exten => _6XXXXXXXX,n,System(echo Maxretries:2 >> /tmp/disa);
;exten => _6XXXXXXXX,n,System(echo RetryTime:300 >> /tmp/disa);
;exten => _6XXXXXXXX,n,System(echo Account:2000 >> /tmp/disa);
;exten => _6XXXXXXXX,n,System(echo Application:Disa >> /tmp/disa);
;exten => _6XXXXXXXX,n,System(echo Data:no-password|acceso >> /tmp/disa);
;exten => _6XXXXXXXX,n,Wait(1)
;La llamada se ha terminado
;exten => _6XXXXXXXX,n,Playback(call-terminated) ;
;exten => _6XXXXXXXX,n,System(mv /tmp/disa /var/spool/asterisk/outgoing);
;exten => _6XXXXXXXX,n(normal),Hangup() ;
;2)
;;;;;;;;;;DESCRIPCION:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;AL MARCAR LA EXTENSION 333 DEBE LLAMARME AL MOVIL Y DARME TONO PARA
;PODER LLMAR A TRAVES DE LA CENTRALITA;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 333,1,Answer() ;
;Le asignamos a la variable ID el CALLERID
exten => 333,n,Set(ID=${CALLERID(num)}) ;
exten => 333,n,GotoIf($[${ID}=2003]?llamada:normal) ;
;;;;;;;;;;;;;;;;;;Creamos un archivo de texto llamado disa;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 333,n(llamada),System(echo Channel:SIP/+34650664616
@proxy01.sipphone.com >> /tmp/disa)
exten => 333,n,System(echo Callerid:RECALL >> /tmp/disa)
exten => 333,n,System(echo WaitTime:30 >> /tmp/disa)

495

exten => 333,n,System(echo Maxretries:2 >> /tmp/disa)


exten => 333,n,System(echo RetryTime:300 >> /tmp/disa)
exten => 333,n,System(echo Account:2000 >> /tmp/disa)
exten => 333,n,System(echo Application:Disa >> /tmp/disa)
exten => 333,n,System(echo Data:1234 >> /tmp/disa)
exten => 333,n,Wait(1)
;La llamada se ha terminado
exten => 333,n,Playback(call-terminated)
exten => 333,n,System(mv /tmp/disa /var/spool/asterisk/outgoing/disa)
exten => 333,n(normal),Hangup()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Uso de DISA: LLAMAR 9999,MARCAR 1234#,SEGUN DE TONO MARCAR CUALQUIER
;EXTENSION DEL CONTEXTO ACCESO;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 9999,1,Answer
exten => 9999,n,DISA(1234|acceso)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;DESVIO DE LLAMADAS AL EXTERIOR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
exten => 71,1,Goto(callfwd-add,s,1)
exten => 72,1,Goto(callfwd-remove,s,1)
;exten => 5000,1,Answer() ; contestamos la llamada
;exten => 5000,n,Set(NUM=${DB(${EXTEN}/FORW)}) ; Leemos la base de datos
;exten => 5000,n,GotoIf($["${NUM}" != ""]?forw)
;exten => 5000,n,Hangup()
;exten => 5000,n(forw),Dial(SIP/+34${NUM}@proxy01.sipphone.com,20,r)
;exten => 5000,n,Hangup()
[callfwd-add]
exten => s,1,Answer()
exten => s,n,Set(NUM=${CALLERID(num)})
exten => s,n,Set(COUNT=1)
exten => s,n(inicio),Playback(please-enter-the&telephone-number&for&your&callforwarding&astcc-followed-by-the-pound-key)
; digitar el numero al cual queremos desviar todas las llamadas
exten => s,n,Read(forw,,15,,2,10)
exten => s,n,Playback(call-forwarding) : La voz de asterisk dir que el desvo de la
;llamada ha sido configurado para el numero
exten => s,n,Playback(has-been-set-to)
exten => s,n,SayDigits(${forw})
exten => s,n,Playback(if-this-is-correct-press&digits/1&if-this-is-not-correct&digits/2) ;
;Si el numero que escuchamos es exacto presionamos 1 sino 2
exten => s,n,Read(sino,,1,,,5)
exten => s,n,GotoIf($["${sino}" = "1"]?setf:conta)
exten => s,n(conta),Set(COUNT=$[${COUNT} + 1])
exten => s,n,Gotoif($["${COUNT}" < "4"]?inicio:bye) ; si la variable COUNT es menor
;que 4 vamos a etiqueta inicio sino a la etiqueta bye. Esto sirve para permitir tres
;intentos de configuracin antes de colgar la llamada.
exten => s,n(setf),Set(DB(${NUM}/FORW)=${forw}) ; etiqueta setf, guardamos en
;numero en la base de datos interna de Asterisk

496

exten => s,n,Wait(1)


exten => s,n(bye),Playback(goodbye)
exten => s,n,Hangup
[callfwd-remove]
exten => s,1,Answer
exten => s,n,Set(NUM=${CALLERID(num)})
exten => s,n,Wait(1)
exten => s,n,Set(forw=${DB_DELETE(${NUM}/FORW)})
exten => s,n,Playback(call-fwd-cancelled)
exten => s,n,Playback(goodbye)
exten => s,n,Hangup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;SKYPE FOR ASTERISK;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Context for our users
[skype]
include => acceso
exten => 7000,1,Goto(acceso,3000,1)
exten => 8000,1,Dial(Skype/davidin99,30,tT)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;CISCO 7941;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[cisco]
include => acceso
exten => 5000,1,Dial(SIP/5000)
exten => 5000,n,Hangup()

sip.conf
[general]
context=default
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
srvlookup=yes
language=es
callevents=yes
register => 17473702523:Yet100:17473702523@proxy01.sipphone.com/17473702523
[plantillasip](!)
type=friend
secret=1234
host=dynamic
context=acceso
canreinvite=yes
dtmfmode=rfc2833
nat=no

497

[1000](plantillasip)
username=1000
mailbox=1000
callgroup=1
pickupgroup=1-4
[1001](plantillasip)
username=1001
mailbox=1001
callgroup=1
pickupgroup=1-4
[1002](plantillasip)
username=1002
mailbox=1002
callgroup=1
pickupgroup=1-4
[1003](plantillasip)
username=1003
mailbox=1003
callgroup=1
pickupgroup=1-4
[1004](plantillasip)
username=1004
mailbox=1004
callgroup=1
pickupgroup=1-4
[1005](plantillasip)
username=1005
mailbox=1005
callgroup=1
pickupgroup=1-4
[1006](plantillasip)
username=1006
mailbox=1006
callgroup=1
pickupgroup=1-4
[2000](plantillasip)
username=2000
mailbox=2000
callgroup=2
pickupgroup=1-4
[2001](plantillasip)
username=2001
mailbox=2001
callgroup=2
pickupgroup=2
[2002](plantillasip)
username=2002

498

mailbox=2002
callgroup=2
pickupgroup=2
[2003](plantillasip)
username=2003
mailbox=2003
callgroup=2
pickupgroup=2
[2004](plantillasip)
username=2004
mailbox=2004
callgroup=2
pickupgroup=2
[2005](plantillasip)
username=2005
mailbox=2005
callgroup=2
pickupgroup=2
[2006](plantillasip)
username=2006
mailbox=2006
callgroup=2
pickupgroup=2
[3000](plantillasip)
username=3000
mailbox=3000
callgroup=3
pickupgroup=1-4
[3001](plantillasip)
username=3001
mailbox=3001
callgroup=3
pickupgroup=3
[3002](plantillasip)
username=3002
mailbox=3002
callgroup=3
pickupgroup=3
[3003](plantillasip)
username=3003
mailbox=3003
callgroup=3
pickupgroup=3
[3004](plantillasip)
username=3004
mailbox=3004
callgroup=3
pickupgroup=3

499

[3005](plantillasip)
username=3005
mailbox=3005
callgroup=3
pickupgroup=3
[3006](plantillasip)
username=3006
mailbox=3006
callgroup=3
pickupgroup=3
[3007](plantillasip)
username=3007
mailbox=3007
callgroup=3
pickupgroup=3
[4000](plantillasip)
username=4000
mailbox=4000
callgroup=4
pickupgroup=1-4
[5000]
username=5000
mailbox=5000
type=friend
secret=1234
host=dynamic
context=acceso
canreinvite=yes
dtmfmode=rfc2833
callgroup=4
pickupgroup=1-4
[proxy01.sipphone.com]
type=peer
context=from-external
disallow=all
allow=ulaw
allow=alaw
allow=ilbc
dtmfmode=rfc2833
host=proxy01.sipphone.com
fromdomain=proxy01.sipphone.com
insecure=very
qualify=yes
username=17473702523
fromuser=17473702523
authuser=17473702523
secret=Yet100
canreinvite=no

500

iax.conf
[general]
bindport=4569
bindaddr=0.0.0.0
srvlookup=yes
accountcode=lss0101
delayreject=yes
language=es
disallow=all
allow=gsm
allow=ulaw
allow=alaw
[portatil]
type=friend
username=centralyet
auth=plaintext
context=acceso
peercontext=acceso2
secret=123
host=192.168.1.207
callerid='portatil'
trunk=yes
requirecalltoken=no

501

Glosario

ACD: Sistema Automtico de Distribucin de Llamadas Entrantes


AEL: Asterisk Exchange Language
AGI: Asterisk Gateway Interface
AJAM: Asyncronous Javascript Asterisk Manager
AMI: Asterisk Management Interface
ARA: Asterisk Realtime Architecture
ATA: Analog Telephone Adapter
502

CDR: Call Detail Record


CTI: Computer Telephony Integration
DID: Direct In Dial
DISA: Direct Inward System Adress
DND: Do Not Disturb
DUNDI: Dsitribud Universal Number Discovery
FXO: Foreign Exchange Office
FXS: Foreign Exchange Station
IAX: Inter-Asterisk Exchange
IETF: Internet Engineering Task Force
ITU: International Telecomunication Union
IVR: Interactive Voice Response
LCR: Least Cost Routing
MGCP: Media Gateway Control Protocol
NAT: Network Adress Translators
NT: Network Termination
NTP: Network Transport Protocol
PBX: Private Branch Exchange
QoS: Quality of Service
RDSI: Red Digital de Servicios Integrados
RTCP: RealTime Transport Control Protocol
RTP: RealTime Transport Protocol
SIP: Session Initiation Protocol
SCCP: Skinny Client Control Protocol
503

STUN: Simple Transversal of UDP through NATs


TE: Terminal Equipment

504

Bibliografa

FOROS:
<http://groups.google.es/group/asterisk-es>
<http://perlenespanol.com/foro/>

LIBROS Y TUTORIALES:
<http://cdn.oreilly.com/books/9780596510480.pdf>
<http://asterio.com.ar/resources/downloads/Asterisk_desconsolado.pdf>
<http://lax.franhp.net/Asterisk/Curs_asterisk_tecnoba_3.pdf>

VOIP:
<http://www.voipnovatos.es>
<http://blog.voipminic.com/>
<http://www.voip-info.org/>

505

ASTERISK:
<http://www.sinologic.net/>
<http://www.asteriskdocs.org>
<http://www.the-asterisk-book.com/unstable/>

PRACTICAS Y APLICACION:
<http://www.linux-es.org/distribuciones>

Instalacion y configuracion de Asterisk:


<http://www.asterisk.org/>
<http://www.asteriskclub.org/>
<http://www.loligo.com/asterisk/example-configs.2003-04-24/>
<http://www.asteriskguru.com>
<http://www.voztovoice.org/?q=node/199>

Preparacin del servidor:


<http://zeuz-dc.blogspot.com/2008/06/servidor-dhcp.html>
<http://www.davidstclair.co.uk/node/18>
<http://r3xet.blogspot.com/2008/11/instalar-mysql-5-sobre-linux-centos-5.html>
<http://cjaraba.blogspot.com/2008/03/instalar-apache-y-tomcat-en-centos.html>
<http://foro.portalhacker.net/index.php/topic,10896.0.html>
<http://www.aoddy.com/2007/12/12/how-to-install-phpmyadmin-2113-on-centos-5/>
<http://spot-myblog.blogspot.com/2009/09/glibc-svn-and-qt.html>

Funcionalidades:
<http://www.verbio.com/>
<http://www.fop2.com/>
<http://www.asternic.biz/>
<http://blog.voz-ip.com/>
<http://www.saghul.net/blog/>
<http://www.voipnovatos.es/item/2009/12/cmo-instalar-chan_skype-para-asterisk-14-o-16>
<http://www.asterisk-peru.org/node/25>
<http://www.ecualug.org/?q=2007/03/19/comos/conectar_dos_localidades_usandoasterisk>
<http://www.vicosoft.org/blog/%C2%BFque-es-nagios/>
<http://www.bulma.net/body.phtml?nIdNoticia=2075>
<http://bargues.info/?cat=35>
<http://ualtech.wordpress.com/2009/02/05/tutorial-sobre-monitorizacion-de-asteriskusando-nagios/>
<http://www.mitelefoniaip.com/item/72>
<http://wiki.centos.org/es/HowTos/Nagios>

Precios:
<http://www.amazon.com/ProCurve-Switch-1400-8G-Gigabit-Network/dp/B000P22S2Q>
<http://sanisidro-buenosaires.olx.com.ar/sipura-spa-3000-ata-adaptador-telefonico-analogicoiid-14097216>
<http://www.ciao.es/Cisco_IP_Phone_7941__1114209>

506

También podría gustarte