Está en la página 1de 530

Departamento de Lenguajes y Lengoaia eta Sistema

Sistemas Informticos 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.

1
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.

2
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

4
5
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

6
7
8
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

9
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

Ordenadores

Las caractersticas
tcnicas del PC son las
siguientes: Intel Xeon
HP PROLIANT ML110 G5
(Servidor) 3065 Dual Core a 2,33 300,00 1
GHz, 1GB de memoria
RAM, 250GB de disco
duro.

Las caractersticas
HP Compaq tcnicas del PC son las
600,00 1
(Ordenador) siguientes: Intel Pentium
4CPU 280GHz, 504MB
de RAM.

Las caractersticas
tcnicas del PC son las
Amilo Notebook Pi3540
siguientes: Intel Core 2
(Portatil1) 500,00 2
Duo P8600,320GB de
(Portatil2)
disco y 4GB de RAM

26
Telfonos

Sipura SPA 841


(Sipura1) 3
Telfono IP (SIP) 149,97
(Sipura2)
(Sipura3)

ALLNET ALL7960
Telfono IP (SIP e IAX) 61,89 1
(ALLNET)

Inalmbrico Alcatel
Versatis 620 Duo
(Telefono1) Telefono Analgico 49,00 2
(Telefono2)

Cisco 7941 Telfono IP (SCCP) 163,85 1

Otros

TDM400P
Tarjeta de Telefona 135,00 1
(Tarjeta)

SPA 3000
Adaptador de Telefona 1
(ATA) 44,53
Analgico(1FXS y 1FXO)

HSDPA DL 7.2 MBPS,


Modem Huawei K3520 incorporacin de 54,90 1
Micro SD.

Switch Procure Switch 14000-


(Switch1) 8G J9077A (22 puertos 2
54,69
(Switch2) 10/100/1000 y 2 puertos
de doble personalidad)

27
Router
Router ADSL 150,00 2
(Router1)(Router2)

Por otra parte el Software utilizado ser el siguiente:

Recurso Descripcin Precio Unidades

Microsoft Office Paquete con Visio


300,00 1
Profesional 2007 y Proyect 2007

Commpilador de
Netbeans 6.7.1 Lenguajes de 00,00 1
Programacin

Cliente SSH para


Putty 00,00 1
acceso al Servidor

Cliente SFTP para


WinSCP 00,00 1
acceso al Servidor

Gestor de Bases
MySQL 5.0.27 00,00 1
de Datos

Skype Softphone 00,00 2

Canal de conexion
Licencia chan_skype 45,92 1
con Asterisk

Firefox 3.5 Navegador Web 00,00 1

Zoiper Softphone 00,00 2

28
Agenda del proyecto

Agenda de recursos:

Trabajo Costo ()
Recurso Tareas asociadas
(horas)

David 2.522 983,58

Anlisis del trabajo a realizar 26 10,14

Iniciacin en Linux 240 93,60

Estudio y aprendizaje sobre 94,60


240
telefona y VoIP

Estudio y aprendizaje sobre 93,60


240
el mundo Asterisk

Elaboracin de la memoria I: 62,40


160
Introduccin a la VoIP

Pruebas de montaje de 31,20


80
centralitas Asterisk

Pruebas con SoftPhones y 7,80


20
Telefonos IP

Elaboracin de la memoria II: 62,40


160
Asterisk, el futuro de la telefona

Pruebas de funcionamiento de 1,95


5
Elastix

Pruebas de configuracin 11,70


30
de funcionalidades

29
Pruebas de integracin con FOP 15 5,85

Pruebas de integracin 3,9


10
con Call Center Stats

Pruebas de integracin con CDR 3,9


10
Reports

Montaje de centralita de 5,85


15
pruebas II con TDM400P

Pruebas TDM400P 5 1,95

Programacin y Pruebas Google


Calendar I: Interactuacin con los 30 11,70
calendarios

Programacin y Pruebas Google 11,70


30
Calendar II: Envio de SMS

Elaboracin de la memoria III: 23,40


60
Prcticas realizadas

Elaboracin de la memoria IV: 46,80


120
Viabilidad del proyecto

Montaje centralita Yet 7,80


20
Informtica

Anlisis de requerimientos y 5,85


15
requisitos

Diseo del Dialplan 30 11,70

Puesta a punto del servidor 16 6,24

30
Instalacin de Asterisk 5 1,95

Programacin de ficheros de 11,70


30
configuracin y Dialplan

Integracin de ficheros de 1,17


3
configuracin

Pruebas I 5 1,95

Solucin de errores I 16 6,24

Elaboracion de la memoria V: 23,40


60
Aplicacon

Tratamiento de 11,70
30
funcionalidades extra

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 7,80


20
(Agenda)

Elaboracin de la memoria VI: 13,65


35
Pruebas de la Aplicacin

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 9,75


25
y servicio SNMP

Integracin Asterisk-Nagios 20 7,80

Pruebas IV 15 5,85

Pruebas ATA (SPA 3000) Y 5,85


15
Chan_Sebi

Pruebas TRUNK IAX 2 y usuario 7,80


20
remoto

Integracin y pruebas con Skype 15 5,85

Conversin telefonos IP (de SCCP 15,60


40
a SIP), configuracin y pruebas

Elaboracin de la memoria VII: 7,80


20
Finalizacin

Elaboracin de la Presentacin 30 11,70

Servidor 26 32,50

Pruebas con SoftPhones y 1,25


1
Telefonos IP

32
Pruebas de funcionamiento de 1,25
1
Elastix

Pruebas de configuracin 1,25


1
de funcionalidades

Pruebas de integracin con FOP 1 1,25

Pruebas de integracin 1,25


1
con Call Center Stats

Pruebas de integracin con CDR 1,25


1
Reports

Montaje de centralita de 1,25


1
pruebas II con TDM400P

Pruebas TDM400P 1 1,25

Montaje centralita Yet 1,25


1
Informtica

Puesta a punto del servidor 1 1,25

Instalacin de Asterisk 1 1,25

Programacin de ficheros de 1,25


1
configuracin y Dialplan

Integracin de ficheros de 1,25


1
configuracin

Pruebas I 1 1,25

33
Solucin de errores I 1 1,25

Tratamiento de 1,25
1
funcionalidades extra

Programacin Callback y DISA 1 1,25

Pruebas II 1 1,25

Integracin Verbio-Asterisk 1 1,25

Pruebas III 1 1,25

Integracin Asterisk-Nagios 1 1,25

Pruebas IV 1 1,25

Pruebas ATA (SPA 3000) Y 1,25


1
Chan_Sebi

Pruebas TRUNK IAX 2 y usuario 1,25


1
remoto

Integracin y pruebas con Skype 1 1,25

Conversin telefonos IP (de SCCP 1,25


1
a SIP), configuracin y pruebas

Ordenador 27 33,75

Pruebas de montaje de 1,25


1
centralitas Asterisk

34
Pruebas con SoftPhones y 1,25
1
Telefonos IP

Pruebas de funcionamiento de 1,25


1
Elastix

Pruebas de configuracin 1,25


1
de funcionalidades

Pruebas de integracin con FOP 1 1,25

Pruebas de integracin 1,25


1
con Call Center Stats

Pruebas de integracin con CDR 1,25


1
Reports

Montaje de centralita de 1,25


1
pruebas II con TDM400P

Pruebas TDM400P 1 1,25

Montaje centralita Yet 1,25


1
Informtica

Puesta a punto del servidor 1 1,25

Instalacin de Asterisk 1 1,25

Programacin de ficheros de 1,25


1
configuracin y Dialplan

Integracin de ficheros de 1,25


1
configuracin

35
Pruebas I 1 1,25

Solucin de errores I 1 1,25

Tratamiento de 1,25
1
funcionalidades extra

Programacin Callback y DISA 1 1,25

Pruebas II 1 1,25

Integracin Verbio-Asterisk 1 1,25

Pruebas III 1 1,25

Integracin Asterisk-Nagios 1 1,25

Pruebas IV 1 1,25

Pruebas ATA (SPA 3000) Y 1,25


1
Chan_Sebi

Pruebas TRUNK IAX 2 y usuario 1,25


1
remoto

Integracin y pruebas con Skype 1 1,25

Conversin telefonos IP (de SCCP 1,25


1
a SIP), configuracin y pruebas

Portatil1 17 21,25

36
Iniciacin en Linux 1 1,25

Estudio y aprendizaje 1,25


1
sobre telefona y VoIP

Estudio y aprendizaje sobre 1 1,25


el mundo Asterisk

Elaboracin de la memoria I: 1 1,25


Introduccin a la VoIP

Elaboracin de la memoria II: 1 1,25


Asterisk, el futuro de la telefona

Programacin y Pruebas Google 1,25


Calendar I: Interactuacin con los 1
calendarios

Programacin y Pruebas Google 1 1,25


Calendar II: Envio de SMS

Elaboracin de la memoria III: 1 1,25


Prcticas realizadas

Elaboracin de la memoria IV: 1 1,25


Viabilidad del proyecto

Anlisis de requerimientos y 1 1,25


requisitos

37
1 1,25
Diseo del Dialplan

Elaboracion de la memoria V: 1 1,25


Aplicacon

Elaboracin de la memoria VI: 1,25


1
Pruebas de la Aplicacin

1 1,25
Instalacin y Estudio de Verbio

Instalacin y Estudio de 1 1,25


Nagios y servicio SNMP

1 1,25
Elaboracin de la Presentacin

Elaboracin de la memoria VII: 1 1,25


Finalizacin

Portatil2 6 7,5

Anlisis de requisitos 1 1,25

Diseo interfaz grfica 1 1,25

Programacin Web 1 1,25

Pruebas de funcionamiento 1 1,25

Pruebas ATA (SPA 3000) 1,25


1
y Chan_Sebi

38
Pruebas TRUNK IAX 2 1,25
1
y usuario remoto

Sipura1 20 5,00

Pruebas con SoftPhones 1 0,25


y Telefonos IP

Pruebas de funcionamiento 1 0,25


de Elastix

Pruebas de configuracin 0,25


1
de funcionalidades

1 0,25
Pruebas de integracin con FOP

Pruebas de integracin con Call 1 0,25


Center Stats

Pruebas de integracin con CDR 1 0,25


Reports

Montaje de centralita de pruebas 1 0,25


II con TDM400P

1 0,25
Pruebas TDM400P

Programacin y Pruebas Google 0,25


Calendar I: Interactuacin con los 1
calendarios

39
Programacin y Pruebas Google 1 0,25
Calendar II: Envio de SMS

1 0,25
Pruebas I

1 0,25
Solucin de errores I

Tratamiento de funcionalidades 0,25


1
extra

1 0,25
Programacin Callback y DISA

1 0,25
Pruebas II

1 0,25
Pruebas III

Pruebas ATA (SPA 3000) Y 1 0,25


Chan_Sebi

Pruebas TRUNK IAX 2 1 0,25


y usuario remoto

Integracin y pruebas con Skype 1 0,25

Conversin telefonos IP (de SCCP 0,25


1
a SIP), configuracin y pruebas

Sipura2 5 1,25

40
Pruebas con SoftPhones 0,25
1
y Telefonos IP

Pruebas I 1 0,25

Solucin de errores I 1 0,25

Tratamiento de 0,25
1
funcionalidades extra

Pruebas TRUNK IAX 2 0,25


1
y usuario remoto

Sipura3 3 0,75

Pruebas con SoftPhones 0,25


1
y Telefonos IP

Pruebas I 1 0,25

Solucin de errores I 1 0,25

ALLNET 3 0,75

Pruebas con SoftPhones 0,25


1
y Telefonos IP

Pruebas I 1 0,25

Solucin de errores I 1 0,25

Telefono1 2 0,50

41
Montaje de centralita de 0,25
1
pruebas II con TDM400P

Pruebas TDM400P 1 0,25

Telefono2 1 0,25

Pruebas ATA (SPA 3000) 0,25


1
y Chan_Sebi

ATA 1 0,25

Pruebas ATA (SPA 3000) 0,25


1
Y Chan_Sebi

Tarjeta 2 1,00

Montaje de centralita de 0,50


1
pruebas II con TDM400P

Pruebas TDM400P 1 0,50

sebi 1 0,15

Pruebas ATA (SPA 3000) 0,15


1
y Chan_Sebi

Switch1 28 7,00

Pruebas con SoftPhones 0,25


1
y Telefonos IP

42
Pruebas de funcionamiento 0,25
1
de Elastix

Pruebas de configuracin 0,25


1
de funcionalidades

Pruebas de integracin con FOP 1 0,25

Pruebas de integracin 0,25


1
con Call Center Stats

Pruebas de integracin 0,25


1
con CDR Reports

Montaje de centralita 0,25


1
de pruebas II con TDM400P

Pruebas TDM400P 1 0,25

Programacin y Pruebas Google


Calendar I: Interactuacin con los 1 0,25
calendarios

Programacin y Pruebas Google 0,25


1
Calendar II: Envio de SMS

Montaje centralita Yet 0,25


1
Informtica

Puesta a punto del servidor 1 0,25

Instalacin de Asterisk 1 0,25

Programacin de ficheros de 0,25


1
configuracin y Dialplan

43
Integracin de ficheros 0,25
1
de configuracin

Pruebas I 1 0,25

Solucin de errores I 1 0,25

Tratamiento de 0,25
1
funcionalidades extra

Programacin Callback y DISA 1 0,25

Pruebas II 1 0,25

Integracin Verbio-Asterisk 1 0,25

Pruebas III 1 0,25

Integracin Asterisk-Nagios 1 0,25

Pruebas IV 1 0,25

Pruebas ATA (SPA 3000) 0,25


1
Y Chan_Sebi

Pruebas TRUNK IAX 2 y usuario 0,25


1
remoto

Integracin y pruebas con Skype 1 0,25

Conversin telefonos IP (de SCCP 0,25


1
a SIP), configuracin y pruebas

44
Pruebas con SoftPhones y 0,25
1
Telefonos IP

Switch2 2 0,50

Pruebas ATA (SPA 3000) 0,25


1
y Chan_Sebi

Pruebas TRUNK IAX 2 0,25


1
y usuario remoto

Router1 36 9,00

Pruebas de montaje 0,25


1
de centralitas Asterisk

Estudio y aprendizaje 0,25


1
sobre el mundo Asterisk

Estudio y aprendizaje 0,25


1
sobre telefona y VoIP

Pruebas con SoftPhones 0,25


1
y Telefonos IP

Pruebas de funcionamiento 0,25


1
de Elastix

Pruebas de configuracin 0,25


1
de funcionalidades

Pruebas de integracin con FOP 1 0,25

Pruebas de integracin 0,25


1
con Call Center Stats

45
Pruebas de integracin 0,25
1
con CDR Reports

Montaje de centralita de 0,25


1
pruebas II con TDM400P

Pruebas TDM400P 1 0,25

Programacin y Pruebas Google


Calendar I: Interactuacin 1 0,25
con los calendarios

Programacin y Pruebas Google 0,25


1
Calendar II: Envio de SMS

Montaje centralita Yet 0,25


1
Informtica

Anlisis de requerimientos 0,25


1
y requisitos

Puesta a punto del servidor 1 0,25

Instalacin de Asterisk 1 0,25

Programacin de ficheros de 0,25


1
configuracin y Dialplan

Integracin de ficheros 0,25


1
de configuracin

Pruebas I 1 0,25

Solucin de errores I 1 0,25

46
Elaboracin de la memoria V: 0,25
1
Aplicacin

Tratamiento de 0,25
1
funcionalidades extra

Programacin Callback y DISA 1 0,25

Pruebas II 1 0,25

Elaboracin de la memoria VI: 0,25


1
Pruebas de la Aplicacin

Instalacin y Estudio de Verbio 1 0,25

Integracin Verbio-Asterisk 1 0,25

Pruebas III 1 0,25

Instalacin y Estudio de Nagios 0,25


1
y servicio SNMP

Integracin Asterisk-Nagios 1 0,25

Pruebas IV 1 0,25

Pruebas ATA (SPA 3000) 0,25


1
Y Chan_Sebi

Pruebas TRUNK IAX 2 0,25


1
y usuario remoto

Integracin y pruebas con Skype 1 0,25

47
Conversin telefonos IP (de SCCP 0,25
1
a SIP), configuracin y pruebas

Router2 7 1,75

Iniciacin en Linux 1 0,25

Anlisis de requisitos 1 0,25

Diseo interfaz grfica 1 0,25

Programacin Web 1 0,25

Pruebas de funcionamiento 1 0,25

Pruebas ATA (SPA 3000) 0,25


1
Y Chan_Sebi

Pruebas TRUNK IAX 2 0,25


1
y usuario remoto

CISCO 1 0,50

Conversin telefonos IP (de SCCP 1,75


7
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

Recursos Materiales Amortizables (Hw)

Servidor 26 1,25 32,50


Ordenador 27 1,25 33,75
Portatil1 17 1,25 21,25
Portatil2 6 1,25 7,50
Sipura1 20 0,25 5,00
Sipura2 5 0,25 1,25
Sipura3 3 0,25 0,75

ALLNET 3 0,25 0,75


Telefono1 2 0,25 0,50
Telefono2 1 0,25 0,25
ATA 1 0,25 0,25
Tarjeta 2 0,50 1,00
sebi 1 0,15 0,15
Switch1 28 0,25 7,00
Switch2 2 0,25 0,50
Router1 36 0,25 9,00

52
Router2 7 0,25 1,75
CISCO 1 0,50 0,50
123,65

Clculo de la Amortizacin de los Recursos Amortizables:

Coste Unitario
Coste Tiempo de Tiempo
de Importe
Concepto Unitario Amortizacin de Uso
Amortizacin ()
() (horas) (horas)
(/h)

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 6 0,63
Sipura1 149,97 4800 0,0312 20 0,62
Sipura2 149,97 4800 0,0312 5 0,16
Sipura3 149,97 4800 0,0312 3 0,09
ALLNET 61,89 4800 0,0129 3 0,03
Telefono1 49,00 4800 0,0102 2 0,02
Telefono2 49,00 4800 0,0102 1 0,01
ATA 44,53 4800 0,009 1 0,01
Tarjeta 135,00 4800 0,0281 2 0,06
sebi 54,90 4800 0,011 1 0,01
Switch1 54,69 4800 0,011 28 0,31
Switch2 54,69 4800 0,011 2 0,02
Router1 150,00 4800 0,031 36 1,15
Router2 150,00 4800 0,031 7 0,22
CISCO 163,85 4800 0,034 1 0,03
SUBTOTAL 10,15
Microsoft
Office
300,00 4800 0,0625 525 32,81
Profesional
2007
Netbeans
Gratuito 4800 - - 0,00
6.7.1

53
Putty Gratuito 4800 - - 0,00
WinSCP Gratuito 4800 - - 0,00
MySQL
Gratuito 4800 - - 0,00
5.0.27
Skype Gratuito 4800 - 15 0,00
Licencia
45,92 4800 0,0096 15 0,14
chan_skype
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

1
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.voip-
info.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

2
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 250.463


Esfuerzo estimado de desarrollo (persona/ao - persona/mes) 66,03 -792,30
Estimacin de tiempo (aos) 2,63
Estimacin de nmero de desarrolladores en paralelo 25,08
Coste total estimado 8.919.128 $

Lenguajes de programacin en Asterisk 1.4.0:

Lenguaje Lneas de cdigo Porcentaje


ANSI C 232.514 92,83%
sh 7.550 3,01%
cpp 5.815 2,32%
perl 2.259 0,90%
yacc 1.508 0,60%
asm 642 0,26%
tcl 113 0,05%
PHP 62 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/asterisk-
1.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 auto-


incremental, 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 libselinux-


devel 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 caracteristica-
rica VoIP PBX o sistema.

Caractersticas:

-Soporte de Asterisk Bussiness Ed. -Hangup -SayUnixTime


-AbsoluteTimeout -HasNewVoicemail -SendDTMF
-AddQueueMember -HasVoicemail -SetAccount
-ADSIprog -IAX2Provision -SetAMAFlags
-AgentCallbackLogin -ImportVar -SetCallerID
-AgentLogin -LookupBlacklist -SetCallerPres
-AgentMonitorOutgoing -LookupCIDName -SetCDRUserField
-AGI -Macro -SetCIDName
-Answer -MacroExit -SetCIDNum
-AppendCDRUserField -MacroIf -SetGlobalVar
-Authenticate -MailboxExists -SetGroup
-Background -Math -SetLanguage
-BackgroundDetect -MD5 -SetMusicOnHold
-Busy -MD5Check -SetRDNIS
-ChangeMonitor -MeetMe -SetVar
-ChanIsAvail -MeetMeAdmin -SIPAddHeader
-ChanSpy -MeetMeCount -SIPDtmfMode
-CheckGroup -Milliwatt -SIPGetHeader
-Congestion -Monitor -SoftHangup
-ControlPlayback -MP3Player -StartMusicOnHold
-Cut -MusicOnHold -StopMonitor

166
-DateTime -NoCDR -StopMusicOnHold
-DBDel -NoOp -StopPlayTones
-DBdeltree -Park -StripLSD
-DBGet -ParkAndAnnounce -StripMSD
-DBPut -ParkedCall -Suffix
-Dial -PauseQueueMember -System
-DigitTimeout -Playback -TestClient
-Directory -PlayTones -TestServer
-DISA -Prefix -Transfer
-DumpChan -PrivacyManager -TryServer
-DUNDiLookup -Progress -TXTCIDName
-Echo -Queue -UnpauseQueueMember
-Endwhile -Random -UserEvent
-EnumLookup -Read -Verbose
-Eval -ReadFile -VMAuthenticate
-Exec -RealTime -VoiceMail
-ExecIf -RealTimeUpdate -VoiceMailMain
-ExecIfTime -RemoveQueueMember -Wait
-Flash -RetryDial -WaitExten
-ForkCDR -ResetCDR -WaitForRing
-GetCPEID -ResponseTimeout -WaitForSilence
-GetGroupCount -Ringing -WaitMusicOnHold
-GetGroupMatchCount -SayAlpha -While
-Goto -SayDigits -Zapteller
-GotoIf -SayNumber -ZapBarge
-GotoIfTime -SayPhonetic -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 Servidor IVR


Skype Gateway Sistema de buzn de voz
IP PBX Call Recorder
Call Center ACD Servidor de fax
Conferencia de Speech Server
Puente

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

3
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 192.168.1.3;
option subnet-mask 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 = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = /root/tftpboot
per_source = 11
cps = 100 2
flags = 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-all-
languages.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 net-
snmp-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++ openssl-
devel 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-glibc-
pentium4.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/asterisk-
addons-1.4.9
wget http://downloads.digium.com/pub/telephony/dahdi-linux/dahdi-linux-
2.1.0.4.tar.gz
wget http://downloads.digium.com/pub/telephony/dahdi-tools/dahdi-tools-
2.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 Language Moh interpret


pseudo default default

*CLI> dahdi show status

Description Alarms IRQ bpviol CRC4


Wildcard TDM400P REV E/F Board 5 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 Context Language MOH Interpret


pseudo default default
1 default default
2 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/5000-
08d7d820 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/2003-
08df6190 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/4000-
08d910f8 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 Dyn Nat ACL Port Status


---------------------- ------- ----------------------- ---------
proxy01.sipphone.com/1747 198.65.166.131 5060 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 Port Status
6001/6001 192.168.1.50 (D) 255.255.255.255 4569 Unmonitored
6000/6000 82.130.246.138 (D) 255.255.255.255 45755 Unmonitored
2 iax2 peers [0 online, 0 offline, 2 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

4
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

En este fichero, junto con los ficheros


que incluye la carpeta dialplan se
extensions.conf concentra el ncleo de la centralita, el
plan de llamadas, explicado
anteriormente.

En este fichero se registran


sip.conf
los usuarios SIP

En este fichero se registran


iax.conf
los usuarios IAX

En Este fichero se establece la


configuracin de Call Parking
features.conf
y Call Pickup

269
En este fichero se configuran
manager.conf
los usuarios del AMI.

En este fichero se configuran las


meetme.conf
conferencias por defecto de la centralita.

En este fichero se configuran


queues.conf
las colas de la centralita.

En este fichero se configuran


voicemail.conf
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

En esta base de datos se guardan los


cdr datos del registro de llamadas y los
canales de la aplicacin CDR Reports.

En esta base de datos se guardan los


fop2
datos del FOP 2.

En esta base de datos se guardan los


qstats
datos del Asternic Call Center Stats.

273
En esta base de datos se guardan los
agenda usuarios, clientes y telfonos de estos de
la aplicacin YetBook.

En esta base de datos se guarda la


nagios
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 "2000" SIP/2000- SIP/2003- VoiceMail


2000 2003 acceso
21:44:43 <2000> b6800a38 0a30b038

lastdata duration billsec disposition amaflags accountcode uniqueid userfield

2003 34 3 ANSWERED 3

 Tabla channels

id channel accountcode name

1 SIP/2003 David

2 SIP/2000

274
Mikel

3 SIP/2001 Eduardo

4 SIP/2004 Josemi

5 SIP/2002 Josean

Base de Datos: fop2

Tablas de cdr

visual_phonebook

 Tabla visual_phonebook

id firstname lastname company phone1 phone2 picture

1 Mikel Yet Informatica 2000 1-mark.jpg

2 Eduardo Yet Informatica 2001

3 Josean Yet Informatica 2002

4 David Yet Informatica 2003

5 Josemi Yet Informatica 2004

Base de Datos: qstats

Tablas de cdr

qagent

qevent

qname

queue_stats

275
 Tabla qagent

agent_id agent

2 SIP/2001

3 SIP/2004

4 SIP/2003

5 SIP/2002

6 SIP/2000

7 SIP/2005

8 SIP/4000

 Tabla qevent

event_id event

1 ABANDON

2 AGENTDUMP

3 AGENTLOGIN

4 AGENTCALLBACKLOGIN

5 AGENTLOGOFF

6 AGENTCALLBACKLOGOFF

7 COMPLETEAGENT

8 COMPLETECALLER

9 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

2 recepcionqueue

3 comercialqueue

4 soportequeue

 Table queue_stats

queue_stats_id uniqueid datetime qname qagent qevent info1 info2 info3

SIP/2003 2009-11-05
1 4 4 14
05:01:19

SIP/2003 2009-12-22
705 4 4 9
23:35:20

Base de Datos: agenda

Tablas de agenda

clientes

telefono

usuarios

 Tabla clientes

id nameEmp cliente mant

1 Calnaba Yet VIP

2 Puma Yet Completo

277
3 Adidas Yet VIP

 Tabla telefono

idEmp telefono

1 650664616

2 654545454

2 676767676

2 943212112

2 945787876

3 654323232

3 656997878

3 698987332

 Tabla usuarios

id name extension tipo

2 Mikel 2000 Soporte

5 Valentin 5000 Direccion

6 Alberto Acosta 3000 Twister

7 Eduardo 2001 Soporte

9 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 Imei Group Provider Connected State Voice SMS


huawei1 3541370xxxxxxxx 1 vodafone es 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 Imei Group Provider Connected State Voice SMS


huawei1 3541370xxxxxxxx 1 vodafone es 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 centre number (SYMYO)
sms=yes
voice=yes
context=from-sebi
group=1
volume=5
language=es

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 Iniciar llamadas
o Acceso telefnico a cualquier nmero
o Acceso a la agenda de llamadas
o Notificacin de entrada de llamadas
o Agenda de Contactos (Visual Phonebook)
o Transferencia de llamadas
o Transferencia al buzn de voz
o Registro de llamadas
o Atencin de llamadas directas (Pick Up)
o Colgar llamadas
o Funcionalida Spy & Whisper (Escuchar llamada y comunicarse con uno de
los hablantes sin que el otro escuche)

Botones de Extensin

o 2 lneas por botn


o Callerid y temporizador
o Indicador de pausa
o Indicador de pertenencia a una cola
o Indicador de grabacin

Botones Trunk

o Muestra una lista con los trunks establecidos o configurados

Botones de Conferencia

o Lista de miembros de la conferencia


o Bloqueo / Desbloqueo de conferencias
o Silenciar / Activar audio a los miembros
o Silenciar / Activar a todos los miembros
o Expulsar miembros de la conferencia

309
Botones de Cola

o Lista de agentes/miembros
o Lista de llamadas en espera
o Miembros en pausa
o Miembros ocupados
o Miembros disponibles
o 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 verbio-tts-laura-esao locutor de sntesis espaol (mujer -Laura-) 8KHz
esAO verbio-tts-laura-esao-16k locutor de sntesis espaol (mujer -Laura-) 16KHz
esEB verbio-tts-carlos-eseb locutor de sntesis espaol (hombre -Carlos-) 8KHz

350
esEB verbio-tts-carlos-eseb-16k locutor de sntesis espaol (hombre -Carlos-) 16KHz
esVA verbio-tts-amaya-esva locutor de sntesis espaol (mujer -Amaya-) 8KHz
esVA verbio-tts-amaya-esva-16k locutor de sntesis espaol (mujer -Amaya-) 16KHz
ca-c0CD verbio-tts-pau-ca-c0cd locutor de sntesis cataln (hombre -Pau-) 8KHz
ca-c0CD verbio-tts-pau-ca-c0cd-16k locutor de sntesis cataln (hombre -Pau-) 16KHz
ca-c0FE verbio-tts-meritxell-ca-c0fe locutor de sntesis cataln (mujer -Meritxell-) 8KHz
ca-c0FE verbio-tts-meritxell-ca-c0fe -16k locutor de sntesis cataln (mujer -Meritxell-) 16KHz
caJO verbio-tts-oriol-cajo locutor de sntesis cataln (hombre -Oriol-) 8KHz
caJO verbio-tts-oriol-cajo-16k locutor de sntesis cataln (hombre -Oriol-) 16KHz
euSK verbio-tts-ainhoa-eusk locutor de sntesis euskera (mujer -Ainhoa-) 8KHz
euSK verbio-tts-ainhoa-eusk-16k locutor de sntesis euskera (mujer -Ainhoa-) 16KHz
euVZ verbio-tts-amaia-euvz locutor de sntesis euskera (mujer -Amaia-) 8KHz
euVZ verbio-tts-amaia-euvz-16k locutor de sntesis euskera (mujer -Amaia-) 16KHz
ca-v0EM verbio-tts-empar-ca-v0em locutor de sntesis valenciano (mujer -Empar-) a 8KHz
ca-v0EM verbio-tts-empar-ca-v0em-16k locutor de sntesis valenciano (mujer -Empar-) a 16KHz
gaFR verbio-tts-freire-gafr locutor de sntesis gallego (hombre -Freire-) 8KHz/16KHz
es-mxYO verbio-tts-celia-es-mxyo locutor de sntesis mexicano (mujer -Celia-) 8KHz
es-mxYO verbio-tts-celia-es-mxyo-16k locutor de sntesis mexicano (mujer -Celia-) 16KHz
ptMU verbio-tts-adriana-ptmu locutor de sntesis portugus (mujer -Adriana-) 8KHz
ptMU verbio-tts-adriana-ptmu-16k locutor de sntesis portugus (mujer -Adriana-) 16KHz
pt-brPA verbio-tts-julia-pt-brpa locutor de sntesis portugus brasileo (mujer -Julia-) 8KHz
pt-brPA verbio-tts-julia-pt-brpa-16k locutor de sntesis portugus brasileo (mujer -Julia-) 16KHz
frIF verbio-tts-brigitte-frif locutor de sntesis francs (mujer -Brigitte-) 8KHz
frIF verbio-tts-brigitte-frif-16k locutor de sntesis francs (mujer -Brigitte-) 16KHz
en-usJA verbio-tts-jane-en-usja locutor de sntesis ingls (mujer -Jane-) 8KHz
en-usJA verbio-tts-jane-en-usja-16k locutor de sntesis ingls (mujer -Jane-) 16KHz
es-arLO verbio-tts-javier-es-arlo locutor de sntesis argentino (hombre -Javier-) 8KHz
es-arLO verbio-tts-javier-es-arlo-16k 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 verbio-asr-es reconocimiento espaol (es).
es_ca verbio-asr-es_ca reconocimiento espaol + cataln (es,ca)
es_eu verbio-asr-es_eu reconocimiento espaol + euskera (es,eu)
es_ga verbio-asr-es_ga reconocimiento espaol + gallego (es,ga)
reconocimiento espaol + cataln + euskera + gallego
es_ca_eu_ga verbio-asr-es_ca_eu_ga
(es,ca,eu,ga)
es-ar verbio-asr-es-ar reconocimiento argentino/uruguayo/paraguayo (es-ar)
es-cl verbio-asr-es-cl reconocimiento chileno (es-cl)
es-co verbio-asr-es-co reconocimiento Colombiano/panameo (es-co)
es-mx verbio-asr-es-mx reconocimiento mexicano (es-mx)
reconocimiento venezolano/portorriqueo/cubano/
es-ve verbio-asr-es-ve
dominicano (es-ve)
pt verbio-asr-pt reconocimiento portugus (pt)

351
pt-br verbio-asr-pt-br reconocimiento portugus brasileo (pt-br)
fr verbio-asr-fr reconocimiento francs (fr)
en-us verbio-asr-en-us reconocimiento ingls americano (en-us)
es16k verbio-asr-es16k reconocimiento espaol 16Khz (es16k).
ca16k verbio-asr-ca16k 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/software-
verbio-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 verbio-


asterisk)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 VerbioLoadVcb
o VerbioUnloadVcb
o VerbioRec
o VerbioPrompt
o VerbioPromptAndRec
o VerbioStreamAndRec
o VerbioLastErr

356
o VerbioInfo
o 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 cero
1 uno
2 dos
3 tres
4 cuatro
5 cinco
6 seis
7 siete
8 ocho
9 nueve
SI si
NO 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 soporte
ADMINISTRACION administracion
COMERCIAL comercial
TWISTER 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/x86-
32/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-0x96a0f78-
00000020
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/nagios-
3.2.0.tar.gz/download

http://sourceforge.net/projects/nagiosplug/files/nagiosplug/1.4.14/nagios-plugins-
1.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/ndoutils-
1.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 nagiosadmin
use generic-contact
alias David
email 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

Hardware

Cisco 7941 Telfono IP (SCCP) 163,85 20 ** 3.277,00

Cargador Cisco Cargador PA100 12,95 20 259,00

UPS Suministrador de
250,00 2 500,00
energa elctrica.

4.036,00

Software

Licencia FOP 2 Licencia 27,83 1 27,83

Licencia Call
Licencia 347,87 1 347,87
Center Stats

Licencia CDR
Licencia 00,00 1 00,00
Reports

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

Establece el tiempo mximo de una


AbsoluteTimeout(length)
llamada (en segundos).

Aade a una Cola de Llamadas la extensin


AddQueueMember(queue desde la que se llama, o el agente o extensin
[,interface[,penalty]]) determinada por el parmetro Interface.
Adems es posible "penalizar" la extensin
con un nivel de prioridad.

ADSIProg(script) Script con informacin que se pasa a la


(script=telcordia-1.adsi) pantalla del terminal ADSI.

AgentCallbackLogin
Loguea como Agente del sistema. La extensin
([AgentNum][,[options][exten]])
recibe las llamadas del Agente especificado.

Loguea como Agente del sistema, en modo


AgentLogin
exclusivo. Es decir, el telfono siempre est
([AgentNum][,options])
activo y escuchar un tono de beep cuando se
le asigne una llamada.

AgentMonitorOutgoing Muestra el Identificador del Agente que


([options]) realiza una llamada usar con
AgentCallbackLogin.

AGI(program[,arguments]) Ejecuta un script o programa


creado por el usuario.

Recepcin de Seal de Alarma desde un


AlarmReceiver()
dispositivo especial.

409
Intenta detectar un contestador automtico
AMD()
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
Pide al interlocutor que introduzca una clave
(password[,options])
vlida para continuar.

BackGround
Reproduce una meloda o mensaje de audio
(filename1[&filename2...]
mientras se espera la marcacin de las teclas.
[,options[,language]])

Reproduce una meloda o un mensaje


BackgroundDetect(filename)
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
Indica si el canal especificado
(technology1/resource1[&
est disponible.
technology2/resource2...]
[,option])

ChannelRedirect
Redirecciones de un canal a
(channel,[context,]
otra extensin y prioridad.
extension, priority)

410
ChanSpy([channelprefix
Permite la escucha en un canal.
[,options]])

CheckGroup(max[category]) Controla que no se desborda el tope de las


llamadas en el grupo activo (SetGroup).

Reproduce el sonido de "Congestion en la


Congestion([timeout]) lnea" hasta que finalice la llamada o expire el
valor de Timeout.

ContinueWhile() Vuelve al inicio de un bucle while.

Reproduce un archivo, y se controla con


ControlPlayback(filename)
algunas teclas su reproduccin siempre que
no coincida con una extensin.

DateTime Dice la hora actual.


([time][,timezone[,format]])

Elimina un dato de la base de datos interna, la


cual se organiza en Familias de datos, y datos
DBdel(family/key)
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


DBdeltree(family/keytree)
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
DBget(varname=family/key)
nombre del campo, y lo almacena en la
variable especificada.

Inserta el valor especificado, dentro de un


DBput(family/key=value)
campo de la base de datos interna,
especificado por la familia y el nombre del
campo.

411
Ejecuta un script o programa creado por el
DeadAGI(program,args)
usuario, al colgar la llamada en curso.

Dial (username /extension,


Conecta los canales.
ring-timeout,flags)

DigitTimeout(seconds) Nmero de segundos vlidos entre una y otra


pulsacin de los dgitos.

Dictate([<filename>]) Mquina de dictado virtual

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,
Directory(vm-context se consigue que un usuario pueda acceder a la
[,dial-context[,options]]) 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.

DISA(password[,context[,callerid Acceso directo al sistema permite a personas


[,mailbox[@vmcontext]]]]) que llaman fuera de entrar en el sistema y les
proporciona un tono de marcado interno.

DumpChan
Muestra informacin sobre el canal de
([min_verbose_level])
llamada en la consola.

DUNDiLookup
Busca un nmero de telfono con DUNDi.
(number[,context[,options]])

Ejecuta un script o programa creado por el


EAGI() usuario, con la particularidad de que EAGI
permite controlar el flujo de audio.

412
Permite escuchar el eco de lo que se est
Echo()
hablando.

EndWhile() Fin de un bucle while

Establece el valor de la variable ENUM de


EnumLookup(number)
acuerdo a la extension pasada.

Evala una variable y se asigna a otra nueva.


Eval (newvar=string)
Formato: Nueva Variable = Algo (que puede
ser otra variable representada por ${Variable})

Ejecuta una aplicacin de las de esta lista,


Exec (variable (arguments))
cuando es invocada, de tal manera que no
est establecida en el Dialplan de manera fija.

ExecIf (expression,application, Ejecuta una aplicacin de Asterisk en


arguments) condiciones especficas.

ExecIfTime (times|daysofweek
Ejecuta una aplicacin basada
|daysofmonth|months?
en la hora actual.
application [,arguments])

Sale de un bucle while, con


ExitWhile() independencia de si su
condicin se ha cumplido.

ExtenSpy
Escuchar en un canal unido a
(extension[@context][,options])
una extensin especfica.

ExternalIVR (shell-command
Inicio de una aplicacin IVR externa.
[,arg1[,arg2[,...]]])

Festival (text[,intkeys]) Reproduce una cadena de texto


usando el software Festival.

413
Enva el evento Flash a la lnea (es usado
Flash() dentro de un AGI normalmente para
producir una transferencia).

FollowMe (followMeID,options) Aplicacin Find-Me/Follow-Me.

Inserta un nuevo Registro en la tabla CDR


ForkCDR() contando a partir de este instante el
temporizador.

Obtiene de telfonos ADSI la informacin


GetCPEID() CPE ID, para configurar al canal zaptel
adecuadamente en operaciones "on-hook".

Obtiene el nmero de llamadas al grupo de


GetGroupCount
([group][@category]) 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: Salta a la prioridad determinada si una


labeliffalse) condicin se cumple y permite regresar.

Goto
Salta a una prioridad especificada,
([[context,]extension,]priority)
extensin y contexto.

Salta a una prioridad especificada,


GotoIf (condition?label1:label2)
extensin y contexto, si se cumple
una condicin.

GotoIfTime
Salta a la prioridad indicada si se
(times,days_of_week,
cumple la condicin de tiempo.
days_of_month,months?label)

414
Hangup() Cuelga inmediatamente.

Esta aplicacin permite determinar si


el usuario del buzn tiene mensajes
HasNewVoicemail almacenados. Si no existen mensajes,
(vmbox[@context][:folder] el flujo de la llamada salta a la regla
[,varname]) 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,


IAX2Provision ([template])
utilizando opcionalmente la plantilla
especificada.

ImportVar Establece una variable con el contenido


(newvar=channel,variable) de una variable del canal de otro canal.

Log (level,message) Enva un mensaje especificado al nivel


de registro especificado.

Mira si el CallID de la llamada est dentro


LookupBlacklist ([options])
de la lista negra de llamantes. Si est,
salta a la regla n+101.

Mira si el CallID de la llamada est dentro


LookupCIDName() de la lista "cidname". Si est, establece la
variable CIDNAME al valor de la lista.

Macro (macroname,arg1,arg2...) Ejecuta una macro previamente definida.

Ejecuta una macro definida previamente, pero


MacroExclusive
slo permite una nica instancia de la macro
(macroname[,arg1[,arg2[,...]]])
para ejecutar en cualquier punto dado en el
tiempo.

MacroExit() Interrumpe la ejecucin de una macro.

415
MacroIf
(expression?macronameA[, Condicional comienzan macros diferentes.
argA1][:macronameB[,argB1]])

Es una funcin que permite un salto


MailboxExists
condicional a la regla n+101. Comprueba
(mailbox[@context])
si existe el Buzn de Voz. En caso de que
exista salta a la regla n+101.

MeetMe
Coloca la llamada en una
([confno][,[options][,pin])
conferencia de MeetMe.

MeetMeAdmin
Administra una conferencia MeetMe.
(confno,command[,pin])

MeetMeCount
Cuenta el nmero de participantes en una
(confno[,variable])
conferencia de MeetMe.

Genera un tono constante


Milliwatt()
de 1000Hz a 0dbm (mu-law).

MixMonitor
Registra el audio en el canal actual, pero lo
(fileprefix.format[,options
mezcla antes de escribirla en un archivo.
[,command]])

Monitor ([file_format[:urlbase]
Graba el canal actual en dos
[, fname_base][,options]])
archivos independientes.

Morsecode (string) Transmite la condicin de cadena


como el cdigo Morse.

Ejecuta a travs del programa mpg123


MP3Player (location) un fichero o un stream de audio
(especificar URL).

MusicOnHold (class) Reproduce msica de forma indefinida.

416
NBScat() Reproduce una corriente NBS locales.

Suprime la generacin de un
NoCDR() Registro de detalle de llamadas
para la llamada en el canal actual.

NoOp (text) No ejecuta nada.

Page (technology/resource[&
technology2/resource2[&...]] Pginas de una prrroga.
[,options])

Auto Aparca al usuario en el espacio de


"parking" de llamadas, normalmente para
Park (exten)
poder determinar cmo est ese espacio. Se
usa junto a una transferencia supervisada.
Debe existir el contexto "parkedcalls".

ParkAndAnnounce Aparca la llamada indicando dnde es


(template,timeout,channel aparcada, y qu hacer si expira un
[,return_context]) tiempo mximo de segundos en espera
sin ser atendida.

ParkedCall (exten) Recupera una llamada aparcada.

PauseMonitor() Detiene la supervisin de un canal.

PauseQueueMember Se detiene un dispositivo de cola de manera


([queuename],interface) que no puede recibir llamadas de la cola.

Pickup (extension[@context] Responder a una llamada dirigida


[& extension2@context2[&...]]) a otra extensin.

Playback (filename[,options]) Reproduce un archivo de sonido a


la persona que llama.

417
PlayTones (tonelist) Reproduce uno o ms tonos.

Pide a la entrada del nmero de telfono del


PrivacyManager() llamante, en caso de identificador de llamadas
no se puede obtener.

Progress() Indica el progreso de la llamada.

Queue (queuename[,options[, Envia la llamada en curso a una cola de


URL [,announceoverride llamadas, previamente dada de alta. Adems
[,timeout]]]]) se puede acompaar de diversas acciones.

QueueLog
(queue,uniqueID,agent, Escribe una entrada en el registro de cola.
event[, additionalInfo])

Random
([probability]:[[context,] Salto condicional basado en una probabilidad.
extension,]priority)

Read Lee un numero de dgitos (que finalizan


(variable[,filename][,maxdigits] con la tecla # o al llegar a un lmite
[,option][,attempts][,timeout]) marcado) y se asignan a una variable.

ReadFile
Lee un archivo.
(variable=filename,length)

RealTime Obtiene informacin de configuracin


(family,colmatch,value[,prefix]) de la base de datos de configuracin
en tiempo real.

RealTimeUpdate
(family,colmatch,value, Actualizaciones de un valor en la base de
newcol, newval) datos de configuracin en tiempo real

Record (filename:format, Graba en un archivo un mensaje de voz


silence[,maxduration][,options]) en el formato especificado.

418
RemoveQueueMember Elimina los miembros de la cola de forma
(queuename[,interface]) dinmica.

Pone a Cero el registro con la informacin de


ResetCDR ([options]) la llamada en curso, que va a ser almacenado
en la tabla CDR. La opcin CDR almacena
previamente el contenido.

RetryDial
(announce,sleep,loops,
Intentos para marcar y reintentos
technology/resource[&
si el intento falla.
Technology2/resource2...]
[,timeout][,options][,URL])

Return() Devoluciones de una subrutina.

Ringing() Devuelve la seal de RING

Deletrea la cadena de texto. Esta cadena


SayAlpha (string)
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
Anunciar el tiempo en un formato
([unixtime][,[timezone]
personalizado.
[,format]])

SendDTMF (digits[,timeout_ms]) Enva una cadena de dgitos, a travs de la


seal DTMF establecida en el canal.

419
SendImage (filename) Enva una imagen.

Enva un mensaje de texto al cliente. Si el


SendText (text) cliente no soporta la recepcin de texto, el
Dialplan continuar en la regla n+101, si
existe.

Enva una direccin URL al cliente, siempre


SendURL (url[,option])
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.

Establece un nuevo valor para la parte del


SetCIDName (cname[,a]) Identificador de Nombre (no el nmero)
del CallerID de la llamada.

Establece un nuevo valor para la parte


SetCIDNum (cnum[,a])
del Nmero (no el nombre) del CallerID
de la llamada.

420
Establece una variable Global, que se puede
SetGlobalVar (n=value)
usar en otro canal de comunicacin al ser
de mbito global a todo el Dialplan.

SetGroup Especifica la creacin de un grupo


(groupname[@category]) para control de acceso.

Establece el directorio por defecto de dnde


SetLanguage (language) coger los archivos de voz para los mensajes.

SetMusicOnHold (class) Establece la "clase" musical por defecto,


para MusicOnHold.

SetTransferCapability
Establece el valor de una variable global.
(transferCapability)

Establece el valor de una variable global,


SetVar (n=value)
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
Cuelga el canal especificado.
(technology/resource,options)

StopMonitor() Finaliza la grabacin de la llamada en curso.

Finaliza la reproduccin de la lista de tonos


StopPlayTones()
especificada en Playtones.

421
System (command) Ejecuta un comando de shell.

Transfiere la llamada en curso a otra


Transfer ([technology/]
extensin, siempre que est dentro de su
destination [,options])
mismo Contexto. En caso de ser fallida, salta a
la regla n+101.

TryExec
Intenta ejecutar una aplicacin Dialplan.
(application(arguments))

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.

Enva al subsistema "Manager" un evento que


podr ser usado por el usuario. Como
UserEvent (eventname[,body])
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 Autentica la persona que llama con la


([mailbox][@context]) contrasea de correo de voz del buzn
especificado.

Permite que la persona que llama para dejar


VoiceMail
un mensaje de correo de voz en el buzn
([s|u|b]mailbox[@context]
especificado.
[&mailbox[@context]][...])

VoiceMailMain Permite que la persona que llama para


([[s|p]mailbox][@context]) comprobar los mensajes de correo de voz.

Wait (seconds) Espera un tiempo expresado en segundos


antes de continuar.

422
Espera los segundos expresados, que se
WaitExten ([seconds])
marque una nueva extensin antes de
continuar.

Espera los segundos especificados


WaitForRing (timeout)
a recibir la seal de Ring.

WaitForSilence (wait[,repeat]) Espera a que el silencio de una duracin


determinada.

Durante el tiempo que se especifique se


WaitMusicOnHold (delay)
retiene la llamada con Msica, la que est
establecida en la clase "default".

While (expr) Inicia un bucle while.

Genera un tono que bloquea a los tele-


Zapateller (options) vendedores que llamen. Opciones: answer
(responde despus del tono), nocallerid
(genera el tono si no hay CID).

ANEXO C: Funciones de Asterisk

Nombre Sintaxis Descripcin

AGENT(<agentId>[:item]) Obtiene informacin


AGENT
(item =status, password, name, sobre un agente.
channel, mohclass, exten)

Permite establecer mltiples


ARRAY ARRAY(var1[|var2[...][|varN]])
variables a la vez.

BASE64_ BASE64_DECODE(<base64_string>) Decodifica una


DECODE cadena base64.

423
BASE64_ BASE64_ENCODE(<string>) Codifica una
ENCODE cadena en base64.

Comprueba en la base de
BLACKLIST BLACKLIST()
datos de Asterisk si el Callerid
est en la lista negra.

Obtiene o establece los datos


CALLERID CALLERID(<item>) (item=all, num, name)
de identificacin de llamada.

Obtiene o establece una


CDR CDR(<name>[|options])
variable de CDR.

CHANNEL(item)(item= audioreadformat,
Obtiene o establece
CHANNEL audionativeformat, videonativeformat,
informacin sobre el canal.
audiowriteformat, callgroup, channeltype,
language, musicclass, )

CHECKSIP Comprueba si un dominio


CHECKSIPDOMAIN(<domain|IP>)
DOMAIN es un dominio local.

Divide una variable segn


CUT CUT(<varname>,< delimiter> ,<range-s>)
un delimitador de nombre.

Lee o escribe en la base de


DB DB(<family>/<key>)
datos de Asterisk.

DB_DELETE DB_DELETE(<family>/<key>) Devuelve un valor de la base


de datos y lo elimina.

Comprueba si la clave existe


DB_EXISTS(<family>/<key>)
DB_EXISTS en la base de datos de
Asterisk.

DUNDI Realiza una bsqueda DUNDi


DUNDILOOKUP(number[|context[|option)
LOOKUP de un nmero de telfono.

424
Permite la consulta de un
carcter general o especfico
ENUM
ENUMLOOKUP(number[|Method-type[|option) de los registros NAPTR o de los
LOOKUP
tipos de NAPTR para ENUM o
de los punteros DNS
ENUMlike.

Obtiene o establece la variable


ENV ENV(<envname>)
de entorno especificada.

Evala las variables


EVAL EVAL(<variable>)
almacenadas.

Prueba de existencia: Retorna


EXISTS EXISTS(<data>)
1 si existe, 0 en caso contrario.

Cuenta los campos, con un


FIELDQTY FIELDQTY(<varname>|<delim>)
delimitador arbitrario.

Filtra la cadena de caracteres


FILTER FILTER(<allowed-chars>|<string>) para incluir slo los caracteres
permitidos.

Obtiene o establece la variable


GLOBAL GLOBAL(<varname>)
global especificada.

GROUP GROUP([category]) Obtiene o establece el


grupo de canales.

GROUP_ GROUP_COUNT([groupname][@category]) Cuenta el nmero de canales


COUNT en el grupo especificado.

Obtiene una lista de los


GROUP_LIST GROUP_LIST()
grupos creados en un canal.

GROUP_ GROUP_MATCH_COUNT Cuenta el nmero de canales


MATCH_ (groupmatch [@category]) en los grupos que coinciden
COUNT con el patrn especificado.

425
IAXPEER(<peername|CURRENTCHANNEL>)
Obtiene informacin del
IAXPEER (peername=ip,status,mailbox,context,
usuario IAX.
expire,dynamic,callerid_name,
callerid_num, codecs)

Condicional: Devuelve los


IF IF(<expr>?[<true>][:<false>]) datos siguientes a ? si es
cierto sino los datos
siguientes a :.

Temporal condicional:
IFTIME(<timespec>?[<true>][:<false>])
IFTIME Devuelve los datos siguientes
(timespec=times,day_of_week,
a ? si es cierto sino los
day_of_month,months)
datos siguientes a :.

NULL test: Retorna 1 si NULL


ISNULL ISNULL(<data>)
0 en caso contrario.

KEYPADHASH(<string>) Pasa la clave de string a


KEYPAD HASH
nmero.

Devuelve la longitud del


LEN LEN(<string>)
argumento dado.

MATH(<number1><op> Realiza Funciones


MATH
<number 2> [,<type>]) matemticas.

MD5 MD5(<data>) Calcula el MD5 del dato.

Lee o define la clase


MUSICCLASS MUSICCLASS()
MusicOnHold.

QUEUE_
Cuenta el nmero de
MEMBER_ QUEUE_MEMBER_COUNT(<queuename>)
miembros de una cola.
COUNT

QUEUE_ Devuelve una lista con los


QUEUE_MEMBER_LIST(<queuename>)
MEMBER_LIST miembros de una cola.

426
QUEUE_ Cuenta el nmero de llamadas
QUEUE_WAITING_COUNT(<queuename>)
WAITING_ en espera de una cola.
COUNT

Elije un nmero al azar


RAND RAND([min][|max])
en un rango.

En tiempo real lee / escribe


REALTIME REALTIME(family|fieldmatch[value])
funciones.

REGEX REGEX (<regular expression> <data>) Expresiones regulares.

Asigna un valor a una


SET SET(<varname>=[<value>])
variable de canal.

SHA1 SHA1(<data>) Calcula un algoritmo SHA1.

Obtiene el encabezado
SIP_HEADER SIP_HEADER(<name>[,<number>])
SIP especificado.

SIPCHANINFO(item)(item=peername, Obtiene el parmetro del


SIPCHANINFO
peerip, useragent, peername) canal SIP especificado.

SIPPEER(<peername>[|item])(tem=ip, mailbox, Obtiene informacin del


SIPPEER
context, expire, dynamic, callerid_name, usuario SIP.
callerid_number, status, language, useragent, )

Ordena una lista de


SORT SORT(key1:val1[...][,keyN:valN])
clave/valor en una lista de
claves, basada en los valores.

Hace un chequeo del archivo


STAT STAT(<flag>,<filename>)
especificado.

Devuelve la fecha / hora


STRFTIME STRFTIME([<epoch>][|[timezone][|for)
actual en el formato
especificado.

427
Devuelve la fecha como se
STRPTIME STRPTIME(<datetime>|<timezone>|<for)
describe en el formato.

Obtiene o establece los


TIMEOUT TIMEOUT(timeouttype)
tiempos de espera en el canal.

Decodifica un string de
URIDECODE URIDECODE(<data>)
acuerdo a RFC 2396.

Codifica un string de acuerdo


URIENCODE URIENCODE(<data>)
a RFC 2396.

Aade el mensaje de voz


VMCOUNT VMCOUNT(vmbox[@context][|folder])
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-calendar-
1.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-not-
correct&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&call-
forwarding&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-asterisk-
usando-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-analogico-
iid-14097216>
<http://www.ciao.es/Cisco_IP_Phone_7941__1114209>

506

También podría gustarte