You are on page 1of 530

Departamento de Lenguajes y Sistemas Informticos

Lengoaia eta Sistema Informatikoak Saila

Estudio y Montaje a medida de Centralita Telefnica VoIP Asterisk

Autor: Directores:

David Escauela Alonso Pablo Gonzlez Nalda y Mikel Garca Cantabrana (Yet Informtica S.L.)

Proyecto Fin de Carrera, Enero 2010

Agradecimientos

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

Resumen y Organizacin del Proyecto

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

ii

Organizacin
La documentacin del proyecto se divide en dos partes no establecidas. Una primera parte la forman los antecedentes, en los que se da informacin sobre la empresa en la que se sita el proyecto, as como, la necesidad de realizacin de dicho proyecto, los objetivos, a partir de los que se decide qu problema se quiere solucionar y cmo hacerlo y la viabilidad del proyecto, que refleja las panificaciones inicial y real del proyecto y el presupuesto del mismo. La segunda parte est constituida por la memoria del proyecto, la bibliografa, los anexos, el glosario, la conclusin y lneas futuras. La memoria del proyecto est dividida en 4 captulos: Introduccin a la VoIP: Conceptos bsicos de la telefona y la VoIP. Asterisk, el futuro de la telefona: Adentramiento en el mundo Asterisk. Prcticas realizadas: Pruebas hechas durante las prcticas. Centralita Asterisk para Yet Informtica S.L.: Diseo, montaje, configuracin e implantacin de centralita Asterisk. Como ayuda se incluye un glosario en el que se aclaran los significados de las siglas. Los anexos permitirn conocer ms sobre algunos temas especficos, as como, disponer de algunos manuales de instalacin. Por ltimo, se comparten los resultados generales que resuelven los objetivos, se elaboran las conclusiones y se plantea el trabajo futuro.

iii

ndice de Contenidos

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


RESUMEN ......................................................................................................................................II ORGANIZACIN ............................................................................................................................. III

NDICE DE CONTENIDOS .......................................................................................... IV NDICE DE FIGURAS ................................................................................................ XII


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

iv

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


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

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

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


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

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


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

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

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


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

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

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

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

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

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


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

iax.conf .............................................................................................................................. 501 GLOSARIO.............................................................................................................. 502 BIBLIOGRAFA ........................................................................................................ 502

xi

ndice de Figuras

Planificacin del Proyecto


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

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

PlanFig55 PlanFig56 PlanFig57 PlanFig58 PlanFig59 PlanFig60 PlanFig61

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

Cap1Fig34 Cap1Fig35 Cap1Fig36 Cap1Fig37 Cap1Fig38 Cap1Fig39 Cap1Fig40 Cap1Fig41 Cap1Fig42 Cap1Fig43 Cap1Fig44

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

Cap2Fig30 Cap2Fig31 Cap2Fig32 Cap2Fig33 Cap2Fig34 Cap2Fig35

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

Capitulo 4

xvi

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

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

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

Cap4Fig130 Cap4Fig131 Cap4Fig132 Cap4Fig133 Cap4Fig134 Cap4Fig135 Cap4Fig136 Cap4Fig137 Cap4Fig138

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

AnexoFig32 AnexoFig33 AnexoFig34 AnexoFig35 AnexoFig36 AnexoFig37 AnexoFig38 AnexoFig39 AnexoFig40

xxi

ndice de Tablas

Planificacin del Proyecto


PlanTabla1 PlanTabla2 PlanTabla3 PlanTabla4 PlanTabla5 PlanTabla6 PlanTabla7 PlanTabla8

Capitulo 1 Capitulo 2
xxii

Cap2Tabla1 Cap2Tabla2 Cap2Tabla3

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

Anexos
AnexoTabla1 AnexoTabla2

xxiii

Antecedentes

Empresa en la que se sita el proyecto


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

Cmo surge la necesidad del proyecto a realizar


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

Planificacin del Proyecto

Objetivos del Proyecto


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

Viabilidad del Proyecto


Planificacin Inicial Temporal

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

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

Fases, Tareas y Entregables A continuacin se indican y describen los diferentes documentos generados y utilizados para el proyecto que constituyen los entregables. Entrega de la primera parte de la memoria : Introduccin a la VoIP: Documento de introduccin a la VoIP a travs de la explicacin y definicin de conceptos fundamentales para su comprensin. Es la tarea n 11. Entrega de la segunda y tercera parte de la memoria : Asterisk, el futuro de la telefona y Prcticas: Documento que permite un adentramiento en el mundo de Asterisk en el que se describen conceptos general y especficos ,as como, su instalacin y configuracin y pruebas realizadas. Es la tarea n 28. Entrega documento final del Proyecto: Entrega de toda la documentacin elaborada junto con el la presentacin. Es la tarea n 46. Tras ver la Planificacin Real Temporal se generar una ficha para cada tarea identificada, donde se anotar su nmero, nombre, una breve descripcin y el esfuerzo estimado:

Especificacin de la tarea

Nmero: 1

Nombre: Anlisis del trabajo a realizar

Descripcin: Tarea repetitiva que se lleva a cabo los viernes de cada semana con el objetivo de planificar la siguiente y hacer balance de lo avanzado en esta.

Duracin: 26 h

Especificacin de la tarea

Nmero: 2

Nombre: Iniciacin en Linux

Descripcin: Periodo de estudio e iniciacin en el sistema operativo Linux, en concreto primero en Kubuntu, despues en CentOs con KDE y finalmente CentOs server.

Duracin: 240 h

Especificacin de la tarea

Nmero: 3

Nombre: Estudio y aprendizaje sobre telefona y VoIP

Descripcin: Estudio y comprensin de conceptos relacionados con la telefona y ms concretamente con la VoIP explicados en el Capitulo 1 de la Memoria.

Duracin: 240 h

Especificacin de la tarea

Nmero: 4

Nombre: Estudio y aprendizaje sobre el mundo Asterisk

Descripcin: Adentramiento en el mundo Asterisk, estudio de conceptos y configuraciones bsicas y avanzadas. Recopilado en el Captulo 2 de la Memoria.

Duracin: 240 h

10

Especificacin de la tarea

Nmero: 5

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

Descripcin: Documentacin del Capitulo 1 de la Memoria.

Duracin: 160 h

Especificacin de la tarea

Nmero: 6

Nombre: Pruebas de montaje de centralitas Asterisk

Descripcin: Montaje de las primeras centralitas Asterisk en Kubuntu y CentOs 5.4. con KDE.

Duracin: 80 h

Especificacin de la tarea

Nmero: 7

Nombre: Pruebas con SoftPhones y Telefonos IP

Descripcin: Primeras configuraciones de Softphones X-Lite y Zoiper y telefonos IP Sipura SPA 841.

Duracin: 20 h

11

Especificacin de la tarea

Nmero: 8

Nombre: Montaje de centralita de pruebas I

Descripcin: Documentacin del captulo 2 de la memoria

Duracin: 160 h

Especificacin de la tarea

Nmero: 9

Nombre: Pruebas de funcionamiento de Elastix

Descripcin: Instalacin de Elastix y pruebas con Softphones y de deterccin de Hw.

Duracin: 10 h

Especificacin de la tarea

Nmero: 10.1

Nombre: Pruebas de configuracin de funcionalidades

Descripcin: Pruebas exhaustivas de los ficheros de configuracin queues.conf, features.conf ,meetme.conf, voicemail.conf, manager.conf, sip.conf, iax.conf y extensions.conf.

Duracin: 160 h

12

Especificacin de la tarea

Nmero: 10.2

Nombre: Pruebas de integracin con FOP 2

Descripcin: Instalacin, configuracin y pruebas de funcionamiento de FOP 2.

Duracin: 30 h

Especificacin de la tarea

Nmero: 10.3

Nombre: Pruebas de integracin con Call Center Stats

Descripcin: Instalacin, configuracin y pruebas de funcionamiento de Asternic Call Center Stats.

Duracin: 10 h

Especificacin de la tarea

Nmero: 10.4

Nombre: Pruebas de integracin con CDR Reports

Descripcin: Instalacin, configuracin , pruebas de funcionamiento y elaboracin de documentacin de Asternic CDR Reports.

Duracin: 10 h

13

Especificacin de la tarea

Nmero: 12

Nombre: Montaje de centralita de pruebas II con RDSI BRI

Descripcin: Montaje de centralita Asterisk en CentOs 5.4. con tarjeta de telefona RDSI BRI de 4 puertos con 2 de ellos en uso : 1 mdulo FXO y 1 mdulo FXS.

Duracin: 15 h

Especificacin de la tarea

Nmero: 13

Nombre: Pruebas RDSI BRI

Descripcin: Instalacin y configuracin de DAHDI y pruebas de deteccin de Hardware y de funcionamiento de la tarjeta.

Duracin: 5 h

Especificacin de la tarea

Nmero: 14

Nombre: Programacin y Pruebas Google Calendar I: Interactuacin con los calendarios

Descripcin: Programacin y Pruebas de programa en Python de interactuacin con Google Calendar para la comprobacin de la existencia de eventos en el instante de tiempo que se ejecuta.

Duracin: 30 h

14

Especificacin de la tarea

Nmero: 15

Nombre: Programacin y Pruebas Google Calendar II: Envio de SMS

Descripcin: Programacin y modificacin de programa en Java de creacin de eventos en un calendario de Google Calendar y posterior envo de aviso de SMS.

Duracin: 30 h

Especificacin de la tarea

Nmero: 16

Nombre: Elaboracin de la memoria III: Prcticas realizadas

Descripcin: Documentacin del Capitulo 3 de la Memoria.

Duracin: 60 h

Especificacin de la tarea

Nmero: 17

Nombre: Elaboracin de la memoria IV: Viabilidad del proyecto

Descripcin: Documentacin y recopilacin de planificaciones para la realizacin de la viabilidad del proyecto.

Duracin: 120 h

15

Especificacin de la tarea

Nmero: 18

Nombre: Montaje centralita Yet Informtica

Descripcin: Elaboracin del Esquema Conceptual de la centralita. Diseo de la centralita.

Duracin: 20 h

Especificacin de la tarea

Nmero: 19

Nombre: Anlisis de requerimientos y requisitos

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

Duracin: 15 h

Especificacin de la tarea

Nmero: 20

Nombre: Diseo del Dialplan

Descripcin: Elaboracin minuciosa del Plan de llamadas de la centralita.

Duracin: 30 h

16

Especificacin de la tarea

Nmero: 21

Nombre: Puesta a punto del servidor

Descripcin: Instalacin, configuracn y pruebas de servicios necesarios antes de la instalacin de Asterisk.

Duracin: 16 h

Especificacin de la tarea

Nmero: 22

Nombre: Instalacin de Asterisk

Descripcin: Eleccin, descarga e instalacin correcta de la versin de Asterisk elegida: Asterisk 1.4.26.2.

Duracin: 5 h

Especificacin de la tarea

Nmero: 23

Nombre: Programacin de ficheros de configuracin y Dialplan

Descripcin: Configuracin de los ficheros de Asterisk para conseguir el funcionamiento deseado y por tanto ptimo de la centralita.

Duracin: 30 h

17

Especificacin de la tarea

Nmero: 24

Nombre: Integracin de ficheros de configuracin

Descripcin: Implantacin de los ficheros de configuracin solucionando los posibles errores.

Duracin: 3 h

Especificacin de la tarea

Nmero: 25

Nombre: Pruebas I

Descripcin: Pruebas post-implantacin para alcanzar un funcionamiento correcto.

Duracin: 5 h

Especificacin de la tarea

Nmero: 26

Nombre: Solucin de errores I

Descripcin: Poner solucin a los posibles errores de configuracin cometidos.

Duracin: 16 h

18

Especificacin de la tarea

Nmero: 27

Nombre: Elaboracion de la memoria V: Aplicacin

Descripcin: Documentacin del Capitulo 4 de la Memoria.

Duracin: 60 h

Especificacin de la tarea

Nmero: 29

Nombre: Tratamiento de funcionalidades extra

Descripcin: Anlisis de funcionalidades avanzadas a aadir.

Duracin: 30 h

Especificacin de la tarea

Nmero: 30

Nombre: Programacin Callback y DISA

Descripcin: Configuracin de Callback y DISA.

Duracin: 16 h

19

Especificacin de la tarea

Nmero: 31

Nombre: Pruebas II

Descripcin: Realizacin de Pruebas sobre el funcionamiento de Callback y DISA.

Duracin: 30 h

Especificacin de la tarea

Nmero: 32.1

Nombre: Anlisis de requisitos

Descripcin: Anlisis sobre los resultados que queremos conseguir y cmo conseguirlos.

Duracin: 10 h

Especificacin de la tarea

Nmero: 32.2

Nombre: Diseo interfaz grfica

Descripcin: Programacin del css y javascript de la agenda.

Duracin: 20 h

20

Especificacin de la tarea

Nmero: 32.3

Nombre: Programacin Web

Descripcin: Programacin HTML ,Java y conexin con la base de datos MySQL.

Duracin: 150 h

Especificacin de la tarea

Nmero: 32.4

Nombre: Pruebas de funcionamiento

Descripcin: Tests de funcionamiento de la agenda.

Duracin: 20 h

Especificacin de la tarea

Nmero: 33

Nombre: Elaboracin de la memoria VI: Pruebas de la Aplicacin

Descripcin: Documentacin del Capitulo 5 de la Memoria.

Duracin: 35 h

21

Especificacin de la tarea

Nmero: 34

Nombre: Instalacin y Estudio de Verbio

Descripcin: Descarga e instalacin de paquetes Verbio y Estudio de su funcionamiento.

Duracin: 30 h

Especificacin de la tarea

Nmero: 35

Nombre: Integracin Verbio-Asterisk

Descripcin: Anlisis y programacin de Verbio para su uso en la centralita Asterisk.

Duracin: 20 h

Especificacin de la tarea

Nmero: 36

Nombre: Pruebas III

Descripcin: Pruebas de ejemplos y programacin realizada con Verbio.

Duracin: 15 h

22

Especificacin de la tarea

Nmero: 37

Nombre: Instalacin y Estudio de Nagios y servicio SNMP

Descripcin: Instalacin del servicio SNMP y Nagios ,as como, compresin del funcionamiento de ambos.

Duracin: 25 h

Especificacin de la tarea

Nmero: 38

Nombre: Integracin Asterisk-Nagios

Descripcin: Instalacin del mdulo de Nagios para enlazar con Asterisk y de los plugins necesarios.

Duracin: 20 h

Especificacin de la tarea

Nmero: 39

Nombre: Pruebas IV

Descripcin: Pruebas con Nagios sobre la monitorizacin de Asterisk.

Duracin: 15 h

23

Especificacin de la tarea

Nmero: 40

Nombre: Pruebas ATA (SPA 3000) y Chan_Sebi

Descripcin: Pruebas con Adaptador Analgico de telefona y con modem Huawei (chan_sebi).

Duracin: 15 h

Especificacin de la tarea

Nmero: 41

Nombre: Pruebas TRUNK IAX 2 y usuario remoto

Descripcin: Pruebas de conexin de 2 servidores Asterisk y de extensin remota.

Duracin: 20 h

Especificacin de la tarea

Nmero: 42

Nombre: Integracin y pruebas con Skype

Descripcin: Pruebas de enlace entre Asterisk y Skype a travs del chan_skype.

Duracin: 15 h

24

Especificacin de la tarea

Nmero: 43

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

Descripcin: Conversin de protocolo de los telfonos CISCO, para su aprovechamiento en la nueva central.

Duracin: 40 h

Especificacin de la tarea

Nmero: 44

Nombre: Elaboracin de la memoria VII: Finalizacin

Descripcin: Finalizacin de la memoria con la documentacin de la bibliografa, anexos, glosario, conclusin y lneas futuras.

Duracin: 20 h

Especificacin de la tarea

Nmero: 45

Nombre: Elaboracin de la Presentacin

Descripcin: Tratamiento y elaboracin de la presentacin del proyecto.

Duracin: 30 h

25

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

Recurso Ordenadores

Descripcin

Precio

Unidades

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

HP Compaq (Ordenador)

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

600,00

Amilo Notebook Pi3540 (Portatil1) (Portatil2)

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

500,00

26

Telfonos

Sipura SPA 841 (Sipura1) (Sipura2) (Sipura3)

Telfono IP (SIP)

149,97

ALLNET ALL7960 (ALLNET)

Telfono IP (SIP e IAX)

61,89

Inalmbrico Alcatel Versatis 620 Duo (Telefono1) (Telefono2)

Telefono Analgico

49,00

Cisco 7941

Telfono IP (SCCP)

163,85

Otros

TDM400P (Tarjeta)

Tarjeta de Telefona

135,00

SPA 3000 (ATA)

Adaptador de Telefona Analgico(1FXS y 1FXO)

44,53

Modem Huawei K3520

HSDPA DL 7.2 MBPS, incorporacin de Micro SD.

54,90

Switch (Switch1) (Switch2)

Procure Switch 140008G J9077A (22 puertos 10/100/1000 y 2 puertos de doble personalidad)

54,69

27

Router (Router1)(Router2)

Router ADSL

150,00

Por otra parte el Software utilizado ser el siguiente:

Recurso

Descripcin

Precio

Unidades

Microsoft Office Profesional 2007

Paquete con Visio y Proyect 2007

300,00

Commpilador de Netbeans 6.7.1 Lenguajes de Programacin

00,00

Putty

Cliente SSH para acceso al Servidor

00,00

WinSCP

Cliente SFTP para acceso al Servidor

00,00

MySQL 5.0.27

Gestor de Bases de Datos

00,00

Skype

Softphone Canal de conexion con Asterisk Navegador Web

00,00

Licencia chan_skype

45,92

Firefox 3.5

00,00

Zoiper

Softphone

00,00

28

Agenda del proyecto Agenda de recursos:

Recurso David

Tareas asociadas

Trabajo (horas) 2.522

Costo () 983,58

Anlisis del trabajo a realizar

26

10,14

Iniciacin en Linux

240

93,60

Estudio y aprendizaje sobre telefona y VoIP

240

94,60

Estudio y aprendizaje sobre el mundo Asterisk

240

93,60

Elaboracin de la memoria I: Introduccin a la VoIP

160

62,40

Pruebas de montaje de centralitas Asterisk

80

31,20

Pruebas con SoftPhones y Telefonos IP

20

7,80

Elaboracin de la memoria II: Asterisk, el futuro de la telefona

160

62,40

Pruebas de funcionamiento de Elastix

1,95

Pruebas de configuracin de funcionalidades

30

11,70

29

Pruebas de integracin con FOP

15

5,85

Pruebas de integracin con Call Center Stats

10

3,9

Pruebas de integracin con CDR Reports

10

3,9

Montaje de centralita de pruebas II con TDM400P

15

5,85

Pruebas TDM400P

1,95

Programacin y Pruebas Google Calendar I: Interactuacin con los calendarios

30

11,70

Programacin y Pruebas Google Calendar II: Envio de SMS

30

11,70

Elaboracin de la memoria III: Prcticas realizadas

60

23,40

Elaboracin de la memoria IV: Viabilidad del proyecto

120

46,80

Montaje centralita Yet Informtica

20

7,80

Anlisis de requerimientos y requisitos

15

5,85

Diseo del Dialplan

30

11,70

Puesta a punto del servidor

16

6,24

30

Instalacin de Asterisk

1,95

Programacin de ficheros de configuracin y Dialplan

30

11,70

Integracin de ficheros de configuracin

1,17 3

Pruebas I

1,95

Solucin de errores I

16

6,24

Elaboracion de la memoria V: Aplicacon

60

23,40

Tratamiento de funcionalidades extra

30

11,70

Programacin Callback y DISA

16

6,24

Pruebas II

30

11,70

Anlisis de requisitos (Agenda)

10

3,90

Diseo interfaz grfica (Agenda)

20

7,80

Programacin Web (Agenda)

150

58,50

Pruebas de funcionamiento (Agenda)

20

7,80

Elaboracin de la memoria VI: Pruebas de la Aplicacin

35

13,65

31

Instalacin y Estudio de Verbio

30

11,70

Integracin Verbio-Asterisk

20

7,80

Pruebas III

15

5,85

Instalacin y Estudio de Nagios y servicio SNMP

25

9,75

Integracin Asterisk-Nagios

20

7,80

Pruebas IV

15

5,85

Pruebas ATA (SPA 3000) Y Chan_Sebi

15

5,85

Pruebas TRUNK IAX 2 y usuario remoto

20

7,80

Integracin y pruebas con Skype

15

5,85

Conversin telefonos IP (de SCCP a SIP), configuracin y pruebas

40

15,60

Elaboracin de la memoria VII: Finalizacin

20

7,80

Elaboracin de la Presentacin

30

11,70

Servidor

26

32,50

Pruebas con SoftPhones y Telefonos IP

1,25

32

Pruebas de funcionamiento de Elastix

1,25

Pruebas de configuracin de funcionalidades

1,25

Pruebas de integracin con FOP

1,25

Pruebas de integracin con Call Center Stats

1,25

Pruebas de integracin con CDR Reports

1,25

Montaje de centralita de pruebas II con TDM400P

1,25

Pruebas TDM400P

1,25

Montaje centralita Yet Informtica

1,25

Puesta a punto del servidor

1,25

Instalacin de Asterisk

1,25

Programacin de ficheros de configuracin y Dialplan

1,25

Integracin de ficheros de configuracin

1,25

Pruebas I

1,25

33

Solucin de errores I

1,25

Tratamiento de funcionalidades extra

1,25

Programacin Callback y DISA

1,25

Pruebas II

1,25

Integracin Verbio-Asterisk

1,25

Pruebas III

1,25

Integracin Asterisk-Nagios

1,25

Pruebas IV

1,25

Pruebas ATA (SPA 3000) Y Chan_Sebi

1,25

Pruebas TRUNK IAX 2 y usuario remoto

1,25

Integracin y pruebas con Skype

1,25

Conversin telefonos IP (de SCCP a SIP), configuracin y pruebas

1,25

Ordenador

27

33,75

Pruebas de montaje de centralitas Asterisk

1,25

34

Pruebas con SoftPhones y Telefonos IP

1,25

Pruebas de funcionamiento de Elastix

1,25

Pruebas de configuracin de funcionalidades

1,25

Pruebas de integracin con FOP

1,25

Pruebas de integracin con Call Center Stats

1,25

Pruebas de integracin con CDR Reports

1,25

Montaje de centralita de pruebas II con TDM400P

1,25

Pruebas TDM400P

1,25

Montaje centralita Yet Informtica

1,25

Puesta a punto del servidor

1,25

Instalacin de Asterisk

1,25

Programacin de ficheros de configuracin y Dialplan

1,25

Integracin de ficheros de configuracin

1,25

35

Pruebas I

1,25

Solucin de errores I

1,25

Tratamiento de funcionalidades extra

1,25

Programacin Callback y DISA

1,25

Pruebas II

1,25

Integracin Verbio-Asterisk

1,25

Pruebas III

1,25

Integracin Asterisk-Nagios

1,25

Pruebas IV

1,25

Pruebas ATA (SPA 3000) Y Chan_Sebi

1,25

Pruebas TRUNK IAX 2 y usuario remoto

1,25

Integracin y pruebas con Skype

1,25

Conversin telefonos IP (de SCCP a SIP), configuracin y pruebas

1,25

Portatil1

17

21,25

36

Iniciacin en Linux

1,25

Estudio y aprendizaje sobre telefona y VoIP

1,25

Estudio y aprendizaje sobre el mundo Asterisk

1,25

Elaboracin de la memoria I: Introduccin a la VoIP

1,25

Elaboracin de la memoria II: Asterisk, el futuro de la telefona

1,25

Programacin y Pruebas Google Calendar I: Interactuacin con los calendarios

1,25

Programacin y Pruebas Google Calendar II: Envio de SMS

1,25

Elaboracin de la memoria III: Prcticas realizadas

1,25

Elaboracin de la memoria IV: Viabilidad del proyecto

1,25

Anlisis de requerimientos y requisitos

1,25

37

Diseo del Dialplan

1,25

Elaboracion de la memoria V: Aplicacon

1,25

Elaboracin de la memoria VI: Pruebas de la Aplicacin

1,25

Instalacin y Estudio de Verbio

1,25

Instalacin y Estudio de Nagios y servicio SNMP

1,25

Elaboracin de la Presentacin

1,25

Elaboracin de la memoria VII: Finalizacin

1,25

Portatil2

7,5

Anlisis de requisitos

1,25

Diseo interfaz grfica

1,25

Programacin Web

1,25

Pruebas de funcionamiento

1,25

Pruebas ATA (SPA 3000) y Chan_Sebi

1,25

38

Pruebas TRUNK IAX 2 y usuario remoto

1,25

Sipura1

20

5,00

Pruebas con SoftPhones y Telefonos IP

0,25

Pruebas de funcionamiento de Elastix

0,25

Pruebas de configuracin de funcionalidades

0,25

Pruebas de integracin con FOP

0,25

Pruebas de integracin con Call Center Stats

0,25

Pruebas de integracin con CDR Reports

0,25

Montaje de centralita de pruebas II con TDM400P

0,25

Pruebas TDM400P

0,25

Programacin y Pruebas Google Calendar I: Interactuacin con los calendarios

0,25

39

Programacin y Pruebas Google Calendar II: Envio de SMS

0,25

Pruebas I

0,25

Solucin de errores I

0,25

Tratamiento de funcionalidades extra

0,25

Programacin Callback y DISA

0,25

Pruebas II

0,25

Pruebas III

0,25

Pruebas ATA (SPA 3000) Y Chan_Sebi

0,25

Pruebas TRUNK IAX 2 y usuario remoto

0,25

Integracin y pruebas con Skype

0,25

Conversin telefonos IP (de SCCP a SIP), configuracin y pruebas

0,25

Sipura2

1,25

40

Pruebas con SoftPhones y Telefonos IP

0,25

Pruebas I

0,25

Solucin de errores I

0,25

Tratamiento de funcionalidades extra

0,25

Pruebas TRUNK IAX 2 y usuario remoto

0,25

Sipura3

0,75

Pruebas con SoftPhones y Telefonos IP

0,25

Pruebas I

0,25

Solucin de errores I

0,25

ALLNET

0,75

Pruebas con SoftPhones y Telefonos IP

0,25

Pruebas I

0,25

Solucin de errores I

0,25

Telefono1

0,50

41

Montaje de centralita de pruebas II con TDM400P

0,25

Pruebas TDM400P

0,25

Telefono2

0,25

Pruebas ATA (SPA 3000) y Chan_Sebi

0,25

ATA

0,25

Pruebas ATA (SPA 3000) Y Chan_Sebi

0,25

Tarjeta

1,00

Montaje de centralita de pruebas II con TDM400P

0,50

Pruebas TDM400P

0,50

sebi

0,15

Pruebas ATA (SPA 3000) y Chan_Sebi

0,15

Switch1

28

7,00

Pruebas con SoftPhones y Telefonos IP

0,25

42

Pruebas de funcionamiento de Elastix

0,25

Pruebas de configuracin de funcionalidades

0,25

Pruebas de integracin con FOP

0,25

Pruebas de integracin con Call Center Stats

0,25

Pruebas de integracin con CDR Reports

0,25

Montaje de centralita de pruebas II con TDM400P

0,25

Pruebas TDM400P

0,25

Programacin y Pruebas Google Calendar I: Interactuacin con los calendarios

0,25

Programacin y Pruebas Google Calendar II: Envio de SMS

0,25

Montaje centralita Yet Informtica

0,25

Puesta a punto del servidor

0,25

Instalacin de Asterisk

0,25

Programacin de ficheros de configuracin y Dialplan

0,25

43

Integracin de ficheros de configuracin

0,25

Pruebas I

0,25

Solucin de errores I

0,25

Tratamiento de funcionalidades extra

0,25

Programacin Callback y DISA

0,25

Pruebas II

0,25

Integracin Verbio-Asterisk

0,25

Pruebas III

0,25

Integracin Asterisk-Nagios

0,25

Pruebas IV

0,25

Pruebas ATA (SPA 3000) Y Chan_Sebi

0,25

Pruebas TRUNK IAX 2 y usuario remoto

0,25

Integracin y pruebas con Skype

0,25

Conversin telefonos IP (de SCCP a SIP), configuracin y pruebas

0,25

44

Pruebas con SoftPhones y Telefonos IP

0,25

Switch2

0,50

Pruebas ATA (SPA 3000) y Chan_Sebi

0,25

Pruebas TRUNK IAX 2 y usuario remoto

0,25

Router1

36

9,00

Pruebas de montaje de centralitas Asterisk

0,25

Estudio y aprendizaje sobre el mundo Asterisk

0,25

Estudio y aprendizaje sobre telefona y VoIP

0,25

Pruebas con SoftPhones y Telefonos IP

0,25

Pruebas de funcionamiento de Elastix

0,25

Pruebas de configuracin de funcionalidades

0,25

Pruebas de integracin con FOP

0,25

Pruebas de integracin con Call Center Stats

0,25

45

Pruebas de integracin con CDR Reports

0,25

Montaje de centralita de pruebas II con TDM400P

0,25

Pruebas TDM400P

0,25

Programacin y Pruebas Google Calendar I: Interactuacin con los calendarios

0,25

Programacin y Pruebas Google Calendar II: Envio de SMS

0,25

Montaje centralita Yet Informtica

0,25

Anlisis de requerimientos y requisitos

0,25

Puesta a punto del servidor

0,25

Instalacin de Asterisk

0,25

Programacin de ficheros de configuracin y Dialplan

0,25

Integracin de ficheros de configuracin

0,25

Pruebas I

0,25

Solucin de errores I

0,25

46

Elaboracin de la memoria V: Aplicacin

0,25

Tratamiento de funcionalidades extra

0,25

Programacin Callback y DISA

0,25

Pruebas II

0,25

Elaboracin de la memoria VI: Pruebas de la Aplicacin

0,25

Instalacin y Estudio de Verbio

0,25

Integracin Verbio-Asterisk

0,25

Pruebas III

0,25

Instalacin y Estudio de Nagios y servicio SNMP

0,25

Integracin Asterisk-Nagios

0,25

Pruebas IV

0,25

Pruebas ATA (SPA 3000) Y Chan_Sebi

0,25

Pruebas TRUNK IAX 2 y usuario remoto

0,25

Integracin y pruebas con Skype

0,25

47

Conversin telefonos IP (de SCCP a SIP), configuracin y pruebas

0,25

Router2

1,75

Iniciacin en Linux

0,25

Anlisis de requisitos

0,25

Diseo interfaz grfica

0,25

Programacin Web

0,25

Pruebas de funcionamiento

0,25

Pruebas ATA (SPA 3000) Y Chan_Sebi

0,25

Pruebas TRUNK IAX 2 y usuario remoto

0,25

CISCO

0,50

Conversin telefonos IP (de SCCP a SIP), configuracin y pruebas

1,75

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 a)Hardware


Servidor Ordenador Portatil1 Portatil2 Sipura1 Sipura2 Sipura3 ALLNET Telefono1 Telefono2 ATA Tarjeta Sebi (Huawei) Switch1 Switch2 Router1 Router2 Cisco

Costo por unidad ()

300,00 600,00 500,00 500,00 149,97 149,97 149,97 61,89 49,00 49,00 44,53 135,00 54,90 54,69 54,69 150,00 150,00 163,85 3317,46

b)Software
Microsoft Office Profesional 2007 Netbeans 6.7.1 Putty 300,00 00,00 00,00

51

WinSCP MySQL 5.0.27 Skype Licencia Chan_Skype Firefox 3.5 Zoiper

00,00 00,00 00,00 45,92 00,00 00,00 345,92

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

Concepto Recursos Humanos


David

Unidades (horas) Precio (/h)

Importe ()

2.522

0,39

983,58

Recursos Materiales Amortizables (Hw)


Servidor Ordenador Portatil1 Portatil2 Sipura1 Sipura2 Sipura3 ALLNET Telefono1 Telefono2 ATA Tarjeta sebi Switch1 Switch2 Router1 26 27 17 6 20 5 3 3 2 1 1 2 1 28 2 36 1,25 1,25 1,25 1,25 0,25 0,25 0,25 0,25 0,25 0,25 0,25 0,50 0,15 0,25 0,25 0,25 32,50 33,75 21,25 7,50 5,00 1,25 0,75 0,75 0,50 0,25 0,25 1,00 0,15 7,00 0,50 9,00 52

Router2 CISCO

7 1

0,25 0,50

1,75 0,50 123,65

Clculo de la Amortizacin de los Recursos Amortizables:

Concepto

Coste Unitario ()
300,00 600,00 500,00 500,00 149,97 149,97 149,97 61,89 49,00 49,00 44,53 135,00 54,90 54,69 54,69 150,00 150,00 163,85

Tiempo de Amortizacin (horas)


4800 4800 4800 4800 4800 4800 4800 4800 4800 4800 4800 4800 4800 4800 4800 4800 4800 4800 SUBTOTAL

Coste Unitario de Amortizacin (/h)


0,0625 0,1250 0,1042 0,1042 0,0312 0,0312 0,0312 0,0129 0,0102 0,0102 0,009 0,0281 0,011 0,011 0,011 0,031 0,031 0,034

Tiempo de Uso (horas)


26 27 17 6 20 5 3 3 2 1 1 2 1 28 2 36 7 1

Importe ()

Servidor Ordenador Portatil1 Portatil2 Sipura1 Sipura2 Sipura3 ALLNET Telefono1 Telefono2 ATA Tarjeta sebi Switch1 Switch2 Router1 Router2 CISCO

1,63 3,38 1,77 0,63 0,62 0,16 0,09 0,03 0,02 0,01 0,01 0,06 0,01 0,31 0,02 1,15 0,22 0,03 10,15

Microsoft Office Profesional 2007 Netbeans 6.7.1

300,00

4800

0,0625

525

32,81

Gratuito

4800

0,00 53

Putty WinSCP MySQL 5.0.27 Skype Licencia chan_skype Firefox 3.5 Zoiper

Gratuito Gratuito Gratuito Gratuito 45,92 Gratuito Gratuito

4800 4800 4800 4800 4800 4800 4800 SUBTOTAL TOTAL

0,0096 -

15 15 -

0,00 0,00 0,00 0,00 0,14 0,00 0,00 32,95 43,10

Presupuesto

Concepto
Recursos Humanos o de Trabajo Recursos Materiales Amortizables Materiales Hardware y Software Amortizables

Importe ()
1.107,23 123,65 43,10 1.273,98

10% Costos Generales 15% Beneficio SUBTOTAL 16%IVA

127,40 191,10 1.592,48 254,80

PRESUPUESTO

1.847,28

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

54

55

Captulo

Introduccin a VoIP

Qu es VoIP (Voice Over Internet Protocol)?


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

56

Tecnologas cerradas/propietarias dnde nos encontramos con el conocido Skype o el ya legendario Cisco Skinny (SCCP). Sistemas abiertos dnde nos encontramos con los estndares abiertos basados en SIP, H.323 o IAX.

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

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

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

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

o No tardan en aparecer otros fabricantes que crean hardware exclusivamente compatible con Asterisk (Junghanns, Beronet).

Caractersticas Principales
Se utiliza una nica red. Si dos empresas estn unidas a travs de Internet. Por qu no aprovecharlo? Se administra una nica red. Estndares abiertos e internacionales. Inter-operabilidad, Bajada de precios en proveedores y fabricantes de hardware VoIP. Calidad: Es posible conseguir la misma calidad, de hecho hoy por hoy, el 40% de las llamadas de las grandes operadoras se encaminan por VoIP. Fiabilidad: En LAN, se puede lograr una gran fiabilidad. En Internet tambin, pero existen quizs demasiados factores. (QoS, NAT). Coste: Instalacin sobre red existente, precios de llamadas.

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

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

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

Elementos fundamentales de una red VoIP


Terminales: telfonos IP que pueden ser hardware o software. GateKeeper: controlador y gestionador de toda la comunicacin de VoIP. Gateway: dispositivo que hace de enlace con la telefona fija tradicional. Acta de forma transparente al usuario.

60

Cmo se transmite VoIP por la red?


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

Protocolos NTP, RTP, RTCP aseguran la entrega y calidad de los paquetes VoIP.

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

Se aade la @ MAC al paquete.

En esta capa se convierten todos los paquetes a seales elctricas u pticas, para ser transportados sobre la red interna o externa.

Los protocolos especficos que se utilizan en cada capa son: Aplicacin: En esta capa los paquetes de VoIP utilizan 3 protocolos: NTP (Network Time Protocol): ayuda a asegurar que las seales son transmitidas y recibidas en el margen de tiempo necesario para asegurar la calidad de recepcin. RTP (Real Time transports Protocol): proporciona funciones de transporte de red de fin a fin, para seales de voz digitales, encapsuladas en el paquete VoIP. RTCP(Real Time transports Control Protocol): monitoriza la entrega de la seal de voz y proporciona funciones mnimas de control para asegurar la entrega de los paquetes.

61

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

Conceptos principales de VoIP


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

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

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

Por ejemplo: Digium TDM01B

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

Por ejemplo: Digium TDM10B

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

64

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

Por ejemplo: Digium B410P o Acceso Primario (30 canales de voz + 1 de sealizacin)

Por ejemplo: Digium TE110P

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

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

66

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

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

67

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

68

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

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

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

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

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

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

o Outbound Proxy: Simplifica la administracin de los usuarios de un dominio, aplica polticas, tarifica, etc. Un mismo servidor puede funcionar como proxy entrante y saliente de un dominio.

71

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

72

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

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

por el mismo canal se conoce como inband, mientras que el mtodo que usa SIP, el outofband, enviar la sealizacin dentro del canal de voz obligando a separar los paquetes de voz de los paquetes de sealizacin.

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

diferentes: Servidor: Como Servidor, Asterisk admite registros de clientes IAX, pudiendo ser estos clientes Hardware, Software u otros Asterisk. Cliente: Como Cliente, Asterisk puede registrarse en otros Asterisk o en Operadores IP que utilicen este protocolo.
Ejemplo de los 2 roles que puede tomar Asterisk usando este protocolo.

Equipamiento para VoIP


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

Normalmente soportan un nico protocolo de VoIP (SIP, IAX2, H323).Aunque pueden soportar varios. Soportan una serie de codecs, el famoso G.729 casi siempre est entre ellos. Se conectan directamente a la Red IP:

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

Caractersticas Avanzadas : Dual Lan: Algunos telfonos disponen de dos conectores RJ45 e implementan funciones de switch, de esta forma no es necesario tirar cableado nuevo para los nuevos dispositivos IP.

76

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

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

Gama Media:

Gama Baja:

77

WiFi:

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

Caractersticas Principales: Integracin con el entorno (Escritorio). Icono en systray, dock ... Aviso visual de llamadas entrantes.

Integracin con plataformas de acceso y validacin de usuarios (LDAP). Importacin / Exportacin de datos: libretas de contactos en XML. Soporte de varias conversaciones simultneamente y en algunos casos de varias lneas.

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

o Libres :

Por ejemplo : Skype

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 para autenticacin: Usuario extensin@IP del servidor Asterisk -Contrasea: Introducir su clave. -Tiempo de expiracin: El tiempo de Tiempo espera despus del que el registro debe estar actualizado. Por defecto es 3600. Otros SoftPhones :

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

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

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

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

Tipos de Adaptadores : ATA (Analog Telephone Adapter) es un adaptador FXS, tiene un puerto RJ11 (phone jack) y un RJ45 (Ethernet jack). Por un lado habla analgico con el telfono y por otro lado habla digital con la red IP. Caractersticas de ATA: Soportan SIP o IAX2 normalmente, varios codecs (entre ellos, casi siempre el G.729). Tienen uno o dos interfaces FXS para conectar 2 telfonos analgicos. Cada telfono puede ser registrado a un proxy VoIP distinto. Soportan caller ID, tonos de llamada distintivos, llamada en espera ... Econmicos y de tamao reducido. Pueden conectarse a cualquier tipo de aparato telefnico a la red IP, por ejemplo, se pueden conectar una cabina telefnica (de monedas o tarjeta), un fax o un telfono inalmbrico (DECT).

FXS to USB: permite conectar un telfono normal a un PC, enviando y recibiendo el audio. Requieren un SoftPhone instalado para VoIP. FXO to USB: Casi siempre relacionados con Skype, permiten reenviar las llamadas recibidas por Skype por una lnea normal.

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

82

Gateways VoIP Dispositivos que permiten interconectar la telefona tradicional con la VoIP. Se integran con la red telefnica pblica con interfaces analgicos o enlaces digitales. Los adaptadores tambin pueden ser considerados como gateways, a pequea escala. Generalmente, los adaptadores que realizan funciones de routing/NAT IP, son considerados gateways. Caractersticas Principales: Generalmente funcionan en dos sentidos: las llamadas recibidas por IP se envan a PSTN/FXS o las llamadas recibidas por interfaces FXS se envan por IP. Soportan generalmente SIP o H.323, as como numerosos codecs (G.711, G.729 casi siempre). Pueden ser utilizados de forma integrada con las centralitas tradicionales: transformando la llamada analgica de la centralita en llamada por IP, de forma totalmente transparente.

Gateways: FXS -> VoIP Disponen de 1 o ms interfaces FXS para conectar telfonos o lneas de enlace de centralitas.

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

Recibir llamadas por PSTN y encaminarlas por VoIP.

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

84

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

Retos al implementar VoIP


Tcnicos: Evitar el impacto negativo de los NAT. Infraestructura de soporte: o Redes inalmbricas con gran latencia y jitter. o Redes en general que no han sido diseadas para priorizar servicios de tiempo real. Energa: No existen fuentes fiables de energa. Marco regulatorio: o Servicio ilegal. o Necesidad de licencias.

Recomendaciones
Tcnicas: Usar IAX2. Infraestructura de soporte: o Redes inalmbricas: Uso de la banda UNI 5.4 Ghz (IEEE 802.11a). Uso de protocolos con TDMA en zonas urbanas (WiMAX). o Incorporar QoS. Energa: Equipos de bajo consumo, energa solar. Marco regulatorio: Lobby, Modelos de negocio.

86

Captulo

Asterisk, el futuro de la telefona

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

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

Al mezclar telefona tradicional y servicios de VoIP, Asterisk permite construir arquitecturas de telefona avanzadas y soluciones CTI (Computer Telephony Integration), y facilita la migracin gradual de los sistemas existentes en las empresas a las nuevas tecnologas. Asterisk cuenta con un esquema de doble licencia, la licencia de Software libre GNU (GNU General Public License, GPL) y otra licencia propietaria para permitir cdigo propietario como el del cdec G.729. Gracias a la licencia GPL cuenta con una gran comunidad de programadores que han contribuido a aadirle multitud de caractersticas. Esto nos permite: Ejecutar el programa con cualquier propsito. Modificar el programa, accediendo al cdigo fuente. Redistribuir copias. Mejorar el programa y publicar estas mejoras (junto al cdigo fuente).
88

Los aadidos de terceros al cdigo de Asterisk implican la cesin de los derechos comerciales a Digium pero se conserva el copyright del desarrollador. La potencia de esta PBX aumenta al ser posible desarrollar nuevas funcionalidades con lenguajes estndar de programacin y utilidades propias de Asterisk.

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

Cul es el papel de Digium?


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

89

Cundo usar Asterisk?


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

Por qu Asterisk?
Utilizando Asterisk en su entorno es posible olvidar las limitaciones tradicionales de las centralitas telefnicas: no ms problemas de alcanzar el mximo de extensiones posibles, dejar de pagar cantidades exorbitantes por mdulos propietarios para ampliar la capacidad de la centralita. Algunos de los motivos de la eleccin de Asterisk son: Personalizacin de su sistema: Asterisk permite disear su sistema de telefona a su medida, en vez de tener que adecuar su empresa a la telefona. Podr implementar una solucin que responda a las necesidades de su negocio, mejorando sus tiempos de respuesta y optimizando sus recursos. Puede crecer sin lmite: un sistema Asterisk puede crecer con usted, con su negocio. Desde un entorno pequeo es posible aumentar la capacidad y posibilidades sin lmite. Se acab el cambiar de centralita cada pocos aos. Interconexin de sedes: Asterisk permite enlazar con costes muy ajustados sedes remotas e incluso ubicar terminales telefnicos remotos. Puede usar su conexin a internet como puerta de enlace entre sedes, reduciendo sus costes de telefona interna de forma espectacular. Ahorro de costes: Un nico cableado para toda su empresa evitando tener cableados separados para voz y datos. Una nica red de datos puede gestionar sus telfonos y sus ordenadores. Simplificar infraestructuras es un modo inteligente de reducir costes.

90

Reduzca su factura telefnica: El uso de proveedores de VoIP para permitir el envo o la recepcin de llamadas a travs de Internet puede significar un ahorro en su factura telefnica superior al 40 %.

Las soluciones de telecomunicaciones basadas en Asterisk son econmicas, robustas, flexibles y protegen la inversin. Econmico: Asterisk es ms econmico principalmente por dos motivos, por qu utiliza equipos estndar y est basado en cdigo abierto. Los servidores y los telfonos usados son estndar, los producen multitud de fabricantes, que compiten entre ellos en prestaciones y precio.

En el caso de una centralita IP propietaria, la empresa est obligada a adquirir un Hardware concreto a un precio establecido a un solo fabricante. Los telfonos estndar no funcionan o lo hacen parcialmente, y nicamente se pueden comprar al fabricante de la centralita. Un ejemplo son las centralitas Cisco. Asterisk es de cdigo abierto, por lo que se obtienen gratuitamente el cdigo fuente y todas las futuras actualizaciones. Todas las prestaciones que en otra centralita son de pago, en Asterisk vienen incorporadas, slo hay que configurarlas y ponerlas en produccin. A Asterisk puede conectar cuantos telfonos quiera mientras el servidor tenga potencia para gestionarlos, no pagar ninguna licencia por cada extensin, ni por cada buzn de voz asociado a la extensin, etc. Robusto: Asterisk se ejecuta sobre servidores Linux, sistema operativo de gran robustez y estabilidad. Flexible: Asterisk se configura y adapta a la medida de cada organizacin como ninguna otra centralita del mercado como se ha comentado.

91

Debido a su sistema de configuracin a bajo nivel, la centralita prcticamente se programa a medida para cada cliente, permitiendo adaptarla para cubrir prcticamente todas las necesidades de su empresa, hasta el mnimo detalle. Gran capacidad de integracin con el resto de sistemas y de aplicaciones de su organizacin, sobre el ncleo de conmutacin de Asterisk, se pueden conectar diferentes interfaces de programacin que pueden desarrollar aplicaciones a medida, integrarlo con sus sistemas, bases de datos, o integrar aplicaciones comerciales como Call Centers. Protege la inversin: La eleccin de una centralita IP basada en Asterisk tiene una ventaja importante ms, protege la inversin. La inversin en Software y equipos que se realiza por parte de la empresa no depende de la continuidad que un fabricante quiera dar al producto que ha comprado. Utilizando Asterisk la empresa puede aprovechar de nuevo los servidores.

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

Desventajas de las centralitas Asterisk:


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

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

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

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

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

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

94

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

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

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

95

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

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

96

97

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

98

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

Un ao ms tarde (Noviembre 2005) se anunciaba el lanzamiento de la versin 1.0.10 de Asterisk y Zaptel. Libpri, Asterisk-addons, y Asterisk-sounds ya no presentaban cambios, lo cual ya dejaba entrever la discontinuidad de la rama 1.0 en favor de 1.2. Y efectivamente as fue, solo Asterisk lleg a la release 1.0.12 dejando paso a Asterisk 1.2.0 (Noviembre 2005). La nueva rama de Asterisk fue presentada durante la conferencia IP.4.IT en Las Vegas, Nevada. Asterisk 1.2 introduca sobre 3,000 funcionalidades y mejoras sobre el rendimiento global y eficiencia en el uso de la memoria. Entre las principales novedades tenamos: Mejora de las funcionalidades de voicemail. Aadido protocolo DUNDi (Distributed Universal Number Discovery). Configuracin de Asterisk ms sencilla. Creacin de un motor de almacenamiento de configuracin en tiempo real sobre una base de datos. Un Asterisk Dialplan ms potente. Introduccin de Asterisk Extension Logic, un nuevo mtodo flexible para configurar el Dialplan.
99

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

En Agosto de 2007, la rama 1.2 pas al estado de mantenimiento de seguridad, y slo se corregan bugs relativos a la seguridad. El 25 de Diciembre de 2006 apareci Asterisk 1.4 que ya contaba con: Lneas de cdigo fuente Esfuerzo estimado de desarrollo (persona/ao - persona/mes) Estimacin de tiempo (aos) Estimacin de nmero de desarrolladores en paralelo Coste total estimado Lenguajes de programacin en Asterisk 1.4.0: 250.463 66,03 -792,30 2,63 25,08 8.919.128 $

Lenguaje ANSI C sh cpp perl yacc asm tcl PHP

Lneas de cdigo 232.514 7.550 5.815 2.259 1.508 642 113 62

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

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

100

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

En octubre de 2008 aparece la primera release de Asterisk 1.6 ,bastante esperada y pese a que Asterisk 1.4 traa notables ventajas con respecto a la versin 1.2, en Asterisk 1.6 siguen apareciendo nuevas ventajas que harn las delicias de los usuarios, como por ejemplo:

101

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

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

102

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

Estructura de directorios de Asterisk:


/etc/asterisk: Contiene los ficheros de configuracin. Si al compilar ejecutamos make samples, tendremos ejemplos en este directorio. /usr/lib/asterisk/modules: Contiene los mdulos de Asterisk que hemos compilado. /var/lib/asterisk: Contiene diferentes libreras de Asterisk. /var/lib/asterisk/agi-bin: Directorio para contener los AGI. /var/spool/asterisk: Directorio para archivos que genera Asterisk (voicemail, etc.) /var/log/asterisk: Aqu se guardan los log de Asterisk.

Funcionalidad de Asterisk
El sistema Asterisk incorpora muchsimas funcionalidades avanzadas que tendran un elevado coste en sistemas tradicionales propietarios. Funciones bsicas: Conexin con lneas de telefona tradicional, mediante interfaces tipo analgico (FXO) para lneas de telfono fijo o bien mvil y RDSI (BRI o PRI). Soporte de extensiones analgicas, bien para terminales telefnicos analgicos, terminales DECT o bien equipos de fax. Soporte de lneas (trunks) IP: SIP, H323 o IAX. Soporte de extensiones IP: SIP, SCCP, MGCP, H323 o IAX.

Funciones de llamada: Reglas de salida (OutBound Rules): definen las rutas que tomar una llamada saliente. DiD (Direct In Dial): son reglas que definen dnde ir una llamada de un determinado nmero telefnico.
103

Transferencia (a cualquiera) y Transferencia atendida (a alguien determinado). Msica en espera y en transferencia (ficheros MP3 actualizables por el usuario). Desvo de llamadas si est ocupado (Busy) o no contesta (No Answer). Llamada en espera (Hold). Identificador de llamante (CallerID). Bloqueo de llamante segn identificador (CallerID). Opcin No molestar (Do Not Disturb / DND). Retro llamada (Callback): llamada automtica cuando est disponible. Grupo de timbrado (Ring Group o Call Group): permite llamar al mismo tiempo a todos los telfonos de un grupo. Los telfonos del grupo tambin pueden consistir en nmeros telefnicos externos como telfonos mviles. Call Pickup: es el hecho de poder descolgar y responder a la llamada entrante a un telfono o grupo de telfonos determinado desde un tercer telfono que no est sonando. Remote Pickup: permite coger llamadas de forma remota. Colas (Queue): almacenes de llamadas entrantes. As, las personas que llaman pueden esperar la respuesta de alguien en lugar de obtener una seal de ocupado o ser forzadas a dejar un mensaje. Esta extensin tambin puede decir a la persona que llama su lugar en la cola y el tiempo estimado de espera. Es posible establecer prioridades de forma que ciertas personas no esperen tanto. Parking de llamadas (Call Parking): permite transferir la llamada a un 'parking' virtual. Pudiendo colgar sin que la llamada origen sea desconectada de Asterisk, ya que se encontrar aparcada. Megafona a travs del altavoz del telfono (Paging). Espiar llamadas (Call snooping): permite escuchar una llamada, sin que la persona que ha llamado se d cuenta. Call Whisper: permite intervenir en una llamada de forma que la persona que ha llamado no escucha nada.

104

Funciones avanzadas: Buzn de Voz (Voicemail): sistema de contestador automtico personalizado por usuario. Se integra con el sistema de directorio (LDAP) y con el email. Los buzones pueden ser individuales o para todo un grupo de personas. Gestin del buzn de voz mediante el terminal telefnico y pgina web. Sistema de Audio conferencias (Web MeetMe): Sistema que permite la conexin remota de 2 o ms usuarios que quieren mantener una reunin virtual y suministra la correcta gestin y control de los usuarios que se incorporan a ella. IVR (Interactive Voice Response): Operadora Automtica. Sistema automatizado de respuesta que permite redirigir las llamadas entrantes en funcin de las opciones seleccionadas por el llamante. Informes detallados de llamadas (CDR): Detalle de llamadas realizadas o recibidas por extensin, para imputacin de costes departamentales, por cliente o incluso para facturacin. ACD: Sistema Automtico de Distribucin de Llamadas entrantes. Pensado para Centros de Llamadas para atencin comercial o soporte tcnico. CTI: Integracin con sistemas de gestin comercial o de atencin al cliente (CRM). Extensiones Remotas: para poder aceptar un usuario remoto teniendo en cuenta el funcionamiento de NAT con los protocolos utilizados por Asterisk (IAX y SIP). Sistema DISA. (mtodo por el cual una persona externa a la oficina puede realizar llamadas a travs de la centralita). Grabacin de llamadas entrantes y salientes. AMI (Asterisk Management Interface): gestin y control remoto de Asterisk. Monitorizacin de llamadas en curso. Gestin de listas negras (nmeros telefnicos con acceso prohibido). LCR (Least Cost Routing): encaminamiento de llamadas por el proveedor VoIP ms econmico.

105

AGI (Asterisk Gateway Interface): integracin con todo tipo de aplicaciones externas. Configuracin en base de datos: usuarios, extensiones, proveedores, etc. Interfaz grfica de administracin (GUI). Acciones a realizar segn horarios y fechas (horario laboral, das festivos, etc.). Posibilidad de integracin con Google Calendar. Posibilidad de integrar un sistema de llamadas pre-pago (solucin para locutorios telefnicos). Deteccin automtica de faxes y recepcin de fax desde el propio sistema y posterior envo por e-mail. Almacenamiento y recuperacin en Base de Datos. Integracin de Festival: aplicacin que pasa de texto a voz. Soporte de vdeo (Asterisk 1.6: the video release).

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

106

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

Arquitectura de Asterisk
Esquema:

Partes de Asterisk :

107

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

Descripcin de las APIs:

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

108

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

Concepto de Canal:
Canal: Es una conexin que conduce una llamada entrante o saliente en el sistema Asterisk. La conexin puede venir o salir hacia telefona tradicional analgica o digital o VoIP. Asterisk soporta una serie de canales, los ms importantes: H323, IAX2, SIP, MGCP (Protocolos de VoIP). Zap: Lneas analgicas y digitales. misdn: RDSI

109

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

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

111

[empleados] include => context1 Extensiones En el mundo de las telecomunicaciones, la palabra extensin se refiere generalmente a un nmero identificador que posibilita que un telfono particular suene en una lnea. En Asterisk, una extensin es una lista de comandos a ejecutar. Dentro de cada contexto, podemos definir muchas (o pocas) extensiones, segn sea necesario.Se accede a las extensiones cuando: Se recibe una llamada entrante por un canal dado. El usuario que ha llamado marca la extensin. Se ejecuta un salto de extensiones desde el Dialplan de Asterisk. La sintaxis: exten => Seguido de esto se pone el nombre (o nmero) de la extensin. Cuando se trata de sistemas de telefona tradicionales, tendemos a pensar en los nmeros que se marcan para que otro telfono suene. En Asterisk, se utilizan nombres de extensin que pueden ser cualquier combinacin de nmeros y letras. La asignacin de nombres a las extensiones puede parecer un concepto revolucionario, la marcacin por nombre o direccin de correo electrnico en lugar de solo marcacin de un nmero, tiene un perfecto sentido. Esta es una de las caractersticas de Asterisk que lo hace tan flexible y potente. Una extensin se compone de tres componentes: El nombre (o numero) de la prorroga. La prioridad (cada extensin puede incluir varios pasos, el n del paso se llama "prioridad"). La aplicacin (o comando) que lleva a cabo. Estos tres componentes estn separados por comas, de esta forma: exten => nombre, prioridad, aplicacin() exten => 123,1, Answer () Extension s Cuando pide entrar en un contexto sin un destino de extensin especifico (por ejemplo, una seal de lnea FXO), se pasa a la extensin s. (La s significa "comienzo")
112

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

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

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

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

115

Variables de canal: Una variable de canal es una variable que se asocia slo con una llamada en particular. Hay muchas variables predefinidas de canal disponibles para su uso en el Dialplan, que se explican en el channelvariables.txt en usr/src/asterisk/asterisk1.4.26.1/doc. Se definen a travs de la aplicacin SET() : exten => 125,1, Set (MAGICNUMBER = 42) Algunas de las variables ms importantes son: ${CALLERID}: Caller ID actual, nombre y nmero. ${CONTEXT}: Contexto actual. ${EXTEN}: Extensin actual. ${CHANNEL}: Canal actual. ${DIALSTATUS}: Estado de la llamada: UNAVAILABLE, CONGESTION, BUSY, NOANSWER, ANSWERED, CANCEL o HANGUP. ${DATETIME}: Hora actual.

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

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

117

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

cadenas .El resultado de cada comparacin es 1 si la relacin es cierta , o 0 si la relacin es falsa. Operadores matemticos

expr1 (+, -) expr2 expr1 (*, /,%) expr2

Operadores de expresin regular

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

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

username=david secret=1234 host=192.168.1.30 context=fromiax qualify=yes Verificacin de la configuracin con el CLI. Para ver los usuarios sip e iax: *CLI>sip show peers *CLI>iax show peers Buzones de voz (Voicemail) Uno de los servicios ms interesantes de las PBX, Asterisk implementa un sistema de buzones de voz bastante flexible. Algunas caractersticas de este servicio: Ilimitados contenedores voicemail con proteccin de password, contenidos en carpetas. Saludos diferentes para los estados busy y unavailable. Saludos configurables. Habilidad de asociar un telefono con varios voicemail's y un voicemail con varios telefonos. Posibilidad de envio al correo electrnico con el archivo de sonido como adjunto.

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

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

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

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

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

Guardamos el archivo y modificamos el archivo de configuracin de festival en asterisk: nano /etc/asterisk/festival.conf estas son la lneas que hay que modificar/activar:
124

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

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

Factores importantes a la hora de seleccionar un cdec: Calidad de audio. Coste computacional. Gasto de ancho de banda. Comparacin de ancho de banda utilizado por los cdecs: Bandwidth Ethernet(Kbps) 87.2 Kbps 31.2 Kbps 21.9 Kbps 20.8 Kbps 55.2 Kbps
125

Cdec & Bit Rate (Kbps) G.711 (64 Kbps) G.729 (8 Kbps) G.723.1 (6.3 Kbps) G.723.1 (5.3 Kbps) G.726 (32 Kbps)

G.726 (24 Kbps) G.728 (16 Kbps)

47.2 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: Grabacin Para la grabacin no hace falta ninguna aplicacin especial, podramos coger cualquier aplicacin de audio como Audacity o una grabadora de sonidos. No obstante, Asterisk incorpora una serie de aplicaciones para la grabacin en el sistema telefnico. Esto puede utilizarse para crear una macro que reproduzca un mensaje de bienvenida personalizado por el usuario. Aplicacin para la grabacin La aplicacion Record() graba en un archivo la voz del llamante. Sintaxis: Record(nombre.formato[,silencio,duracion_maxima,opciones]) Podemos utilizar %d en el nombre del fichero, as se utilizar un ndice autoincremental, para no sobrescribir grabaciones. El nombre del fichero queda guardado en la variable ${RECORDED_FILE}. exten => ext1,n,Record(sonido-asterisk%d.alaw) Legalidad en la grabacin de llamadas La legislacin actual en Espaa determina que: Es ilegal grabar o escuchar una conversacin en la que uno no es parte, y los dems desconocen la grabacin o escucha. Es legal grabar una conversacin en la que uno es parte, pero es ilegal facilitar esa grabacin a un tercero que no haya sido autorizado por los que participaron en la conversacin. 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/

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 redes diferentes en la misma caja, es necesario definir arias 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 utiliza para realizar bsquedas. utilizar 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 a travs de ese peer; es ;til cuando no est activo el peer o cuando bsqueda ;hay una conexin ;mala hacia el peer hay autokill=yes Publicacin de mis nmeros en la red dundi (contextos dundi): Los contextos en esta seccin se enlazan con los contextos de tos extensions.conf. El contexto referenciado de extensions.conf es donde se controla qu numeros se publican en la red dundi.

147

Al configurar un peer con el que nos vamos a enlazar, se puede determinar a cuales de los mapas puede tener acceso el peer.

Contextos dundi: nombre_contexto => contexto_extensions,peso,proto,destino[,opciones]] nombre_contexto: Nombre del contexto al que se hace referencia en una peticin dundi. contexto_extensions. Nombre del contexto en el extensions.conf, donde se buscarn los nmeros que son solicitados en la nube dundi. peso. Deber ser 0 en caso de que nuestro conmutador publique directamente los nmeros, en caso contrario, deber tener el valor del nmero de saltos que necesita para llevar al destino. proto. Cualquiera de los protocolos IP (sip, iax,323) con el cual el peer remoto se debe comunicar con nosotros. destino. Es la informacin que se entrega al peer para que pueda llegar al nmero que est marcando. opciones. Pueden ser varios argumentos los cuales indican el comportamiento que se tendr cuando no tengamos nosotros el nmero que se est solicitando. nounsolicited. No se permiten llamadas que no sean solicitadas. nocomunsolicited. No se permiten llamadas comerciales que no sean solicitadas. nopartial. No se permiten bsquedas para patrones parciales. residential, comercial,mobile. Le indica a los pares qu tipo de nmeros son los que se estn publicando a travs de este contexto.

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

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

149

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

El script AGI enva comandos a Asterisk escribiendo en el STDOUT. Seguidamente Asterisk enva una respuesta por cada uno de ellos que es leda por el script. Algunos ejemplos de comandos son: ANSWER: atiende.
150

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

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

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

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

Eso seria similar a esto:


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

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

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

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

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

155

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

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

travs de una interfaz web amigable que le permite tener un PBX completamente funcional casi de inmediato sin necesidad de programacin. FreePBX se basa en la pila LAMPA (Linux, Apache, MySQL, PHP y Asterisk). Es un sistema modular, con clic para instalar plugins descargables a travs de Internet desde el repositorio de mdulo en lnea. Algunas de las caractersticas de FreePBX son: Agregar o cambiar la extensin y las cuentas de correo de voz en cuestin de segundos. - El soporte nativo de SIP, IAX, y los clientes de ZAP (otros criterios de valoracin son apoyados a travs de extensiones personalizadas). - Reducir los costos de larga distancia con LCR. - Enrrutar las llamadas entrantes basndose en la hora del da. - Crear Recepcionista digital interactiva (IVR). - Grupos de llamada de diseo sofisticado. - Gestin de llamadas con colas. - Detectar y recibir los faxes entrantes. - Copias de seguridad y restaurar el sistema. - Guardar las grabaciones de audio de las llamadas. - Ver detalle de llamadas con Asterisk-stat. - Ver las extensiones y el estado de los trunks con Flash Operator Panel. - Ver grabaciones de la conversacin con Asterisk Recording Interface (ARI). - Nmero ilimitado de Conferencias (limitado por la potencia de CPU disponible. (300 usuarios simultneos en conferencias sobre un Pentium 4 a 3 GHz, 600 con doble ncleo!)... - Msica en espera. Instalacin de FreePBX 1.) Instalar Asterisk. 2.) Deshabilitar SeLinux (si no lo desactivaste en la instalacin del sistema operativo). En /etc/selinux/config "selinux=disabled" -

3.) Instalar paquetes necesarios para FreePBX yum install e2fsprogs-devel keyutils-libs-devel krb5-devel libogg libselinuxdevel libsepol-devel libxml2-devel libtiff-devel gmp php-pear php-pear-DB php-gd php-mysql php-pdo ncurses-devel audiofile-devel libogg-devel mysql-

157

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

158

En /etc/rc.local

"/usr/local/sbin/amportal start"

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

159

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

En consola amportal start En el Explorador en http://IpDelServidor/admin Lnea de comandos de Asterisk: CLI Esta lnea de comandos es bastante potente, y permite controlar y monitorizar gran parte de la situacin de la centralita. Soporta el empleo de la tecla <Tabulador>, al estilo de las consolas de UNIX/GNU Linux, por lo que para ver un listado de todos los comandos disponibles, basta con presionar varias veces la tecla. Asterisk CLI es la consola de Asterisk desde donde podemos debugear y comprobar el funcionamiento de Asterisk. Para acceder a ella debemos ejecutar: service asterisk start cd /usr/sbin asterisk r El CLI permite acciones tales como: Ver que versin de Astersik tenemos instalada: *CLI> show versin Tiempo que lleva en ejecucin despus del ltimo reinicio: *CLI> core show uptime Recargar configuraciones en el PBX funcional (necesario cuando modificamos algn archivo de configuracin): *CLI> reload

Mostrar aplicaciones registradas en Asterisk: *CLI>show applications Listar los canales definidos: *CLI>show channels Mostrar informacin sobre los codecs instalados : *CLI>show codecs

161

Mostrar un cuadro de doble entrada con los tiempos de conversin entre formatos de codecs: *CLI>show translation

Es posible realizar una desconexin del CLI 'quit'. Asterisk continuar ejecutndose en segundo plano. Para matar al propio Asterisk desde el CLI, se puede utilizar el comando stop, en sus tres variantes: Detiene Asterisk al momento: *CLI> stop now Detiene Asterisk cuando no haya carga: *CLI> stop when convenient Detiene Asterisk cuando no haya carga y deja de aceptar peticiones de llamadas a partir de este momento: *CLI> stop gracefully Nivel de Verbose: Este valor indica la cantidad de mensajes que se recibirn sobre los eventos generales del sistema. Cuanto ms alto, ms informacin sobre lo que sucede en la centralita se recibir. Este nivel, se puede establecer de varias formas: Al arrancar el demonio: sudo asterisk vvvvvv Al conectarse al demonio: sudo asterisk -rvvvvvvvv Desde el CLI (Quitar opciones de visualizacin): *CLI>set verbose O Nivel de Debug: Este valor indica la cantidad de mensajes que se recibirn sobre los eventos generales del sistema, pero utilizado normalmente para depurar problemas de drivers o de aplicaciones. Este nivel, se puede establecer de varias formas:

162

Al arrancar el demonio: sudo asterisk dddd

Al conectarse al demonio: sudo asterisk rdddd

Desde el CLI (Recibir como mximo 30 mensajes): *CLI> Set Debug 30

Realizar un debug de un canal: *CLI>debug channel

Acciones del canal de consola (console channel): Permite hacer un llamada desde la consola : *CLI>console dial Permite contestar una llamada desde la consola: *CLI>console answer Cuelga la llamada en curso en la consola: *CLI>console hangup Acciones sobre los mdulos: Cargar/descargar un mdulo especfico: *CLI>module load/unload Mostrar todos los mdulos levantados: *CLI>module show Acciones del Dialplan: Mostrar el plan de marcacin actual: *CLI>dialplan show Guardar los cambios realizados:
163

*CLI>dialplan save dialplan Agregar / eliminar una extensin en un contexto dado al plan de marcacin: *CLI>dialplan add/remove extensin dialplan Incorporar / eliminar un include en un contexto dado en el plan de marcacin: *CLI>dialplan add/remove include dialplan 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 show peers sip *CLI>iax2 show peers iax2 *CLI>zap show status zap *CLI>voicemail show users voicemail 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 usuarios), oficinas remotas de 50 grandes organizaciones (2- usuarios por sitio), y los -50 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 Aste Asterisk 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 Asterisk completo con AsteriskGUI. Servidor con - Asterisk Business Edition con licencia comercial. -Built-in Router Ideal para pequeas oficinas. in oficinas. -Hasta ocho puertos analgicos. Hasta -Apoyo a una combinacin de mdulos FXO y FXS. Apoyo -1GB Compact Flash Card . 1GB -Hardware base de Cancelacin de eco. Hardware -8 MB Onboard Flash. 8 -64 MB de RAM Onboard. 64 -5 Puertos Ethernet (4 LAN, 1 WAN) 5 Beneficios: Paquetes Todo en uno con Hardware de Digium, Asterisk Digium Software, sistema de documentacin, y servicios de suscr suscripcin. 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 o auto-aprovisionamiento la posibilidad de utilizacin de telfonos IP de Polycom. osibilidad Una suscripcin aade la paz mediante la prestacin de apoyo en cualquier incidente, en curso de garanta, y en el acceso a las personas adecuadas. Asterisk Business Edition

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

Reduccin de los costos extrema Control y personalizacin Flexible dial plan Rich, caracterstica de base amplia

Fcil de Instalar, configurar y Usar

165

Asterisk Business Edition incluye soporte rPath distribucin de Linux con una mejor instalacin, un manual tcnico Asterisk, y una gua rpida; hace que Asterisk sea an ms fcil de instalar, configurar y utilizar. Para mejorar la interactividad del cliente con un Asterisk PBX, Asterisk Business Edition se integra con el reconocimiento LumenVox Engine y Cepstral Texto-a-Habla. Una versin de prueba de la Cepstral producto est incluido, y un puerto libre de Lumenvox Lite tambin est disponible la solicitud a Asterisk Business Edition clientes. La compra de una licencia es necesaria para activar funciones adicionales de estos productos. Rendimiento, interoperabilidad y fiabilidad El programa de pruebas de Digium asegura la fiabilidad, el rendimiento y la interoperabilidad de Asterisk Business Edition con los principales equipos, software y protocolos. Digium hardware tarjetas se realizarn las pruebas de la total compatibilidad con Asterisk Business Edition, como son varios modelos de seleccionar los servidores, VoIP, y los dispositivos TDM. Todas las principales funciones de software en Asterisk Business Edition son testeadas para la funcionalidad y la fiabilidad. Banco de pruebas de sistemas tambin son sometidos a extremas condiciones de estrs Empirix utilizando equipos de prueba para simular cientos de miles de llamadas en el mundo real con diversas combinaciones y configuraciones. Como resultado, los clientes pueden confiar en su probada combinacin de Asterisk Digium software y hardware que trabajan juntos para proporcionar una caracteristicarica VoIP PBX o sistema. Caractersticas:
-Soporte de Asterisk Bussiness Ed. -AbsoluteTimeout -AddQueueMember -ADSIprog -AgentCallbackLogin -AgentLogin -AgentMonitorOutgoing -AGI -Answer -AppendCDRUserField -Authenticate -Background -BackgroundDetect -Busy -ChangeMonitor -ChanIsAvail -ChanSpy -CheckGroup -Congestion -ControlPlayback -Cut -Hangup -HasNewVoicemail -HasVoicemail -IAX2Provision -ImportVar -LookupBlacklist -LookupCIDName -Macro -MacroExit -MacroIf -MailboxExists -Math -MD5 -MD5Check -MeetMe -MeetMeAdmin -MeetMeCount -Milliwatt -Monitor -MP3Player -MusicOnHold -SayUnixTime -SendDTMF -SetAccount -SetAMAFlags -SetCallerID -SetCallerPres -SetCDRUserField -SetCIDName -SetCIDNum -SetGlobalVar -SetGroup -SetLanguage -SetMusicOnHold -SetRDNIS -SetVar -SIPAddHeader -SIPDtmfMode -SIPGetHeader -SoftHangup -StartMusicOnHold -StopMonitor 166

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

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

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

Beneficios: Reduccin de costos extrema

Combinado con la telefona de bajo costo de hardware, Asterisk Business Edition se puede utilizar para crear un PBX a una fraccin del precio tradicional de PBX y sistemas clave, proporcionando al mismo tiempo un nivel de funcionalidad superior a la de muchos de los ms caros sistemas disponibles. Control

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

Asterisk PBX permite la IVR y aplicaciones que se cre y despleg rpidamente. Su potente CLI texto y archivos de configuracin permite una rpida configuracin y diagnstico en tiempo real.

167

Rich, caracterstica de base amplia

Porque es de cdigo abierto Asterisk y que se aplica de software, no slo aportan caractersticas como el buzn de voz, mens de voz, IVR, y de las conferencias, que son muy costosas para los sistemas de propiedad, sino que tambin permite nuevas caractersticas que se aadirn rpidamente y con un mnimo de Esfuerzo. Personalizacin

A travs de su apoyo a la internacionalizacin, los archivos de configuracin, y el cdigo fuente, cada uno de los aspectos de Asterisk pueden ser ajustados. Por ejemplo, los cdigos de Asterisk para funciones de llamadas podra ser cambiado para que coincida con un sistema existente. Despliegue de contenido dinmico

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

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

Distribuciones Linux con Asterisk:


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

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

169

Qu puedo crear con AsteriskNOW? Entre las muchas aplicaciones que puedes crear con AsteriskNOW son: VoIP Gateway Skype Gateway IP PBX Call Center ACD Conferencia de Puente Servidor IVR Sistema de buzn de voz Call Recorder Servidor de fax Speech Server

A quin est dirigido? AsteriskNOW fue construido para los desarrolladores de aplicaciones, integradores de sistemas, estudiantes, piratas informticos y otros que quieren para crear soluciones personalizadas con Asterisk. Quin apoya a AsteriskNOW? Los usuarios de AsteriskNOW tienen dos opciones. Hay una comunidad activa de usuarios de AsteriskNOW, integradores y desarrolladores que ofrecen apoyo a la comunidad en los foros de AsteriskNOW y lista de correo. Digium ofrece suscripciones de soporte comercial para AsteriskNOW. Si su aplicacin requiere el apoyo directo del fabricante, consulta la pgina de suscripciones. Caractersticas y funciones: AsteriskNOW tiene una larga lista de caractersticas que lo convierten en el preferido de Asterisk listo para ejecutar la distribucin: Instalacin fcil y rpida. Normalmente se instala en 15 minutos o menos. No requiere un profundo conocimiento de Linux. Seguro para los usuarios de Mac y Windows. Web-interfaz de configuracin basada en las tareas de gestin hace que la mayora de apuntar y hacer clic. Los datos Construir aplicaciones dirigidas con soporte integrado para ODBC y HTTPS. Asistente para la configuracin de las conexiones de VoIP hace que sea fcil de conectar. Instalacin de pre-construidos, paquetes de aplicaciones utilizando el administrador de aplicaciones. Deteccin automtica y la configuracin de analgicas Digium y hardware de telefona Digitial.

170

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

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

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

Podis descargarlo de aqu: http://www.asterisknow.org/downloads. TrixBox TrixBox es una distribucin basada en CentOS que comercializa la empresa Fonality. Esta distribucin tiene una versin gratuita y es de las distribuciones rpidas, una de las ms utilizadas por newbies.

171

Una vez instalado TrixBox, el sistema dispone de: Asterisk Apache MySQL SugarCRM ARI FreePBX

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

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

Cdecs que soporta:


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

Protocolos con los que trabaja:


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

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

Standard Edition (SE) Enterprise Edition (EE) Call Center Edition (CCE)

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

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

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

174

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

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

Llamadas gratis entre sucursales va VoIP. Traspaso de llamadas a cualquier extensin que est conectada al servidor.

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

176

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

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

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

Fax:

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

General:

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

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

Email:

Servidor de correo electrnico con soporte multidominio. Administrable desde Web. Interfaz de configuracin de Relay. Cliente de Email basado en Web. Soporte para "cuotas" configurable desde el Web. Soporte Antispam.

Colaboracin:

Calendario integrado con PBX con soporte para recordatorios de voz. Libreta telefnica (Phone Book) con capacidad clic-to-call. Dos productos de CRM integrados a la interfaz como vTigerCRM y SugarCRM.

Extras:

Interfaz de generacin de tarjetas de telefona basada en software A2Billing. CRM completo basado en el producto vTigerCRM. Tambin versin de cdigo abierto de SugarCRM.

Centro de llamadas:

Mdulo de centro de llamadas con marcador predictivo incluido. El mdulo de centro de llamadas puede manejar tanto campaas de llamadas entrantes como salientes. Algunas de las caractersticas son:
-

Soporte para lista de nmeros no-llamar (Do-Not-Call List). Soporte para campaas entrantes y salientes. Asociacin de formularios por campaa. Asociacin de guin por campaa. Consola de agente. Soporte para breaks, siendo estos configurables y de diferentes tipos. Marcador predictivo de cdigo abierto. Informes avanzados.

Mensajera instantnea:

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

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

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

OpenVox Digium Sangoma Rhino Equipment Xorcom Yeastar

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

Polycom Atcom Aastra Linksys Snom Cisco Nokia UTstarcom

Casos de uso de una Centralita Asterisk:


Centralita nueva con conexiones y extensiones de varios tipos. Pasarela para dotar a una centralita tradicional de servicios nuevos. Pasarela para dotar a una centralita tradicional de nuevas extensiones. Varias Oficinas con un Asterisk Centralizado.
180

Varias Oficinas con Sistemas Asterisk interconectados.

Centralita nueva con conexiones y extensiones de varios tipos.

Pasarela para dotar a una centralita tradicional de servicios nuevos. Posibles servicios: Conexin con Operador IP, Buzn de Voz a email, Sistema de respuesta automtico, etc.

181

Pasarela para dotar a una centralita tradicional de nuevas extensiones. Para poder hacer esto la centralita tradicional debera poder programarse para ello.

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

182

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

183

Ampliacin del sistema de telefona de una empresa


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

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

184

Soluciones de Asterisk para sistemas de telefona entre sedes remotas


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

185

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

La revolucin Asterisk
Cambio en el concepto de PBX Probablemente lo ms importante de Asterisk es que no es un sistema de telefona en caja negra. Es una plataforma de comunicaciones basada en un servidor informtico. Esto no slo cambia la manera de concebir los sistemas de telefona, sino que adems presenta una serie de ventajas sorprendentes. Flexibilidad y Customizacin Efectivamente una instalacin Asterisk puede ser diseada, configurada, conectada e instalada de diferentes maneras, por lo que se convierte en una solucin universal para todas las necesidades. Asterisk puede aceptar conexiones a telfonos locales, pero tambin a telfonos en otras partes del mundo, que se convierten en parte de la red telefnica de su oficina.

186

Asterisk puede interconectarse usando sealizacin analgica, digital o IP. Asterisk funciona igual de bien con viejos telfonos analgicos que con telfonos IP o SoftPhones, que son en realidad software del PC.

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

Ejemplos de uso de Asterisk:


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

187

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

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

188

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

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

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

Captulo

Pruebas realizadas

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

190

191

Kubuntu & Asterisk


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

192

Eleccin del servidor adecuado para Asterisk


Qu hay que tener en cuenta en la eleccin del servidor Asterisk? Para la eleccin del equipo servidor de nuestro sistema Asterisk deberemos tener en cuenta: Nmero de usuarios, o extensiones internas, del sistema y tecnologa empleada, VoIP o telfonos analgicos. Cdecs empleados y necesidades de conversin. Cantidad de trfico de voz esperado. Existencia de conferencias. Funcionalidades avanzadas como mens interactivos de voz, integracin con aplicaciones informticas empresariales, sistemas de facturacin, Cul es la mejor distribucin para instalar Asterisk? Asterisk funciona perfectamente bajo cualquier distribucin No obstante, segn una encuesta que se realiz hace algn tiempo en la pgina web de los usuarios de Asterisk-ES (foro de Asterisk), la mayora se decantan por dos: Debian y CentOS. CentOS (acrnimo de Community ENTerprise Operating System) es un clon a nivel binario de la distribucin Red Hat Enterprise Linux, compilado por voluntarios. Es una alternativa para aquellos que quieren usar la plataforma RHL pero no quiere alejarse de sus principios de software libre. Otra ventaja que tiene CentOS es la gran cantidad de usuarios que trabajan con esta distribucin y la cantidad de paquetes en rpm que existen, lo que hace que existan multitud de foros de usuarios que preguntan y responden basados en esta distribucin. Debian es muy usado por su gran estabilidad y seguridad. Su gran estabilidad se basa en que llevan mucho tiempo arreglando los bugs que puede tener cierto programa antes de ser liberado como estable. Sin embargo este proceso puede durar hasta aos por lo que muchos no son tan pacientes en esperar y quizs decidan en migrar a otra distribucin. Mi eleccin definitiva para las prcticas y el montaje de la centralita Asterisk fue CentOs 5.4. Para instalarlo segu el siguiente manual.

193

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


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

Arranque de Apache Iniciar el servicio


service httod start chkconfig httpd on

Parar el servicio
service httpd stop

Reiniciar el servicio
service httpd restart

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

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

Instalacin
yum install y dhcpd

Configuracin El fichero de configuracin est en /etc/ y se denomina dhcpd.conf. La configuracin es la siguiente:


; Esta opcin especifica si el servidor de DHCP debe intentar actualizar el servidor de DNS ddns-update-style interim; ignore client-updates; ;Segmento red y submascara de red subnet 192.168.1.0 netmask 255.255.255.0 { ;Definimos la gateway y la submascara de red option routers option subnet-mask 192.168.1.3; 255.255.255.0;

195

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

DHCP tambin usa el fichero /var/lib/dhcp/dhcpd.leases para almacenar la informacin de los clientes, se utiliza para saber las IPs que va asignando. Un ejemplo del contenido del archivo dhcpd.leases tras asignar la IP 192.168.1.203 a un telfono IP Sipura es:

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

Arranque del demonio DHCPD Iniciar el servicio service dhcpd start chkconfig dhcpd on Parar el servicio service dhcpd stop Reiniciar el servicio service dhcpd restart

196

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

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

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

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

Arranque del servicio Xinetd Iniciar el servicio


service xinetd start chkconfig xinetd on

Parar el servicio
service xinetd stop

197

Reiniciar el servicio
service xinetd restart

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

Arranque del servicio mysqld Iniciar el servicio


service mysqld start chkconfig mysqld on

Parar el servicio
service mysqld stop

Reiniciar el servicio
service mysqld restart

Establecimiento de contrasea de root y privilegios


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

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

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

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

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

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

199

Su principal inconveniente es el exceso de trfico que se genera, lo que lo puede hacer incompatible para entornos amplios de red. Los cinco tipos de mensajes SNMP intercambiados entre los Agentes y los Administradores, son: Get Request: Una peticin del Administrador al Agente para que enve los valores contenidos en el MIB (base de datos). Get Next Request: Una peticin del Administrador al Agente para que enve los valores contenidos en el MIB referente al objeto siguiente al especificado anteriormente. Get Response: La respuesta del Agente a la peticin de informacin lanzada por el Administrador. Set Request: Una peticin del Administrador al Agente para que cambie el valor contenido en el MIB referente a un determinado objeto. Trap: Un mensaje espontneo enviado por el Agente al Administrador, al detectar una condicin predeterminada, como es la conexin/desconexin de una estacin o una alarma. Instalacin de SNMP Instalar NETSNMP y otros paquetes:
# perl -MCPAN -e shell /etc/perl/CPAN/Config.pm inicialize. CPAN is the world-wide archive of perl resources. It consists of about 100 sites that all replicate the same contents all around the globe. Many countries have at least one CPAN site already. The resources found on CPAN are easily accessible with the CPAN.pm module. If you want to use CPAN.pm, you have to configure it properly. If you do not want to enter a dialog now, you can answer 'no' to this question and I'll try to auto configure. (Note: you can revisit this dialog anytime later by typing 'o conf init' at the cpan prompt.) Are you ready for manual configuration? [yes] no cpan> install Net::SNMP Checking if your kit is complete... Looks good Warning: prerequisite Crypt::DES 2.03 not found. Warning: prerequisite Digest::HMAC 1.00 not found. Warning: prerequisite Digest::SHA1 1.02 not found. Writing Makefile for Net::SNMP ---Unsatisfied dependencies detected during [D/DT/DTOWN/Net-SNMP-5.2.0.tar.gz] ----Digest::HMAC Crypt::DES Digest::SHA1 Shall I follow them and prepend them to the queue of modules we are processing right now? [yes] Enter

200

cpan>exit

Ahora es necesario instalar los paquetes de SNMP:


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

Configuracin del SNMP Necesitas modificar el fichero snmpd.conf:


# nano /etc/snmp/snmpd.conf

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


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

Guarda el fichero y reinicia el demonio SNMPD:


# /etc/init.d/snmpd restart

Cambia los privilegios a agentx:


# chmod 755 /var/agentx

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

201

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

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

202

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

203

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

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

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

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

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

[root@asterisk ~]# rpm -q kernel-devel kernel-devel-2.6.18-8.el5

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


yum install kernel-devel

4.) Ahora s, instalamos los siguientes paquetes necesarios para al instalacin de Asterisk:
yum install bison bison-devel ncurses ncurses-devel zlib zlib-devel gcc-c++ openssldevel gnutls-devel gcc openssl

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

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

204

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

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

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

Luego ingresamos a la carpeta libpri

cd libpri-1.4.0

y ejecutamos:

make clean make make install

Grabamos y cerramos el archivo. Luego ingresamos a la carpeta zaptel

cd ../zaptel-1.4.2.1

y ejecutamos:

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

Finalmente ingresamos a la carpeta asterisk:

cd ../asterisk-1.4.4

205

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

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

asterisk vvvvvvvvcg o asterisk rvvvvvvv

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

Asterisk 1.4xx (de 1.4.22 a 1.4.27) y 1.6.x 1.) Empezamos actualizando el S.O.
yum -y update

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

yum install libtiff-devel php-pear php-pear-db php-gd php-mysql php-pdo audiofile-devel mysql-devel perl-datemanip

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

cd /usr/src mkdir asterisk cd asterisk

Instalamos el subversion para para poder descargar el Asterisk:

yum y install subversin

206

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

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

4.) Instalamos libpri:

cd libpri-1.4.9 make make install cd ..

5.) Instalamos dahdi-linux

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

6.) Instalamos dahdi-tools

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

7.) Instalamos asterisk


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

8.) Instalamos asterisk-addons

207

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

Eleccin de la version Asterisk:


Diferencia entre los Asterisk 1.4 (hasta 1.4.21) y los Asterisk 1.4.22 (y superiores) y 1.6 en telefona analgica: De Zaptel a DAHDI En el paso de Asterisk 1.4.21 a Asterisk 1.4.22 Digium como ya anunci, cambi el nombre de la interfaz de telefona analgica Zaptel a DAHDI (Digium Asterisk Hardware Device Interface) para dar cabida a los deseos del titular de la marca Zaptel. A parte del cambio de nombre Digium aprovech para efectuar la correccin de errores e introducir una serie de caractersticas: Los supresores de eco pueden aplicarse por canal y seleccionando el tiempo de configuracin. La asignacin de memoria de canal ha pasado de un gran bloque a bloques ms pequeos con el fin de reducir los errores de memoria. Apoyo para las tarjetas RDSI BRI (Basic Rate Interface), concretamente para las tarjetas B410P (mdulo con 4 puertos BRI).

Otros de los avances es el empaquetamiento de los mdulos, pasando de uno slo (zaptel) a dos diferenciados por tener uno los mdulos del Kernel (dahdi-linux) y otro con las herramientas para su uso (dahdi-tools). En el primer paquete, dahdi-linux la equivalencia de mdulos es la siguiente: zaptel.ko dahdi.ko ztd-eth.ko dahdi_dynamic_eth.ko ztd-loc.ko dahdi_dynamic_loc.ko ztdummy.ko dahdi_dummy.ko ztdynamic.ko dahdi_dynamic.ko zttranscode.ko dahdi_transcode.ko

En el segundo paquete, dahdi-tools la equivalencia de mdulos es la siguiente: ztcfg dahdi_cfg ztmonitor dahdi_monitor ztscan dahdi_scan ztspeed dahdi_speed
208

zttest dahdi_test zttool dahdi_tool zapconf dahdi_genconf

En las versiones de Asterisk 1.4 y 1.6 en las que se usa DAHDI, los mdulos que utilizan los servicios de este canal son: chan_zap.so chan_dahdi.so app_zapbarge.so app_dahdibarge.so app_zarpras.so app_dahdiras.so app_zapscan.so app_dahdiscan.so codec_zap.so codec_dahdi.so

La descripcin de cada mdulo es la siguiente: chan_dahdi.so: Este modulo determina que nombre del canal se debe utilizar para llamadas entrantes .Si no se quiere usar el nombre de canal DAHDI y se quiere seguir usando el canal Zap hay que aadir la siguiente lnea al archivo asterisk.conf de /etc/asterisk/: dahdichanname=no app_dahdibarge.so: La aplicacin ZapBarge ser ahora DAHDIBarge. app_dahdiras.so: La aplicacin ZapRAS ser ahora DAHDIRAS. app_dahdiscan.so: La aplicacin ZapScan ser ahora DAHDIScan.

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

209

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

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

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

210

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

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

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


211

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

Tenemos las tarjetas reconocidas pero no tenemos canales.

[root@asterisk etc]# asterisk -r *CLI> dahdi show channels Chan extension Context pseudo default *CLI> dahdi show status Description Wildcard TDM400P REV E/F Board 5 Alarms IRQ bpviol CRC4 OK 0 0 0 Language Moh interpret default

5.) Asterisk interpreta los canales a travs del fichero de configuracin chan_dahdi.conf. Este fichero no existe, as que lo crearemos nosotros.

[root@asterisk asterisk]# nano chan_dahdi.conf

Aadiremos simplemente 2 lneas:


212

[channels] #include dahdi-channels.conf

con esto le decimos al sistema asterisk que lea el fichero dahdi-channels.conf (creado en la ejecucin de dahdi_genconf y dahdi_cfg -vv). 6.) Ahora simplemente reiniciamos asterisk

[root@asterisk asterisk]# asterisk -r *CLI> dahdi show channels Chan Extension pseudo 1 2 Context default default default Language MOH Interpret default default default

7.) Paramos Asterisk :


[root@asterisk asterisk]# service asterisk stop

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

Iniciamos Asterisk y listo:


[root@asterisk asterisk]# service asterisk start

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


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

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

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

213

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

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


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

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

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

214

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

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

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

[root@asterisk]# asterisk rvvv *CLI> reload

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

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

216

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

217

Pruebas telfonos IP (SipuraSPA):

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

3.) Realizamos la configuracin de los 4 usuarios en 2 telefenos IP SipuraSPA de dos extensiones cada uno. La configuracin del telfono en cuanto al servidor Asterisk es la siguiente:

Un ejemplo de configuracin de una extensin de las dos que permite configurar cada telfono IP es:

218

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

-- Registered SIP '102' at 192.168.1.201 port 5060 -- Saved useragent "Sipura/SPA841-3.1.3(a)" for peer 102

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

219

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

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

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

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

220

-- User hung up

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

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

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

Entre otras opciones te permite volverlo a escuchar y escuchar el siguiente mensaje,etc.


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

221

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

Escuchamos el siguiente pulsando el 6.


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

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

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

222

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

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

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

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


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

223

3.) Contador decreciente.


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

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

224

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

Pruebas de funcionamiento colas y registro de miembros:

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

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

225

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

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


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

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

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

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

226

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

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

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

A travs de la extension 2002 eliminamos dichos miembro dinmico.


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

227

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

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

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

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

228

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

7.) Cuntos miembros hay en la cola?


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

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

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

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

229

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

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


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

230

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

231

En estos momentos hay 3 personas en la conferencia (600). Vamos a comprobarlo:


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

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

Como podemos ver en el archivo meetme.conf:


conf => 600,1234

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

232

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

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

El mensaje es claro: "Este no es un numero de conferencia valido, intntelo de nuevo". 3.) Como ltimo ejemplo vamos a crear una conferencia dinmicamente, es decir, sin configurarla en el meetme.conf.
;Crear una conferencia dinmica exten => 620,1,Meetme(,scDM(default)) exten => 620,n,Hangup

El proceso de creacion es el siguiente:


233

1. Introduzca el numero de conferencia + #:


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

2. Introduzca el pin d ela conferencia


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

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


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

4. Te dice si estas solo o no


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

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

Tras poner el nmero de conferencia + # y el pin se accede a la conferencia. Pruebas Proveedor VoIP: Gizmo5 Uso de Gizmo 5 con Asterisk Este proveedor tiene dos servicios fcilmente acoplables a las centralitas Asterisk: Recepcin de llamadas. Realizacin de llamadas. El primero se consigue a travs de una cuenta Call In, de forma que tras obtener la cuenta solo habra que configurar el archivo sip.conf con la informacin del proveedor

234

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

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

Comprobacin del registro


*CLI> sip show peers Name/username Host ---------------------------proxy01.sipphone.com/1747 198.65.166.131 Dyn Nat ACL Port ----------------------5060 Status --------OK (216 ms)

Llamada a movil desde GIZMO 5 utilizando cuenta Call Out: Realizacin de una llamada desde el usuario SIP/102 hacia un mvil:

235

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

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

La configuracin necesaria para que las extensiones de ambos servidores puedan comunicarse es la siguiente:

236

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

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

237

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

238

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

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

Debemos configurar su acceso en el fichero extensions.conf:


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

En el otro lado tendremos configurado en un softphone Zoiper una extensin IAX poniendo como Dominio la IP externa del servidor.
239

Para poder establecer el registro de dicha extensin es necesario abrir el puerto correspondiente al protocolo IAX 2 (4569) en el router por el que se comunica con el exterior la centralita Asterisk.Tras abrir el puerto deberamos ver algo similar a esto:

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

Para comprobar el correcto funcionamiento vemos el registro de la extensin remota(6000):


-- Registered IAX2 '6000' (AUTHENTICATED) at 82.130.246.138:45755 localhost*CLI> iax2 show peers Name/Username Host Mask 6001/6001 192.168.1.50 (D) 255.255.255.255 6000/6000 82.130.246.138 (D) 255.255.255.255 2 iax2 peers [0 online, 0 offline, 2 unmonitored]

Port 4569 45755

Status Unmonitored Unmonitored

240

Y probamos a llamar desde la extensin de prueba 6001 a la extensin remota:


-- Accepting AUTHENTICATED call from 192.168.1.50: > requested format = gsm, > requested prefs = (), > actual format = gsm, > host prefs = (gsm|ulaw|alaw), > priority = mine -- Executing [6000@remoto:1] Dial("IAX2/6001-14139", "IAX2/6000|30|Ttm") in new stack -- Called 6000 -- Started music on hold, class 'default', on IAX2/6001-14139 -- Call accepted by 82.130.246.138 (format gsm) -- Format for call is gsm -- IAX2/6000-9140 is ringing -- IAX2/6000-9140 answered IAX2/6001-14139 -- Stopped music on hold on IAX2/6001-14139 -- Hungup 'IAX2/6000-9140' == Spawn extension (remoto, 6000, 1) exited non-zero on 'IAX2/6001-14139' -- Hungup 'IAX2/6001-14139'

Prueba con Adaptador Telefnico Analgico SPA 3000 El esquema de las pruebas es el siguiente:

241

En primer lugar tenemos que acceder a la configuracin del SPA 3000 a travs de la IP (192.168.1.211) para configurar las llamadas entrantes a travs del apartado PSTN Line (PSTN->VoIP) y las llamadas salientes a travs del apartado Line 1 (VoIP->PSTN). Line 1

PSTN Line

Vemos la configuracin del fichero sip.conf:


[9000] type=friend username=9000 secret=1234 host=dynamic context=pstn qualify=yes

242

[9001] type=peer username=9001 fromuser=9001 secret=1234 host=dynamic port=5061 context=pstn dtmfmode=rfc2833 insecure=very

Comprobamos el registro de las dos lneas:


-- Registered SIP '9000' at 192.168.1.211 port 5060 -- Saved useragent "Sipura/SPA3000-2.0.13(GWg)" for peer 9000 -- Registered SIP '9001' at 192.168.1.211 port 5061 -- Saved useragent "Sipura/SPA3000-2.0.13(GWg)" for peer 9001 NOTICE[3840]: chan_sip.c:13107 handle_response_peerpoke: Peer '9000' is now Reachable. (25ms / 2000ms) localhost*CLI> sip show peers Name/username Host Dyn Nat ACL Port Status 9001/9001 192.168.1.211 D 5061 Unmonitored 9000/9000 192.168.1.211 D 5060 OK (14 ms)

La configuracin del fichero extensions.conf teniendo en cuenta que queremos que las llamadas entrantes de nmeros que empiecen por 9 se redireccionen a un telfono analgico y las de los nmeros que empiecen por 6 se redireccionen a un telfono IP y que tambin queremos que las llamadas salientes que empiecen por 9 salgan por la PSTN:
[globals] PSTN=192.168.1.211:5061 [pstn] ;Entrantes exten => 9001,1,NoOP("El CALLERID es: ${CALLERID(num)}") exten => 9001,n,GotoIf($["${CALLERID(num):0:1}"= "9"]?100:200) exten => 9001,100,Goto(pstn,9000,1) exten => 9001,200,Goto(pstn,103,1) ;Si es un numero que empieza por 9 exten => 9000,1,Dial(SIP/9000,30,Ttm) exten => 9000,n,Hangup ;Si es un numero que empieza por 6 exten => 103,1,Dial(SIP/103,30,Ttm) exten => 103,n,Hangup ;Salientes exten => _9XXXXXXXX,1,Dial(SIP/${EXTEN}@${PSTN},30,Ttm) exten => _9XXXXXXXX,n,Hangup

Realizamos 3 pruebas para comprobar el correcto funcionamiento: Prueba 1) Llamada desde un mvil al nmero que est conectado con el SPA 3000:
243

-- Executing [9001@pstn:1] NoOp("SIP/9001-b7776538", ""El CALLERID es: 650664616"") in new stack -- Executing [9001@pstn:2] GotoIf("SIP/9001-b7776538", "0?100:200") in new stack -- Goto (pstn,9001,200) -- Executing [9001@pstn:200] Goto("SIP/9001-b7776538", "pstn|103|1") in new stack -- Goto (pstn,103,1) -- Executing [103@pstn:1] Dial("SIP/9001-b7776538", "SIP/103|30|Ttm") in new stack -- Called 103 -- Started music on hold, class 'default', on SIP/9001-b7776538 -- SIP/103-0a157af0 is ringing -- Stopped music on hold on SIP/9001-b7776538 == Spawn extension (pstn, 103, 1) exited non-zero on 'SIP/9001-b7776538'

Prueba 2) Llamada desde un telfono fijo al nmero que est conectado con el SPA:
-- Executing [9001@pstn:1] NoOp("SIP/9001-b7771ae0", ""El CALLERID es: 945177145"") in new stack -- Executing [9001@pstn:2] GotoIf("SIP/9001-b7771ae0", "1?100:200") in new stack -- Goto (pstn,9001,100) -- Executing [9001@pstn:100] Goto("SIP/9001-b7771ae0", "pstn|9000|1") in new stack -- Goto (pstn,9000,1) -- Executing [9000@pstn:1] Dial("SIP/9001-b7771ae0", "SIP/9000|30|Ttm") in new stack -- Called 9000 -- Started music on hold, class 'default', on SIP/9001-b7771ae0 -- SIP/9000-0a157af0 is ringing -- Stopped music on hold on SIP/9001-b7771ae0 == Spawn extension (pstn, 9000, 1) exited non-zero on 'SIP/9001-b7771ae0'

Prueba 3) Llamada desde la extensin 103 de la centralita a un nmero fijo:


-- Executing [945177145@acceso2:1] Dial("SIP/103-0a157af0", "SIP/945177145@192.168.1.211:5061|30|Ttm") in new stack -- Called 945177145@192.168.1.211:5061 -- Started music on hold, class 'default', on SIP/103-0a157af0 -- SIP/192.168.1.211:5061-0a15d138 is ringing -- SIP/192.168.1.211:5061-0a15d138 answered SIP/103-0a157af0 -- Stopped music on hold on SIP/103-0a157af0 == Spawn extension (acceso2, 945177145, 1) exited non-zero on 'SIP/103-0a157af0'

244

Captulo

Centralita Asterisk para Yet Informtica y Pruebas realizadas

Descripcin de la centralita nueva: Asterisk


Para la correcta creacin e implantacin de la centralita Asterisk en la empresa Yet Informtica S.L. se ha hecho un Demo para ver el futuro funcionamiento de la central de una manera ms reducida, tras las pruebas generales , las de las aplicaciones integradas en la centralita y las de otras funcionalidades nuevas estaremos preparados para dicha implantacin. A continuacin veremos cada uno de estos pasos a realizar.

245

Esquema Conceptual del Demo realizado antes de la implantacin

246

Explicacin del Plan de llamadas de la Centralita (Dialplan) Llamadas entrantes

247

248

249

250

251

Accesos Directos a usuarios de la Empresa

252

Gestin de Buzones de Voz

Gestin de las Colas de la aplicacin

253

254

Funcionamiento de la Funcionalidad CallBack Los pasos para realizar el CallBack son los siguientes: 1) Marcar el telfono al que se llamar. 2) Marcar la fecha de la llamada en el formato siguiente: 4 dgitos para el ao 2 dgitos para el mes 2 dgitos para el da 3) Marcar la hora de la llamada en el formato siguiente: 2 dgitos para la hora 2 dgitos para los minutos 4) Verificar que los datos introducidos son correctos o volver a introducirlos. 5) Se generar el Call File teniendo en cuenta si la llamada ser a un nmero externo o no, para comprobarlo mira que el primer digito sea un 6.

255

Uso de Conferencias en la aplicacin Agregarse a la conferencia 600

Saber cuntas personas hay en la conferencia

Restringir el nmero de participantes de una conferencia

Uso de Conferencia dinmica

ltima llamada recibida Esta funcionalidad en los telfonos IP de gama media o alta no hara falta pero para poder obtener esta informacin usando cualquier telfono IP se ha implementado.

256

Consiste en comprobar en la base de datos del CDR cul ha sido la ltima llamada recibida para el CALLERID que ha llamado a la extensin de esta funcionalidad y llamarla.

ltima llamada realizada Consiste en comprobar en la base de datos del CDR cul ha sido la ltima llamada realizada por el CALLERID que ha llamado a la extensin de esta funcionalidad y llamarla. Si la ltima llamada a sido realizada a un usuario interno se mira cual es la llamada anterior y si no es interna se realiza la llamada.

257

Funcionamiento de la Funcionalidad DISA Configuracin 1) Al llamar a la centralita un determinado nmero, est le llama y le da tono para llamar a travs de esta.

Configuracin 2) Al llamar a la extensin 333 de la centralita, est le llama y le da tono para llamar a travs de esta.

258

Configuracin 3) Al llamar a la extensin 9999 de la centralita, tras marcar la contrasea 1234 seguido del carcter #, est da tono para llamar a travs de esta a cualquier nmero de salida que este en el contexto acceso.

Funcionamiento del desvo de las llamadas de usuarios internos a otro telfono

Activacin del desvo de llamadas de una extensin de un usuario interno

Desactivacin del desvo de llamadas de una extensin de un usuario interno

259

Prueba para la extensin 5000 tras efectuar el desvo.

Pruebas generales Prueba 1) Llama a la centralita en un horario no laborable un usuario VIP. Parte de cdigo utilizado:
[acceso] exten => 787,1,Set(NUM=${EXTEN}) exten => 787,n,Macro(general,soportelaboral,${CALS},${NUM}) [macro-general] ;1)COMPROBACION CON EL CALENDARIO exten => s,1,Answer exten => s,n,Set(SALTO=${ARG1}) exten => s,n,AGI(${ARG2}) exten => s,n,Goto(${SALTO},${ARG3},1) [No Disponible Soporte] ;Comprobar en la base de datos si el cliente es VIP(contrato de mantenimiento de 24h).Si lo es se le envia a la prioridad 100 sino lo es a la 90. exten => 787,1,MYSQL(Connect connid localhost root root agenda) exten => 787,n,NoOp(connid = ${connid}) exten => 787,n,Set(NUM2= ${CALLERID(num)}) exten => 787,n,MYSQL(Query resultid ${connid} SELECT\ mant FROM\ clientes\ INNER\ JOIN\ telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\ telefono=650664616) ;exten => 787,n,MYSQL(Query resultid ${connid} SELECT\ mant FROM\ clientes\ INNER\ JOIN\ telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\ telefono=${NUM2}) exten => 787,n,NoOp(resultid = ${resultid}) exten => 787,n,MYSQL(Fetch fetchid ${resultid} MANT) exten => 787,n,NoOp(MANT = ${MANT}) exten => 787,n,MYSQL(Disconnect ${connid}) exten => 787,n,GotoIf($["${MANT}"="VIP"]?100:90) exten => 787,90,Macro(nodisponible,${BS}) exten => 787,100,Set(N=650664616) ;exten => 787,100,Set(N=${NUM2}) exten => 787,n,Gotoif($["${N:0:1}" = "6"]?200:300) exten => 787,200,Dial(SIP/+34${MOVIL1}@proxy01.sipphone.com,20,r) exten => 787,n,Dial(Sebi/g1/${MOVIL1},30) exten => 787,n,Dial(SIP/+34${MOVIL2}@proxy01.sipphone.com,20,r) exten => 787,n,Dial(Sebi/g1/${MOVIL2},30) exten => 787,n,AGI(sms_send.php) exten => 787,n,Voicemail(3333) exten => 787,n,Hangup ;sI ESTUVIERA CONECTADO A LA PSTN Y NO FUERA UN MOVIL SALDRIA POR AHI exten => 787,300,Dial(DAHDI/${MOVIL1},20,r)

260

exten => 787,n,Dial(DAHDI/${MOVIL2},20,r) exten => 787,n,AGI(sms_send.php) exten => 787,n,Voicemail(3333) exten => 787,n,Hangup

El log en caso de que coja el mvil el encargado de atender a usuarios 24 desde el proveedor IP Gizmo 5:
-- Executing [787@acceso:1] Set("SIP/2003-b6901320", "NUM=787") in new stack -- Executing [787@acceso:2] Macro("SIP/2003-b6901320", "general|soportelaboral|pyastcal.py|787") in new stack -- Executing [s@macro-general:1] Answer("SIP/2003-b6901320", "") in new stack -- Executing [s@macro-general:2] Set("SIP/2003-b6901320", "SALTO=soportelaboral") in new stack -- Executing [s@macro-general:3] AGI("SIP/2003-b6901320", "pyastcal.py") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py -- AGI Script pyastcal.py completed, returning 0 -- Executing [s@macro-general:4] Goto("SIP/2003-b6901320", "No Disponible Soporte|787|1") in new stack -- Goto (No Disponible Soporte,787,1) == Channel 'SIP/2003-b6901320' jumping out of macro 'general' -- Executing [787@No Disponible Soporte:1] MYSQL("SIP/2003-b6901320", "Connect connid localhost root root agenda") in new stack -- Executing [787@No Disponible Soporte:2] NoOp("SIP/2003-b6901320", "connid = 1") in new stack -- Executing [787@No Disponible Soporte:3] Set("SIP/2003-b6901320", "NUM2= 2003") in new stack -- Executing [787@No Disponible Soporte:4] MYSQL("SIP/2003-b6901320", "Query resultid 1 SELECT mant FROM clientes INNER JOIN telefono ON clientes.id=telefono.idEmp WHERE telefono=650664616") in new stack -- Executing [787@No Disponible Soporte:5] NoOp("SIP/2003-b6901320", "resultid = 2") in new stack -- Executing [787@No Disponible Soporte:6] MYSQL("SIP/2003-b6901320", "Fetch fetchid 2 MANT") in new stack -- Executing [787@No Disponible Soporte:7] NoOp("SIP/2003-b6901320", "MANT = VIP") in new stack -- Executing [787@No Disponible Soporte:8] MYSQL("SIP/2003-b6901320", "Disconnect 1") in new stack -- Executing [787@No Disponible Soporte:9] GotoIf("SIP/2003-b6901320", "1?100:90") in new stack -- Goto (No Disponible Soporte,787,100) -- Executing [787@No Disponible Soporte:100] Set("SIP/2003-b6901320", "N=650664616") in new stack -- Executing [787@No Disponible Soporte:101] GotoIf("SIP/2003-b6901320", "1?200:300") in new stack -- Goto (No Disponible Soporte,787,200) -- Executing [787@No Disponible Soporte:200] Dial("SIP/2003-b6901320", "SIP/+34650664616@proxy01.sipphone.com|20|r") in new stack -- Called +34650664616@proxy01.sipphone.com -- SIP/proxy01.sipphone.com-0a1e3628 answered SIP/2003-b6901320 -- Packet2Packet bridging SIP/2003-b6901320 and SIP/proxy01.sipphone.com-0a1e3628 == Spawn extension (No Disponible Soporte, 787, 200) exited non-zero on 'SIP/2003-b6901320'

Para ver el correcto envio de SMS quito el valor a las variables que contienen los mviles a llamar en horario no laboral:
-- Executing [787@acceso:1] Set("SIP/2003-b6900f70", "NUM=787") in new stack -- Executing [787@acceso:2] Macro("SIP/2003-b6900f70", "general|soportelaboral|pyastcal.py|787") in new stack -- Executing [s@macro-general:1] Answer("SIP/2003-b6900f70", "") in new stack -- Executing [s@macro-general:3] AGI("SIP/2003-b6900f70", "pyastcal.py") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py -- AGI Script pyastcal.py completed, returning 0

261

-- Executing [s@macro-general:4] Goto("SIP/2003-b6900f70", "No Disponible Soporte|787|1") in new stack -- Goto (No Disponible Soporte,787,1) == Channel 'SIP/2003-b6900f70' jumping out of macro 'general' -- Executing [787@No Disponible Soporte:1] MYSQL("SIP/2003-b6900f70", "Connect connid localhost root root agenda") in new stack -- Executing [787@No Disponible Soporte:2] NoOp("SIP/2003-b6900f70", "connid = 1") in new stack -- Executing [787@No Disponible Soporte:3] Set("SIP/2003-b6900f70", "NUM2= 2003") in new stack -- Executing [787@No Disponible Soporte:4] MYSQL("SIP/2003-b6900f70", "Query resultid 1 SELECT mant FROM clientes INNER JOIN telefono ON clientes.id=telefono.idEmp WHERE telefono=650664616") in new stack -- Executing [787@No Disponible Soporte:5] NoOp("SIP/2003-b6900f70", "resultid = 2") in new stack -- Executing [787@No Disponible Soporte:6] MYSQL("SIP/2003-b6900f70", "Fetch fetchid 2 MANT") in new stack -- Executing [787@No Disponible Soporte:7] NoOp("SIP/2003-b6900f70", "MANT = VIP") in new stack -- Executing [787@No Disponible Soporte:8] MYSQL("SIP/2003-b6900f70", "Disconnect 1") in new stack -- Executing [787@No Disponible Soporte:9] GotoIf("SIP/2003-b6900f70", "1?100:90") in new stack -- Goto (No Disponible Soporte,787,100) -- Executing [787@No Disponible Soporte:100] Set("SIP/2003-b6900f70", "N=650664616") in new stack -- Executing [787@No Disponible Soporte:101] GotoIf("SIP/2003-b6900f70", "1?200:300") in new stack -- Goto (No Disponible Soporte,787,200) -- Executing [787@No Disponible Soporte:200] Dial("SIP/2003-b6900f70", "SIP/+34@proxy01.sipphone.com|20|r") in new stack == Everyone is busy/congested at this time (1:0/0/1) -- Executing [787@No Disponible Soporte:201] Dial("SIP/2003-b6900f70", "Sebi/g1/|30") in new stack == Everyone is busy/congested at this time (1:0/0/1) -- Executing [787@No Disponible Soporte:202] Dial("SIP/2003-b6900f70", "SIP/+34@proxy01.sipphone.com|20|r") in new stack == Everyone is busy/congested at this time (1:0/0/1) -- Executing [787@No Disponible Soporte:203] Dial("SIP/2003-b6900f70", "Sebi/g1/|30") in new stack == Everyone is busy/congested at this time (1:0/0/1) -- Executing [787@No Disponible Soporte:204] AGI("SIP/2003-b6900f70", "sms_send.php") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/sms_send.php -- AGI Script sms_send.php completed, returning 0 == Spawn extension (No Disponible Soporte, 787, 205) exited non-zero on 'SIP/2003-b6900f70'

Prueba 2) Llama a la centralita en un horario no laborable un usuario no VIP. Parte de cdigo utilizado:
[No Disponible Soporte] ;Comprobar en la base de datos si el cliente es VIP(contrato de mantenimiento de 24h).Si lo es se le envia a la prioridad 100 sino lo es a la 90. exten => 787,1,MYSQL(Connect connid localhost root root agenda) exten => 787,n,NoOp(connid = ${connid}) exten => 787,n,Set(NUM2= ${CALLERID(num)}) exten => 787,n,MYSQL(Query resultid ${connid} SELECT\ mant FROM\ clientes\ INNER\ JOIN\ telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\ telefono=650664616) ;exten => 787,n,MYSQL(Query resultid ${connid} SELECT\ mant FROM\ clientes\ INNER\ JOIN\ telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\ telefono=${NUM2}) exten => 787,n,NoOp(resultid = ${resultid}) exten => 787,n,MYSQL(Fetch fetchid ${resultid} MANT) exten => 787,n,NoOp(MANT = ${MANT}) exten => 787,n,MYSQL(Disconnect ${connid}) exten => 787,n,GotoIf($["${MANT}"="VIP"]?100:90)

262

exten => 787,90,Macro(nodisponible,${BS}) [macro-nodisponible] exten => s,1,PLayBack(grabacion2) exten => s,n,Voicemail(${ARG1}) exten => S,n,Hangup

El log desde el CLI es el siguiente:


-- Executing [787@acceso:1] Set("SIP/2003-0a1e3110", "NUM=787") in new stack -- Executing [787@acceso:2] Macro("SIP/2003-0a1e3110", "general|soportelaboral|pyastcal.py|787") in new stack -- Executing [s@macro-general:1] Answer("SIP/2003-0a1e3110", "") in new stack -- Executing [s@macro-general:2] Set("SIP/2003-0a1e3110", "SALTO=soportelaboral") in new stack -- Executing [s@macro-general:3] AGI("SIP/2003-0a1e3110", "pyastcal.py") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py -- AGI Script pyastcal.py completed, returning 0 -- Executing [s@macro-general:4] Goto("SIP/2003-0a1e3110", "No Disponible Soporte|787|1") in new stack -- Goto (No Disponible Soporte,787,1) == Channel 'SIP/2003-0a1e3110' jumping out of macro 'general' -- Executing [787@No Disponible Soporte:1] MYSQL("SIP/2003-0a1e3110", "Connect connid localhost root root agenda") in new stack -- Executing [787@No Disponible Soporte:2] NoOp("SIP/2003-0a1e3110", "connid = 1") in new stack -- Executing [787@No Disponible Soporte:3] Set("SIP/2003-0a1e3110", "NUM2= 2003") in new stack -- Executing [787@No Disponible Soporte:4] MYSQL("SIP/2003-0a1e3110", "Query resultid 1 SELECT mant FROM clientes INNER JOIN telefono ON clientes.id=telefono.idEmp WHERE telefono= 2003") in new stack -- Executing [787@No Disponible Soporte:5] NoOp("SIP/2003-0a1e3110", "resultid = 2") in new stack -- Executing [787@No Disponible Soporte:6] MYSQL("SIP/2003-0a1e3110", "Fetch fetchid 2 MANT") in new stack -- Executing [787@No Disponible Soporte:7] NoOp("SIP/2003-0a1e3110", "MANT = ") in new stack -- Executing [787@No Disponible Soporte:8] MYSQL("SIP/2003-0a1e3110", "Disconnect 1") in new stack -- Executing [787@No Disponible Soporte:9] GotoIf("SIP/2003-0a1e3110", "0?100:90") in new stack -- Goto (No Disponible Soporte,787,90) -- Executing [787@No Disponible Soporte:90] Macro("SIP/2003-0a1e3110", "nodisponible|3333") in new stack -- Executing [s@macro-nodisponible:1] Playback("SIP/2003-0a1e3110", "grabacion2") in new stack -- Executing [s@macro-nodisponible:2] VoiceMail("SIP/2003-0a1e3110", "3333") in new stack -- <SIP/2003-0a1e3110> Playing 'vm-intro' (language 'es') == Spawn extension (macro-nodisponible, s, 2) exited non-zero on 'SIP/2003-0a1e3110' in macro 'nodisponible' == Spawn extension (No Disponible Soporte, 787, 90) exited non-zero on 'SIP/2003-0a1e3110'

Prueba 3) Llama a la centralita en un horario laboral un usuario VIP. 1) Pausar todos los miembros menos el 2001 de la cola del Departamento de Soporte, al que le llegarn todas las llamadas. 2) El 2005 llama a la cola.(se le mantiene en espera) 3) El 4000 llama a la cola.(se le mantiene en espera) 4) El 2003 llama a la cola --> QUEUE_PRIO=10 (se le mantiene en espera) 5) Cuando el 2001 coja el telefono deberia hablar con 2003.

263

El cdigo utilizado en el apartado 1 es el siguiente:


exten => _XXXX22,1,PauseQueueMember(${QS}|SIP/${EXTEN:0:4}) exten => _XXXX22,n,Hangup

El log del CLI del apartado 1 es:


-- Executing [200022@acceso:1] PauseQueueMember("SIP/2003-b6900590", "soportequeue|SIP/2000") in new stack -- Executing [200022@acceso:2] Hangup("SIP/2003-b6900590", "") in new stack -- Executing [200522@acceso:1] PauseQueueMember("SIP/2003-b690ea58", "soportequeue|SIP/2005") in new stack -- Executing [200522@acceso:2] Hangup("SIP/2003-b690ea58", "") in new stack == Spawn extension (acceso, 200522, 2) exited non-zero on 'SIP/2003-b690ea58' -- Executing [200322@acceso:1] PauseQueueMember("SIP/2003-b690d430", "soportequeue|SIP/2003") in new stack -- Executing [200322@acceso:2] Hangup("SIP/2003-b690d430", "") in new stack

El cdigo utilizado en los apartados 2,3,4 y 5 es el siguiente:


exten => 787,1,Set(NUM=${EXTEN}) exten => 787,n,Macro(general,soportelaboral,${CALS},${NUM}) [macro-general] ;1)COMPROBACION CON EL CALENDARIO exten => s,1,Answer exten => s,n,Set(SALTO=${ARG1}) exten => s,n,AGI(${ARG2}) exten => s,n,Goto(${SALTO},${ARG3},1) [soportelaboral] exten => 787,1,Macro(laboral,${QS}) [macro-laboral] exten => s,1,Answer exten => s,n,Wait(2) exten => s,n,SetMusicOnHold(default) ;Consultar con la base de datos si es VIP para pasar a la primera posicion de la cola exten => s,n,MYSQL(Connect connid localhost root root agenda) exten => s,n,MYSQL(Query resultid ${connid SELECT\ mant FROM\ clientes\ INNER\ JOIN\ telefono\ ON\ clientes.id=telefono.idEmp WHERE\ telefono="NUM2"}) exten => s,n,NoOp(resultid = ${resultid}) ;Si es VIP --> POSICIONAR DELANTE EN LA COLA exten => s,n,MYSQL(Fetch fetchid ${resultid} PRIO) exten => s,n,NoOp( ${PRIO}) exten => s,n,GotoIf($["${PRIO}"="VIP"]?prio:no) exten => s,n(prio),MYSQL(Disconnect ${connid}) ;exten => s,n,GotoIf($["${NUM}"=2003]?prio2:no) exten => s,n,Set(QUEUE_PRIO=10) exten => s,n,Queue(${ARG1}|r) exten => s,n,Hangup exten => s,n(no),MYSQL(Disconnect ${connid}) exten => s,n,Queue(${ARG1}|r) exten => s,n,Hangup

264

El log del CLI del apartado 2 es:


-- Executing [787@acceso:1] Set("SIP/2005-b6902d00", "NUM=787") in new stack -- Executing [787@acceso:2] Macro("SIP/2005-b6902d00", "general|soportelaboral|pyastcal.py|787") in new stack -- Executing [s@macro-general:1] Answer("SIP/2005-b6902d00", "") in new stack -- Executing [s@macro-general:2] Set("SIP/2005-b6902d00", "SALTO=soportelaboral") in new stack -- Executing [s@macro-general:3] AGI("SIP/2005-b6902d00", "pyastcal.py") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py -- AGI Script pyastcal.py completed, returning 0 -- Executing [s@macro-general:4] Goto("SIP/2005-b6902d00", "soportelaboral|787|1") in new stack -- Goto (soportelaboral,787,1) == Channel 'SIP/2005-b6902d00' jumping out of macro 'general' -- Executing [787@soportelaboral:1] Macro("SIP/2005-b6902d00", "laboral|soportequeue") in new stack -- Executing [s@macro-laboral:1] Answer("SIP/2005-b6902d00", "") in new stack -- Executing [s@macro-laboral:2] Wait("SIP/2005-b6902d00", "2") in new stack -- Executing [s@macro-laboral:3] SetMusicOnHold("SIP/2005-b6902d00", "default") in new stack -- Executing [s@macro-laboral:5] MYSQL("SIP/2005-b6902d00", "Query resultid ") in new stack -- Executing [s@macro-laboral:6] NoOp("SIP/2005-b6902d00", "resultid = ") in new stack -- Executing [s@macro-laboral:7] MYSQL("SIP/2005-b6902d00", "Fetch fetchid PRIO") in new stack -- Executing [s@macro-laboral:8] NoOp("SIP/2005-b6902d00", " ") in new stack -- Executing [s@macro-laboral:9] GotoIf("SIP/2005-b6902d00", "0?prio:no") in new stack -- Goto (macro-laboral,s,14) -- Executing [s@macro-laboral:14] MYSQL("SIP/2005-b6902d00", "Disconnect 1") in new stack -- Executing [s@macro-laboral:15] Queue("SIP/2005-b6902d00", "soportequeue|r") in new stack -- Called SIP/2001 -- SIP/2001-0a17d960 is ringing

El log del CLI del apartado 3 es:


-- Executing [787@acceso:1] Set("SIP/4000-b6900590", "NUM=787") in new stack -- Executing [787@acceso:2] Macro("SIP/4000-b6900590", "general|soportelaboral|pyastcal.py|787") in new stack -- Executing [s@macro-general:1] Answer("SIP/4000-b6900590", "") in new stack -- Executing [s@macro-general:2] Set("SIP/4000-b6900590", "SALTO=soportelaboral") in new stack -- Executing [s@macro-general:3] AGI("SIP/4000-b6900590", "pyastcal.py") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py -- AGI Script pyastcal.py completed, returning 0 -- Executing [s@macro-general:4] Goto("SIP/4000-b6900590", "soportelaboral|787|1") in new stack -- Goto (soportelaboral,787,1) == Channel 'SIP/4000-b6900590' jumping out of macro 'general' -- Executing [787@soportelaboral:1] Macro("SIP/4000-b6900590", "laboral|soportequeue") in new stack -- Executing [s@macro-laboral:1] Answer("SIP/4000-b6900590", "") in new stack -- Executing [s@macro-laboral:2] Wait("SIP/4000-b6900590", "2") in new stack -- Executing [s@macro-laboral:3] SetMusicOnHold("SIP/4000-b6900590", "default") in new stack -- Executing [s@macro-laboral:4] MYSQL("SIP/4000-b6900590", "Connect connid localhost root root agenda") in new stack -- Executing [s@macro-laboral:5] MYSQL("SIP/4000-b6900590", "Query resultid ") in new stack -- Executing [s@macro-laboral:6] NoOp("SIP/4000-b6900590", "resultid = ") in new stack -- Executing [s@macro-laboral:7] MYSQL("SIP/4000-b6900590", "Fetch fetchid PRIO") in new stack -- Executing [s@macro-laboral:8] NoOp("SIP/4000-b6900590", " ") in new stack -- Executing [s@macro-laboral:9] GotoIf("SIP/4000-b6900590", "0?prio:no") in new stack -- Goto (macro-laboral,s,14) -- Executing [s@macro-laboral:14] MYSQL("SIP/4000-b6900590", "Disconnect 1") in new stack

265

-- Executing [s@macro-laboral:15] Queue("SIP/4000-b6900590", "soportequeue|r") in new stack -- Called SIP/2001 -- SIP/2001-0a1fb1b8 is ringing -- Nobody picked up in 10000 ms

El log del CLI del apartado 4 es:


-- Executing [787@acceso:1] Set("SIP/2003-b6902d00", "NUM=787") in new stack -- Executing [787@acceso:2] Macro("SIP/2003-b6902d00", "general|soportelaboral|pyastcal.py|787") in new stack -- Executing [s@macro-general:1] Answer("SIP/2003-b6902d00", "") in new stack -- Executing [s@macro-general:2] Set("SIP/2003-b6902d00", "SALTO=soportelaboral") in new stack -- Executing [s@macro-general:3] AGI("SIP/2003-b6902d00", "pyastcal.py") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py -- AGI Script pyastcal.py completed, returning 0 -- Executing [s@macro-general:4] Goto("SIP/2003-b6902d00", "soportelaboral|787|1") in new stack -- Goto (soportelaboral,787,1) == Channel 'SIP/2003-b6902d00' jumping out of macro 'general' -- Executing [787@soportelaboral:1] Macro("SIP/2003-b6902d00", "laboral|soportequeue") in new stack -- Executing [s@macro-laboral:1] Answer("SIP/2003-b6902d00", "") in new stack -- Executing [s@macro-laboral:2] Wait("SIP/2003-b6902d00", "2") in new stack -- Executing [s@macro-laboral:3] SetMusicOnHold("SIP/2003-b6902d00", "default") in new stack -- Executing [s@macro-laboral:4] MYSQL("SIP/2003-b6902d00", "Connect connid localhost root root agenda") in new stack -- Executing [s@macro-laboral:5] MYSQL("SIP/2003-b6902d00", "Query resultid 1 SELECT mant FROM clientes INNER JOIN telefono ON clientes.id=telefono.idEmp WHERE telefono=650664616") in new stack -- Executing [s@macro-laboral:6] NoOp("SIP/2003-b6902d00", "resultid = 2") in new stack -- Executing [s@macro-laboral:7] MYSQL("SIP/2003-b6902d00", "Fetch fetchid 2 PRIO") in new stack -- Executing [s@macro-laboral:8] NoOp("SIP/2003-b6902d00", " VIP") in new stack -- Executing [s@macro-laboral:9] GotoIf("SIP/2003-b6902d00", "1?prio:no") in new stack -- Goto (macro-laboral,s,10) -- Executing [s@macro-laboral:10] MYSQL("SIP/2003-b6902d00", "Disconnect 1") in new stack -- Executing [s@macro-laboral:11] Set("SIP/2003-b6902d00", "QUEUE_PRIO=10") in new stack -- Executing [s@macro-laboral:12] Queue("SIP/2003-b6902d00", "soportequeue|r") in new stack -- Called SIP/2001 -- SIP/2001-0a1ee040 is ringing -- Nobody picked up in 10000 ms

El log del CLI del apartado 5 es:


-- SIP/2001-0a217400 answered SIP/2003-b69196e8 -- Native bridging SIP/2003-b69196e8 and SIP/2001-0a217400

Prueba 4) Llama a la centralita en un horario laboral un usuario no VIP. Parte de cdigo utilizado:
[macro-general] ;1)COMPROBACION CON EL CALENDARIO exten => s,1,Answer exten => s,n,Set(SALTO=${ARG1})

266

exten => s,n,AGI(${ARG2}) exten => s,n,Goto(${SALTO},${ARG3},1) [soportelaboral] ;PRUEBAS exten => 787,1,Macro(laboral,${QS}) [macro-laboral] exten => s,1,Answer exten => s,n,Wait(2) exten => s,n,SetMusicOnHold(default) ;Consultar con la base de datos si es VIP para pasar a la primera posicion de la cola exten => s,n,MYSQL(Connect connid localhost root root agenda) exten => s,n,MYSQL(Query resultid ${connid SELECT\ mant FROM\ clientes\ INNER\ JOIN\ telefono\ ON\ clientes.id=telefono.idEmp WHERE\ telefono="NUM2"}) ;exten => s,n,MYSQL(Query resultid ${connid} SELECT\ mant FROM\ clientes\ INNER\ JOIN\ telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\ telefono=650664616) exten => s,n,NoOp(resultid = ${resultid}) ;Si es VIP --> POSICIONAR DELANTE EN LA COLA exten => s,n,MYSQL(Fetch fetchid ${resultid} PRIO) exten => s,n,NoOp( ${PRIO}) exten => s,n,GotoIf($["${PRIO}"="VIP"]?prio:no) exten => s,n(prio),MYSQL(Disconnect ${connid}) ;exten => s,n,GotoIf($["${NUM}"=2003]?prio2:no) exten => s,n,Set(QUEUE_PRIO=10) exten => s,n,Queue(${ARG1}|r) exten => s,n,Hangup exten => s,n(no),MYSQL(Disconnect ${connid}) exten => s,n,Queue(${ARG1}|r) exten => s,n,Hangup

El log desde el CLI es el siguiente:


-- Executing [787@acceso:1] Set("SIP/2003-092dc808", "NUM=787") in new stack -- Executing [787@acceso:2] Macro("SIP/2003-092dc808", "general|soportelaboral|pyastcal.py|787") in new stack -- Executing [s@macro-general:1] Answer("SIP/2003-092dc808", "") in new stack -- Executing [s@macro-general:2] Set("SIP/2003-092dc808", "SALTO=soportelaboral") in new stack -- Executing [s@macro-general:3] AGI("SIP/2003-092dc808", "pyastcal.py") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/pyastcal.py -- AGI Script pyastcal.py completed, returning 0 -- Executing [s@macro-general:4] Goto("SIP/2003-092dc808", "soportelaboral|787|1") in new stack -- Goto (soportelaboral,787,1) == Channel 'SIP/2003-092dc808' jumping out of macro 'general' -- Executing [787@soportelaboral:1] Macro("SIP/2003-092dc808", "laboral|soportequeue") in new stack -- Executing [s@macro-laboral:1] Answer("SIP/2003-092dc808", "") in new stack -- Executing [s@macro-laboral:2] Wait("SIP/2003-092dc808", "2") in new stack -- Executing [s@macro-laboral:3] SetMusicOnHold("SIP/2003-092dc808", "default") in new stack -- Executing [s@macro-laboral:4] MYSQL("SIP/2003-092dc808", "Connect connid localhost root root agenda") in new stack -- Executing [s@macro-laboral:5] Set("SIP/2003-092dc808", "NUM = 2003") in new stack -- Executing [s@macro-laboral:6] MYSQL("SIP/2003-092dc808", "Query resultid ") in new stack -- Executing [s@macro-laboral:7] NoOp("SIP/2003-092dc808", "resultid = ") in new stack

267

-- Executing [s@macro-laboral:8] GotoIf("SIP/2003-092dc808", "0?prio:no") in new stack -- Goto (macro-laboral,s,13) -- Executing [s@macro-laboral:13] MYSQL("SIP/2003-092dc808", "Disconnect 1") in new stack -- Executing [s@macro-laboral:14] Queue("SIP/2003-092dc808", "soportequeue|r") in new stack -- Called SIP/2001 -- Called SIP/2004 -- Called SIP/2003 -- Called SIP/2002 -- SIP/2001-09337208 is ringing -- Got SIP response 486 "Busy Here" back from 192.168.1.206 -- SIP/2004-0933b228 is busy -- Nobody picked up in 1000 ms -- Got SIP response 486 "Busy Here" back from 192.168.1.206 -- SIP/2003-0933f248 is busy -- Nobody picked up in 1000 ms -- Got SIP response 486 "Busy Here" back from 192.168.1.206 -- SIP/2002-09343268 is busy -- Nobody picked up in 1000 ms -- Nobody picked up in 10000 ms -- Nobody picked up in 10000 ms -- Called SIP/2001 -- Called SIP/2004 -- Called SIP/2003 -- Called SIP/2002 -- SIP/2001-09337208 is ringing -- Got SIP response 486 "Busy Here" back from 192.168.1.206 -- SIP/2004-0933b228 is busy -- Nobody picked up in 0 ms -- Got SIP response 486 "Busy Here" back from 192.168.1.206 -- SIP/2003-0933f248 is busy -- Nobody picked up in 0 ms -- Got SIP response 486 "Busy Here" back from 192.168.1.206 -- SIP/2002-09343268 is busy -- Nobody picked up in 1000 ms == Spawn extension (macro-laboral, s, 14) exited non-zero on 'SIP/2003-092dc808' in macro 'laboral' == Spawn extension (soportelaboral, 787, 1) exited non-zero on 'SIP/2003-092dc808'

Prueba 5) Comportamiento en el men Parte de cdigo utilizado:


exten => 902147424,1,Answer exten => 902147424,n,Background(menu) exten => 902147424,n,Wait(10) exten => 0,1,Goto(recepcion,${PHONE1},1) exten => 1,1,Goto(comercial,${PHONE1},1) exten => 2,1,Goto(soporte,${PHONE2},1) exten => 3,1,Goto(twister,${PHONE3},1) exten => 4000,1,Goto(acceso,${EXTEN},1) exten => t,1,Goto(${PHONE1},1) exten => i,1,Goto(${PHONE1},1) exten => 4000,1,Macro(acceso,${EXTEN})

268

[macro-acceso] exten => s,1,Dial(SIP/${ARG1},30,Ttm) exten => s,n,Voicemail(${ARG1}) exten => s,n,Hangup

El log desde el CLI es el siguiente:


-- Executing [902147424@acceso:1] Answer("SIP/2003-b6900590", "") in new stack -- Executing [902147424@acceso:2] BackGround("SIP/2003-b6900590", "menu") in new stack -- <SIP/2003-b6900590> Playing 'menu' (language 'es') == CDR updated on SIP/2003-b6900590 -- Executing [4000@acceso:1] Macro("SIP/2003-b6900590", "acceso|4000") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/2003-b6900590", "SIP/4000|30|Ttm") in new stack -- Called 4000 -- Started music on hold, class 'default', on SIP/2003-b6900590 -- SIP/4000-0a17d5c8 is ringing -- Stopped music on hold on SIP/2003-b6900590 == Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/2003-b6900590' in macro 'acceso' == Spawn extension (acceso, 4000, 1) exited non-zero on 'SIP/2003-b6900590'

Configuracin de ficheros ms utilizados Tabla de descripcin de ficheros de configuracin Fichero Descripcin En este fichero, junto con los ficheros que incluye la carpeta dialplan se concentra el ncleo de la centralita, el plan de llamadas, explicado anteriormente.

extensions.conf

sip.conf

En este fichero se registran los usuarios SIP

iax.conf

En este fichero se registran los usuarios IAX

features.conf

En Este fichero se establece la configuracin de Call Parking y Call Pickup

269

manager.conf

En este fichero se configuran los usuarios del AMI.

meetme.conf

En este fichero se configuran las conferencias por defecto de la centralita.

queues.conf

En este fichero se configuran las colas de la centralita.

voicemail.conf

En este fichero se configuran los buzones de voz.

Fichero de configuracin: EXTENSIONS.CONF, SIP.CONF, IAX.CONF Para visualizar estos ficheros acudir al anexo. Fichero de configuracin: FEATURES.CONF

270

Fichero de configuracin: MANAGER.CONF

Fichero de configuracin: MEETME.CONF

Fichero de configuracin: QUEUES.CONF

271

Fichero de configuracin: VOICEMAIL.CONF

272

Bases de datos empleadas Tabla de descripcin de las bases de datos utilizadas

Nombre de Base de Datos

Descripcin En esta base de datos se guardan los datos del registro de llamadas y los canales de la aplicacin CDR Reports.

cdr

fop2

En esta base de datos se guardan los datos del FOP 2.

qstats

En esta base de datos se guardan los datos del Asternic Call Center Stats.

273

agenda

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

nagios

En esta base de datos se guarda la configuracin y los datos de Nagios.

Conocimiento de las tablas de cada base de datos mostrando parte de su contenido Base de Datos: cdr

Tablas de cdr cdr channels

Tabla cdr

calldate 2009-12-22 21:44:43

clid "2000" <2000>

src 2000

dst 2003

dcontext acceso

channel SIP/2000b6800a38

dstchannel SIP/20030a30b038

lastapp VoiceMail

lastdata 2003

duration 34

billsec 3

disposition ANSWERED

amaflags 3

accountcode

uniqueid

userfield

Tabla channels

id

channel

accountcode

name

1 2

SIP/2003 SIP/2000

David

274

Mikel

SIP/2001

Eduardo

SIP/2004

Josemi

SIP/2002

Josean

Base de Datos: fop2

Tablas de cdr
visual_phonebook

Tabla visual_phonebook

id 1 2 3 4 5

firstname Mikel Eduardo Josean David Josemi

lastname

company Yet Informatica Yet Informatica Yet Informatica Yet Informatica Yet Informatica

phone1 2000 2001 2002 2003 2004

phone2

picture 1-mark.jpg

Base de Datos: qstats

Tablas de cdr
qagent qevent qname queue_stats

275

Tabla qagent

agent_id 2 3 4 5 6 7 8

agent SIP/2001 SIP/2004 SIP/2003 SIP/2002 SIP/2000 SIP/2005 SIP/4000

Tabla qevent

event_id 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

event ABANDON AGENTDUMP AGENTLOGIN AGENTCALLBACKLOGIN AGENTLOGOFF AGENTCALLBACKLOGOFF COMPLETEAGENT COMPLETECALLER CONFIGRELOAD CONNECT ENTERQUEUE EXITWITHKEY EXITWITHTIMEOUT QUEUESTART SYSCOMPAT TRANSFER PAUSE

276

18

UNPAUSE

Tabla qname

qname_id 2 3 4

queue recepcionqueue comercialqueue soportequeue

Table queue_stats

queue_stats_id

uniqueid SIP/2003

datetime 2009-11-05 05:01:19 2009-12-22 23:35:20

qname

qagent

qevent

info1

info2

info3

14

SIP/2003

705

Base de Datos: agenda

Tablas de agenda clientes telefono usuarios

Tabla clientes

id 1 2

nameEmp Calnaba Puma

cliente Yet Yet

mant VIP Completo

277

Adidas

Yet

VIP

Tabla telefono

idEmp 1 2 2 2 2 3 3 3

telefono 650664616 654545454 676767676 943212112 945787876 654323232 656997878 698987332

Tabla usuarios

id 2 5 6 7 9 10

name Mikel Valentin Alberto Acosta Eduardo Josean Irune

extension 2000 5000 3000 2001 2002 1000

tipo Soporte Direccion Twister Soporte Soporte Administracion

Base de Datos: nagios

Tablas de nagios nagios_acknowledgements nagios_commands nagios_commenthistory nagios_comments

278

nagios_configfiles nagios_configfilevariables . nagios_timedeventqueue nagios_timedevents nagios_timeperiod_timeranges nagios_timeperiods

279

Explicacin terica y prctica de funcionalidades extra: Agenda de Contactos: YetBook Esta aplicacin Web se dise para solucionar varios problemas: Necesidad de control exhaustivo de clientes de la empresa, as como, del mantenimiento que tienen contratado con esta. Control de nmero de extensin de los usuarios de la empresa y de las opciones programadas en el Dialplan para satisfacer determinadas funcionalidades de la centralita Asterisk. Por ejemplo, extensin para agregarse a una cola en concreto o como realizar el desvo de llamadas de tu extensin a tu mvil. Acceso a las diferentes aplicaciones necesarias para el control de distintas actividades a realizar, como por ejemplo la aplicacin FOP 2. Como se puede ver en la siguiente imagen, la aplicacin est dividida en diferentes apartados, en los cuales se puede aadir/eliminar/modificar usuarios y clientes, tener acceso a las extensiones especiales del Dialplan y a las direcciones de las aplicaciones integradas con la centralita.

A continuacin se explicar el funcionamiento de cada una de estas funciones:

280

En este apartado tenemos una visin de los usuarios de la centralita.

Aadir Usuarios: Permite agregar un usuario a la base de datos a la que est enlazada la aplicacin, no modifica el fichero sip.conf, la idea es agregar el usuario y despus modificar dicho fichero de configuracin.

281

En la imagen anterior hemos visto como es el proceso de adiccin de un usuario, rellenando los campos Nombre, Extensin y Departamento, y en la imagen siguiente vemos el resultado.

Eliminar Usuarios: Permite eliminar un usuario de la base de datos a la que est enlazada la aplicacin, no modifica el fichero sip.conf, la idea es eliminar el usuario y despus modificar dicho fichero de configuracin.

282

En la imagen anterior vemos el identificador del usuario a eliminar, en el ejemplo ser el 8, y a continuacin en la siguientes imgenes vemos la eleccin de usuario a eliminar y comprobamos que se ha eliminado.

283

Modificar Usuarios: Permite modificar un usuario en la base de datos a la que est enlazada la aplicacin, no modifica el fichero sip.conf, la idea es modificar el usuario y despus modificar dicho fichero de configuracin. En la siguiente imagen vemos el usuario que vamos a modificar.

En la siguiente imagen vemos el formulario de modificacin de usuarios, rellenando el identificador de usuario, Nombre, Extensin y Departamento.

284

En la imagen siguiente vemos el resultado de la modificacin:

En este apartado tenemos una visin de los clientes de la expresa.

285

Aadir Clientes: Permite agregar un cliente a la base de datos a la que est enlazada la aplicacin. En la siguiente imagen vemos como es el proceso de adiccin de un cliente, rellenando los campos Nombre de Empresa, Mantenimiento (Parcial, Completo, VIP) y el n de telfonos asociados a dicha empresa.

En la siguiente imagen vemos el formulario de introduccin de telfonos.

286

En la siguiente imagen vemos el resultado tras aadir el cliente:

Eliminar Clientes: Permite eliminar un cliente de la base de datos a la que est enlazada la aplicacin. En la imagen siguiente vemos el formulario es similar al de la eliminacin de usuarios.

287

Comprobamos que la eliminacin se ha efectuado adecuadamente.

Modificar Clientes: Permite modificar un cliente en la base de datos a la que est enlazada la aplicacin. A continuacin vemos los formularios de modificacin:

288

En las dos imgenes siguientes vemos como nos da la posibilidad de simplemente modificar los valores actuales o agregar tambin ms telfonos al cliente.

289

Rellenamos el campo del telfono que vamos a aadir:

Vemos las modificaciones realizadas:

A continuacion veremos un recordatorio de las extensiones del Dialplan para que los usuarios puedan consultarlo cuando quieran.

290

291

292

293

Por ltimo para recordar el acceso a la aplicaciones integradas con la centralita Asterisk :

294

295

296

Integracin con Google Calendar

La utilizacin de Google Calendar ser la siguiente: Para tener diferentes calendarios y as hacer una gestin ptima de las llamadas, comprobando los eventos de dichos calendarios y redireccionando a unos contextos u otros dependiendo de estos en el momento de las llamadas. Uso de los recordatorios a travs de mensajes de texto en determinadas situaciones.

Para tener un uso correcto de Google Calendar visualizar la Gua. Pruebas de existencia de evento en el momento en un calendario El cdigo de la aplicacin que comprueba la existencia de eventos es el siguiente:

297

Prueba 1 ) Hay un evento de 10:30 a 11:30


[root@localhost agi-bin]# python pyastcal.py ---------------------------------Fecha inicio evento: 2009-12-23 Fecha actual: 2009-12-23 Fecha fin evento: 2009-12-23 Hora inicio evento: 10:30:00 Hora actual: 10:48:47.174531 Hora fin evento: 11:30:00 ---------------------------------SET VARIABLE "SALTO" "No Disponible Soporte"

298

El calendario tiene el siguiente aspecto:

Prueba 2 ) No hay ningun evento


[root@localhost agi-bin]# python pyastcal.py ---------------------------------Fecha inicio evento: 2009-12-23 Fecha actual: 2009-12-23 Fecha fin evento: 2009-12-24 Hora inicio evento: 23:00:00 Hora actual: 10:47:05.294826 Hora fin evento: 08:00:00 ---------------------------------SET VARIABLE "SALTO" "soportelaboral"

299

El calendario tiene el siguiente aspecto:

Prueba 2 ) Hay un evento de dia completo


[root@localhost agi-bin]# python pyastcal.py ---------------------------------Fecha inicio evento: 2009-12-22 Fecha actual: 2009-12-23 Fecha fin evento: 2009-12-23 Hora inicio evento: 23:00:00 Hora actual: 10:50:29.834773 Hora fin evento: 23:00:00 ---------------------------------SET VARIABLE "SALTO" "No Disponible Soporte"

300

El calendario tiene el siguiente aspecto:

Pruebas de envo de recordatorios a travs de SMS con Google Calendar Configuracin de la extensin que ejecuta el programa que interacta con Google Calendar para que se genere un evento en el calendario por el cual se enviar el SMS como recordatorio:
exten => 1200,1,Answer exten => 1200,n,NoOp("CallerID=${ARG1}") exten => 1200,n,AGI(sms_send.php) exten => 1200,n,NoOp("Sms_send.php ejecutado...") exten => 1200,n,Hangup

Vemos el comportamiento de Asterisk al llamar a la extensin 1200 a travs del CLI:


-- Executing [1200@acceso:1] Answer("SIP/4000-b68150b0", "") in new stack -- Executing [1200@acceso:2] NoOp("SIP/4000-b68150b0", ""CallerID="") in new stack -- Executing [1200@acceso:3] AGI("SIP/4000-b68150b0", "sms_send.php") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/sms_send.php -- AGI Script sms_send.php completed, returning 0 -- Executing [1200@acceso:4] NoOp("SIP/4000-b68150b0", ""Sms_send.php ejecutado..."") in new stack -- Executing [1200@acceso:5] Hangup("SIP/4000-b68150b0", "") in new stack == Spawn extension (acceso, 1200, 5) exited non-zero on 'SIP/4000-b68150b0'

Comprobamos el log de la aplicacin para ver que los datos enviados son los correctos:

301

UserName=davidin073@gmail.com Password=XXXXXXX Minutos despues de la hora actual en la que empieza el evento=10 Duracion del Evento=10 Mensaje enviado: 'Asterisk: Tiene una llamada perdida de la extension: 100' Enviado: Resource id #8

Miramos en el calendario para comprobar que se ha creado el evento:

Para ver el cdigo de los archivos utilizados acudir al anexo correspondiente.

302

Chan_Sebi Qu?,Cmo? y Por qu? Chan_sebi es un canal para Asterisk, que utiliza modems Huawei para proveer de gateways gsm de voz y/o sms. En principio se ha hecho pensando en los E169/K3520 de Huawei, modems que tienen capacidades de llamada de voz. Internamente utilizan un chipset de Qualcomm (de la serie MSM7200). Con un modem usb de estos modelos, tenemos un gateway de voz que adems no tiene que hacer conversiones de audio como las que se hacen con un FXO analgico, ni los problemas de sealizacin inherentes a los canales analgicos, ya que toda la gestin de audio y de sealizacin se hace de forma digital (bien a travs del canal de audio, bien a travs del canal de datos), pudiendo ser comparado a un router RDSI=>GSM de un puerto. La idea surgi, segn su creador Odicha, de la posibilidad de aprovechar las capacidades de voz de estos modems para tener un gateway gsm a un costo muy econmico. La mayor parte de los operadores los dan a costo cero cumpliendo unos mnimos de permanencia o consumo, como cualquier otro terminal telefnico. Tcnicamente estos modems son vistos por el S.O. como un hub usb con varios dispositivos. En principio tres puertos seriales y un puerto de almacenamiento con dos dispositivos (un cd y un lector de memoria). Asi los subid 00,01 y 02 sern los puertos de comunicacin, cada uno con distintas funciones (audio, datos y gestin general) y el subid 03 que nos dar control sobre el cd virtual y el lector de tarjetas. A partir de esta base se construye un controlador de canal que toma como punto de partida el chan_mobile, ya existente en Asterisk. Para descargar asterisk-addons con chan_sebi:
svn export http://asterisk-es-rsp.irontec.com/svn/team/Odicha/asterisk-addons-1.4.9 asterisk-addons/

Instalacin y Configuracin de chan_sebi A nivel de descarga e instalacin comentar cules son sus prerrequisitos. El S.O. debe ser capaz de montar los subid 00, 01 y 02 del modem Huawei como usbTTYx. Los kernels antiguos (por debajo de 2.6.20 generalmente) no son capaces de hacerlo automticamente por lo que habr que modificar algunas cosas para que se detecten de la forma adecuada y sean cargados por usbserial. Normalmente es suficiente con /sbin/modprobe usbserial vendor=012d1 product=01003 o bien /sbin/modprobe usbserial vendor=012d1 product=01001 dependiendo de si el modem es 1001 (169,k3520, e270,etc) o es 1003 (e220). A veces tambin entran en conflicto con el driver de option resolviendose aadiendo al blacklist el mdulo option. Si aun as sigue intentando cargar puede intentar resolverse eliminando el fichero option.ko y ejecutando un depmod despus.
303

Los puertos ttyUSBx que se crean al conectar el modem tienen que tener permiso de lectura y escritura para el usuario que ejecuta Asterisk, si no es as no ser posible que Asterisk se comunique con el modem. Si no se ejecuta Asterisk como root lo mejor es agregar el usuario que corre Asterisk al grupo propietario de los puertos que en funcin de distros y kernels puede variar (en Fedora es uucp, por ej.). Algo como esto por ejemplo:
chmod 660 /dev/ttyUSB* chown asterisk:uucp /dev/ttyUSB* echo KERNEL==ttyUSB[0-9*], MODE=0660, OWNER=asterisk, GROUP=uucp >> /etc/udev/rules.d/92-sebi.rules

Cumpliendo esto podremos instalar asterisk-addons sobre nuestro asterisk 1.4.x con chan_sebi incluido. Al instalarlo y arrancarlo el canal analizar los dispositivos usb que tenemos conectados y generar un fichero sebi_devices.conf en /etc/asterisk/ que contendr algo similar a esto:
[2-1] data = /dev/ttyUSB2 voice = /dev/ttyUSB1 imei = 35413702XXXXXXX

A partir de aqu sabemos que el modem est siendo detectado correctamente y pasaremos a generar el fichero de configuracin sebi.conf. Si hicimos un make samples al instalar asterisk-addons ya tendremos un fichero sebi.conf en /etc/asterisk/ que tendremos que adaptar.
[huawei1] imei=35xxxxxxxxxxx ; imei of modem ;pin=1234 ; pin (use only if sim card has pin request enabled) csca=+34607003110 ; sms centre number (vodafone es example) sms=yes ; enable sms send/receive voice=yes ; enable voice for calls context=from-pstn ; dialplan context for incoming calls group=1 ; this phone is in channel group 1 volume=5 ; modem volume (1-5) language=es ; channel language ;nocallsetup=yes ; set this only if you want override call status notifications

El campo imei del canal es el que combina la informacin de configuracin del modem con el equipo fsico. No olviden que el nmero de puerto ttyUSB depende del orden en que se cargan o de la cantidad de dispositivos usb que estn conectados en cada momento. Los dems campos de configuracin creo que estn claros, prcticamente se describen solos. Es interesante hacer notar que el nombre del canal lo asignamos nosotros libremente en el identificador de seccin (en el ejemplo [huawei1]) Si reiniciamos Asterisk y todo ha ido bien tras cargar ejecutaremos el comando sebi show devices y obtendremos algo parecido a esto:
304

*CLI> sebi show devices Id huawei1 Imei Group 3541370xxxxxxxx 1 Provider vodafone es Connected State Voice SMS yes free yes yes

A partir de aqu podemos usar el modem como una canal de voz realizando y recibiendo llamadas y como gateway sms. Cabe observar que en los modelos que no soporten voz el resultado ser como este:
*CLI> sebi show devices Id huawei1 Imei Group 3541370xxxxxxxx 1 Provider vodafone es Connected State Voice SMS yes free no yes

Nos dir que no tenemos servicios de voz en ese dispositivo, y lo usaremos solo como gateway sms. Para enviar y recibir sms, usaremos convenciones muy similares a las de chan_mobile. Para recibir un sms y guardarlo en la base de datos tendremos las instruccciones correspondientes en el Dialplan (por cierto, solo procesa sms recibidos mientras est activo, por el momento).
[from-pstn] exten => sms,1,verbose(incoming sms from ${smssrc} ${smstxt}) exten => sms,n,set(db(sms/${smssrc})=${smstxt}) exten => sms,n,hangup

Para enviar un sms:


originate sip/109 application sebisendsms huawei1|6xxxxxxxx|texto de prueba del sms

Para revisar si el canal est libre antes de enviar el sms tenemos la aplicacin SebiStatus: SebiStatus(device,variable) Device : Id del dispositivo en sebi.conf Variable: Variable donde almacenamos el estado (1-3) 1-Desconectado 2-Disponible 3-Ocupado

305

Pruebas realizadas con un Modem Huawei K3520

Tras introducir en el modem Huawei K3520 una tarjeta Orange y conectarlo a nuestro servidor por un puerto USB, instalamos como se indica en los apartados anteriores el chan_sebi y lo siguiente que tenemos que hacer es comprobar que Asterisk a captado el modem, para esto comprobamos el contenido del fichero de configuracin situado en la carpeta /etc/asterisk/ sebi_devices.conf:
[6-1] data = /dev/ttyUSB2 imei = 353284021181626 voice = /dev/ttyUSB1

Si no lo hemos hecho antes, damos a los dispositivos USB los permisos adecuados:
chmod a+x /dev/ttyUSB*

Confuramos el chan_sebi desde el fichero de configuracin sebi.conf:


[huawei1] dataport=/dev/ttyUSB2 voiceport=/dev/ttyUSB1 imei=35328XXXXXXXXXX pin=1626 csca=+34644109030 sms=yes voice=yes context=from-sebi group=1 volume=5 language=es

; SMS centre number (SYMYO)

Reiniciamos Asterisk y comprobamos que la configuracin realizada es la correcta:


*CLI> sebi show devices ID IMEI Group Provider Connected State Voice SMS huawei1 353284021181626 1 Orange Yes Free Yes Yes

Las 3 pruebas realizadas con el chan_sebi sern recepcin y envio de SMS y realizacin de llamadas a travs de este canal. Prueba 1) Llamada con chan_sebi Configuracin del fichero extensions.conf:
[from-sebi] ;LLamadas con Chan_Sebi exten => 650664616,1,NoOp(Outgoing call through the SEBI device to ${EXTEN}) exten => 650664616,n,Dial(Sebi/g1/${EXTEN},60) exten => 650664616,n,Hangup

306

Miramos el log en el CLI de Asterisk al hacer una llamada:


-- Executing [650664616@acceso2:1] NoOp("SIP/100-08bedc70", "Outgoing call through the SEBI device to 650664616") in new stack -- Executing [650664616@acceso2:2] Dial("SIP/100-08bedc70", "Sebi/g1/650664616|60") in new stack -- Called g1/650664616 -- Sebi/huawei1-4b5e is making progress passing it to SIP/100-08bedc70 == Spawn extension (acceso2, 650664616, 2) exited non-zero on 'SIP/100-08bedc70

Prueba 2) Envio de SMS con chan_sebi: Configuracin del fichero extensions.conf:


[from-sebi] include => acceso2 exten => 1111,1,NoOp(Envio de Sms) exten => 1111,n,SebiSendSMS(huawei1,650664616,"sms prueba") exten => 1111,n,Hangup [acceso2] exten => 100,1,Dial(SIP/100,30,Ttm) exten => 100,n,Hangup

Hacemos la prueba marcando 1111 y vemos el log del CLI:


-- Executing [1111@acceso2:1] NoOp("SIP/100-08bf7548", "Envio de Sms") in new stack -- Executing [1111@acceso2:2] SebiSendSMS("SIP/100-08bf7548", "huawei1|650664616|"sms prueba"") in new stack -- Executing [1111@acceso2:3] Hangup("SIP/100-08bf7548", "") in new stack == Spawn extension (acceso2, 1111, 3) exited non-zero on 'SIP/100-08bf7548'

El sms ha llegado al instante. Tambin se puede realizar esta prueba desde el CLI directamente, pero de esta forma suena la extensin que le indicas, en este caso la 100, y al contestar se enva el SMS:
*CLI> originate sip/100 application SebiSendSMS huawei1|650664616|"SMS DE PRUEBA" -- Launching SebiSendSMS(huawei1|650664616|SMS DE PRUEBA) on SIP/100-b7780b98

Prueba 3) Recepcin de SMS desde el chan_sebi: Configuracin del fichero extensions.conf:


[from-sebi] exten => sms,1,NoOp(Incoming SMS from ${SMSSRC}) exten => sms,n,System(/usr/src/recvSMS.sh "${SMSSRC}" "${SMSTXT}") exten => sms,n,Hangup

Para esta prueba hacemos uso de un ejecutable que enviar un email a una direccin indicada al recibir el SMS, el cdigo de este archivo es:

307

#!/bin/bash if [ $# -ne 2 ] then echo "Invalid parameters." exit 0 fi echo $2 | mail -s "SMS from $1" davidin073@gmail.com

Miramos el log en el CLI de Asterisk al hacer una llamada:


-- Executing [sms@from-sebi:1] NoOp("Sebi/huawei1-1de3", "Incoming SMS from +34650664616") in new stack -- Executing [sms@from-sebi:2] System("Sebi/huawei1-1de3", "/usr/src/recvSMS.sh "+34650664616" "Prueba recepcion de SMS."") in new stack -- Executing [sms@from-sebi:3] Hangup("Sebi/huawei1-1de3", "") in new stack == Spawn extension (from-sebi, sms, 3) exited non-zero on 'Sebi/huawei1-1de3'

308

Flash Operator Panel 2 (FOP 2) Qu es FOP2? Flash Operator Panel 2 es una aplicacin de tipo panel de control para las PBX Asterisk. Se ejecuta en un navegador web con el plugin de flash. Es capaz de mostrar informacin sobre su actividad PBX en tiempo real. El diseo es configurable (tamao y color de los botones, etc.). Su creador, Nicolas Gudio, fue ganador hace unos meses del premio que otorga Digium, Digium Innovation Awards, y es que FOP 2 es un producto ideal y muy recomendable. Caractersticas

Acciones
o o o o o o o o o o o

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

Botones de Extensin
o o o o o

2 lneas por botn Callerid y temporizador Indicador de pausa Indicador de pertenencia a una cola Indicador de grabacin

Botones Trunk
o

Muestra una lista con los trunks establecidos o configurados

Botones de Conferencia
o o o o o

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

Botones de Cola
o o o o o o

Lista de agentes/miembros Lista de llamadas en espera Miembros en pausa Miembros ocupados Miembros disponibles Miembros invalidos

A quin va dirigido FOP 2? A los recepcionistas: Desarrollado con una recepcionista en la mente. Todas las acciones estn disponibles en dos clics del ratn.

Ver quin est disponible o no. Transferencia en forma directa a la extensin de destino o al buzn de voz. Habilitar los permisos de PickUp. Bsqueda en tiempo real y filtro de extensiones (ideal para las grandes empresas con cientos de extensiones).

A los supervisores del centro de llamadas: No slo puede ver el estado de la extensin, sino tambin una rpida visin de las colas:

Ver agentes registrados en una cola. Ver estado del agente (en pausa, ocupado, disponible, no vlido). Ver todas las llamadas en espera en la cola con su temporizador. Espiar y/o susurrar a sus agentes.

A los usuarios finales: Usted no necesita ser un recepcionista o tener un centro de llamadas para aprovechar las caractersticas de FOP2, ya que este permite controlar sus propias llamadas, incluso antes de cogerlas.

Notificaciones de llamadas (nmero y nombre de callerid, llamada de la cola). Bsqueda de llamada o marcarcin a cualquier nmero escrito. Control de llamadas: Trasferencia, Colgar, etc.

310

Instalacin Requisitos del Sistema El programa consta de dos componentes, un demonio del lado del servidor que se conecta a la interfaz de Asterisk y ser el mediador entre Asterisk y los clientes Web. Si tiene instalada una distribucin de Linux Red Hat y va a instalar el panel desde un tarball(.tar), tendr que obtener el tarball correcto dependiendo de su versin de glibc. Puede averiguar la versin de glibc escribiendo en la consola:
#> /lib/libc.so.6

La respuesta ser similar a esta:


GNU C Library stable release version 2.3.6, by Roland McGrath et al. Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiled by GNU CC version 3.4.4 20050721 (Red Hat 3.4.4-2). Compiled on a Linux 2.4.20 system on 2005-11-03. Available extensions: GNU libio by Per Bothner crypt add-on version 2.1 by Michael Glad and others linuxthreads-0.10 by Xavier Leroy The C stubs add-on version 2.1.2. BIND-8.2.3-T5B NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk Glibc-2.0 compatibility add-on by Cristian Gafton GNU Libidn by Simon Josefsson libthread_db work sponsored by Alpha Processor Inc Thread-local storage support included. For bug reporting instructions, please see: <http://www.gnu.org/software/libc/bugs.html>.

El otro componente es la aplicacin web, que consiste en su mayora en Javascript, HTML, CSS y un componente Flash. Por esa razn se necesita un servidor web corriendo para servir a estos archivos. Para la agenda de llamadas necesita soporte para PHP en el servidor web y base de datos MySQL instalada. Por ltimo, su navegador necesita Adobe Flash Player (versin 9) y el Javascript activado. Instalacin desde tarball Despus de descargar el paquete adecuado, tendr que extraerlo y comenzar la instalacin:
#> tar zxvf fop2-001-i386-glibc2.5-centos5.tgz #> cd fop2 #> make install

311

La instalacin copiar los archivos del servidor en / usr/local/fop2 y las pginas web bajo / var/www/html/fop2. Before starting the service, some basic configuration is required in fop2.cfg and probably in /etc/asterisk/manager.conf, because the FOP2 daemon connects via TCP to the Asterisk Manager Interface (AMI) using a username and secret. Antes de iniciar el servicio, es necesaria la configuracin bsica de fop2.cfg y de manager.conf en /etc /asterisk/, porque el demonio FOP2 se conecta a travs de TCP a la interfaz de Asterisk Manager (IAM), utilizando un nombre de usuario y una clave. Una vez configurado esto habr que iniciar el servicio.
#> cd / usr/local/fop2 #> ./fop2_server

Configuracin El archivo principal de configuracin del servidor es / usr/local/fop2/fop2.cfg. Los parmetros ms importantes y necesarios para este fichero son los establecidos en el manager.conf. Ejemplos de configuracin: /usr/local/fop2/fop2.cfg
[general] ; AMI definitions manager_host = 127.0.0.1 manager_port = 5038 manager_user = admin manager_secret = amp111

/etc / asterisk / manager.conf


[general] enabled = yes port = 5038 bindaddr = 127.0.0.1 [admin] secret = amp111 deny = 0.0.0.0/0.0.0.0 permit = 127.0.0.1/255.255.255.0 read = system,call,command,agent,user,originate write = system,call,command,agent,user,originate

Tambin es recomendable la configuracin siguiente: /etc/asterisk/sip.conf


callevents=yes

312

Para que se efectue el envio de eventos al FOP2. /etc/asterisk/queues.conf


[testqueue] eventwhencalled=yes

Para que efectue el envio de eventos relacionados con las colas y los agentes. Configuracin de botones Adems de la configuracin del servidor, es importante la configuracin de los botones que desea mostrar. Los botones de configuracin se realizan en distintos archivos de configuracin para que sean ms fciles de mantener y organizar. En el fichero / usr/local/fop2/fop2.cfg hay que especificar el parmetro buttonfile, que apunta al archivo que contendr las definiciones de los botones. /usr/local/fop2/fop2.cfg
... ... buttonfile= buttons.cfg

Botones de Extensin Este tipo de botones representan una extension. Se mostrarn dos lneas para cada botn y algunos datos especficos, como la presencia, estado de pausa, etc. /usr/local/fop2/ buttons.cfg
[SIP/600] type=extension extension=600 context=from-internal label=John mailbox=600@default extenvoicemail=*600@default

Botones de cola Similares a los botones de extensin, los botones de cola hacen uso de los mismos parmetros con la diferencia que no slo el tipo se debe establecer en la cola, sino tambin el nombre, entre parntesis, debe estar precedido de "QUEUE /". /usr/local/fop2/buttons.cfg
[QUEUE/101] type=queue label=Sales

313

extension=101 context=from-internal

Los botones de cola no aceptan los parmetros mailbox o extenvoicemail, ya que slo se aplican a los botones de extensin. Botones de Conferencia Al igual que los botones de cola, los botones de conferencia tienen que ser definidos como type=conference y el contexto debe empezar con el prefijo "CONFERENCE/". /usr/local/fop2/buttons.cfg
[CONFERENCE/1000] type=conference label=Main Conference extension=1000 context=from-internal

Botones Trunk Para los trunks que hay muy pocos parmetros que establecer. Un trunk no se puede marcar, por esa razn no es necesario especificar la extensin ni el contexto. Slo el type que sera trunk debe ser especificado, junto con la etiqueta del botn. /usr/local/fop2/buttons.cfg
[DAHDI/1] type=trunk label=DAHDI 1-4 server=1

Tenga en cuenta que tambin hay que establecer el parmetro server, ya que si se supervisa ms de un servidor, y tiene DAHDI / 1 definido sin especificar el servidor, usted experimentar una colisin por el canal, y la situacin no ser correcta. Configuracin de Visual Phonebook La agenda requiere php y mysql para ser instalada y funcionar. Es necesario crear una base de datos con una tabla y dar los adecuados permisos. Tambin tienes que configurar el idioma de la aplicacin PHP. Con el fin de empezar, asegrese de crear una base de datos MySQL utilizando la contrasea correcta (sustituir XXXXX con su contrasea de root de MySQL):
#> cd /var/www/html/fop2 #> mysqladmin -u root -pXXXXX create fop2 #> mysql -u root -pXXXXX < mysql.db

Despus de crear una base de datos y la tabla, dar permisos:

314

#> mysql -u root -pXXXXX -e \"grant all privileges on fop2.* to root@localhost \" identified by 'myPassw0rd'"

Por ltimo hay que editar el archivo de configuracin y seleccionar el idioma adecuado: /var/www/html/fop2/config.php
<? // Database connection details $DBHOST = 'localhost'; $DBNAME = 'fop2'; $DBUSER = 'fop2'; $DBPASS = ' myPassw0rd '; $language=en ; // --------------------------------------------------------- / / ------------------------------------------------ -------// Do not modify below this line // --------------------------------------------------------- / / ------------------------------------------------ -------.. ..

Para tener una informacin amplia revise el Manual de uso de FOP 2.

315

Practicas de la aplicacin con FOP 2 1) Acceso a FOP 2: http://192.168.1.200/fop2

Panel Principal de FOP 2:

2) Configurar el archivo principal del FOP 2 (fop2.cfg)


[general] ; AMI definitions manager_host=localhost manager_port=5038 manager_user=admin manager_secret=amp111 ;event_mask=call,agent ; Daemon definitios listen_port = 4445 restrict_host = www.asternic.org web_dir = /var/www/html/fop2 ; Global Config language = en

316

poll_interval = 86400 poll_voicemail = 1 monitor_ipaddress = 0 ;master_key = 5678 user=2000:1234:all user=2001:1234:all user=2002:1234:all user=2003:1234:all user=2004:1234:all user=2005:1234:all user=2006:1234:all buttonfile=autobuttons.cfg #exec autoconfig-users-freepbx.sh

Configurar el archive de botones (autobuttons.cfg)


[SIP/2000] type=extensin extension=2000 context=acceso label=Mikel mailbox=2000@default extenvoicemail=20008@acceso [SIP/2001] type=extensin extension=2001 context=acceso label=Eduardo mailbox=2001@default extenvoicemail=20018@acceso [SIP/2002] type=extensin extension=2002 context=acceso label=Josean mailbox=2002@default extenvoicemail=20028@acceso [SIP/2003] type=extensin extension=2003 context=acceso label=David mailbox=2003@default extenvoicemail=20038@acceso [SIP/2004] type=extensin extension=2004 context=acceso label=Josemi mailbox=2004@default extenvoicemail=20048@acceso [SIP/2005] type=extensin

317

extension=2005 context=acceso label=Usuario1 mailbox=2005@default extenvoicemail=20058@acceso [SIP/2006] type=extensin extension=2006 context=acceso label=Usuario2 mailbox=2006@default extenvoicemail=20068@acceso [QUEUE/ soportequeue] type=queue label= soportequeue extension=784 context= soportelaboral [DAHDI/2] type=trunk label=DAHDI [CONFERENCE/600] type=conference label=Conferencia Estatica server=1 extension=600 context=meetme

3) Agregar usuarios/clientes a la Visual phonebook para que al recibir una llamada aparezca el perfil de dicho usuario/cliente en vez de la imagen siguiente:

Con el usuario/cliente que llama agregado a la agenda la llamada sera as:

318

Tras rellenar la agenda queda de la siguiente forma:

4) Pruebas de la barra de herramientas de FOP 2:

Botn de llamada:

La realizacin de llamadas desde FOP 2 se realiza como se describe en el siguiente ejemplo, en el cual la llamada se realizar entre la extensin 2003, con la que nos logueamos en FOP 2, y la extensin 2005.

319

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


> Channel SIP/2003-09349390 was answered. -- Executing [2005@acceso:1] Macro("SIP/2003-09349390", "acceso|2005") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/2003-09349390", "SIP/2005|30|Ttm") in new stack -- Called 2005 -- Started music on hold, class 'default', on SIP/2003-09349390 -- SIP/2005-09346740 is ringing -- SIP/2005-09346740 answered SIP/2003-09349390 -- Stopped music on hold on SIP/2003-09349390 == Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/2003-09349390' in macro 'acceso' == Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/2003-09349390'

Botn de transferencia:

Cuando se est llevando a cabo una llamada el receptor de esta, usuario de la centralita, puede transferir la llamada a otro usuario. En el ejemplo siguiente la llamada entre el usuario 4000 y el 2003 es transferida por este ltimo a la extensin 2005, como se puede ver en la siguiente imagen.

320

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2003@acceso:1] Macro("SIP/4000-08b81180", "acceso|2003") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/4000-08b81180", "SIP/2003|30|Ttm") in new stack -- Called 2003 -- Started music on hold, class 'default', on SIP/4000-08b81180 -- SIP/2003-08b8b550 is ringing -- SIP/2003-08b8b550 answered SIP/4000-08b81180 -- Stopped music on hold on SIP/4000-08b81180 == Spawn extension (acceso, 2005, 0) exited non-zero on 'SIP/4000-08b81180' in macro 'acceso' == Spawn extension (acceso, 2005, 0) exited non-zero on 'SIP/4000-08b81180' -- Executing [2005@acceso:1] Macro("SIP/4000-08b81180", "acceso|2005") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/4000-08b81180", "SIP/2005|30|Ttm") in new stack -- Called 2005 -- Started music on hold, class 'default', on SIP/4000-08b81180 -- SIP/2005-08b99410 is ringing -- SIP/2005-08b99410 answered SIP/4000-08b81180 -- Stopped music on hold on SIP/4000-08b81180 == Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/4000-08b81180' in macro 'acceso' == Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/4000-08b81180'

Botn de transferencia a voicemail:

Cuando se est llevando a cabo una llamada el receptor de esta, usuario de la centralita, puede transferir la llamada a su buzn de voz. En el ejemplo siguiente la llamada entre el usuario 4000 y el 2003 es transferida por este ltimo a su buzn de voz, como se puede ver en la siguiente imagen.

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2003@acceso:1] Macro("SIP/4000-08b87368", "acceso|2003") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/4000-08b87368", "SIP/2003|30|Ttm") in new stack -- Called 2003 -- Started music on hold, class 'default', on SIP/4000-08b87368 -- SIP/2003-08b8f570 is ringing -- SIP/2003-08b8f570 answered SIP/4000-08b87368 -- Stopped music on hold on SIP/4000-08b87368 == Spawn extension (acceso, 20038, 0) exited non-zero on 'SIP/4000-08b87368' in macro 'acceso' == Spawn extension (acceso, 20038, 0) exited non-zero on 'SIP/4000-08b87368' -- Executing [20038@acceso:1] VoiceMail("SIP/4000-08b87368", "2003") in new stack

321

-- <SIP/4000-08b87368> Playing 'vm-intro' (language 'es') -- <SIP/4000-08b87368> Playing 'beep' (language 'es') -- Recording the message -- x=0, open writing: /var/spool/asterisk/voicemail/default/2003/tmp/RMyVLR format: gsm, 0x8b70578 -- x=1, open writing: /var/spool/asterisk/voicemail/default/2003/tmp/RMyVLR format: wav, 0x8b23bb8 -- User hung up == Parsing '/var/spool/asterisk/voicemail/default/2003/INBOX/msg0000.txt': Found == Parsing '/var/spool/asterisk/voicemail/default/2003/INBOX/msg0000.txt': Found == Parsing '/var/spool/asterisk/voicemail/default/2003/INBOX/msg0000.txt': Found == Spawn extension (acceso, 20038, 1) exited non-zero on 'SIP/4000-08b87368'

Botn de PickUp de llamadas: Cuando una extensin est llamando a otra, el usuario con el que te registraste en FOP 2, si es del mismo grupo de la extensin llamada puede contestarla. En el ejemplo siguiente la extensin 4000 est llamando a la 2005 y como este no la acepta, la extensin con la que nos registramos acepta la llamada..

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2005@acceso:1] Macro("SIP/4000-08b87368", "acceso|2005") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/4000-08b87368", "SIP/2005|30|Ttm") in new stack -- Called 2005 -- Started music on hold, class 'default', on SIP/4000-08b87368 -- SIP/2005-08b8df48 is ringing > Channel SIP/2003-08b81180 was answered. > Launching Pickup(2005@acceso) on SIP/2003-08b81180 -- SIP/2003-08b81180 answered SIP/4000-08b87368 -- Stopped music on hold on SIP/4000-08b87368 == Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/4000-08b87368' in macro 'acceso' == Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/4000-08b87368'

322

Botn de escucha de llamadas: Cuando se est llevando a cabo una llamada, la extensin con la que nos registramos en FOP 2 puede escucharla sin que ambas extensiones lo sepan. En el ejemplo siguiente la llamada entre el usuario 4000 y el 2005 es escuchada por la 2003, como se puede ver en la siguiente imagen.

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2005@acceso:1] Macro("SIP/4000-08b81180", "acceso|2005") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/4000-08b81180", "SIP/2005|30|Ttm") in new stack -- Called 2005 -- Started music on hold, class 'default', on SIP/4000-08b81180 -- SIP/2005-08b8b550 is ringing -- SIP/2005-08b8b550 answered SIP/4000-08b81180 -- Stopped music on hold on SIP/4000-08b81180 > Channel SIP/2003-08b8f570 was answered. > Launching ChanSpy(SIP/2005) on SIP/2003-08b8f570 -- <SIP/2003-08b8f570> Playing 'beep' (language 'es') -- <SIP/2003-08b8f570> Playing 'spy-sip' (language 'es') -- <SIP/2003-08b8f570> Playing 'digits/2' (language 'es') -- <SIP/2003-08b8f570> Playing 'digits/0' (language 'es') -- <SIP/2003-08b8f570> Playing 'digits/0' (language 'es') -- <SIP/2003-08b8f570> Playing 'digits/5' (language 'es') == Spying on channel SIP/2005-08b8b550 [Dec 17 04:58:48] NOTICE[8836]: app_chanspy.c:218 start_spying: Attaching SIP/2003-08b8f570 to SIP/2005-08b8b550 == Done Spying on channel SIP/2005-08b8b550 == Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/4000-08b81180' in macro 'acceso' == Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/4000-08b81180'

323

Botn de escucha y susurro en llamadas: Cuando se est llevando a cabo una llamada entre dos extensiones, la extensin con la que nos registramos en FOP 2 puede escuchar e incluso susurrar a una de las partes sin que la otra oiga nada. En el ejemplo siguiente la llamada entre el usuario 4000 y el 2005 es escuchada por la extensin 2003 que puede hablar a la extensin 2005 sin que la 4000 se entere.

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2005@acceso:1] Macro("SIP/4000-08b81180", "acceso|2005") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/4000-08b81180", "SIP/2005|30|Ttm") in new stack -- Called 2005 -- Started music on hold, class 'default', on SIP/4000-08b81180 -- SIP/2005-08b8b550 is ringing -- SIP/2005-08b8b550 answered SIP/4000-08b81180 -- Stopped music on hold on SIP/4000-08b81180 > Channel SIP/2003-08b90b98 was answered. > Launching ChanSpy(SIP/2005|w) on SIP/2003-08b90b98 -- <SIP/2003-08b90b98> Playing 'beep' (language 'es') -- <SIP/2003-08b90b98> Playing 'spy-sip' (language 'es') -- <SIP/2003-08b90b98> Playing 'digits/2' (language 'es') -- <SIP/2003-08b90b98> Playing 'digits/0' (language 'es') -- <SIP/2003-08b90b98> Playing 'digits/0' (language 'es') -- <SIP/2003-08b90b98> Playing 'digits/5' (language 'es') == Spying on channel SIP/2005-08b8b550

La extensin 2005 escucha a la 2003 pero la 4000 no.

324

Botn de colgar llamadas: Cuando se est llevando a cabo una llamada entre dos extensiones, la extensin con la que nos registramos puede colgar dicha llamada sin que ambas partes sepan quien fue. En el ejemplo siguiente la llamada entre el usuario 4000 y el 2005 es colgada por la 2003, como se puede ver en la siguiente imagen.

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2005@acceso:1] Macro("SIP/4000-08b872d8", "acceso|2005") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/4000-08b872d8", "SIP/2005|30|Ttm") in new stack -- Called 2005 -- Started music on hold, class 'default', on SIP/4000-08b872d8 -- SIP/2005-08b8df48 is ringing -- SIP/2005-08b8df48 answered SIP/4000-08b872d8 -- Stopped music on hold on SIP/4000-08b872d8 == Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/4000-08b872d8' in macro 'acceso' == Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/4000-08b872d8'

Cabe destacar que en el CLI no se ve si cuelga uno u otro, simplemente se acaba la llamada.

325

Botn de grabar llamadas: Cuando se est llevando a cabo una llamada entre dos extensiones, la extensin que se registr en el FOP 2 puede grabar dicha llamada. En el ejemplo siguiente la llamada entre el usuario 4000 y el 2005 es grabada por la extensin 2003, como se puede ver en la siguiente imagen.

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [2005@acceso:1] Macro("SIP/4000-08b872d8", "acceso|2005") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/4000-08b872d8", "SIP/2005|30|Ttm") in new stack -- Called 2005 -- Started music on hold, class 'default', on SIP/4000-08b872d8 -- SIP/2005-08b8df48 is ringing -- SIP/2005-08b8df48 answered SIP/4000-08b872d8 -- Stopped music on hold on SIP/4000-08b872d8 [Dec 17 05:23:21] DEBUG[9112]: res_monitor.c:328 ast_monitor_stop: monitor executing ( nice -n 19 sox m "/var/spool/asterisk/monitor/1261023719.156-2005-in.wav" "/var/spool/asterisk/monitor/1261023719.156-2005-out.wav" "/var/spool/asterisk/monitor/1261023719.156-2005.wav" && rm -f "/var/spool/asterisk/monitor/1261023719.156-2005-"* ) & == Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/4000-08b872d8' in macro 'acceso' == Spawn extension (acceso, 2005, 1) exited non-zero on 'SIP/4000-08b872d8'

Se generan dos archivos: 1261023719.156-2005-in.wav 1261023719.156-2005-out.wav

326

Escuchamos los dos archives de grabacin:


exten => 1122,1,Playback(/var/spool/asterisk/monitor/1261023719.156-2005-in) exten => 1123,1,Playback(/var/spool/asterisk/monitor/1261023719.156-2005-out)
-- Executing [1122@acceso:1] Playback("SIP/2003-08b872d8", "/var/spool/asterisk/monitor/1261023719.156-2005-in") in new stack -- <SIP/2003-08b872d8> Playing '/var/spool/asterisk/monitor/1261023719.156-2005-in' (language 'es') -- Executing [1123@acceso:1] Playback("SIP/2003-08b872d8", "/var/spool/asterisk/monitor/1261023719.156-2005-out") in new stack -- <SIP/2003-08b872d8> Playing '/var/spool/asterisk/monitor/1261023719.156-2005-out' (language 'es')

5) Pruebas de funcionamiento de botones de colas, conferencias y trunks Botn de Colas: El cdigo utilizado en estas pruebas es:
[soportelaboral] exten => 784,1,Queue(${QS}|tThH) exten => _XXXX22,1,PauseQueueMember(${QS}|SIP/${EXTEN:0:4}) exten => _XXXX22,n,Hangup

Pausamos los miembros 2000 y 2001 de la cola soportequeue y vemos el aspecto de estos en FOP 2 y el de la cola:
-- Executing [200122@acceso:1] PauseQueueMember("SIP/2003-b6800a38", "soportequeue|SIP/2001") in new stack -- Executing [200122@acceso:2] Hangup("SIP/2003-b6800a38", "") in new stack == Spawn extension (acceso, 200122, 2) exited non-zero on 'SIP/2003-b6800a38' -- Executing [200022@acceso:1] PauseQueueMember("SIP/2003-b6800a38", "soportequeue|SIP/2000") in new stack -- Executing [200022@acceso:2] Hangup("SIP/2003-b6800a38", "") in new stack == Spawn extension (acceso, 200022, 2) exited non-zero on 'SIP/2003-b6800a38'

327

Vemos cual es el comportamiento visual del boton de cola de FOP2 al realizarse una llamada a la cola desde la extensin 4000 que ser cogida por el miembro 2004 (Josemi):

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [784@acceso:1] Queue("SIP/4000-08b88260", "soportequeue|r") in new stack -- Called SIP/2004 -- Called SIP/2000 -- Called SIP/2005 -- SIP/2000-08b9a368 is ringing -- SIP/2005-08ba85f0 is ringing -- SIP/2004-08b89f28 is ringing -- Nobody picked up in 1000 ms -- SIP/2004-08b89f28 answered SIP/4000-08b88260 -- Native bridging SIP/4000-08b88260 and SIP/2004-08b89f28

328

Botn de Trunks: Como hemos visto en la configuracin del fichero de botones del FOP 2. Es posible generar botones de Trunk. En la aplicacin para la realizacin de pruebas se configur el botn del canal 2 de la tarjeta de telefona anteriormente instalada (ENLACEEE). De esta forma tras configurar la extensin 783 para llamar a ese canal:
exten => 783,1,Dial(DAHDI/2,30,tTm) exten => 783,n,Hangup

Al realizar una llamada a esta extensin desde la 2003 el resultado obtenido es el siguiente:

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [783@acceso:1] Dial("SIP/2003-08b89f98", "DAHDI/2|30|tTm") in new stack -- Called 2 -- Started music on hold, class 'default', on SIP/2003-08b89f98 -- DAHDI/2-1 is ringing -- DAHDI/2-1 is ringing -- Stopped music on hold on SIP/2003-08b89f98 -- Hungup 'DAHDI/2-1' == Spawn extension (acceso, 783, 1) exited non-zero on 'SIP/2003-08b89f98'

Botn de Conferencias Como hemos visto en la configuracin del fichero de botones del FOP 2. Es tambin es posible generar botones de Conferencia. Se ha configurado un botn y vamos a ver su funcionamiento frente a llamadas a la conferencia. Registramos dos extensiones en la conferencia y vemos el efecto en el botn de conferencia.

329

El log que muestra el CLI de Asterisk mientras se desarrolla el ejemplo es:


-- Executing [600@acceso:1] MeetMe("SIP/2005-08b876a8", "600|i|1234") in new stack == Parsing '/etc/asterisk/meetme.conf': Found -- Created MeetMe conference 1023 for conference '600' -- Recording -- <SIP/2005-08b876a8> Playing 'vm-rec-name' (language 'es') -- <SIP/2005-08b876a8> Playing 'beep' (language 'es') -- x=0, open writing: /var/spool/asterisk/meetme/meetme-username-600-1 format: sln, 0x8b7b718 -- User ended message by pressing # -- <SIP/2005-08b876a8> Playing 'auth-thankyou' (language 'es') -- <SIP/2005-08b876a8> Playing 'vm-review' (language 'es') -- <SIP/2005-08b876a8> Playing 'vm-msgsaved' (language es') -- <SIP/2005-08b876a8> Playing 'conf-onlyperson' (language 'es') -- Executing [600@acceso:1] MeetMe("SIP/2003-08b8df48", "600|i|1234") in new stack -- Recording -- <SIP/2003-08b8df48> Playing 'vm-rec-name' (language 'es') -- <SIP/2003-08b8df48> Playing 'beep' (language 'es') -- x=0, open writing: /var/spool/asterisk/meetme/meetme-username-600-2 format: sln, 0x8b2e168 -- User ended message by pressing # -- <SIP/2003-08b8df48> Playing 'auth-thankyou' (language 'es') -- <SIP/2003-08b8df48> Playing 'vm-review' (language 'es') -- <SIP/2003-08b8df48> Playing 'vm-msgsaved' (language 'es') -- <DAHDI/pseudo-1935991902> Playing '/var/spool/asteriskmeetme/meetme-username-600-2' (language 'es') -- <DAHDI/pseudo-1935991902> Playing 'conf-hasjoin' (language 'es') == Spawn extension (acceso, 600, 1) exited non-zero on 'SIP/2003-08b8df48' -- <DAHDI/pseudo-1935991902> Playing '/var/spool/asterisk/meetme/meetme-username-600-2' (language 'es') -- <DAHDI/pseudo-1935991902> Playing 'conf-hasleft' (language 'es') -- Hungup 'DAHDI/pseudo-1935991902' == Spawn extension (acceso, 600, 1) exited non-zero on 'SIP/2005-08b876a8'

330

Asternic Call Center Stats Qu es Asternic Call Center Stats? Esta sencilla y poderosa herramienta le permitir analizar los registros de cola de su centralita Asterisk y mostrarlos de manera amigable en su navegador web. Es de los creadores de FOP 2. Caractersticas Reportes detallados: Los reportes muestran informacin exacta sobre la activdad de su call center en tablas amistosas y grficos flash vistosos.Tambin puede exportar los reportes a pdf o csv (Excel). Hay una gran cantidad de mtricas disponibles: nivel de servicio, nivel de abandonos, distribucin de llamados, actividad de agentes, y mucho ms. Asequible: Asternic Call Center Stats viene en dos versiones, una gratuita con capacidad limitada que se distribuye bajo la licencia GPL v3, y una versin comercial con un montn de caractersticas adicionales e informes. La concesin de licencias se realiza por servidor, no hay licencias por puesto, y el cdigo fuente completo se incluye en ambas versiones. Estado en tiempo real: Tanto la version Lite como la Pro le permiten ver el estado de sus colas y agentes en tiempo real. Slido y probado: La herramienta est siendo utilizada en pequeas oficinas y en grandes call centers por igual, reportando cientos de miles de llamadas de forma consistente.

Requisitos: En el servidor 1. Servidor web con soporte PHP. 2. Base de datos MySQL. 3. Asterisk 1.2, 1.4 o 1.6. En el cliente 1. Navegador web con soporte javascript. 2. Plugin Flash para los grficos.

331

Instalacin Estas instrucciones se aplican para la versin Lite del Asternic Call Center Stats.
-

Descargamos la aplicacin:
cd /usr/src wget http://www.asternic.org/stats/asternic-stats-1.0.1.tgz

Descomprimimos:
tar zvxf asternic-stats-1.0.1.tgz cd asternic-stats

Creamos la base de datos:


mysqladmin create qstats

Cargamos la estructura de la base de datos:


mysql -u root < sql/qstat.sql

Editamos /usr/src/asternic-stats/html/config.php e ingresamos la informacin referente a la base de datos:


$dbhost = 'localhost'; $dbname = 'qstat'; $dbuser = 'root'; $dbpass = ''; $language = "es";

Editar /usr/src/asternic-stats/html/config_realtime.php la informacin referente a Asterisk Manager, esta la podemos encontrar en el archivo /etc/asterisk/manager.conf :
<? $manager_host = "127.0.0.1"; $manager_user = "admin"; $manager_secret = "amp111"; session_start(); session_register("QSTATS"); ?>

Editamos /usr/src/asternic-stats/parselog/config.php con informacin referente a la base de datos y manager de asterisk:


$queue_log_dir = '/var/log/asterisk/'; $queue_log_file = 'queue_log'; $dbhost = 'localhost'; $dbname = 'qstat';

332

$dbuser = 'root'; $dbpass = '';

Copiamos la carpeta html a /var/www/:


cp -Rf /usr/src/asternic-stats /var/www/queue-stats cp -Rf /usr/src/asternic-stats/parselog /var/www/queue-stats

Creamos una tarea programada para consolidar la informacin del archivo queue_log:
php -q /var/www/queue-stats/parselog/parselog.php

Visualizamos unas bonitas y completas estadsiticas de cada una de las colas disponibles desde:
http://ip.asterisk/queue_stats

333

Practicas de la aplicacin con Asternic Call Center Stats Tras el acceso a la aplicacin ( http://192.168.1.200/stats/ ) elegimos las colas, los agentes y el intervalo de tiempo del que realizaremos el reporte.

Pulsamos el botn Mostrar Reporte y vemos las llamadas atendidas por cada cola y agente seleccionados y las no atendidas.

334

335

A continuacin vemos las llamadas atendidas por hora, da y por da de la semana.

Para una mejor visualizacin vemos 3 grficas: La relacin entre llamadas atendidas y desatendidas por hora.
336

Nmero de horas desatendidas de las recibidas. Tiempo de espera por hora.

337

Vemos la distribucin de llamadas por da de la semana:

Vemos a tiempo real que sucede cuando se est haciendo una llamada a la cola.

338

Cuando se contesta la llamada la aplicacin lo refleja de la siguiente forma:

339

Asternic CDR Reports Qu es Asternic CDR Reports? Es una herramienta de fcil manejo que le permitir analizar los registros de llamadas de cada uno de los usuarios de la centralita Asterisk y mostrarlos a travs de diversas tablas y grficos en su navegador web.Es de los creadores de FOP 2 y Asternic Call Center Stats. Caractersticas Versin de Prueba: Para obtener esta aplicacin y probarla es necesario ponerse en contacto con los creadores de esta. Referencias: El xito de FOP 2 y lo consistente y solida que es la aplicacin Asternic Call Center Stats nos da un punto de confianza. Estado en tiempo real: Esta versin permite ver el estado de una llamada en tiempo real. Reportes Detallados: La herramienta permite ver reportes de las llamadas entrantes y salientes por usuario y duracin total de todas estas, tambin es posible ver la distribucin en minutos mensual de cada usuario.

Requisitos: En el servidor 4. Servidor web con soporte PHP. 5. Base de datos MySQL. 6. Asterisk 1.2, 1.4 o 1.6. En el cliente 3. Navegador web con soporte javascript. 4. Plugin Flash para los grficos.

340

Instalacin Con estas simples instrucciones instalaremos la aplicacin en nuestro servidor: - Obtenemos la aplicacin: En este caso gracias a Nicolas Gudio. - Descomprimimos en /var/www/html/ y cambiamos de nombre a la carpeta a "cdr":
tar zvxf asternic-cdr-free.tgz mv asternic-cdr-free cdr cd cdr

- Agregamos el contenido de el fichero db.sql a la base de datos "cdr" anteriormente creada para llevar los registros de llamadas desde MySQL:
service mysqld start mysql -u root -p root use cdr;

Pegamos el contenido del fichero db.sql. - Editamos el archivo config.php de la siguiente manera:
// Credentials for MYSQL databases $dbhost = 'localhost'; $dbname = 'cdr'; $dbuser = 'root'; $dbpass = 'root'; // Credentials for AMI (for the realtime tab to work) // See /etc/asterisk/manager.conf $manager_host = "localhost"; $manager_user = "admin"; $manager_secret = "amp111"; // Available languages "es", "en", "ru", "de", "fr" $language = "es";

- Visualizamos el registro de llamadas desde: http://ip.asterisk/cdr

341

Practicas de la aplicacin con Asternic CDR Reports Tras el acceso a la aplicacin ( http://192.168.1.200/cdr/ ) configuramos los usuarios y establecemos el intervalo de tiempo del que realizaremos el reporte.

Agregamos uno a uno los usuarios de los que registraremos las llamadas.

Tras agregar todos los usuarios este es el aspecto de la aplicacin y ya podemos hacer el reporte.

342

Elegimos el intervalo de tiempo y pulsamos el botn Mostrar Reporte.

Tras hacer el reporte empezamos a observar las tablas y grficos que se realizan empezando por las llamadas salientes por usuario.

A partir de esa tabla se generan las siguientes grficas:

343

Ahora vemos las llamadas entrantes recibidas por usuario:

344

A partir de la tabla de llamadas entrantes se generan las siguientes grficas:

345

Vemos la distribucin de llamadas en los 23 dias de los que se ha hecho el reporte:

346

Por ltimo se visualiza como se muestra una llamada a tiempo real:

347

Verbio

Verbio Technologies S.L. es una empresa especializada en el desarrollo de tecnologas del habla, bsicamente sntesis y reconocimiento de voz. Verbio disea, desarrolla y comercializa productos software de tecnologas del habla y ofrece los servicios asociados de soporte tcnico, consultora, desarrollos I+D a medida, ajuste y tuning de aplicaciones de voz y mantenimiento. Por suerte nos han concedido una versin de prueba para aplicar y probar el funcionamiento del reconocimiento y sntesis de voz a nuestra centralita Asterisk.

Qu es Verbio TTS?

Verbio TTS es el motor de sntesis de voz o conversin de texto en voz de Verbio. Qu es la Conversin de texto en voz? La conversin de texto en habla o sntesis de voz (TTS - Text-to-Speech) es la tecnologa que permite convertir, de forma automtica, un texto escrito en una locucin de voz natural, con la mejor naturalidad e inteligibilidad. Permite al sistema que dispone de dicho motor "leer en voz alta" un texto escrito. Cundo es indicado utilizarlo? Es una herramienta imprescindible en aplicaciones cuyo texto a pasar a voz, a priori, es desconocido o muy cambiante y por lo tanto hay que comunicar informacin dinmica. La sntesis no pretende sustituir nunca a la calidad de una grabacin profesional hecha en un estudio de grabacin, pero s que se dispone de calidad suficiente como para sustituir temporalmente cuando se necesitan de forma inmediata mensajes o locuciones estticas o definitivamente cuando lo que se pretende es un ahorro directo de costes. Cuando se persigue mayor calidad que lo que representa la simple concatenacin directa de ficheros .wav de pequeas locuciones grabadas en estudio, ya que con ellas se perdera la entonacin dinmica necesaria en un idioma concreto. Un ejemplo tpico de ello es la locucin de cantidades numricas.

348

Qu es Verbio ASR? Verbio ASR es el motor de reconocimiento del habla de Verbio muy orientado a aplicaciones telefnicas e independientes del locutor, si bien es aplicable tambin en muchas otras aplicaciones microfnicas y multimedia. Qu es el Reconocimiento del habla? El reconocimiento del habla (ASR - Automatic Speech Recognition) es la tecnologa que permite convertir, de forma automtica, una locucin de voz natural en un texto que se corresponda con sta con la mxima fiabilidad posible. Permite al sistema que dispone de dicho motor "entender" o interpretar el contenido de una locucin con independencia de la voz del locutor. Cundo es indicado utilizarlo? Verbio ASR es una herramienta imprescindible en aplicaciones interactivas entre usuarios y sistemas automticos o de control por voz, ya sean IVR, Portales de voz o dispositivos en general. Muy orientado para el entorno telefnico, si bien el canal de voz forma parte de otros muchos sistemas multicanal o multimodal que requieren ASR para ser automatizados. Cuando se requiere una navegacin ms flexible, con iniciativa y control por parte del usuario. Para ahorrar tiempos de interaccin y evitar memorizacin de mens muy largos. En aplicaciones en las que el telfono, o simplemente la voz, sigue siendo el nico canal o medio de interaccin.

Introduccin a Verbio-Asterisk Para poder poner en marcha el sistema Verbio-Asterisk, deberemos disponer de los siguientes componentes: Servidor Verbio (voxserver). Servidor Asterisk con las aplicaciones Verbio instaladas.

Ambos componentes pueden estar instalados en el mismo equipo.

349

Servidor Asterisk Mediante las aplicaciones (Dialplan) Verbio, se realizan peticiones de sntesis y reconocimiento al voxserver.

Servidor Verbio (voxserver) Proporciona recursos de sintesis y reconocimiento.

Listado de paquetes de Verbio: El listado de paquetes disponibles es el siguiente: Motor de sntesis/recnocimiento (servidor voxserver (verbiod)): verbio-engines: Este paquete es de obligada instalacin cuando estamos montando el servidor de sntesis/reconocimiento. En este caso el paquete necesario es: verbio-engines-8.02-0.i386.rpm Cliente verbio (Verbio Developer): verbio-clients: Contiene las libreras, ejemplos y documentacin necesaria, para el desarrollo de aplicaciones de voz. En este caso el paquete necesario es: verbio-clients-8.02-0.i386.rpm Text To Speech (sntesis):

Id. Locutor esAO esAO esEB

Nombre del paquete verbio-tts-laura-esao verbio-tts-laura-esao-16k verbio-tts-carlos-eseb

Descripcin locutor de sntesis espaol (mujer -Laura-) 8KHz locutor de sntesis espaol (mujer -Laura-) 16KHz locutor de sntesis espaol (hombre -Carlos-) 8KHz

350

esEB esVA esVA ca-c0CD ca-c0CD ca-c0FE ca-c0FE caJO caJO euSK euSK euVZ euVZ ca-v0EM ca-v0EM gaFR es-mxYO es-mxYO ptMU ptMU pt-brPA pt-brPA frIF frIF en-usJA en-usJA es-arLO es-arLO

verbio-tts-carlos-eseb-16k verbio-tts-amaya-esva verbio-tts-amaya-esva-16k verbio-tts-pau-ca-c0cd verbio-tts-pau-ca-c0cd-16k verbio-tts-meritxell-ca-c0fe verbio-tts-meritxell-ca-c0fe -16k verbio-tts-oriol-cajo verbio-tts-oriol-cajo-16k verbio-tts-ainhoa-eusk verbio-tts-ainhoa-eusk-16k verbio-tts-amaia-euvz verbio-tts-amaia-euvz-16k verbio-tts-empar-ca-v0em verbio-tts-empar-ca-v0em-16k verbio-tts-freire-gafr verbio-tts-celia-es-mxyo verbio-tts-celia-es-mxyo-16k verbio-tts-adriana-ptmu verbio-tts-adriana-ptmu-16k verbio-tts-julia-pt-brpa verbio-tts-julia-pt-brpa-16k verbio-tts-brigitte-frif verbio-tts-brigitte-frif-16k verbio-tts-jane-en-usja verbio-tts-jane-en-usja-16k verbio-tts-javier-es-arlo verbio-tts-javier-es-arlo-16k

locutor de sntesis espaol (hombre -Carlos-) 16KHz locutor de sntesis espaol (mujer -Amaya-) 8KHz locutor de sntesis espaol (mujer -Amaya-) 16KHz locutor de sntesis cataln (hombre -Pau-) 8KHz locutor de sntesis cataln (hombre -Pau-) 16KHz locutor de sntesis cataln (mujer -Meritxell-) 8KHz locutor de sntesis cataln (mujer -Meritxell-) 16KHz locutor de sntesis cataln (hombre -Oriol-) 8KHz locutor de sntesis cataln (hombre -Oriol-) 16KHz locutor de sntesis euskera (mujer -Ainhoa-) 8KHz locutor de sntesis euskera (mujer -Ainhoa-) 16KHz locutor de sntesis euskera (mujer -Amaia-) 8KHz locutor de sntesis euskera (mujer -Amaia-) 16KHz locutor de sntesis valenciano (mujer -Empar-) a 8KHz locutor de sntesis valenciano (mujer -Empar-) a 16KHz locutor de sntesis gallego (hombre -Freire-) 8KHz/16KHz locutor de sntesis mexicano (mujer -Celia-) 8KHz locutor de sntesis mexicano (mujer -Celia-) 16KHz locutor de sntesis portugus (mujer -Adriana-) 8KHz locutor de sntesis portugus (mujer -Adriana-) 16KHz locutor de sntesis portugus brasileo (mujer -Julia-) 8KHz locutor de sntesis portugus brasileo (mujer -Julia-) 16KHz locutor de sntesis francs (mujer -Brigitte-) 8KHz locutor de sntesis francs (mujer -Brigitte-) 16KHz locutor de sntesis ingls (mujer -Jane-) 8KHz locutor de sntesis ingls (mujer -Jane-) 16KHz locutor de sntesis argentino (hombre -Javier-) 8KHz locutor de sntesis argentino (hombre -Javier-) 16KHz

Se instalarn los paquetes segn los locutores que necesitemos. Hay que tener en cuenta que, a la hora de realizar la instalacin de los locutores (TTS) de Verbio, deberemos usar la versin a 8Khz de los mismos. En este caso los paquetes necesarios son: verbio-tts-amaia-euvz-8.02-0.i386.rpm y verbio-tts-amaya-esva-8.02-0.i386.rpm Configuraciones de reconocimiento (ASR):

Id. configuracin es es_ca es_eu es_ga es_ca_eu_ga es-ar es-cl es-co es-mx es-ve pt

Nombre del paquete verbio-asr-es verbio-asr-es_ca verbio-asr-es_eu verbio-asr-es_ga verbio-asr-es_ca_eu_ga verbio-asr-es-ar verbio-asr-es-cl verbio-asr-es-co verbio-asr-es-mx verbio-asr-es-ve verbio-asr-pt

Descripcin (lenguajes que proporciona) reconocimiento espaol (es). reconocimiento espaol + cataln (es,ca) reconocimiento espaol + euskera (es,eu) reconocimiento espaol + gallego (es,ga) reconocimiento espaol + cataln + euskera + gallego (es,ca,eu,ga) reconocimiento argentino/uruguayo/paraguayo (es-ar) reconocimiento chileno (es-cl) reconocimiento Colombiano/panameo (es-co) reconocimiento mexicano (es-mx) reconocimiento venezolano/portorriqueo/cubano/ dominicano (es-ve) reconocimiento portugus (pt)

351

pt-br fr en-us es16k ca16k

verbio-asr-pt-br verbio-asr-fr verbio-asr-en-us verbio-asr-es16k verbio-asr-ca16k

reconocimiento portugus brasileo (pt-br) reconocimiento francs (fr) reconocimiento ingls americano (en-us) reconocimiento espaol 16Khz (es16k). reconocimiento cataln 16Khz (ca16k).

Se instalarn los paquetes segn los locutores que necesitemos. En este caso el paquete necesario es: verbio-asr-es_eu-8.02-0.i386. Instalacin de Verbio 1. Desinstalar (si tenemos alguna instalacin previa) todos los paquetes Verbio: Encontrar los paquetes Verbio que tengamos instalados en nuestro sistema.
# rpm -qa | grep -i verbio verbio-tts-* verbio-engines verbio-asr-* verbio-clients [...]

Desinstalar los paquetes encontrados (verbio-engines deber ser el ltimo).


[...] # rpm -e verbio-tts-* # rpm -e verbio-asr-* # rpm -e verbio-clients # rpm -e verbio-engines

2. Instalar los nuevos paquetes Verbio (verbio-engines deber ser el primero)


# rpm -ivh verbio-engines-x.yy.i386.rpm # rpm -ivh --force verbio-clients-x.yy.i386.rpm # rpm -ivh --force verbio-tts-*-x.yy.i386.rpm # rpm -ivh --force verbio-asr-*-x.yy.i386.rpm

3. Si disponemos de una mochila con licencia, deberemos instalar el paquete (que encontraremos en: /usr/share/doc/verbio/) que contiene el driver de dicho dispositivo:
# rpm -ivh sntl-sud-x.y.z.i386.rpm

Si disponemos de una licencia en fichero, copiarla en: /opt/verbio/lic/ 4. Copiar el directorio /usr/share/doc/verbio/samples/ a nuestra 'home' (por ejemplo),para poder compilar y ejecutar algunos ejemplos que all encontraremos.
352

5. La documentacin de verbio la podemos encontrar en: /usr/share/doc/verbio/:

library-sdk_es.pdf (documentacin sdk verbio). guide_es.pdf (captulos 4 y 5 para aprender sobre reconocimiento y sntesis del habla)

Configuracin y puesta en marcha del sevidor voxserver (verbiod) La configuracin del servidor voxserver, reside en el fichero: /etc/software-verbio-server. Los parmetros ms importantes de dicho fichero son: : debe contener todas las configuraciones de ASR instaladas. VERBIO_START_CONF : debe contener todas las configuraciones ASR que queremos arrancar. VERBIO_START_LANG : lenguaje por defecto. VERBIO_TTS_SPK : debe contener todos los locutores TTS instalados. VERBIO_START_SPK : debe contener los locutores TTS que queremos tener disponibles. VERBIO_IN_MEMORY : 1 --> cargar todo el locutor en memoria, 0 --> carga parcial. FREQUENCY : 8000 o 16000 (segn la version que hayamos instalado) Nota: podemos usar la aplicacin 'verbioconf' (como root desde un terminal) para llevar a cabo la configuracin del fichero '/etc/software-verbio-server'. Cada vez que instalemos/eliminemos un paquete de sntesis y/o reconocimiento, deberemos ejecutar 'verbioconf' para reflejar los cambios en el fichero /etc/softwareverbio-server. Puesta en marcha del servidor Verbio: Comprobamos el correcto funcionamiento del servidor verbio ejecutando (como 'root'):
# verbiod -d (con -d indicamos modo debug)

VERBIO_ASR_CONF

Si todo est correctamente instalado deberemos obtener una salida similar a:


verbiod-6: StartUp TTS Speakers: esEB,esAO verbiod-3: Serial number = H9D1CCE7 verbiod-3: ERROR mc_libinit(, , 262144) failed: NO LICENSE FILE WAS FOUND

Si disponemos de licencia, y el servidor est correctamente instalado y configurado, el mensaje "NO LICENSE FILE WAS FOUND" no aparecer y 'verbiod' quedar arrancado.
353

Si no tenemos licencia, una vez comprobada la correcta instalacin de 'verbiod', podemos arrancar en modo evaluacin, para realizar las pruebas que consideremos oportunas. Para ello ejecutaremos (como 'root'):
# verbiod -e

El servidor quedar arrancado (ejecutar 'pgrep verbiod' para comprobar). Tambin podemos comprobar el estado del servidor 'verbiod' ejecutando (como 'root'):
# grep verbiod /var/log/syslog o # grep verbiod /var/log/messages

Nota: en modo evaluacin, 'verbiod' permanecer arrancado durante, nicamente, 30/60 minutos. Esta opcin de evaluacin nicamente es vlida para comprobar el correcto funcionamiento del sistema. Se recomienda adquirir una licencia de evaluacin una vez comprobado el correcto funcionamiento de verbio. Los parmetros que acepta verbiod son: -d (modo debug), -e (modo evaluacin) o ningn parmetro para iniciar en modo 'normal'. Instalacin de las aplicaciones de Verbio en Asterisk Para instalar las aplicaciones Asterisk de Verbio, hay que seguir los siguientes pasos: 1.) Copiar el fichero 'app_verbio_speech.c' a la carpeta 'apps' de las fuentes de Asterisk. 2.) Editar el fichero 'Makefile' de dicha ubicacion (carpeta 'apps') y aadir: Si usamos Asterisk 1.4 o 1.6 (aadir justo antes de la etiqueta 'all:')
MENUSELECT_DEPENDS_app_verbio_speech+=VOX VOX_LIB=-lvoxlib

Nota: para que la aplicacin compile y linkee correctamente deberemos tener, como mnimo, el paquete 'verbio-clients' instalado. 3.) Ejecutar 'make install' (desde el directorio principal de nuestras fuentes de Asterisk). 4.) Crear las siguientes carpetas (si conviene):
/var/lib/asterisk/verbio/text /var/lib/asterisk/verbio/gram /var/lib/asterisk/verbio/audio

5.) Copiar el fichero 'verbio.conf' (que encontramos en el paquete verbioasterisk)a: /etc/asterisk/.


354

Carga y descarga de las aplicaciones de Verbio en Asterisk. Las aplicaciones Verbio se cargan y descargan automticamente al iniciar o parar Asterisk. Si, desde el CLI de Asterisk, queremos cargar las aplicaciones Verbio pedemos ejecutar:
*CLI> module load app_verbio_speech.so

Para la descarga de las aplicaciones Verbio podemos ejecutar:


*CLI> module unload app_verbio_speech.so

Si hay algn error de configuracin/conexin se nos reportar por pantalla. Nota: al cargar las aplicaciones Verbio (bien cuando arranca Asterisk o bien cuando cargamos manualmente con '(module) load app_verbio_speech.so'). Se intentar establecer la conexin con el servidor Verbio por lo cual, es muy importante que tengamos el servidor de sntesis/ reconocimiento arrancado. La conexin con el servidor Verbio se mantiene abierta hasta que paremos Asterisk o ejecutemos '(module) unload app_verbio_speech.so'. Configuracin de verbio.conf (en /etc/asterisk/)
;; Verbio ASR and TTS engines Configuration ;;;;;;;;;;;;;;;;;;;;;; ;General options ; ;;;;;;;;;;;;;;;;;;;;;; [general] primary_vox_server = 127.0.0.1 backup_vox_server = 127.0.0.1 ; default 5 net_timeout =5 ;;;;;;;;;;;;;;;;;;;;;; ; TTS Engine Options ; ;;;;;;;;;;;;;;;;;;;;;; [tts] default_language = es ; es (espaol) ;default_language = eu ; eu (euskera) default_speaker = amaya ;default_speaker = amaia text_prompts_path =/var/lib/asterisk/verbio/text init_delay = 300 end_delay = 20 ;;;;;;;;;;;;;;;;;;;;;; ; ASR Engine Options ; ;;;;;;;;;;;;;;;;;;;;;; [asr] ;default_config = es default_config = es_eu ;(espaol, euskera) default_language = es grammar_path = /var/lib/asterisk/verbio/gran ; default: 300

355

init_sil = 300 ; default: 200 max_sil = 200 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; VAD (client-side) options ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [vad] ;min_ref = 5 ;mode = standard ;default: 2.5 ;low_factor = 2.5 ;default: 4.5 ;high_factor = 4.5 ; default: 0.8 ;final_factor = 0.8 ; default: 2.5 ;final_high_factor = 2.5 ; default: 500.0 ;min_high_thresh = 500.0 ; default: 50 ;aam_min = 50 ; default: 200 ;aam_max = 200 ;;;;;;;;;;;;;;;;;;;;;; ; Debug options ; ;;;;;;;;;;;;;;;;;;;;;; [debug] verbose =1 extended_verbose =1 keep_recorded_files =1 recorded_files_path = /var/lib/asterisk/verbio/audio recorded_files_exten = pcm mark_recorded_files = 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Wordspotting options (future application) ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [ws] ;path = /var/lib/asterisk/verbio/ws ;silence = 500 ;threshold = 30 ;command = /var/lib/asterisk/verbio/ws/ws.sh

Descripcion de las diferentes aplicaciones. Nota: Si los parmetros marcados como opcionales se omiten, estos tomaran los valores del fichero /etc/asterisk/verbio.conf.
o o o o o o o VerbioLoadVcb VerbioUnloadVcb VerbioRec VerbioPrompt VerbioPromptAndRec VerbioStreamAndRec VerbioLastErr

356

o o

VerbioInfo VerbioFreeChannel

o VerbioLoadVcb(gram_file|gram_type[|config][|lang][|options]) Descripcin: Esta funcion carga una gramatica (sobre un puerto verbio asociado al canal Asterisk). Parametros: gram_file : fichero de gramatica. gram_type : tipo de gramatica ((ISOLATED, CONNECTED, ABNF o BUILTIN)). config : configuracion de reconocimiento (opcional). lang : lenguaje a utilizar (opcional). options : opciones. Las opciones disponibles son: - v (verbose) - n (no ejecutar colgado cuando se produzca un error referente a Verbio) Una vez cargada la gramatica, se establecera una variable de canal (VVCB_HANDLE) la cual contiene el identificador de la gramatica cargada. o VerbioUnloadVcb(vcb_handle[|config][|lang][|options]) Descripcin: Descarga una gramatica. Parametros: vcb_handle : identificador de gramatica (-1 para descargar todas) config : configuracion de reconocimiento (opcional). lang : lenguaje a utilizar (opcional). options : opciones. Las opciones disponibles son: - v (verbose) - n (no ejecutar colgado cuando se produzca un error referente a Verbio). o VerbioRec([|config][|lang][|initsil][|maxsil][|abs_timeout][|options]) Descripcion: Lanza el reconocimiento. Antes de hacer cualquier llamada a esta aplicacin, deberemos haber cargado alguna gramatica con la funcin 'VerbioLoadVcb'. Parametros: config : configuracion de reconocimiento (opcional). lang : lenguaje a utilizar (opcional). initsil : maxima duracion de silencio de inicio (unidades de 10ms). maxsil : maxima duracion de silencio final (unidades de 10ms). abs_timeout : timeout absoluto de reconocimiento (segundos)(opcional) options : opciones. Las opciones disponibles son: - b (beep antes de lanzar el reconocimiento) - v (verbose) - a (descolgar el canal)
357

- d (habilitar la deteccion de dtmf) - n (no ejecutar colgado cuando se produzca un error referente a Verbio) Para acceder al resultado del reconocimiento, podemos consultar (desde el dialplan de Asterisk) las siguientes variables de canal: VASR_WORDS : Numero de palabras reconocidas (n). VASR_INDEXn : Indice (dentro de la gramatica) de la palabra-n reconocida. VASR_RESULTn : Resultado-n del reconocimiento. VASR_SCOREn : Score-n (confianza) del reconocimiento. VASR_UTTERANCEn : Utterance el resultado n. VASR_WEIGHTn : Peso del resultado n dentro de la gramatica. VASR_RULEn : Regla a la que pertenece el resultado n. Para compatibilidad con anteriores versiones: VASR_INDEX = VASR_INDEX0 VASR_RESULT = VASR_RESULT0 VASR_SCORE = VASR_SCORE0 VASR_UTTERANCE = VASR_UTTERANCE0 VASR_WEIGHT = VASR_WEIGHT0 VASR_RULE = VASR_RULE0 Si la deteccion de dtmf (opcion 'd') est habilitada, podemos consultar su estado con las siguientes variables de canal: VDTMF_DETECTED:TRUE (se ha detectado un tono) o FALSE (no se ha detectado tono) VDTMF_RESULT :si VDTMF_DETECTED = TRUE, VDTMF_RESULT contiene el valor de la tecla pulsada -0,1,2,3,4,5,6,7,8,9,*,#...-. Se puede configurar el nmero maximo de dtmf a detectar y el dtmf de terminacin, configurando (set) las siguientes variables del dialplan: VERBIO_DTMF_MAXLEN VERBIO_DTMF_TERMINATOR Nota: si la opcion 'keep_recorded_files' esta activada en 'verbio.conf', podemos consultar el nombre del fichero generado (una vez la aplicacion de reconocimiento ha terminado), mediante la siguiente variable del dialplan: VASR_REC_FILE.
o

VerbioPrompt(text_or_file[|lang][|speaker][|options])

Descripcin: Sintetiza un texto o fichero de texto. Parmetros: text_or_file : texto (o fichero - ver opciones -) a sintetizar. lang : lenguaje a utilizar (opcional).
358

speaker : locutor a utilizar (opcional). options : opciones. Las opciones disponibles son: - f (tratar el parametro fichero_o_texto como si fuera un fichero) - v (verbose) - p (habilitar pausa/reproduccion mediante dtmf -tecla por defecto '#'.Para especificar una tecla: p0,p1,..,p*,p#. p. para cualquier tecla) - s (habilitar parada del prompt mediante dtmf -tecla por defecto '#'. Para especificar una tecla: s0,s1,..,s*,s#. s. para cualquier tecla) - a (descolgar el canal) - n (no ejecutar colgado cuando se produzca un error referente a Verbio) Si la opcion de parar el prompt ('s') esta habilitada, podemos consultar su estado con las siguientes variables de canal: VDTMF_DETECTED (TRUE -si el usuario ha pulsado la tecla de parada del prompt- or FALSE) VDTMF_RESULT (si VDTMF_DETECTED = TRUE, contiene el valor de la tecla pulsada) Al trabajar con la opcion 'f', los ficheros de texto a sintetizar, se buscaron en la ruta definida por el parametro 'text_prompts_path', del fichero de configuracion ('/etc/asterisk/verbio.conf'). Si queremos sintetizar un fichero de texto que se encuentre en una ubicacion distinta, deberemos introducir el path completo al fichero. No olvidarse de escapar las comas (',') del texto que queremos sintetizar (ejemplo: "Hola\, buenas tardes.").(Si usamos un fichero de texto -opcion 'f'-esto ltimo no aplica). o VerbioPromptAndRec(text_or_file[|initsil][|maxsil][|tts_lang][|tts_spkr][|asr _conf][|asr_lang][|abs_timeout][|options]) Descripcin: Lanza (al mismo tiempo) una sintesis y un reconocimiento. Dicha aplicacion permite, si la opcion bargein esta activada, que el usuario interrumpa la maquina (si durante la locucion el reconocedor detecta que el usuario ha dicho algo, se parara la sintesis y la aplicacion terminara. Permitiendonos, as, consultar el resultado del reconocimiento efectuado). Parametros: text_or_file : texto (o fichero - ver opciones -) a sintetizar. initsil : maxima duracion de silencio de inicio (unidades de 10ms) (opcional). maxsil : maxima duracion de silencio final (unidades de 10ms) (opcional)
359

tts_lang : lenguaje (del sintetizador) a utilizar (opcional). tts_spkr : locutor (del sintetizador) a utilizar (opcional). asr_conf : configuracion de reconocimiento (opcional). asr_lang : lenguaje (del reconocedor) a utilizar (opcional). abs_timeout : timeout absoluto de reconocimiento (segundos)(opcional) options : opciones. Las opciones disponibles son: - f (tratar el parametro fichero_o_texto como si fuera un fichero) - v (verbose) - a (descolgar el canal) - b (beep antes de reconocer) - g (activar bargein. Permitir al usuario interrumpir a la maquina. Esta opcin desactivara 'b'.) - i (interrumpir de manera inmediata el prompt al detectar voz. Esta opcin activara 'g'.) - d (habilitar la deteccion de dtmf) - n (no ejecutar colgado cuando se produzca un error referente a Verbio). Al trabajar con la opcion 'f', los ficheros de texto a sintetizar, se buscaran en la ruta definida por el parametro 'text_prompts_path' del fichero de configuracin (/etc/asterisk/verbio.conf). Si queremos sintetizar un fichero de texto que se encuentre en una ubicacion distinta, deberemos introducir el path completo al fichero. No olvidarse de escapar las comas (',') del texto que queremos sintetizar (ejemplo: "Hola\, buenas tardes.").(Si usamos un fichero de texto -opcion 'f'- esto ultimo no se aplica). Cuando usemos bargein, hay que tener mucho cuidado al seleccionar los parametros 'initsil', 'maxsil' y 'abs_timeout'. Si, por ejemplo, seleccionamos un 'initsil' o 'abs_timeout' demasiado pequeo, no le daremos suficiente tiempo de escucha al usuario, y nuestro mensaje (prompt) se vera interrumpido. Si no indicamos un valor para 'initsil', 'maxsil' o 'abs_timeout', se utilizaran los valores indicados en el fichero de configuracion (verbio.conf). Para acceder al resultado del reconocimiento, podemos consultar (desde el dialplan de Asterisk) las siguientes variables de canal (una vez la aplicacion 'VerbioPromptAndRec' haya terminado): VASR_WORDS : Numero de palabras reconocidas (n). VASR_INDEXn : indice (dentro de la gramatica) de la palabra-n reconocida. VASR_RESULTn : Resultado-n del reconocimiento. VASR_SCOREn : Score-n (confianza) del reconocimiento.
360

VASR_UTTERANCEn : Utterance el resultado n. VASR_WEIGHTn : Peso del resultado n dentro de la gramatica. VASR_RULEn : Regla a la que pertenece el resultado n. Para compatibilidad con anteriores versiones: VASR_INDEX = VASR_INDEX0 VASR_RESULT = VASR_RESULT0 VASR_SCORE = VASR_SCORE0 VASR_UTTERANCE = VASR_UTTERANCE0 VASR_WEIGHT = VASR_WEIGHT0 VASR_RULE = VASR_RULE0 Si la deteccion de dtmf (opcion 'd') esta habilitada, podemos consultar su estado con las siguientes variables de canal: VDTMF_DETECTED :TRUE (se ha detectado un tono) o FALSE (no se ha detectado tono) VDTMF_RESULT :si VDTMF_DETECTED = TRUE, VDTMF_RESULT contiene el valor de la tecla pulsada -0,1,2,3,4,5,6,7,8,9,*,#...-. Se puede configurar el numero maximo de dtmf a detectar y el dtmf de terminacion, configurando (set) las siguientes variables del dialplan: VERBIO_DTMF_MAXLEN VERBIO_DTMF_TERMINATOR Nota: si la opcion 'keep_recorded_files' esta activada en 'verbio.conf', podemos consultar el nombre del fichero generado (una vez la aplicacion de reconocimiento ha terminado), mediante la siguiente variable del Dialplan: VASR_REC_FILE. o VerbioStreamAndRec(audio_file[|initsil][|maxsil][|asr_conf][|asr_lang][|abs _timeout][|options]) Descripcion: Lanza (al mismo tiempo) la reproduccion de un fichero de sonido y un reconocimiento. Esta aplicacion, igual que la anterior, nos permite realizar 'bargein'. Parametros: audio_file : fichero a reproducir. initsil : maxima duracion de silencio de inicio (unidades de 10ms) (opcional) maxsil : maxima duracion de silencio final (unidades de 10ms) (opcional) asr_conf : configuracion de reconocimiento (opcional). asr_lang : lenguaje (del reconocedor) a utilizar (opcional). abs_timeout : timeout absoluto de reconocimiento (segundos)(opcional) options : opciones.Las opciones disponibles son: - v (verbose) - a (descolgar el canal)
361

- b (beep antes de reconocer) - g (activar bargein. Permitir al usuario interrumpir a la maquina. Esta opcin desactivara 'b'.) - i (interrumpir de manera inmediata el stream al detectar voz. Esta opcin activara 'g'.) - d (habilitar la deteccion de dtmf) - n (no ejecutar colgado cuando se produzca un error referente a Verbio) Cuando usemos bargein, hay que tener mucho cuidado al seleccionar los parametros 'initsil', 'maxsil' y 'abs_timeout'. Si, por ejemplo, seleccionamos un 'initsil' o 'abs_timeout' demasiado pequeno, no le daremos suficiente tiempo de escucha al usuario, y nuestro fichero a reproducir se vera interrumpido. Si no indicamos un valor para 'initsil', 'maxsil' o 'abs_timeout', se utilizaran los valores indicados en el fichero de configuracion (verbio.conf). Para acceder al resultado del reconocimiento, podemos consultar (desde el dialplan de Asterisk)las siguientes variables de canal (una vez la aplicacion 'VerbioPromptAndRec' haya terminado): VASR_WORDS : Numero de palabras reconocidas (n). VASR_INDEXn : indice (dentro de la gramatica) de la palabra-n reconocida. VASR_RESULTn : Resultado-n del reconocimiento. VASR_SCOREn : Score-n (confianza) del reconocimiento. VASR_UTTERANCEn : Utterance el resultado n. VASR_WEIGHTn : Peso del resultado n dentro de la gramatica. VASR_RULEn : Regla a la que pertenece el resultado n. Para compatibilidad con anteriores versiones: VASR_INDEX = VASR_INDEX0 VASR_RESULT = VASR_RESULT0 VASR_SCORE = VASR_SCORE0 VASR_UTTERANCE = VASR_UTTERANCE0 VASR_WEIGHT = VASR_WEIGHT0 VASR_RULE = VASR_RULE0 Si la deteccion de dtmf (opcion 'd') esta habilitada, podemos consultar su estado con las siguientes variables de canal: VDTMF_DETECTED :TRUE (se ha detectado un tono) o FALSE (no se ha detectado tono) VDTMF_RESULT :si VDTMF_DETECTED = TRUE, VDTMF_RESULT contiene el valor de la tecla pulsada -0,1,2,3,4,5,6,7,8,9,*,#...-.

362

Se puede configurar el numero maximo de dtmf a detectar y el dtmf de terminacion, configurando (set) las siguientes variables del dialplan: - VERBIO_DTMF_MAXLEN - VERBIO_DTMF_TERMINATOR Nota: si la opcion 'keep_recorded_files' esta activada en 'verbio.conf', podemos consultar el nombre del fichero generado (una vez la aplicacion de reconocimiento ha terminado), mediante la siguiente variable del dialplan: VASR_REC_FILE. o VerbioLastErr(var) Descripcion: Esta aplicacion permite consultar el ltimo mensaje de error referente a las funciones Verbio. Parametros: var: variable de canal donde guardaremos el mensaje de error. Las aplicaciones Verbio deberan ser ejecutadas con la opcion 'n' (para evitar,cuando se produzca un error por parte de las funciones de Verbio, el cuelgue de la llamada). Codigos de error: EVX_NOERROR NO ERROR EVX_INVSETUP Vox ERROR (Files may be corrupted.Check disk and repeat Vox Setup) EVX_NOMEM OUT OF MEMORY. (Check memory leakages). EVX_VCBFILE THE VOCABULARY FILE NAME IS NOT VALID. (Check the vocabulary file name and path writing permission). EVX_INVWORD THE VOCABULARY CONTAINS AN INVALID WORD. (Check and correct invalid words). EVX_NOLICFILE NO LICENSE FILE WAS FOUND. (Use Setup and CheckOut to obtain the Vox directory structure and the license file). EVX_INVLIC THE LICENSE FILE IS NOT VALID. (Use CheckOut to obtain a valid license file). EVX_SYSTEM SYSTEM ERROR (Check errno). EVX_NOLIBINIT VOXLIB WAS NOT SUCCESSFULLY LOADED. (Call vox_libinit() before using any Vox function). EVX_NOLIC NO LICENSE EVX_NOSETVCB NO ACTIVE VOCABULARY. (Use vox_setvcb() to set the active vocabulary). EVX_NORECSTR NO RECOGNITION. (Use vox_recstr() to init recognition). EVX_NOLINE NO MORE LINES ARE AVAILABLE FOR THE SPECIFIED CHANNEL DEVICE EVX_BADPARM INVALID PARAMETER IN FUNCTION CALL
363

EVX_NOTIMP NOT IMPLEMENTED EVX_NORECIND NO RECIND OR NBEST. (Call vox_recind() before calling ATVOX_NIND()). EVX_INVFILE INVALID FILENAME EVX_NETWORK NETWORK ERROR EVX_DICFILE THE DICTIONARY FILE NAME IS NOT VALID EVX_PARSER ABNF PARSER ERROR EVX_INVVER THE VOXSERVER VERSION DOES NOT MATCH THE CLIENT VERSION EVX_UNKNOWN Unknown error o VerbioInfo() Descripcion: Esta aplicacion imprimira informacion diversa sobre la configuracion de Verbio (locutores instalados,configuraciones de reconocimiento instaladas, versiones, licencias, etc...). Esta aplicacion creara las siguientes variables de canal: VTTS_SPEAKERS : locutores disponibles (formato: 'id1:name1:gender1:age1:lang1; id2:name2:gender2:age2:lang2;') VASR_CONFIGS : configuraciones de reconocimiento disponibles. o VerbioFreeChannel() Descripcion: Esta aplicacion liberara los recursos (licencias y memoria) del servidor Verbio para el canal actual. Esta aplicacion debera ser ejecutada SIEMPRE, antes de terminar una llamada que haga uso de las aplicaciones Verbio. Esta aplicacion es equivalente a ejecutar VerbioUnloadVcb con el parametro vcb_handle a -1.

364

Pruebas con Verbio Prueba 1) En la prueba siguiente se utiliza Verbio para saber el nmero de incidencia del llamante para que, por ejemplo en un horario no laboral, se compruebe este con una base de datos con los diferentes cdigos de incidencia y se le informe. Lo primero que se hace es carga el diccionario, en este caso es el archivo david.txt cuyo contenido es el siguiente:
0 1 2 3 4 5 6 7 8 9 SI NO cero uno dos tres cuatro cinco seis siete ocho nueve si no

Despues se indica que al llamante que deletree el nmero de incidencia que tiene 4 dgitos, se comprueba que se ha dicho algo que este por encima de un umbral determinado de acierto y se consulta con el llamante lo captado.Si este indica que es correcto se le dice Gracias y lo siguiente sera revisar en la base de datos. Al tratarse de una versin no Premium de Verbio, al finalizar la llamada bien sea colganda por el Dialplan o por el llamante se debe descargar el diccionario y dejar libre el canal, para esto se ha dejado la extensin 8091. El cdigo utilizado es el siguiente:
[verbio] include => acceso exten => 8000,1,Answer() exten => 8000,n,Set(UMBRAL=90) exten => 8000,n,VerbioLoadVcb(david.txt,connected,,,v) exten => 8000,n,Goto(8090,1) exten => 8090,1,VerbioPromptAndRec(Indique el numero de incidencia para consultar su estado.Recuerde que tiene cuatro digitos.) exten => 8090,n,NoOp(PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT0} ${VASR_RESULT1} ${VASR_RESULT2} ${VASR_RESULT3}. Score: ${VASR_SCORE} Umbral: ${UMBR$}) exten => 8090,n,GotoIf($[$[${VASR_RESULT} != ERROR] & $[${VASR_SCORE}>${UMBRAL}]]?si:no) exten => 8090,n(si),VerbioPromptAndRec(Su numero de incidencia es: ${VASR_RESULT0} ${VASR_RESULT1} ${VASR_RESULT2} ${VASR_RESULT3}\, no?) exten => 8090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}. Score: ${VASR_SCORE} Umbral: ${UMBRAL}",,,v)

365

exten => 8090,n,GotoIf($[$[${VASR_RESULT} != ERROR] & $[${VASR_SCORE}>${UMBRAL}]]?si2:no2) exten => 8090,n(si2),VerbioPrompt(Gracias.) exten => 8090,n,Hangup exten => 8090,n,VerbioFreeChannel() exten => 8090,n(no),VerbioPrompt(Repita por favor.) exten => 8090,n,Goto(8090,1) exten => 8090,n(no2),VerbioPrompt(Repita por favor.) exten => 8090,n,Goto(8090,1) exten => 8091,1,VerbioFreeChannel()

El resultado que se visualiza en el CLI de Asterisk tras llamar a la extensin 8000 es la siguiente:
-- Executing [8000@acceso:1] Answer("SIP/2003-0a1926d0", "") in new stack -- Executing [8000@acceso:2] Set("SIP/2003-0a1926d0", "UMBRAL=90") in new stack -- Executing [8000@acceso:3] VerbioLoadVcb("SIP/2003-0a1926d0", "david.txt|connected|||v") in new stack == Parsing '/etc/asterisk/verbio.conf': Found NOTICE[3774]: app_verbio_speech.c:4549 verbio_load_vcb: Verbose enabled in config file. NOTICE[3774]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598275.3 NOTICE[3774]: app_verbio_speech.c:746 verbio_get_dev: dev: 3 NOTICE[3774]: app_verbio_speech.c:4597 verbio_load_vcb: -------------------------NOTICE[3774]: app_verbio_speech.c:4598 verbio_load_vcb: VerbioLoadVcb param summary: NOTICE[3774]: app_verbio_speech.c:4599 verbio_load_vcb: Prim vox srv : 127.0.0.1 NOTICE[3774]: app_verbio_speech.c:4600 verbio_load_vcb: Bckp vox srv : 127.0.0.1 NOTICE[3774]: app_verbio_speech.c:4601 verbio_load_vcb: Gram path : /var/lib/asterisk/verbio/gram/david.txt NOTICE[3774]: app_verbio_speech.c:4602 verbio_load_vcb: ASR config : es_eu NOTICE[3774]: app_verbio_speech.c:4603 verbio_load_vcb: ASR lang : es NOTICE[3774]: app_verbio_speech.c:4607 verbio_load_vcb: Grammar type: CONNECTED NOTICE[3774]: app_verbio_speech.c:4615 verbio_load_vcb: Voxlib device: 3 NOTICE[3774]: app_verbio_speech.c:4616 verbio_load_vcb: -------------------------== Parsing '/etc/asterisk/verbio.conf': Found NOTICE[3774]: app_verbio_speech.c:501 verbio_md5_grammar_exists: Grammar /var/lib/asterisk/verbio/gram/david.txt exists in cache (/var/lib/asterisk/verbio/gram/.cache/9488d95d905801b3ece8a8a7d4cdc88a). NOTICE[3774]: app_verbio_speech.c:4747 verbio_load_vcb: vc_handle 0 -- Executing [8000@acceso:4] Goto("SIP/2003-0a1926d0", "8090|1") in new stack -- Goto (acceso,8090,1) -- Executing [8090@acceso:1] VerbioPromptAndRec("SIP/2003-0a1926d0", "Indique el numero de incidencia para consultar su estado.Recuerde que tiene cuatro digitos.") in new stack == Parsing '/etc/asterisk/verbio.conf': Found NOTICE[3774]: app_verbio_speech.c:2585 verbio_prompt_and_rec: Verbose enabled in config file. NOTICE[3774]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598275.3 NOTICE[3774]: app_verbio_speech.c:746 verbio_get_dev: dev: 3 NOTICE[3774]: app_verbio_speech.c:2800 verbio_prompt_and_rec: -------------------------NOTICE[3774]: app_verbio_speech.c:2801 verbio_prompt_and_rec: VerbioPromptAndRec param summary: NOTICE[3774]: app_verbio_speech.c:2802 verbio_prompt_and_rec: Prim vox srv : 127.0.0.1 NOTICE[3774]: app_verbio_speech.c:2803 verbio_prompt_and_rec: Bckp vox srv : 127.0.0.1 NOTICE[3774]: app_verbio_speech.c:2804 verbio_prompt_and_rec: TTS language : es NOTICE[3774]: app_verbio_speech.c:2805 verbio_prompt_and_rec: TTS speaker : amaya

366

NOTICE[3774]: app_verbio_speech.c:2808 verbio_prompt_and_rec: Text to synth: Indique el numero de incidencia para consultar su estado.Recuerde que tiene cuatro digitos. NOTICE[3774]: app_verbio_speech.c:2809 verbio_prompt_and_rec: Init delay : 300 NOTICE[3774]: app_verbio_speech.c:2810 verbio_prompt_and_rec: End delay : 20 NOTICE[3774]: app_verbio_speech.c:2813 verbio_prompt_and_rec: ASR config : es_eu NOTICE[3774]: app_verbio_speech.c:2814 verbio_prompt_and_rec: ASR lang : es NOTICE[3774]: app_verbio_speech.c:2815 verbio_prompt_and_rec: Init sil : 300 NOTICE[3774]: app_verbio_speech.c:2816 verbio_prompt_and_rec: Max sil : 200 NOTICE[3774]: app_verbio_speech.c:2817 verbio_prompt_and_rec: Abs timeout : 30 NOTICE[3774]: app_verbio_speech.c:2842 verbio_prompt_and_rec: Rec ASR file :/var/lib/asterisk/verbio/audio/verbio-rec-126259827-1262598275.3.alaw NOTICE[3774]: app_verbio_speech.c:2843 verbio_prompt_and_rec: Voxlib device: 3 NOTICE[3774]: app_verbio_speech.c:2844 verbio_prompt_and_rec: --------------------------- Executing [8090@acceso:2] NoOp("SIP/2003-0a1926d0", ""PALABRAS 4. Resultado: 1 1 1 1. Score: 95 Umbral: 90"|||v") in new stack -- Executing [8090@acceso:3] GotoIf("SIP/2003-0a1926d0", "1?si:no") in new stack -- Goto (acceso,8090,4) -- Executing [8090@acceso:4] VerbioPromptAndRec("SIP/2003-0a1926d0", "Su numero de incidencia es: 1 1 1 1, no?") in new stack == Parsing '/etc/asterisk/verbio.conf': Found NOTICE[3774]: app_verbio_speech.c:2585 verbio_prompt_and_rec: Verbose enabled in config file. NOTICE[3774]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598275.3 NOTICE[3774]: app_verbio_speech.c:746 verbio_get_dev: dev: 3 NOTICE[3774]: app_verbio_speech.c:2800 verbio_prompt_and_rec: -------------------------NOTICE[3774]: app_verbio_speech.c:2801 verbio_prompt_and_rec: VerbioPromptAndRec param summary: NOTICE[3774]: app_verbio_speech.c:2802 verbio_prompt_and_rec: Prim vox srv : 127.0.0.1 NOTICE[3774]: app_verbio_speech.c:2803 verbio_prompt_and_rec: Bckp vox srv : 127.0.0.1 NOTICE[3774]: app_verbio_speech.c:2804 verbio_prompt_and_rec: TTS language : es NOTICE[3774]: app_verbio_speech.c:2805 verbio_prompt_and_rec: TTS speaker : amaya NOTICE[3774]: app_verbio_speech.c:2808 verbio_prompt_and_rec: Text to synth: Su numero de incidencia es: 1 1 1 1, no? NOTICE[3774]: app_verbio_speech.c:2809 verbio_prompt_and_rec: Init delay : 300 NOTICE[3774]: app_verbio_speech.c:2810 verbio_prompt_and_rec: End delay : 20 NOTICE[3774]: app_verbio_speech.c:2813 verbio_prompt_and_rec: ASR config : es_eu NOTICE[3774]: app_verbio_speech.c:2814 verbio_prompt_and_rec: ASR lang : es NOTICE[3774]: app_verbio_speech.c:2815 verbio_prompt_and_rec: Init sil : 300 NOTICE[3774]: app_verbio_speech.c:2816 verbio_prompt_and_rec: Max sil : 200 NOTICE[3774]: app_verbio_speech.c:2817 verbio_prompt_and_rec: Abs timeout : 30 NOTICE[3774]: app_verbio_speech.c:2842 verbio_prompt_and_rec: Rec ASR file :/var/lib/asterisk/verbio/audio/verbio-rec-126259828-1262598275.3.alaw NOTICE[3774]: app_verbio_speech.c:2843 verbio_prompt_and_rec: Voxlib device: 3 NOTICE[3774]: app_verbio_speech.c:2844 verbio_prompt_and_rec: --------------------------- Executing [8090@acceso:5] NoOp("SIP/2003-0a1926d0", ""PALABRAS 1. Resultado: 6. Score: 99 Umbral: 90"|||v") in new stack -- Executing [8090@acceso:6] GotoIf("SIP/2003-0a1926d0", "1?si2:no2") in new stack -- Goto (acceso,8090,7) -- Executing [8090@acceso:7] VerbioPrompt("SIP/2003-0a1926d0", "Gracias.") in new stack == Parsing '/etc/asterisk/verbio.conf': Found NOTICE[3774]: app_verbio_speech.c:1298 verbio_prompt: Verbose enabled in config file. NOTICE[3774]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598275.3 NOTICE[3774]: app_verbio_speech.c:746 verbio_get_dev: dev: 3 NOTICE[3774]: app_verbio_speech.c:1371 verbio_prompt: -------------------------NOTICE[3774]: app_verbio_speech.c:1372 verbio_prompt: VerbioPrompt param summary: NOTICE[3774]: app_verbio_speech.c:1373 verbio_prompt: Prim vox srv : 127.0.0.1 NOTICE[3774]: app_verbio_speech.c:1374 verbio_prompt: Bckp vox srv : 127.0.0.1 NOTICE[3774]: app_verbio_speech.c:1375 verbio_prompt: TTS language : es

367

NOTICE[3774]: app_verbio_speech.c:1376 verbio_prompt: TTS speaker : amaya NOTICE[3774]: app_verbio_speech.c:1379 verbio_prompt: Text to synth: Gracias. NOTICE[3774]: app_verbio_speech.c:1380 verbio_prompt: Init delay : 300 NOTICE[3774]: app_verbio_speech.c:1381 verbio_prompt: End delay : 20 NOTICE[3774]: app_verbio_speech.c:1394 verbio_prompt: Voxlib device: 3 NOTICE[3774]: app_verbio_speech.c:1395 verbio_prompt: --------------------------- Executing [8090@acceso:8] Hangup("SIP/2003-0a1926d0", "") in new stack == Spawn extension (acceso, 8090, 8) exited non-zero on 'SIP/2003-0a1926d0'

Prueba 2) En la prueba siguiente se utiliza Verbio para saber el Dpto con el que desea hablar el llamante para que, por ejemplo, se le redireccione directamente sin pasar por Administracin. De nuevo lo primero que se realiza es cargar el diccionario, en este caso el archivo datos.txt cuyo contenido es:
SOPORTE ADMINISTRACION COMERCIAL TWISTER soporte administracion comercial twister

A continuacin se le dan las posibilidades a elegir al llamante y se comprueba que lo dicho por este, es muy parecido a alguna palabra del diccionario dependiendo del umbral establecido, si es as, tras cargar otro archivo con las palabras si y no se le indica el resultado al llamante para que acepte o no si es el Dpto correcto. Despues de esto se le redireccionaria al Dpto adecuado o se le hara repetir lo dicho. El cdigo utilizado en el ejemplo es el siguiente:
[verbio] include => acceso exten => 7000,1,Answer() exten => 7000,n,Set(UMBRAL=20) exten => 7000,n,VerbioLoadVcb(datos.txt,isolated,,,v) exten => 7000,n,Goto(7090,1) exten => 7090,1,VerbioPromptAndRec(Bienvenido a Yet Informatica \, de los siguientes departamentos indiquenos con cual desea hablar\, Soporte\, Administracio$ exten => 7090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}. Score: ${VASR_SCORE} Umbral: ${UMBRAL}",,,v) exten => 7090,n,GotoIf($[$[${VASR_RESULT} != ERROR] & $[${VASR_SCORE}>${UMBRAL}]]?si:no) exten => 7090,n,VerbioFreeChannel() exten => 7090,n(si),VerbioLoadVcb(sino.txt,isolated,,,v) exten => 7090,n,Set(DPTO= ${VASR_RESULT}) exten => 7090,n,VerbioPromptAndRec(El departamento elegido es: ${VASR_RESULT} \, no?) exten => 7090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}. Score: ${VASR_SCORE} Umbral: ${UMBRAL}",,,v) exten => 7090,n,GotoIf($[$[${VASR_RESULT} != ERROR] & $[${VASR_SCORE}>${UMBRAL}]]?si2:no2) exten => 7090,n(si2),NoOp(" Vamos a llamar: ${DPTO}") exten => 7090,n,GotoIf($[${DPTO} = SOPORTE ]?soporte:otro)

368

exten => 7090,n(soporte),Dial(SIP/2000,30,Ttm) exten => 7090,n,Hangup exten => 7090,n,VerbioFreeChannel() exten => 7090,n(otro),GotoIf($[${DPTO} = TWISTER ]?twister:otro1) exten => 7090,n(twister),Dial(SIP/2003,30,Ttm) exten => 7090,n,Hangup exten => 7090,n,VerbioFreeChannel() exten => 7090,n(otro1),GotoIf($[${DPTO} = COMERCIAL ]?comercial:otro2) exten => 7090,n(comercial),Dial(SIP/4000,30,Ttm) exten => 7090,n,Hangup exten => 7090,n,VerbioFreeChannel() exten => 7090,n(otro2),Dial(SIP/5000,30,Ttm) exten => 7090,n,Hangup exten => 7090,n,VerbioFreeChannel() exten => 7090,n(no),VerbioPrompt(Repita por favor.) exten => 7090,n,Goto(7090,1) exten => 7090,n(no2),VerbioPrompt(Repita por favor.) exten => 7090,n,Goto(7090,si)

El resultado visualizado en el CLI al llamar a la extensin 7000 es:


-- Executing [7000@acceso:1] Answer("SIP/2003-0a197d18", "") in new stack -- Executing [7000@acceso:2] Set("SIP/2003-0a197d18", "UMBRAL=20") in new stack -- Executing [7000@acceso:3] VerbioLoadVcb("SIP/2003-0a197d18", "datos.txt|isolated|||v") in new stack == Parsing '/etc/asterisk/verbio.conf': Found NOTICE[3797]: app_verbio_speech.c:4549 verbio_load_vcb: Verbose enabled in config file. NOTICE[3797]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598382.5 NOTICE[3797]: app_verbio_speech.c:746 verbio_get_dev: dev: 5 NOTICE[3797]: app_verbio_speech.c:4597 verbio_load_vcb: -------------------------NOTICE[3797]: app_verbio_speech.c:4598 verbio_load_vcb: VerbioLoadVcb param summary: NOTICE[3797]: app_verbio_speech.c:4599 verbio_load_vcb: Prim vox srv : 127.0.0.1 NOTICE[3797]: app_verbio_speech.c:4600 verbio_load_vcb: Bckp vox srv : 127.0.0.1 NOTICE[3797]: app_verbio_speech.c:4601 verbio_load_vcb: Gram path : /var/lib/asterisk/verbio/gram/datos.txt NOTICE[3797]: app_verbio_speech.c:4602 verbio_load_vcb: ASR config : es_eu NOTICE[3797]: app_verbio_speech.c:4603 verbio_load_vcb: ASR lang : es NOTICE[3797]: app_verbio_speech.c:4605 verbio_load_vcb: Grammar type: ISOLATED NOTICE[3797]: app_verbio_speech.c:4615 verbio_load_vcb: Voxlib device: 5 NOTICE[3797]: app_verbio_speech.c:4616 verbio_load_vcb: -------------------------== Parsing '/etc/asterisk/verbio.conf': Found NOTICE[3797]: app_verbio_speech.c:501 verbio_md5_grammar_exists: Grammar /var/lib/asterisk/verbio/gram/datos.txt exists in cache (/var/lib/asterisk/verbio/gram/.cache/893dfb11158fc1ad4aa7d5e09fc1605f). NOTICE[3797]: app_verbio_speech.c:4747 verbio_load_vcb: vc_handle 0 -- Executing [7000@acceso:4] Goto("SIP/2003-0a197d18", "7090|1") in new stack -- Goto (acceso,7090,1) -- Executing [7090@acceso:1] VerbioPromptAndRec("SIP/2003-0a197d18", "Bienvenido a Yet Informatica , de los siguientes departamentos indiquenos con cual desea hablar, Soporte, Administracion, Twister, Comercial.") in new stack == Parsing '/etc/asterisk/verbio.conf': Found NOTICE[3797]: app_verbio_speech.c:2585 verbio_prompt_and_rec: Verbose enabled in config file. NOTICE[3797]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598382.5 NOTICE[3797]: app_verbio_speech.c:746 verbio_get_dev: dev: 5 NOTICE[3797]: app_verbio_speech.c:2800 verbio_prompt_and_rec: --------------------------

369

NOTICE[3797]: app_verbio_speech.c:2801 verbio_prompt_and_rec: VerbioPromptAndRec param summary: NOTICE[3797]: app_verbio_speech.c:2802 verbio_prompt_and_rec: Prim vox srv : 127.0.0.1 NOTICE[3797]: app_verbio_speech.c:2803 verbio_prompt_and_rec: Bckp vox srv : 127.0.0.1 NOTICE[3797]: app_verbio_speech.c:2804 verbio_prompt_and_rec: TTS language : es NOTICE[3797]: app_verbio_speech.c:2805 verbio_prompt_and_rec: TTS speaker : amaya NOTICE[3797]: app_verbio_speech.c:2808 verbio_prompt_and_rec: Text to synth: Bienvenido a Yet Informatica , de los siguientes departamentos indiquenos con cual desea hablar, Soporte, Administracion, Twister, Comercial. NOTICE[3797]: app_verbio_speech.c:2809 verbio_prompt_and_rec: Init delay : 300 NOTICE[3797]: app_verbio_speech.c:2810 verbio_prompt_and_rec: End delay : 20 NOTICE[3797]: app_verbio_speech.c:2813 verbio_prompt_and_rec: ASR config : es_eu NOTICE[3797]: app_verbio_speech.c:2814 verbio_prompt_and_rec: ASR lang : es NOTICE[3797]: app_verbio_speech.c:2815 verbio_prompt_and_rec: Init sil : 300 NOTICE[3797]: app_verbio_speech.c:2816 verbio_prompt_and_rec: Max sil : 200 NOTICE[3797]: app_verbio_speech.c:2817 verbio_prompt_and_rec: Abs timeout : 30 NOTICE[3797]: app_verbio_speech.c:2842 verbio_prompt_and_rec: Rec ASR file :/var/lib/asterisk/verbio/audio/verbio-rec-126259839-1262598382.5.alaw NOTICE[3797]: app_verbio_speech.c:2843 verbio_prompt_and_rec: Voxlib device: 5 NOTICE[3797]: app_verbio_speech.c:2844 verbio_prompt_and_rec: --------------------------- Executing [7090@acceso:2] NoOp("SIP/2003-0a197d18", ""PALABRAS 1. Resultado: SOPORTE. Score: 58 Umbral: 20"|||v") in new stack -- Executing [7090@acceso:3] GotoIf("SIP/2003-0a197d18", "1?si:no") in new stack -- Goto (acceso,7090,5) -- Executing [7090@acceso:5] VerbioLoadVcb("SIP/2003-0a197d18", "sino.txt|isolated|||v") in new stack == Parsing '/etc/asterisk/verbio.conf': Found NOTICE[3797]: app_verbio_speech.c:4549 verbio_load_vcb: Verbose enabled in config file. NOTICE[3797]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598382.5 NOTICE[3797]: app_verbio_speech.c:746 verbio_get_dev: dev: 5 NOTICE[3797]: app_verbio_speech.c:4597 verbio_load_vcb: -------------------------NOTICE[3797]: app_verbio_speech.c:4598 verbio_load_vcb: VerbioLoadVcb param summary: NOTICE[3797]: app_verbio_speech.c:4599 verbio_load_vcb: Prim vox srv : 127.0.0.1 NOTICE[3797]: app_verbio_speech.c:4600 verbio_load_vcb: Bckp vox srv : 127.0.0.1 NOTICE[3797]: app_verbio_speech.c:4601 verbio_load_vcb: Gram path : /var/lib/asterisk/verbio/gram/sino.txt NOTICE[3797]: app_verbio_speech.c:4602 verbio_load_vcb: ASR config : es_eu NOTICE[3797]: app_verbio_speech.c:4603 verbio_load_vcb: ASR lang : es NOTICE[3797]: app_verbio_speech.c:4605 verbio_load_vcb: Grammar type: ISOLATED NOTICE[3797]: app_verbio_speech.c:4615 verbio_load_vcb: Voxlib device: 5 NOTICE[3797]: app_verbio_speech.c:4616 verbio_load_vcb: -------------------------== Parsing '/etc/asterisk/verbio.conf': Found NOTICE[3797]: app_verbio_speech.c:501 verbio_md5_grammar_exists: Grammar /var/lib/asterisk/verbio/gram/sino.txt exists in cache (/var/lib/asterisk/verbio/gram/.cache/6343121acb03e3e93cf7cbf7ff3b38ba). NOTICE[3797]: app_verbio_speech.c:4747 verbio_load_vcb: vc_handle 1 -- Executing [7090@acceso:6] Set("SIP/2003-0a197d18", "DPTO= SOPORTE") in new stack -- Executing [7090@acceso:7] VerbioPromptAndRec("SIP/2003-0a197d18", "El departamento elegido es: SOPORTE , no?") in new stack == Parsing '/etc/asterisk/verbio.conf': Found NOTICE[3797]: app_verbio_speech.c:2585 verbio_prompt_and_rec: Verbose enabled in config file. NOTICE[3797]: app_verbio_speech.c:735 verbio_get_dev: chan->uniqueid: 1262598382.5 NOTICE[3797]: app_verbio_speech.c:746 verbio_get_dev: dev: 5 NOTICE[3797]: app_verbio_speech.c:2800 verbio_prompt_and_rec: -------------------------NOTICE[3797]: app_verbio_speech.c:2801 verbio_prompt_and_rec: VerbioPromptAndRec param summary: NOTICE[3797]: app_verbio_speech.c:2802 verbio_prompt_and_rec: Prim vox srv : 127.0.0.1

370

NOTICE[3797]: app_verbio_speech.c:2803 verbio_prompt_and_rec: Bckp vox srv : 127.0.0.1 NOTICE[3797]: app_verbio_speech.c:2804 verbio_prompt_and_rec: TTS language : es NOTICE[3797]: app_verbio_speech.c:2805 verbio_prompt_and_rec: TTS speaker : amaya NOTICE[3797]: app_verbio_speech.c:2808 verbio_prompt_and_rec: Text to synth: El departamento elegido es: SOPORTE , no? NOTICE[3797]: app_verbio_speech.c:2809 verbio_prompt_and_rec: Init delay : 300 NOTICE[3797]: app_verbio_speech.c:2810 verbio_prompt_and_rec: End delay : 20 NOTICE[3797]: app_verbio_speech.c:2813 verbio_prompt_and_rec: ASR config : es_eu NOTICE[3797]: app_verbio_speech.c:2814 verbio_prompt_and_rec: ASR lang : es NOTICE[3797]: app_verbio_speech.c:2815 verbio_prompt_and_rec: Init sil : 300 NOTICE[3797]: app_verbio_speech.c:2816 verbio_prompt_and_rec: Max sil : 200 NOTICE[3797]: app_verbio_speech.c:2817 verbio_prompt_and_rec: Abs timeout : 30 NOTICE[3797]: app_verbio_speech.c:2842 verbio_prompt_and_rec: Rec ASR file :/var/lib/asterisk/verbio/audio/verbio-rec-126259841-1262598382.5.alaw NOTICE[3797]: app_verbio_speech.c:2843 verbio_prompt_and_rec: Voxlib device: 5 NOTICE[3797]: app_verbio_speech.c:2844 verbio_prompt_and_rec: --------------------------- Executing [7090@acceso:8] NoOp("SIP/2003-0a197d18", ""PALABRAS 1. Resultado: SI. Score: 93 Umbral: 20"|||v") in new stack -- Executing [7090@acceso:9] GotoIf("SIP/2003-0a197d18", "1?si2:no2") in new stack -- Goto (acceso,7090,10) -- Executing [7090@acceso:10] NoOp("SIP/2003-0a197d18", "" Vamos a llamar: SOPORTE"") in new stack -- Executing [7090@acceso:11] GotoIf("SIP/2003-0a197d18", "1?soporte:otro") in new stack -- Goto (acceso,7090,12) -- Executing [7090@acceso:12] Dial("SIP/2003-0a197d18", "SIP/2000|30|Ttm") in new stack -- Called 2000 -- Started music on hold, class 'default', on SIP/2003-0a197d18 -- SIP/2000-0a1926d0 is circuit-busy == Everyone is busy/congested at this time (1:0/1/0) -- Stopped music on hold on SIP/2003-0a197d18 -- Executing [7090@acceso:13] Hangup("SIP/2003-0a197d18", "") in new stack == Spawn extension (acceso, 7090, 13) exited non-zero on 'SIP/2003-0a197d18'

371

Skype

Qu es Skype? Es el ms conocido de los SoftPhones y quizs un responsable importante de la popularizacin de la VozIP. Creado por los fundadores de Kazaa: Zennstrm y Friis. Segn su pgina web www.skype.com ha sido descargado 236.259.232 veces. Skype fue comprado por la firma de subastas por Internet EBay por 2.100 millones de dolares. Las comunicaciones de Voz viajan cifradas por la red y utiliza un protocolo propietario. Ventajas Disponible para muchas plataformas: Windows, Mac OSX, GNU Linux. Codificacin de audio con mucha calidad y gran compresin: 3-16 kbytes/seg. Conferencias de llamadas. Envo de Video (V2.x). Firewall / Nat discover: En casi todas las situaciones funciona sin necesidad de configurar PNAT.

Problemas: Protocolo cerrado Qu estn haciendo con mis paquetes de voz? Los creadores de la Red Kazaa estn bajo sospecha de distribuir spyware de forma intencionada. Qu estn haciendo con mi ancho de banda? Utilizarlo para otros clientes de Skype. No es posible programar nuevos clientes a medida. Interconexin con otras redes: el salto a la red telefnica pblica solo puede realizarse con el sistema SkypeOut, lo cual no favorece la competencia. Integracin profesional: No existen centralitas (exceptuando Asterisk) que soporten el protocolo de Skype, tampoco telfonos puros (USB s).

372

Alternativas a Skype

Gizmo Project (http://www.gizmoproject.com/ http://www.gizmoproject.com/): Multiplataforma. Interconexin con Asterisk. Protocolo SIP.

Open Wengo (http://www.openwengo.org/ http://www.openwengo.org/): #include gizmo.h Posibilidad de usarlo solo como softphone.

Servidor Asterisk: Extensiones SIP o IAX2. Varios proveedores IP. Conexin con la PSTN.

Skype para Asterisk (SfA) Digium en Septiembre de 2009 sac un modulo de Skype para Asterisk Asterisk, y es que este controvertido controvertido mdulo dio y est dando bastante de qu hablar, tanto a favor como en contra entre los seguidores y usuarios de Asterisk. Como tanto los drivers como la estructura de Asterisk son libres (cualquiera puede ver (cualquiera cmo es por dentro el comportamiento de los mdulos que dan soporte al hardware para hacerlo compatible con Asterisk , muchas otras empresas cuando surgi crearon Asterisk), 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 utili utilizada como es Skype con Asterisk. Skype, No obstante, lo que Skype (como protocolo cerrado y como empresa monopolizadora (como 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 e punto de vista empresarial (y al contrario de lo que el y pensaba en un principio), ha sido todo un xito. ),
373

Skype es un buen SoftPhone, utiliza un protocolo propio, pero no hay duda que su sencillez de configuracin y la forma de saltarse los problemas de NAT lo hacen un candidato excelente para aquellas extensiones tanto locales como externas a la vez que aporta caractersticas de mensajera instantnea (chat, comparticin de archivos, etc.) algo que tambin existe en otros SoftPhones compatibles con SIP, pero que al requerir introducir determinados valores (cdecs a utilizar, servidor SIP, dominio, tipo de NAT, etc.) lo hace una aplicacin difcil y anti-intuitiva para muchas personas. En todo buen proyecto existen dos formas de ver el desarrollo y la evolucin de este: Cmo proyecto de software libre: donde todo lo que se desarrolle debe ser libre y gratis (algo nicamente libre no causa buena impresin). Cmo proyecto empresarial: donde la obtencin de un beneficio econmico es el principal objetivo.

Ambas visiones son irreconciliables: o se desarrolla algo pensando en la comunidad (donde otras empresas sacarn tajada tanto como puedan mientras t te centras en desarrollar el producto que luego ofrecers) o creas un producto cerrado (donde t seas el nico que saques provecho del tiempo invertido). Son muchas las voces que defienden un modelo de desarrollo basado en software libre basado en la venta de servicios (soporte, documentacin, formacin, etc.) pero muchas de estas voces son las que defienden el soporte gratuito mediante foros y listas, aprender por cuenta propia con lo que se encuentra por Internet, y ahorrar hasta el ltimo cntimo si otro servicio similar puede salir ms barato que un servicio confiable. Es decir lo gratuito, o si no lo hay, lo ms econmico. Por desgracia, el concepto de Software libre sigue siendo el de Software gratis y con esta mentalidad, se termina dando la razn a las empresas de software comercial. Skype para Asterisk (SFA) es el primer y nico controlador de canal nativo que conecta Asterisk a la red de Skype. El controlador de canal soporta un nmero ilimitado de usuarios simultneos y un nmero ilimitado de llamadas simultneas por usuario. SFA es un producto que ofrecer una solucin a muchas empresas que utilizan Skype y a las que no les interesa cambiar de SoftPhone porque su personal ya conoce esta aplicacin y lo usan en su casa como Windows. Uno puede estar ms o menos de acuerdo con que Digium se haya metido a desarrollar esta solucin en lugar de mejorar los protocolos IAX2 y SIP, pero mejorar esto no da de comer y crear un canal para Skype, s. El canal Skype cuesta 66$ e incluye las licencias G.729 para poder utilizarlo. Ventajas: Llamadas salientes: llama ms, por ms tiempo y paga menos.

Llama a usuarios de Skype directamente desde una centralita Asterisk.


374

Reduce los gastos en comunicaciones a telfonos fijos y mviles de todo el mundo gracias a las tarifas econmicas para llamadas de Skype. Skype para Asterisk complementa tu sistema de comunicacin actual. Aade Skype a tus tablas de enrutamiento de llamadas para optimizar los gastos de llamadas internacionales.

Llamadas entrantes: integra tu empresa a la comunidad de Skype. Clientes


Con botones para hacer clic y llamar, los clientes pueden comunicarse contigo directamente desde tu sitio o correo electrnico. Los clientes pueden llamar gratis a tu empresa desde Skype. Funcin de volver a llamar al cliente a travs de Skype. Permite que los clientes te llamen a travs de un nmero de Internet local. Tu empresa estar presente en una comunidad de ms de 440 millones de usuarios registrados de Skype.

Empleados que trabajan a distancia y personas que lo hacen desde el hogar


Llamadas gratis de Skype a la oficina mientras viajas. Para quienes trabajan desde el hogar, la actividad empresarial no cambia, ya que la oficina est a un solo clic. El estado de conexin de Skype permite trabajar de manera ms inteligente, traspasa zonas horarias y posibilita el trabajo a distancia.

Proveedores y socios

Se visible y accesible internacionalmente para la comunidad de Skype y para socios potenciales. Mejora tus relaciones comerciales a larga distancia con llamadas entrantes gratis.

No se necesita PC Aprovecha las llamadas a tarifas formidables sin necesidad de usar un equipo de PC. Facil integracin Implementa Skype para Asterisk fcilmente dentro de tu infraestructura actual.

375

Inconvenientes Las versiones de Asterisk 1.4 anteriores a 1.4.25 tienen un error que hace que Skype no funcione correctamente. No utilice dichas versiones con SFA. La versin de nuestro servidor es 1.4.26.2 lo que nos permite usarlo sin problemas, no obstante las versiones ms estables de la rama 1.4 estn por debajo de la 1.4.25. Slo los usuarios de Skype que se crean en Skype Business Control Panel (http://skype.com/business/) se pueden utilizar con Skype para Asterisk. La cuenta utilizada para administrar el BCP y los miembros que se han aadido a travs de invitaciones a los nombres de Skype o direccin de correo electrnico no se podrn utilizar con Skype para Asterisk por el momento.

Lo que puedes hacer con Skype para Asterisk Cuando complementas tu centralita Asterisk con Skype puedes hacer lo siguiente:

Hacer llamadas entre usuarios de Skype a telfonos fijos y mviles. Recibir llamadas de Skype. Habilitar llamadas mltiples y simultneas de Skype desde la misma cuenta de Skype. Transferir llamadas de Skype. Usar asistencia para DTMF (multifrecuencia bitonal) para llamadas salientes y entrantes. Leer los campos del perfil de usuario de Skype de llamadas entrantes. Recuperar el saldo del crdito de Skype de cuentas que iniciaron sesin en Asterisk. Establecer y recuperar el estado de conexin. Establecer la configuracin de privacidad. Usar los cdecs G.711 y G.729.

Instalacin 1. Adquirir la licencia del canal Skype. 2. Descarga de paquetes necesarios:


http://downloads.digium.com/pub/telephony/skypeforasterisk/asterisk-1.4/x8632/skypeforasterisk-1.4_1.0.6-x86_32.tar.gz http://downloads.digium.com/pub/register/x86-32/register

3. Instalar el chan_skype en Asterisk para ello descomprimiremos el paquete tar.gz:


tar xvzf skypeforasterisk-1.4_1.0.6-x86_32.tar.gz cd skypeforasterisk-1.4_1.0.6-x86_3 make && make install && make samples

376

4. Dar permisos de ejecucin a la aplicacin register y ejecutarla:


chmod a+x register ./register

[root@localhost skypeasterisk]# ./register Digium Product Registration - Version 3.0.4 Copyright (C) 2004-2007, Digium, Inc. Use the '-l' option to see license information for software included in this program. Please select a category 1 - Digium Products 2 - Cepstral Products 0 - Quit Your Choice: 1 You selected 1, Digium Products Please select a product 1 - Asterisk Business Edition 2 - Asterisk Business Edition C Expansion 3 - Asterisk For Smart Cube 4 - Asterisk For Smart Cube Expansion 5 - G.729 Codec 6 - High Performance Echo Can 7 - Skype For Asterisk 8 - Fax for Asterisk 9 - Free Fax for Asterisk 10 - Vestec Speech Engine 0 - Quit Your Choice: 7 You selected 7, Skype For Asterisk Please enter your Key-ID: S4A-YE76MXLEJW7W Product available to be registered. Do you want to register this key now(y/n) y

5. Con esto ya tendremos instalado Skype para Asterisk en Asterisk 1.4.26.2 y slo nos faltar cargar los dos mdulos: - res_skypeforasterisk.so Este mdulo contiene el motor de Skype, junto con varias librerias y otros componentes necesarios para hablar con el motor de Skype y administrar cuentas de usuario, las llamadas, etc. - chan_skype.so

377

Este mdulo es el controlador del canal Asterisk que ofrece los servicios de llamadas desde y hacia la red de Skype, utilizando laqs libreras proporcionadas por res_skypeforasterisk.so. Si su archivo modules.conf Asterisk contiene 'autoload=yes', estos mdulos sern cargados automticamente la prxima vez que se reinicie Asterisk. Si no, tendr que aadir las siguientes lneas a modules.conf:
load = res_skypeforasterisk.so load = chan_skype.so

Cargamos los mdulos:


*CLI> module load res_skypeforasterisk.so Loading Skype For Asterisk engine NOTICE[4957]: res_skypeforasterisk.c:17 load_module: Skype For Asterisk module, Copyright (C) 2008-2009 Digium, Inc. NOTICE[4957]: res_skypeforasterisk.c:18 load_module: This module is supplied under a commercial license granted by Digium, Inc. NOTICE[4957]: res_skypeforasterisk.c:19 load_module: Please see the full license text supplied by the accompanying NOTICE[4957]: res_skypeforasterisk.c:20 load_module: "register" utility, or ask for a copy from Digium. NOTICE[4957]: res_skypeforasterisk.c:23 load_module: This product includes software developed by the OpenSSL Project NOTICE[4957]: res_skypeforasterisk.c:24 load_module: for use in the OpenSSL Toolkit. (http://www.openssl.org/) NOTICE[4957]: res_skypeforasterisk.c:25 load_module: Copyright (C) 1998-2008 The OpenSSL Project Loaded res_skypeforasterisk.so => (Skype For Asterisk Engine) *CLI> module load chan_skype.so == Parsing '/etc/asterisk/chan_skype.conf': Found DEBUG[4957]: core.cpp:1285 sfa_startup: License directory set to: /var/lib/asterisk/licenses NOTICE[4957]: core.cpp:1122 skype_cp_handler: Found license 'S4A-YE76MXLEJW7W' providing 1 concurrent calls NOTICE[4957]: core.cpp:963 display_host: Skype For Asterisk Host-ID: 6c:cf:7a:1b:1a:f0:29:43:11:2d:06:8c:d9:65:76:4b:81:50:f3:ed NOTICE[4957]: core.cpp:1299 sfa_startup: Found a total of 1 Skype For Asterisk licenses DEBUG[4989]: core.cpp:1403 sfa_startup: starting skyhost as: skypeforasterisk -z -f /var/spool/asterisk/skype/data DEBUG[4989]: core.cpp:1405 sfa_startup: [Jan 11 13:37:51] DEBUG[4988]: core.cpp:1491 sfa_startup: skyhost environment is : HOME=/var/spool/asterisk/skype starting skypewatcher as: skypewatcher 4989 DEBUG[4987]: core.cpp:440 skyhost_watcher: got SkyHost Copyright (C) 2003-2008 Skype Technologies S.A. DEBUG[4987]: core.cpp:440 skyhost_watcher: got Proprietary and confidential, do not share this application. DEBUG[4987]: core.cpp:440 skyhost_watcher: got Ready to accept connections DEBUG[4987]: core.cpp:445 skyhost_watcher: skyhost is ready! == Registered channel type 'Skype' (Skype For Asterisk Channel Driver) == Manager registered action SkypeBuddies

378

== Manager registered action SkypeBuddy == Manager registered action SkypeAccountProperty == Manager registered action SkypeAddBuddy == Manager registered action SkypeRemoveBuddy == Manager registered action SkypeLicenseStatus == Manager registered action SkypeLicenseList == Registered custom function SKYPE_CALL_PROPERTY == Registered custom function SKYPE_ACCOUNT_PROPERTY == Registered custom function SKYPE_BUDDIES == Registered custom function SKYPE_BUDDY_FETCH Loaded chan_skype.so => (Skype For Asterisk Channel Driver)

6. Configurar la cuenta de Skype. Skype necesita que los usuarios que vayan a hacer uso de Skype para Asterisk , esten dados de alta en una cuenta Skype Business. Por lo que tendris que hacer login en https://secure.skype.com/business/ info/login con vuestra cuenta actual de Skype o bien si queris dar de alta otra podis darla en ese mismo momento usando el cliente de Skype. A continuacin pulsamos el botn de agregar persona:

379

Creamos una cuenta comercial:

7. Probamos la correcta instalacin del chan_skype: Comprobamos la versin de SFA:


*CLI> skype show version Skype For Asterisk Components: Channel Driver: 1.4_1.0.6 Library: 1.4_1.0.6

Comprobamos la configuracin general:


*CLI> skype show settings Skype For Asterisk Settings: engine_directory: /tmp data_directory: /var/spool/asterisk/skype defaultuser: bind_address: 0.0.0.0 bind_port: 0 rtp_address: 127.0.0.1 https_proxy: https_proxy_user: https_proxy_password: socks5_proxy: socks5_proxy_user: socks5_proxy_password: disable_tcpauto: no disable_udp: no

380

debug: no

Comprobamos si hemos activado la licencia correctamente:


*CLI> skype show licenses Skype For Asterisk Licensing Information ======================================== Total licensed channels: 1 Licenses Found: File: S4A-YE76MXLEJW7W.lic -- Key: S4A-YE76MXLEJW7W -- Expires: 2030-01-11 - Host-ID: 6c:cf:7a:1b:1a:f0:29:43:11:2d:06:8c:d9:65:76:4b:81:50:f3:ed -Channels: 1 (OK)

8. Configuramos el fichero chan_skype.conf situado en /etc/asterisk/:


[general] engine_directory=/usr/src/skypeengine default_user=davidea11 debug=yes bind_address=0.0.0.0 bind_port=0 [davidea11] secret=pkxarc11 context=incoming exten=7000 disallow=all allow=ulaw direction=both auth_policy=accept

Comprobamos tras reiniciar Asterisk que se han configurado bien los usuarios:
*CLI> skype show users Skype Users davidea11: Logged In

Para acceder a Asterisk desde cualquier cuenta Skype comunicaremos la cuenta de Skype con la que se ha creado en Skype Business de forma que las llamadas sern gratuitas. Para hacer las pruebas con SFA creamos una cuenta de Skype: davidin99. Configuramos el Dialplan de Asterisk (extensions.conf) para recibir las llamadas en el telfono de extensin 3000 y hacer llamadas a la cuenta de Skype creada:
[skype] include => acceso exten => 7000,1,Goto(acceso,3000,1) exten => 8000,1,Dial(Skype/davidin99,30,tT)

381

Hacemos una llamada desde la extensin 5000 a la cuenta de Skype davidin99: El log del CLI muestra lo siguiente:
-- Executing [8000@acceso:1] Dial("SIP/5000-09936608", "Skype/davidin99|30|tT") in new stack DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 NOTICE[29792]: core.cpp:2096 sfa_call_ring: calling create_control_socket for oid 32 DEBUG[29792]: core.cpp:265 create_control_socket: creating socket sfa-control-0x96a0f7800000020 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds -- Called davidin99 DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:790 queue_event: got control event type 4 with subclass 3. DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds -- Skype/davidea11-098e0218 is ringing DEBUG[29792]: core.cpp:1642 sfa_call_process: accepting socket connection from voice engine DEBUG[29792]: core.cpp:1615 process_ve_frame: received audio socket address 127.0.0.1:38065 DEBUG[29792]: core.cpp:1752 sfa_call_set_audio_socket_address: sending audio socket address 127.0.0.1:14568 DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:790 queue_event: got control event type 4 with subclass 4. DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds -- Skype/davidea11-098e0218 answered SIP/5000-09936608 DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds DEBUG[29792]: chan_skype.c:3433 unlink_client_call: channel 0x98e0218 NOTICE[29792]: core.cpp:2126 sfa_call_hangup: ending call DEBUG[29792]: chan_skype.c:3447 destroy_client_call: channel 0x98e0218 == Spawn extension (acceso, 8000, 1) exited non-zero on 'SIP/5000-09936608' DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: ACallMember.cpp:209 OnDelete: call member deleted DEBUG[26468]: ACall.cpp:71 OnDelete: call deleted DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds

382

En la cuenta de Skype se ve asi:

Llamamos desde la cuenta de Skype davidin99 a la cuenta creada en Skype Business davidea11 registrada en SFA: El log del CLI de Asterisk muestra:
-- Executing [7000@incoming:1] Goto("Skype/davidea11-b7d7e3c8", "acceso|3000|1") in new stack -- Goto (acceso,3000,1) -- Executing [3000@acceso:1] Macro("Skype/davidea11-b7d7e3c8", "acceso|3000") in new stack -- Executing [s@macro-acceso:1] Dial("Skype/davidea11-b7d7e3c8", "SIP/3000|30|Ttm") in new stack -- Called 3000 -- Started music on hold, class 'default', on Skype/davidea11-b7d7e3c8 -- SIP/3000-098ee660 is ringing -- SIP/3000-098ee660 answered Skype/davidea11-b7d7e3c8 -- Stopped music on hold on Skype/davidea11-b7d7e3c8 DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds DEBUG[28850]: core.cpp:1642 sfa_call_process: accepting socket connection from voice engine DEBUG[28850]: core.cpp:1615 process_ve_frame: received audio socket address 127.0.0.1:57238 DEBUG[28850]: core.cpp:1752 sfa_call_set_audio_socket_address: sending audio socket address 127.0.0.1:14690 DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds

383

DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:790 queue_event: got control event type 4 with subclass 4. DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds == Spawn extension (macro-acceso, s, 1) exited non-zero on 'Skype/davidea11-b7d7e3c8' in macro 'acceso' == Spawn extension (acceso, 3000, 1) exited non-zero on 'Skype/davidea11-b7d7e3c8' DEBUG[28850]: chan_skype.c:3433 unlink_client_call: channel 0xb7d7e3c8 NOTICE[28850]: core.cpp:2126 sfa_call_hangup: ending call DEBUG[28850]: chan_skype.c:3447 destroy_client_call: channel 0xb7d7e3c8 DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds DEBUG[26468]: chan_skype.c:3350 do_monitor: poll returned 1 DEBUG[26468]: chan_skype.c:3340 do_monitor: entering poll for 2 fds

384

Nagios Qu es Nagios? Nagios es un software de monitorizacin de redes. Con Nagios podremos saber en cada momento, que mquinas y dispositivos de la red estn encendidas, cuales estn apagadas, cuales estn fallando, cuales funcionan correctamente, que servicios van bien y cules van mal, en definitiva, sirve para mirar el estado casi en tiempo real de una red, sea grande o pequea. Originalmente se llamaba Netsaint, fue creado y es mantenido actualmente por Ethan Galstad, junto con un grupo de desarrolladores de Software que mantienen tambin varios plugins. Nagios fue diseado para ser ejecutado en Linux, pero tambin se ejecuta bien en variantes de Unix. Nagios est licenciada bajo la GNU (General Public License Version 2 ) publicada por la Free Software Fundation. Qu podemos realizar con Nagios?
-

Monitoreo de servicios de red (SMTP, POP3, HTTP, NTTP, ICMP, SNMP). Monitoreo de los recursos de un host (carga del procesador, uso de los discos, logs del sistema) en varios sistemas operativos, incluso Microsoft Windows con el plugin NRPE_NT. Monitoreo remoto, a travs de tneles SSL cifrados o SSH. Diseo simple de plugins, que permiten a los usuarios desarrollar sus propios chequeos de servicios dependiendo de sus necesidades, usando sus herramientas preferidas (Bash, C++, Perl, Ruby, Python, PHP, C#, etc.). Chequeo de servicios paralizados. Posibilidad de definir la jerarqua de la red, permitiendo distinguir entre host cados y host inaccesibles. Notificaciones a los contactos cuando ocurren problemas en servicios o hosts, as como cuando son resueltos (via email, pager, SMS, o cualquier mtodo definido por el usuario junto con su correspondiente plugin). Posibilidad de definir manejadores de eventos que ejecuten al ocurrir un evento de un servicio o host para resoluciones de problemas proactivas. Rotacin automtica del archive de log. Soporte para implementar host de monitores redundantes. Interfaz web opcional, para observar el estado de la red actual, notificaciones, historial de problemas, archivos de logs, etc.

385

Descarga de Nagios
http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.2.0/nagios3.2.0.tar.gz/download http://sourceforge.net/projects/nagiosplug/files/nagiosplug/1.4.14/nagios-plugins1.4.14.tar.gz/download http://sourceforge.net/projects/nagios/files/nrpe-2.x/nrpe-2.12/nrpe-2.12.tar.gz/download http://sourceforge.net/projects/nagios/files/nsca-2.x/nsca-2.7.2/nsca-2.7.2.tar.gz/download http://sourceforge.net/projects/nagios/files/ndoutils-1.x/ndoutils-1.4b9/ndoutils1.4b9.tar.gz/download

Instalacin de Nagios Descomprimimos el tar:


tar xvf nagios.3.2.0.tar.gz

Creamos los usuarios y grupos para Nagios:


useradd nagios groupadd nagios groupadd nagcmd

Nos ubicamos dentro de la carpeta Nagios, y procedemos a compilarlo:


./configure --with-command-group=nagcmd make all make install make-webconf make install-init (no necesario) make install-config (no necesario) make install-commandmode (no necesario)

Ahora vamos a compilar los plugins para Nagios (descomprirlo dentro de la carpeta donde se encuentra Nagios):
./configure --with-nagios-user=nagios --with-nagios-group=nagios make make install

Ahora agregaremos el usuario nagios para la autenticacin va web:


htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Reiniciamos servicios e iniciamos otros:


service httpd restart service nagios start

386

Accedemos a Nagios:
http://localhost/nagios

Configuracin de Nagios Configurando nagios.cfg Por defecto no hace falta tocar este fichero, tal y como viene de "serie" funciona perfectamente. Posteriormente, debers cambiar cosas si quieres aprovechar al mximo el poder de Nagios. Deberemos asegurarnos de tener bien configurados las lneas referentes a los ficheros principales de configuracin:
# LOG FILE log_file=/usr/local/nagios/var/nagios.log # OBJECT CONFIGURATION FILE(S) cfg_file=/usr/local/nagios/etc/objects/commands.cfg cfg_file=/usr/local/nagios/etc/objects/contacts.cfg cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg cfg_file=/usr/local/nagios/etc/objects/templates.cfg .....

Configurando cgi.cfg Configuramos las siguientes lneas para que "nagiosadmin" tenga acceso total a Nagios. No queremos que nadie ms tenga acceso a l.
# MAIN CONFIGURATION FILE main_config_file=/usr/local/nagios/etc/nagios.cfg # PHYSICAL HTML PATH physical_html_path=/usr/local/nagios/share # URL HTML PATH url_html_path=/nagios # SYSTEM/PROCESS INFORMATION ACCESS authorized_for_system_information=nagiosadmin # CONFIGURATION INFORMATION ACCESS authorized_for_configuration_information=nagiosadmin # SYSTEM/PROCESS COMMAND ACCESS authorized_for_system_commands=nagiosadmin # GLOBAL HOST/SERVICE VIEW ACCESS authorized_for_all_services=nagiosadmin authorized_for_all_hosts=nagiosadmin

387

# GLOBAL HOST/SERVICE COMMAND ACCESS authorized_for_all_service_commands=nagiosadmin authorized_for_all_host_commands=nagiosadmin ......

Configurando localhost.cfg En el fichero hosts.cfg deberemos incluir todas las mquinas que queremos monitorizar. Cada mquina debe tener al menos un servicio.Puede funcionar tambin sin configurarle ningn servicio, pero no obtendramos un resultado "profesional", lo nico que haramos sera aadir la maquina o dispositivo al MAPA de RED.
define host{ use linux-server ; Name of host template to use ; This host definition will inherit all variables that are defined ; in (or inherited by) the linux-server host template definition.

host_name localhost alias localhost address 127.0.0.1 }

Cada host, debe pertenecer a un hostgroups.


define hostgroup{ hostgroup_name linux-servers ; The name of the hostgroup alias Linux Servers ; Long name of the group members localhost ; Comma separated list of hosts that belong to this group }

Ms adelante veremos como se configuran los servicios de monitorizacin de Asterisk. Configurando contacts.cfg Los contactos, son las personas a las que se les notificar de las posibles incidencias de las mquinas de la Red. En nuestro caso, como solo somos un nico administrador, nagios y se le notificar mediante un e-mail.
define contact{ contact_name use alias email } nagiosadmin generic-contact David davidin073@gmail.com

Cada contacto, debe pertenecer a un grupo de contacto.


define contactgroup{ contactgroup_name admins alias Nagios Administrators members nagiosadmin }

388

Configurando commands.cfg Este es posiblemente el fichero de configuracin ms importante, ya que en l, vamos a definir absolutamente todos los servicios que queremos monitorizar.En nuestro caso slo sern servicios de Asterisk, ms adelante veremos dicha configuracin. Verificando la configuracin Una vez configurados todos los ficheros de Nagios, hay que verificar la configuracin:
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios/nagios.cfg

Si todo sale bien, deberemos obtener un total de CERO errores. Puede que tengamos algn warning, pero funcionar . Arrancamos el demonio
# service nagios restart

Configuracin para entrar a Nagios via Web:


ln -s /usr/share/nagios/htdocs/ /var/www/nagios/

Monitorizando Asterisk Lo que nos interesa conseguir con la monitorizacin de Asterisk con Nagios es lo siguiente: Saber si Asterisk esta arrancado o no Estado de la tarjeta Estado del proveedor IP Gizmo 5 Estado del Chan_sebi Estado del Chan_skype Comprobar si hay usuarios SIP registrados Comprobar si hay usuarios IAX registrados La configuracin para conseguir esto ser la configuracin de cada comando, de cada servicio y de los scripts Perl que obtendrn la informacin a travs de comandos CLI. Como ejemplo la configuracin de la obtencin del estado del chan_skype es la siguiente: commands.cfg
define command{ command_name check_asterisk_skype command_line /usr/src/SCRIPTS/skype.pl }

389

localhost.cfg
define service{ use local-service host_name localhost service_description Chan_skype check_command check_asterisk_skype }

skype.pl
#!/usr/bin/perl -w use Getopt::Std; use strict; my $asterisk_bin="/usr/bin/sudo /usr/sbin/asterisk"; my $asterisk_option="-rx"; my $asterisk_skype="skype show version"; my $return; my $cmd = qq($asterisk_bin $asterisk_option "$asterisk_skype" ); foreach (`($cmd)`) { if (/Skype\ For\ Asterisk/) { $return = 0; } } if($return==0){ print(" Chan_skype activado. \n"); exit($return); } else{ print(" Chan_skype desconectado. \n "); exit(1); }

Tras la configuracin en la interfaz de Nagios podemos ver lo siguiente: Despues de configurar el archivo contacts.cfg:

390

Despues de configurar el archivo contactgroups.cfg:

Despues de configurar los archivos localhost.cfg y commands.cfg:

Teniendo Asterisk en marcha y sin conectar el chan_sebi veremos esto:

Si Asterisk no est arrancado lo que veremos ser:

391

392

Actualizacin de firmware del Telfono Cisco 7941 de SCCP a SIP Tenemos un Telfono Cisco 7941 de la centralita actual, uno de los requisitos para la implantacin de una centralita nueva, en este caso Asterisk, es el aprovechamiento de Hardware. Teniendo en cuenta el coste de los telfonos Cisco por la serie de funcionalidades que traen el traspaso del protocolo Skynny Client Control Protocol (SCCP) al SIP es lo ms adecuado para poder usarlos.

Para hacer este cambio de protocolo hay que tener en cuenta la configuracin del telfono que se centra en un fichero XML llamado SEP<MAC-del-Telfono>.conf.xml. De este fichero se realizar el registro con la centralita por eso es importante. El contenido en nuestro caso es el siguiente:
<device xsi:type="axl:XIPPhone" ctiid="1566023366"> <deviceProtocol>SIP</deviceProtocol> <sshUserId>5000</sshUserId> <sshPassword>1234</sshPassword> <devicePool> <dateTimeSetting> <dateTemplate>D/M/Y</dateTemplate> <timeZone>W. Europe Standard/Daylight Time</timeZone> <ntps> <ntp> <name>192.168.1.200</name> <ntpMode>Unicast</ntpMode> </ntp> </ntps> </dateTimeSetting> <callManagerGroup> <members> <member priority="0"> <callManager> <ports> <ethernetPhonePort>2000</ethernetPhonePort> <sipPort>5060</sipPort> <securedSipPort>5061</securedSipPort> </ports> <processNodeName>192.168.1.200</processNodeName> </callManager> </member> </members>

393

</callManagerGroup> </devicePool> <commonProfile> <phonePassword>1234</phonePassword> <backgroundImageAccess>true</backgroundImageAccess> <callLogBlfEnabled>2</callLogBlfEnabled> </commonProfile> <vendorConfig> <disableSpeaker>false</disableSpeaker> <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset> <pcPort>0</pcPort> <settingsAccess>1</settingsAccess> <garp>1</garp> <voiceVlanAccess>0</voiceVlanAccess> <videoCapability>0</videoCapability> <autoSelectLineEnable>0</autoSelectLineEnable> <webAccess>1</webAccess> <spanToPCPort>1</spanToPCPort> <loggingDisplay>1</loggingDisplay> <loadServer></loadServer> </vendorConfig> <userLocale> <name>Spanish</name> <uid>1</uid> <langCode>es</langCode> <version>4.1(3)</version> <winCharSet>iso-8859-1</winCharSet> </userLocale> <networkLocale>Spain</networkLocale> <networkLocaleInfo> <name>Spain</name> <uid>64</uid> <version>4.1(3)</version> </networkLocaleInfo> <deviceSecurityMode>1</deviceSecurityMode> <sipProfile> <sipProxies> <registerWithProxy>true</registerWithProxy> </sipProxies> <enableVad>false</enableVad> <preferredCodec>g711ulaw</preferredCodec> <natEnabled></natEnabled> <phoneLabel>Usuario 5000</phoneLabel> <stutterMsgWaiting>1</stutterMsgWaiting> <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy> <callStats>false</callStats> <silentPeriodBetweenCallWaitingBursts>10 </silentPeriodBetweenCallWaitingBursts> <disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig> <callHoldRingback>2</callHoldRingback> <localCfwdEnable>true</localCfwdEnable> <semiAttendedTransfer>true</semiAttendedTransfer> <anonymousCallBlock>2</anonymousCallBlock> <callerIdBlocking>2</callerIdBlocking> <dndControl>1</dndControl> <remoteCcEnable>true</remoteCcEnable> <startMediaPort>10000</startMediaPort>

394

<stopMediaPort>20000</stopMediaPort> <sipLines> <line button="1"> <featureID>9</featureID> <featureLabel>Usuario 5000</featureLabel> <proxy>192.168.1.200</proxy> <name>5000</name> <displayName>Valentin</displayName> <authName>5000</authName> <authPassword>1234</authPassword> <messagesNumber>50008</messagesNumber> </line> </sipLines> <dialTemplate>dialplan.xml</dialTemplate> </sipProfile> <loadInformation>SIP41.8-4-2S</loadInformation> <versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp> <directoryURL></directoryURL> <servicesURL></servicesURL> </device>

Tambin es necesaria la configuracin de otro fichero XML llamado dialplan.xml. En este archivo se especifica el tiempo de espera a llamar que tendrn los diferentes patrones. El contenido de este fichero es el siguiente:
<DIALTEMPLATE> <TEMPLATE MATCH="3..." TIMEOUT="0"/> <TEMPLATE MATCH="9........" TIMEOUT="0"/> <TEMPLATE MATCH="6........" TIMEOUT="0"/> <TEMPLATE MATCH="*" TIMEOUT="4"/> </DIALTEMPLATE>

Todos los nmeros que empiecen por 3 y tengan 4 dgitos. Todos los nmeros que empiecen por 9 y tengan 9 dgitos. Todos los nmeros que empiecen por 6 y tengan 9 dgitos. El resto, espera 4 segundos a marcar, a menos que le des al botn de llamada. Lo siguiente ser la actualizacin del firmware del telfono a un firmware SIP para eso debemos seguir los siguientes pasos: 1) Debemos tener instalado un servidor TFTP, al que los telfonos se conectarn para descargarse la versin ms moderna del firmware. En la configuracin del servidor DHCP debe estar la IP del servidor TFTP:
subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.3; option subnet-mask 255.255.255.0; range 192.168.1.201 192.168.1.203; default-lease-time 86400; max-lease-time 608400; option domain-name-servers 194.179.1.100; option tftp-server-name "192.168.1.210"; }

395

2) Obtener el firmware adecuado para la actualizacin. La versin de firmware que utilizaremos es la jar41sip.8-4-1-23 y consta de diversos archivos entre ellos uno llamado term41.default donde tendremos que nombrar los 5 archivos .sbn que se instalarn, concretamente son:
apps41.8-4-1-23 cnu41.8-4-1-23 cvm41sip.8-4-1-23 dsp41.8-4-1-23 jar41sip.8-4-1-23

Estos archivos componen la imagen que se instalar el telfono cuando actualice su firmware. Ahora ya tenemos listos todos los archivos que necesitaremos para actualizar el firmware del telefono, por lo que pasaremos a formatear el telfono. 3) Metemos los ficheros del firmware y los dos anteriormente configurados en la carpeta del servidor TFTP, por defecto es /tftpboot/. 4) Si queremos restaurar el telfono a los valores de fabrica tenemos que encender el telfono con la tecla # pulsada, en unos segundos el telfono pasar a modo actualizacin, hecho que veremos por un parpadeo alterno de los dos leds superiores del telfono (los de lnea). El parpadeo indica que el telfono espera la secuencia de reseteo para llevarlo a cabo. Esta secuencia es 123456789*0#. Una vez hayamos pulsado esta combinacin debemos esperar, veremos como el telfono se resetea, quedndose con sus valores de fbrica. Luego el solo ira a buscar su archivo de actualizacin term41.default y se descargar la imagen que este indica mediante TFTP. Una vez se haya terminado este proceso, el telfono se reiniciar con el nuevo firmware y buscara su SEP<MAC-del-telefono>.conf.xml. Si tras la descarga y posterior instalacin del firmware en la pantalla del telfono aparece la palabra UNPROVISIONED significa que no se ha registrado el telfono contra la centralita Asterisk, la parte del fichero de configuracin del telfono que no est bien configurada es la de los botones de lnea, el featureID es muy importante:
<line button="1"> <featureID>9</featureID> <featureLabel>Usuario 5000</featureLabel> <proxy>192.168.1.200</proxy> <name>5000</name> <displayName>Valentin</displayName> <authName>5000</authName>

396

<authPassword>1234</authPassword> <messagesNumber>50008</messagesNumber> </line>

Tras estos pasos vamos a comprobar que funcionan las llamadas salientes y entrantes al telfono a travs de unas pruebas: La configuracin de los archivos sip.conf y voicemail.conf para las extensiones del telfono es la misma que para otros telfonos, la configuracin del archivo extensions.conf es:
[cisco] include => acceso exten => 5000,1,Dial(SIP/5000) exten => 5000,n,Hangup()

Comprobamos que se ha registrado correctamente:


localhost*CLI> sip show peers Name/username Host Dyn Nat ACL Port Status 5000/5000 192.168.1.202 D 5060 Unmonitored

Llamada de un telfono IP ALL Net 7960 a Cisco 7941 reconvertido a SIP:


-- Executing [5000@acceso:1] Dial("SIP/2003-08e0ffb0", "SIP/5000") in new stack -- Called 5000 -- SIP/5000-08e85c98 is ringing -- SIP/5000-08e85c98 answered SIP/2003-08e0ffb0 -- Native bridging SIP/2003-08e0ffb0 and SIP/5000-08e85c98 == Spawn extension (acceso, 5000, 1) exited non-zero on 'SIP/2003-08e0ffb0'

Llamada de telfono IP Cisco 7941 reconvertido a SIP a Sipura 841:


-- Executing [4000@acceso:1] Macro("SIP/5000-08e0ffb0", "acceso|4000") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/5000-08e0ffb0", "SIP/4000|30|Ttm") in new stack -- Called 4000 -- Started music on hold, class 'default', on SIP/5000-08e0ffb0 -- SIP/4000-08e85c98 is ringing -- SIP/4000-08e85c98 answered SIP/5000-08e0ffb0 -- Stopped music on hold on SIP/5000-08e0ffb0 == Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/5000-08e0ffb0' in macro 'acceso' == Spawn extension (acceso, 4000, 1) exited non-zero on 'SIP/5000-08e0ffb0'

397

Actualizacin de firmware del Telfono Cisco 7905 de SCCP a SIP Esta vez el telfono es un Cisco 7905, de gama ms baja que el anterior, pero igual de importante su aprovechamiento en la nueva centralita. Tras la configuracin detallada del proceso de cambio de firmware del telfono anterior evitaremos la repeticin pasando directamente, tras obtener el firmware SIP para este modelo, a la configuracin de los ficheros que introduciremos en la carpeta del servidor TFTP /tftp/: CP7905080001SIP060412A.sbin CP7905080001SIP060412A.zup ld00127fae8c7c.cfg SEP00127FAE8C7C.cnf XMLDefault.cnf

Los dos ltimos son los ficheros de configuracin, a continuacin vemos el cdigo de estos dos ficheros. SEP0012FAE8C7C.cnf.xml: (Fichero por telfono)
<device xsi:type="axl:XIPPhone" ctiid="1566023366"> <deviceProtocol>SIP</deviceProtocol> <sshUserId>3000</sshUserId> <sshPassword>1234</sshPassword> <devicePool> <dateTimeSetting> <dateTemplate>D/M/Y</dateTemplate> <timeZone>W. Europe Standard/Daylight Time</timeZone> <ntps> <ntp> <name>192.168.1.200</name> <ntpMode>Unicast</ntpMode> </ntp> </ntps> </dateTimeSetting> <callManagerGroup> <members> <member priority="0"> <callManager> <ports> <ethernetPhonePort>2000</ethernetPhonePort> <sipPort>5060</sipPort> <securedSipPort>5061</securedSipPort> </ports> <processNodeName>192.168.1.200</processNodeName> </callManager> </member> </members> </callManagerGroup> </devicePool>

398

<commonProfile> <phonePassword>1234</phonePassword> <backgroundImageAccess>true</backgroundImageAccess> <callLogBlfEnabled>2</callLogBlfEnabled> </commonProfile> <vendorConfig> <disableSpeaker>false</disableSpeaker> <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset> <pcPort>0</pcPort> <settingsAccess>1</settingsAccess> <garp>1</garp> <voiceVlanAccess>0</voiceVlanAccess> <videoCapability>0</videoCapability> <autoSelectLineEnable>0</autoSelectLineEnable> <webAccess>1</webAccess> <spanToPCPort>1</spanToPCPort> <loggingDisplay>1</loggingDisplay> <loadServer></loadServer> </vendorConfig> <loadInformation>CP7905080001SIP060412A</loadInformation> <versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp> <directoryURL></directoryURL> <servicesURL></servicesURL> </device>

XMLDefault.cnf.xml: (Fichero para varios telfonos)


<Default> <callManagerGroup> <members> <member priority="0"> <callManager> <ports> <ethernetPhonePort>2000</ethernetPhonePort> </ports> <processNodeName>192.168.1.200</processNodeName> </callManager> </member> </members> </callManagerGroup> <loadInformation20000 model="IP Phone 7905"> CP7905080001SIP060412A </loadInformation20000> </Default>

Encendemos el telfono y tras obtener la IP del servidor DHCP se descargar la nueva versin del firmware del servidor TFTP y se actualizar. El cambio de versin de firmware es el siguiente: CP7905080001SCCP061117A CP7905080001SIP060412A

399

Lo siguiente ser configurar la extensin que tendr el telfono desde la configuracin SIP del mismo. Para poder actualizar los valores que haiga por defecto se deben pulsar las teclas **#. Comprobamos el registro de la extensin en Asterisk:
localhost*CLI> sip show peers 3000/3000 192.168.1.204 D 5060 Unmonitored

Llamamos del Cisco 7941 (5000) a este telfono (3000):


-- Executing [3000@acceso:1] Macro("SIP/5000-09f1fcf8", "acceso|3000") in new stack -- Executing [s@macro-acceso:1] Dial("SIP/5000-09f1fcf8", "SIP/3000|30|Ttm") in new stack -- Called 3000 -- Started music on hold, class 'default', on SIP/5000-09f1fcf8 -- SIP/3000-09f3c250 is ringing -- SIP/3000-09f3c250 answered SIP/5000-09f1fcf8 -- Stopped music on hold on SIP/5000-09f1fcf8 == Spawn extension (macro-acceso, s, 1) exited non-zero on 'SIP/5000-09f1fcf8' in macro 'acceso' == Spawn extension (acceso, 3000, 1) exited non-zero on 'SIP/5000-09f1fcf8'

Llamamos de este telfono (3000) al Cisco 7941 (5000):


-- Executing [5000@acceso:1] Dial("SIP/3000-09f35eb0", "SIP/5000") in new stack -- Called 5000 -- SIP/5000-09f47448 is ringing -- SIP/5000-09f47448 answered SIP/3000-09f35eb0 -- Native bridging SIP/3000-09f35eb0 and SIP/5000-09f47448 == Spawn extension (acceso, 5000, 1) exited non-zero on 'SIP/3000-09f35eb0'

400

Descripcin breve de la centralita actual: Cisco y mejoras realizadas en la nueva.


Esquema Conceptual de la centralita actual: Cisco

401

Mejoras de la nueva centralita Asterisk: Agenda de clientes La empresa requiere una agenda de contactos con posibilidad de aadir a ms de 100 clientes, en la actual centralita el Call Manager posee una agenda de clientes limitada. La centralita Asterisk soluciona esto a travs de dos aplicaciones: FOP 2 que posee una agenda de contactos de forma que cuando te llaman se ve la etiqueta de dicho cliente, y la agenda creada para la clasificacin de los clientes segn mantenimiento, YetBook, dndoles de esta forma una atencin especial en caso de ser clientes VIP. Usuarios o extensiones remotas Para posibilitar el teletrabajo y la conexin con la oficina de Elche son necesarias las extensiones remotas, algo que en la central actual supondra la compra de Softphones Cisco o Telefonos IP, mientras que en la central Asterisk con cualquier Softphone con posibilidad de extensiones IAX el problema estara solucionado. Gestin de horarios y festivos con calendarios Algo de lo que no se dispone en la actualidad es la gestin y posterior redireccin de llamadas en das festivos o en horarios no laborales por ejemplo a la oficina de Elche en caso de ser festivo slo en el Pas Vasco o la redireccin en horario no laboral de clientes VIP. Conferencias En la central actual no es posible la realizacin de conferencias mientras que con Asterisk la configuracin del fichero meetme.conf soluciona este problema. Sistema de Colas Por el mal funcionamiento del sistema de colas de la central Cisco no se pudo implantar un IVR, problema solucionado de forma sencilla en la centralita Asterisk con la configuracin a medida de las colas en el fichero queues.conf, pudiendo adems priorizar la posicin de entrada a las colas en funcin del contrato de mantenimiento. Grabaciones por defecto Hay una mayor cantidad de grabaciones castellanizadas en Asterisk que en las centralitas Cisco lo que nos evitar la realizacin de bastantes grabaciones. Reporting de llamadas y estadsticas de Colas Otras funcionalidades necesarias y muy requeridas por el Dpto Contable de la empresa, son la realizacin de un listado detallado de llamadas y la obtencin de estadsticas de las colas como la duracin de las llamadas de todo el da o que agente atendi a un
402

mayor nmero de llamadas. Estas funcionalidades no son satisfechas por la centralita actual y por el contrario en la central Asterisk sern solucionadas con la integracin con las aplicaciones Asternic Call Center Stats y Asternic CDR Reports. Implantacin en la empresa Esquema Conceptual de la centralita para Yet Informtica S.L.

403

Tipo de Implantacin y Anlisis de Riesgos La implantacin de la centralita en la empresa, por su reducido tamao, ser por sustitucin, teniendo en cuenta que con las pruebas realizadas en el Demo, una formacin adecuada al personal, con una serie de clases prcticas explicando las nuevas funcionalidades, y habiendo hecho un estudio sobre el funcionamiento de la centralita vieja, modificando ligeramente, si as fuera el caso, la configuracin de la nueva para que el cambio fuese lo menos brusco posible los problemas pequeos problemas que se pudieran llegar a dar son: Problemas de Funcionamiento por fallo de configuracin: Posible por falta del trato en la configuracin de algn detalle del funcionamiento requerido. Problemas de aprovisionamiento del personal: Posible por la falta de fluidez en el manejo de las nuevas aplicaciones integradas con la centralita o las nuevas funcionalidades. Ambos tipos de problemas son sencillos de detectar y solucionar con un simple periodo de prueba de funcionamiento y correccin de errores. Hardware y Software necesario para la implantacin de la centralita:

Recurso Hardware Cisco 7941

Descripcin

Precio

Unidades

Suma

Telfono IP (SCCP) Cargador PA100 Suministrador de energa elctrica.

163,85

20 ** 20

3.277,00

Cargador Cisco UPS

12,95

259,00

250,00

500,00

4.036,00
Software Licencia FOP 2 Licencia Call Center Stats Licencia CDR Reports Licencia 27,83 1 27,83

Licencia

347,87

347,87

Licencia

00,00

00,00

404

Licencia Verbio

Licencia *

375,70

Concepto PRESUPUESTO
Hw de Implantacin Sw de Implantacin

Importe ()
1.847,28

4.036,00 375,70 6.258,98

PRESUPUESTO DE IMPLANTACIN

* - 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 llamada (en segundos).

AbsoluteTimeout(length)

AddQueueMember(queue [,interface[,penalty]])

Aade a una Cola de Llamadas la extensin desde la que se llama, o el agente o extensin determinada por el parmetro Interface. Adems es posible "penalizar" la extensin con un nivel de prioridad.

ADSIProg(script) (script=telcordia-1.adsi) AgentCallbackLogin ([AgentNum][,[options][exten]])

Script con informacin que se pasa a la pantalla del terminal ADSI.

Loguea como Agente del sistema. La extensin recibe las llamadas del Agente especificado.

AgentLogin ([AgentNum][,options])

Loguea como Agente del sistema, en modo exclusivo. Es decir, el telfono siempre est activo y escuchar un tono de beep cuando se le asigne una llamada.

AgentMonitorOutgoing ([options])

Muestra el Identificador del Agente que realiza una llamada usar con AgentCallbackLogin.

AGI(program[,arguments])

Ejecuta un script o programa creado por el usuario.

AlarmReceiver()

Recepcin de Seal de Alarma desde un dispositivo especial.

409

AMD()

Intenta detectar un contestador automtico en el extremo remoto de una llamada.

Answer()

Descuelga inmediatamente.

AppendCDRUserField(value)

Aade el valor especificado en el campo User del registro de la llamada en el CDR.

Authenticate (password[,options])

Pide al interlocutor que introduzca una clave vlida para continuar.

BackGround (filename1[&filename2...] [,options[,language]])

Reproduce una meloda o mensaje de audio mientras se espera la marcacin de las teclas.

BackgroundDetect(filename)

Reproduce una meloda o un mensaje mientras intenta detectar un digito que corresponda con una extension.

Busy([timeout])

Establece el canal como "ocupado".

Callingpres(presentation)

Cambia la representacin del CID en una llamada externa.

ChangeMonitor(filename_base)

Cambia el nombre del archivo de control de un canal.

ChanIsAvail (technology1/resource1[& technology2/resource2...] [,option])

Indica si el canal especificado est disponible.

ChannelRedirect (channel,[context,] extension, priority)

Redirecciones de un canal a otra extensin y prioridad.

410

ChanSpy([channelprefix [,options]])

Permite la escucha en un canal.

CheckGroup(max[category])

Controla que no se desborda el tope de las llamadas en el grupo activo (SetGroup).

Congestion([timeout])

Reproduce el sonido de "Congestion en la lnea" hasta que finalice la llamada o expire el valor de Timeout.

ContinueWhile()

Vuelve al inicio de un bucle while.

ControlPlayback(filename)

Reproduce un archivo, y se controla con algunas teclas su reproduccin siempre que no coincida con una extensin.

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

Dice la hora actual.

DBdel(family/key)

Elimina un dato de la base de datos interna, la cual se organiza en Familias de datos, y datos con valores dentro de la familia. De esta manera, para acceder a una variable, hay que especificar su Familia y el Valor determinado.

DBdeltree(family/keytree)

Elimina una Familia de datos de la base de datos interna. A veces es necesario indicar una clave para realizar esta operacin.

DBget(varname=family/key)

Obtiene el valor de un campo de la base de datos interna, especificado por la familia y el nombre del campo, y lo almacena en la variable especificada.

DBput(family/key=value)

Inserta el valor especificado, dentro de un campo de la base de datos interna, especificado por la familia y el nombre del campo.

411

DeadAGI(program,args)

Ejecuta un script o programa creado por el usuario, al colgar la llamada en curso.

Dial (username /extension, ring-timeout,flags)

Conecta los canales.

DigitTimeout(seconds)

Nmero de segundos vlidos entre una y otra pulsacin de los dgitos.

Dictate([<filename>])

Mquina de dictado virtual

Directory(vm-context [,dial-context[,options]])

Accede a un servicio de directorio, apoyado en la informacin almacenada para la gestin de un contexto de Voicemail, en este caso el Apellido y Nombre de los usuarios. Con ello, se consigue que un usuario pueda acceder a la extensin "escribiendo el nombre" del usuario de la extensin a quien llama, de manera similar a como se dan de alta los nombres en una agenda de un mvil. SOLO FUNCIONA con aquellos usuarios que tengan activado el buzn de voz.

DISA(password[,context[,callerid [,mailbox[@vmcontext]]]])

Acceso directo al sistema permite a personas que llaman fuera de entrar en el sistema y les proporciona un tono de marcado interno.

DumpChan ([min_verbose_level])

Muestra informacin sobre el canal de llamada en la consola.

DUNDiLookup (number[,context[,options]])

Busca un nmero de telfono con DUNDi.

EAGI()

Ejecuta un script o programa creado por el usuario, con la particularidad de que EAGI permite controlar el flujo de audio.

412

Echo()

Permite escuchar el eco de lo que se est hablando.

EndWhile()

Fin de un bucle while Establece el valor de la variable ENUM de acuerdo a la extension pasada.

EnumLookup(number)

Eval (newvar=string)

Evala una variable y se asigna a otra nueva. Formato: Nueva Variable = Algo (que puede ser otra variable representada por ${Variable})

Exec (variable (arguments))

Ejecuta una aplicacin de las de esta lista, cuando es invocada, de tal manera que no est establecida en el Dialplan de manera fija.

ExecIf (expression,application, arguments)

Ejecuta una aplicacin de Asterisk en condiciones especficas.

ExecIfTime (times|daysofweek |daysofmonth|months? application [,arguments])

Ejecuta una aplicacin basada en la hora actual.

ExitWhile()

Sale de un bucle while, con independencia de si su condicin se ha cumplido.

ExtenSpy (extension[@context][,options])

Escuchar en un canal unido a una extensin especfica.

ExternalIVR (shell-command [,arg1[,arg2[,...]]])

Inicio de una aplicacin IVR externa.

Festival (text[,intkeys])

Reproduce una cadena de texto usando el software Festival.

413

Flash()

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

FollowMe (followMeID,options)

Aplicacin Find-Me/Follow-Me.

ForkCDR()

Inserta un nuevo Registro en la tabla CDR contando a partir de este instante el temporizador.

GetCPEID()

Obtiene de telfonos ADSI la informacin CPE ID, para configurar al canal zaptel adecuadamente en operaciones "on-hook".

GetGroupCount ([group][@category])

Obtiene el nmero de llamadas al grupo de llamadas en un momento dado. El valor obtenido actualiza la variable GROUPCOUNT.

Gosub (named_priority)

Salta a la prioridad especificada, extensin y contexto, y permite regresar.

GosubIf (condition?labeliftrue: labeliffalse) Goto ([[context,]extension,]priority)

Salta a la prioridad determinada si una condicin se cumple y permite regresar.

Salta a una prioridad especificada, extensin y contexto.

GotoIf (condition?label1:label2)

Salta a una prioridad especificada, extensin y contexto, si se cumple una condicin.

GotoIfTime (times,days_of_week, days_of_month,months?label)

Salta a la prioridad indicada si se cumple la condicin de tiempo.

414

Hangup()

Cuelga inmediatamente.

HasNewVoicemail (vmbox[@context][:folder] [,varname])

Esta aplicacin permite determinar si el usuario del buzn tiene mensajes almacenados. Si no existen mensajes, el flujo de la llamada salta a la regla siguiente; mientras que el flujo de la llamada se desva a la regla con el ndice n+101 si existen mensajes en el buzn especificado.

IAX2Provision ([template])

Dispone de un dispositivo de IAX y llama, utilizando opcionalmente la plantilla especificada.

ImportVar (newvar=channel,variable)

Establece una variable con el contenido de una variable del canal de otro canal.

Log (level,message)

Enva un mensaje especificado al nivel de registro especificado.

LookupBlacklist ([options])

Mira si el CallID de la llamada est dentro de la lista negra de llamantes. Si est, salta a la regla n+101.

LookupCIDName()

Mira si el CallID de la llamada est dentro de la lista "cidname". Si est, establece la variable CIDNAME al valor de la lista.

Macro (macroname,arg1,arg2...)

Ejecuta una macro previamente definida.

MacroExclusive (macroname[,arg1[,arg2[,...]]])

Ejecuta una macro definida previamente, pero slo permite una nica instancia de la macro para ejecutar en cualquier punto dado en el tiempo.

MacroExit()

Interrumpe la ejecucin de una macro.

415

MacroIf (expression?macronameA[, argA1][:macronameB[,argB1]])

Condicional comienzan macros diferentes.

MailboxExists (mailbox[@context])

Es una funcin que permite un salto condicional a la regla n+101. Comprueba si existe el Buzn de Voz. En caso de que exista salta a la regla n+101.

MeetMe ([confno][,[options][,pin])

Coloca la llamada en una conferencia de MeetMe.

MeetMeAdmin (confno,command[,pin]) MeetMeCount (confno[,variable])

Administra una conferencia MeetMe.

Cuenta el nmero de participantes en una conferencia de MeetMe.

Milliwatt()

Genera un tono constante de 1000Hz a 0dbm (mu-law).

MixMonitor (fileprefix.format[,options [,command]])

Registra el audio en el canal actual, pero lo mezcla antes de escribirla en un archivo.

Monitor ([file_format[:urlbase] [, fname_base][,options]])

Graba el canal actual en dos archivos independientes.

Morsecode (string)

Transmite la condicin de cadena como el cdigo Morse.

MP3Player (location)

Ejecuta a travs del programa mpg123 un fichero o un stream de audio (especificar URL).

MusicOnHold (class)

Reproduce msica de forma indefinida.

416

NBScat()

Reproduce una corriente NBS locales.

NoCDR()

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

NoOp (text)

No ejecuta nada.

Page (technology/resource[& technology2/resource2[&...]] [,options])

Pginas de una prrroga.

Park (exten)

Auto Aparca al usuario en el espacio de "parking" de llamadas, normalmente para poder determinar cmo est ese espacio. Se usa junto a una transferencia supervisada. Debe existir el contexto "parkedcalls".

ParkAndAnnounce (template,timeout,channel [,return_context])

Aparca la llamada indicando dnde es aparcada, y qu hacer si expira un tiempo mximo de segundos en espera sin ser atendida.

ParkedCall (exten)

Recupera una llamada aparcada.

PauseMonitor()

Detiene la supervisin de un canal.

PauseQueueMember ([queuename],interface)

Se detiene un dispositivo de cola de manera que no puede recibir llamadas de la cola.

Pickup (extension[@context] [& extension2@context2[&...]])

Responder a una llamada dirigida a otra extensin.

Playback (filename[,options])

Reproduce un archivo de sonido a la persona que llama.

417

PlayTones (tonelist)

Reproduce uno o ms tonos.

PrivacyManager()

Pide a la entrada del nmero de telfono del llamante, en caso de identificador de llamadas no se puede obtener.

Progress()

Indica el progreso de la llamada.

Queue (queuename[,options[, URL [,announceoverride [,timeout]]]])

Envia la llamada en curso a una cola de llamadas, previamente dada de alta. Adems se puede acompaar de diversas acciones.

QueueLog (queue,uniqueID,agent, event[, additionalInfo])

Escribe una entrada en el registro de cola.

Random ([probability]:[[context,] extension,]priority)

Salto condicional basado en una probabilidad.

Read (variable[,filename][,maxdigits] [,option][,attempts][,timeout])

Lee un numero de dgitos (que finalizan con la tecla # o al llegar a un lmite marcado) y se asignan a una variable.

ReadFile (variable=filename,length)

Lee un archivo.

RealTime (family,colmatch,value[,prefix])

Obtiene informacin de configuracin de la base de datos de configuracin en tiempo real.

RealTimeUpdate (family,colmatch,value, newcol, newval)

Actualizaciones de un valor en la base de datos de configuracin en tiempo real

Record (filename:format, silence[,maxduration][,options])

Graba en un archivo un mensaje de voz en el formato especificado.

418

RemoveQueueMember (queuename[,interface])

Elimina los miembros de la cola de forma dinmica.

ResetCDR ([options])

Pone a Cero el registro con la informacin de la llamada en curso, que va a ser almacenado en la tabla CDR. La opcin CDR almacena previamente el contenido.

RetryDial (announce,sleep,loops, technology/resource[& Technology2/resource2...] [,timeout][,options][,URL])

Intentos para marcar y reintentos si el intento falla.

Return()

Devoluciones de una subrutina.

Ringing()

Devuelve la seal de RING

SayAlpha (string)

Deletrea la cadena de texto. Esta cadena puede tener letras, nmeros o los smbolos! @ # $ * - + = / (espacio en blanco).

SayDigits (digits)

Deletrea los dgitos pasados, en el lenguaje activo en ese canal.

SayNumber (digits[,gender])

Dice el Nmero pasado, en el lenguaje activo en ese canal.

SayPhonetic (string)

Deletrea la cadena pasada.

SayUnixTime ([unixtime][,[timezone] [,format]])

Anunciar el tiempo en un formato personalizado.

SendDTMF (digits[,timeout_ms])

Enva una cadena de dgitos, a travs de la seal DTMF establecida en el canal.

419

SendImage (filename)

Enva una imagen.

SendText (text)

Enva un mensaje de texto al cliente. Si el cliente no soporta la recepcin de texto, el Dialplan continuar en la regla n+101, si existe.

SendURL (url[,option])

Enva una direccin URL al cliente, siempre que lo soporte. En caso de no soportarlo, se desva la ejecucin a la regla n+101.

Set (n=value)

Establece una variable para el valor especificado.

SetAccount (account)

Establece el valor del campo Account en el CDR, para control de llamada.

SetAMAFlags (flag)

Establece el valor del campo amaflags en el CDR, para control de llamada.

SetCallerID (clid[,a])

Establece un nuevo valor para el CallerID de la llamada.

SetCallerPres (presentation)

Juegos de identificacin de llamadas banderas de presentacin.

SetCDRUserField (value)

Establece el valor del campo User en el registro CDR para la llamada en curso.

SetCIDName (cname[,a])

Establece un nuevo valor para la parte del Identificador de Nombre (no el nmero) del CallerID de la llamada.

SetCIDNum (cnum[,a])

Establece un nuevo valor para la parte del Nmero (no el nombre) del CallerID de la llamada.

420

SetGlobalVar (n=value)

Establece una variable Global, que se puede usar en otro canal de comunicacin al ser de mbito global a todo el Dialplan.

SetGroup (groupname[@category])

Especifica la creacin de un grupo para control de acceso.

SetLanguage (language)

Establece el directorio por defecto de dnde coger los archivos de voz para los mensajes.

SetMusicOnHold (class)

Establece la "clase" musical por defecto, para MusicOnHold.

SetTransferCapability (transferCapability)

Establece el valor de una variable global.

SetVar (n=value)

Establece el valor de una variable global, que se puede usar durante la comunicacin de cualquier canal.

SIPAddHeader (header: value)

Agrega un encabezado SIP para el cuadro de dilogo SIP.

SIPDtmfMode (mode)

Establece el parmetro dtmfmode para una llamada a travs de un canal SIP.

SMS (queue[,options])

Enva o recibe SMS (Short Message System) mensajes.

SoftHangup (technology/resource,options)

Cuelga el canal especificado.

StopMonitor()

Finaliza la grabacin de la llamada en curso.

StopPlayTones()

Finaliza la reproduccin de la lista de tonos especificada en Playtones.

421

System (command)

Ejecuta un comando de shell.

Transfer ([technology/] destination [,options])

Transfiere la llamada en curso a otra extensin, siempre que est dentro de su mismo Contexto. En caso de ser fallida, salta a la regla n+101.

TryExec (application(arguments))

Intenta ejecutar una aplicacin Dialplan.

TrySystem (command)

Ejecuta una aplicacin en Linux. Si existe un error en la ejecucin sigue en la regla n+101.

UnpauseMonitor()

Reanudar la grabacin de un canal.

UserEvent (eventname[,body])

Enva al subsistema "Manager" un evento que podr ser usado por el usuario. Como parmetros se pasa al Manager, un nombre de evento y opcionalmente un campo con ms opciones.

Verbose ([level,]message)

Nivel de detalle de la presentacin de mensajes en consola.

VMAuthenticate ([mailbox][@context])

Autentica la persona que llama con la contrasea de correo de voz del buzn especificado. Permite que la persona que llama para dejar un mensaje de correo de voz en el buzn especificado.

VoiceMail ([s|u|b]mailbox[@context] [&mailbox[@context]][...])

VoiceMailMain ([[s|p]mailbox][@context])

Permite que la persona que llama para comprobar los mensajes de correo de voz.

Wait (seconds)

Espera un tiempo expresado en segundos antes de continuar.

422

WaitExten ([seconds])

Espera los segundos expresados, que se marque una nueva extensin antes de continuar. Espera los segundos especificados a recibir la seal de Ring.

WaitForRing (timeout)

WaitForSilence (wait[,repeat])

Espera a que el silencio de una duracin determinada.

WaitMusicOnHold (delay)

Durante el tiempo que se especifique se retiene la llamada con Msica, la que est establecida en la clase "default".

While (expr)

Inicia un bucle while.

Zapateller (options)

Genera un tono que bloquea a los televendedores que llamen. Opciones: answer (responde despus del tono), nocallerid (genera el tono si no hay CID).

ANEXO C: Funciones de Asterisk

Nombre

Sintaxis
AGENT(<agentId>[:item]) (item =status, password, name, channel, mohclass, exten)

Descripcin
Obtiene informacin sobre un agente.

AGENT

ARRAY

ARRAY(var1[|var2[...][|varN]])

Permite establecer mltiples variables a la vez.

BASE64_ DECODE

BASE64_DECODE(<base64_string>)

Decodifica una cadena base64.

423

BASE64_ ENCODE

BASE64_ENCODE(<string>)

Codifica una cadena en base64.

BLACKLIST

BLACKLIST()

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

CALLERID

CALLERID(<item>) (item=all, num, name)

Obtiene o establece los datos de identificacin de llamada.

CDR

CDR(<name>[|options])

Obtiene o establece una variable de CDR.

CHANNEL

CHANNEL(item)(item= audioreadformat, audionativeformat, videonativeformat, audiowriteformat, callgroup, channeltype, language, musicclass, )

Obtiene o establece informacin sobre el canal.

CHECKSIP DOMAIN

CHECKSIPDOMAIN(<domain|IP>)

Comprueba si un dominio es un dominio local.

CUT

CUT(<varname>,< delimiter> ,<range-s>)

Divide una variable segn un delimitador de nombre. Lee o escribe en la base de datos de Asterisk.

DB

DB(<family>/<key>)

DB_DELETE

DB_DELETE(<family>/<key>)

Devuelve un valor de la base de datos y lo elimina.

DB_EXISTS

DB_EXISTS(<family>/<key>)

Comprueba si la clave existe en la base de datos de Asterisk.

DUNDI LOOKUP

DUNDILOOKUP(number[|context[|option)

Realiza una bsqueda DUNDi de un nmero de telfono.

424

ENUM LOOKUP

ENUMLOOKUP(number[|Method-type[|option)

Permite la consulta de un carcter general o especfico de los registros NAPTR o de los tipos de NAPTR para ENUM o de los punteros DNS ENUMlike.

ENV

ENV(<envname>)

Obtiene o establece la variable de entorno especificada.

EVAL

EVAL(<variable>)

Evala las variables almacenadas.

EXISTS

EXISTS(<data>)

Prueba de existencia: Retorna 1 si existe, 0 en caso contrario.

FIELDQTY

FIELDQTY(<varname>|<delim>)

Cuenta los campos, con un delimitador arbitrario.

FILTER

FILTER(<allowed-chars>|<string>)

Filtra la cadena de caracteres para incluir slo los caracteres permitidos.

GLOBAL

GLOBAL(<varname>)

Obtiene o establece la variable global especificada.

GROUP

GROUP([category])

Obtiene o establece el grupo de canales.

GROUP_ COUNT

GROUP_COUNT([groupname][@category])

Cuenta el nmero de canales en el grupo especificado.

GROUP_LIST

GROUP_LIST()

Obtiene una lista de los grupos creados en un canal.

GROUP_ MATCH_ COUNT

GROUP_MATCH_COUNT (groupmatch [@category])

Cuenta el nmero de canales en los grupos que coinciden con el patrn especificado.

425

IAXPEER

IAXPEER(<peername|CURRENTCHANNEL>) (peername=ip,status,mailbox,context, expire,dynamic,callerid_name, callerid_num, codecs)

Obtiene informacin del usuario IAX.

IF

IF(<expr>?[<true>][:<false>])

Condicional: Devuelve los datos siguientes a ? si es cierto sino los datos siguientes a :.

IFTIME

IFTIME(<timespec>?[<true>][:<false>]) (timespec=times,day_of_week, day_of_month,months)

Temporal condicional: Devuelve los datos siguientes a ? si es cierto sino los datos siguientes a :.

ISNULL

ISNULL(<data>)

NULL test: Retorna 1 si NULL 0 en caso contrario.

KEYPAD HASH

KEYPADHASH(<string>)

Pasa la clave de string a nmero.

LEN

LEN(<string>)

Devuelve la longitud del argumento dado.

MATH

MATH(<number1><op> <number 2> [,<type>])

Realiza Funciones matemticas.

MD5

MD5(<data>)

Calcula el MD5 del dato.

MUSICCLASS

MUSICCLASS()

Lee o define la clase MusicOnHold.

QUEUE_ MEMBER_ COUNT

QUEUE_MEMBER_COUNT(<queuename>)

Cuenta el nmero de miembros de una cola.

QUEUE_ MEMBER_LIST

QUEUE_MEMBER_LIST(<queuename>)

Devuelve una lista con los miembros de una cola.

426

QUEUE_ WAITING_ COUNT

QUEUE_WAITING_COUNT(<queuename>)

Cuenta el nmero de llamadas en espera de una cola.

RAND

RAND([min][|max])

Elije un nmero al azar en un rango.

REALTIME

REALTIME(family|fieldmatch[value])

En tiempo real lee / escribe funciones.

REGEX

REGEX (<regular expression> <data>)

Expresiones regulares.

SET

SET(<varname>=[<value>])

Asigna un valor a una variable de canal.

SHA1

SHA1(<data>)

Calcula un algoritmo SHA1.

SIP_HEADER

SIP_HEADER(<name>[,<number>])

Obtiene el encabezado SIP especificado.

SIPCHANINFO

SIPCHANINFO(item)(item=peername, peerip, useragent, peername)

Obtiene el parmetro del canal SIP especificado.

SIPPEER

SIPPEER(<peername>[|item])(tem=ip, mailbox, context, expire, dynamic, callerid_name, callerid_number, status, language, useragent, )

Obtiene informacin del usuario SIP.

SORT

SORT(key1:val1[...][,keyN:valN])

Ordena una lista de clave/valor en una lista de claves, basada en los valores. Hace un chequeo del archivo especificado.

STAT

STAT(<flag>,<filename>)

STRFTIME

STRFTIME([<epoch>][|[timezone][|for)

Devuelve la fecha / hora actual en el formato especificado.

427

STRPTIME

STRPTIME(<datetime>|<timezone>|<for)

Devuelve la fecha como se describe en el formato.

TIMEOUT

TIMEOUT(timeouttype)

Obtiene o establece los tiempos de espera en el canal.

URIDECODE

URIDECODE(<data>)

Decodifica un string de acuerdo a RFC 2396.

URIENCODE

URIENCODE(<data>)

Codifica un string de acuerdo a RFC 2396.

VMCOUNT

VMCOUNT(vmbox[@context][|folder])

Aade el mensaje de voz en el buzn especificada.

ANEXO D: Ficheros de Configuracin de Asterisk


modules.conf amd.conf telcordia-1.adsi adsi.conf adtranvofr.conf agents.conf alarmreceiver.conf alsa.conf asterisk.conf chan_dahdi.conf cdr.conf cdr_manager.conf cdr_mysql.conf cdr_odbc.conf

enum.conf extconfig.conf extensions.conf extensions.ael features.conf festival.conf followme.conf func_odbc.conf gtalk.conf http.conf iax.conf iaxprov.conf indications.conf jabber.conf

oss.conf phone.conf privacy.conf queues.conf res_mysql.conf res_odbc.conf res_snmp.conf rpt.conf rtp.conf say.conf sip.conf sip_notify.conf skinny.conf sla.conf

428

cdr_pgsql.conf cdr_tds.conf codecs.conf dahdi_channels.conf dnsmgr.conf dundi.conf

logger.conf manager.conf meetme.conf mgcp.conf musiconhold.conf osp.conf

smdi.conf udptl.conf users.conf voicemail.conf vpb.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 seguir que 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 de los permisos que el Dependiendo 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 una extensin de destino, puede efectuar la accin haciendo ccionar 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 una transferencia de llamada al botn previamente ciar 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 de casette. icono 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 el telfono est sonando, Cuando 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 desde el interior FOP2, llamadas 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 en la definicin del configur 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), y la llamada entrante (flecha izquierda), o lugar (reloj derecha), 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 s agenda. su

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 l llamadas 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. Es Esto es particularmente til para los administradores de centros de llamada, usted puede centrarse en una actividad de determinada cola, eliminando el "ruido" de las otras eliminando 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 de la conferencia, al hacer clic se le etiqueta 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 tambin hay un icono de miembro, ser un participantes usuario verde para que los participantes regulares, o azul cuando el participante es administrador o el usuario marcado.

ANEXO G: Cdigo de las pruebas de envio de SMS


sms_send.php

#!/usr/bin/php -q <?php // -----------// Configuracion de Google Calendar // -----------$usr="davidin073@gmail.com"; // Usuario $pwd="XXXXXXXX"; "; // Password $min="30"; //empieza 30 min de la hora actual $dur="10";//la duracion del evento es de 10 min

479

// Cambiar por el directorio de instalacin $sms_tool_path="/usr/src/SMSGoogle"; // Opciones de depuracion: // Si tienes problemas revisa el archivo de log $parm_error_log = '/usr/src/SMSGoogle/wakeup.log'; // Poner a true si queremos habilitar la depuracin $parm_debug_on = true; GLOBAL $stdin, $stdout, $stdlog, $result, $parm_debug_on, $parm_test_mode;

// Settings de la WIKI http://www.voip-info.org ob_implicit_flush(false); set_time_limit(30); error_reporting(0); $stdin = fopen( 'php://stdin', 'r' ); $stdout = fopen( 'php://stdout', 'w' ); // Se escribe log en modo depuracion if ($parm_debug_on) { $stdlog = fopen( $parm_error_log, 'w' ); fputs( $stdlog, "---Start---\n" ); fputs($stdlog."---------------\n"); } // Poner en un array todas las variables que manda Asterisk // http://www.voip-info.org/tiki-index.php?page=Asterisk%20AGI%20php $agivars = array(); while (!feof(STDIN)) { $agivar = trim(fgets(STDIN)); if ($agivar === '') { break; } $agivar = explode(':', $agivar); $agivars[$agivar[0]] = trim($agivar[1]); } extract($agivars); // Obtenemos el Caller ID $callerid = $agi_callerid; // Mandamos el mensaje usando el API de Google $msg="'Asterisk: Tiene una llamada perdida de: $callerid'"; $cmd = "$sms_tool_path/enviaSMS.sh $usr $pwd $min $dur $msg &"; $p = popen($cmd, 'r'); if ($parm_debug_on) { $stdlog = fopen( $parm_error_log, 'w' ); fputs( $stdlog, "UserName=".$usr."\n"); fputs( $stdlog, "Password=".$pwd."\n"); fputs( $stdlog, "Minutos despues de la hora actual en la que empieza el evento=".$min."\n"); fputs( $stdlog, "Duracion del Evento=".$dur."\n");

480

fputs( $stdlog, "Mensaje enviado: ".$msg."\n"); fputs( $stdlog, "Enviado: ".$p ); } ?>

enviaSMS.sh
#!/bin/sh SMS_HOME=/usr/src/SMSGoogle CLASSPATH=$SMS_HOME/lib/activation.jar:$SMS_HOME/lib/gdata-calendar1.0.jar:$SMS_HOME/lib/gdata-client-1.0.jar:$SMS_HOME/lib/mail.jar:$SMS_HOME java -classpath $CLASSPATH EnviaSMS $@

EnviaSMS.java
import java.net.URL; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.TimeZone; import com.google.gdata.client.calendar.CalendarService; import com.google.gdata.data.DateTime; import com.google.gdata.data.Person; import com.google.gdata.data.PlainTextConstruct; import com.google.gdata.data.extensions.EventEntry; import com.google.gdata.data.extensions.Reminder; import com.google.gdata.data.extensions.When;

public class EnviaSMS { public static void main(String[] args) { // Comprobamos los argumentos necesarios: usuario, password y texto del mensaje if (args.length < 5) { System.err.println("Uso: EnviaSMS <usuario> <password> <minInit> <duracion> <texto> "); return; } String userName = args[0]; String userPassword = args[1]; String min1 = args[2]; int min = Integer.parseInt(min1); String duracion = args[3]; int dur = Integer.parseInt(duracion); String sms = ""; // El mximo son 57 caracteres for(int i=4; i<args.length; i++) { sms = sms + args[i] + " "; } sms = sms.trim(); try {

481

URL feedUrl = new URL("http://www.google.com/calendar/feeds/" + userName + "/private/full"); CalendarService myService = new CalendarService("EnviaSMS"); // Nos autenticamos en google Calendar myService.setUserCredentials(userName, userPassword); // Creamos el evento EventEntry myEntry = new EventEntry(); myEntry.setTitle(new PlainTextConstruct(sms)); Person author = new Person(userName, null, userName); myEntry.getAuthors().add(author); // Definimos la zona horaria TimeZone tz = TimeZone.getTimeZone("Europe/Madrid"); Calendar cal = GregorianCalendar.getInstance(); cal.add(Calendar.MINUTE, min); DateTime startTime = new DateTime(cal.getTime(), tz); //7m cal.add(Calendar.MINUTE, dur); DateTime endTime = new DateTime(cal.getTime(), tz); //11m // Definimos la hora de comienzo y de fin del evento When eventTimes = new When(); eventTimes.setStartTime(startTime); eventTimes.setEndTime(endTime); myEntry.addTime(eventTimes); // Aadimos el recordatorio slo como SMS y que avise 10 minutos antes Reminder reminder = new Reminder(); reminder.setMinutes(new Integer(10)); reminder.setMethod(Reminder.Method.SMS); myEntry.getReminder().add(reminder); // Enviamos la peticin para insertar el evento en el calendario EventEntry insertedEntry = (EventEntry)myService.insert(feedUrl, myEntry); } catch (Exception e) { e.printStackTrace(); } } }

ANEXO H: Dialplan de la aplicacin (extensions.conf, sip.conf, iax.conf)


extensions.conf
[general] static=yes writeprotect=yes clearglobalvars=no

482

autofallthrough=yes language=es [globals] ;TELEFONOS Y MOVILES MOVIL2=945003910 MOVIL1=650664616 PHONE1=902147424 PHONE2=902147423 PHONE3=945003903 ;CALENDARIOS CALR=calendariorecepcion.py CALC=calendariocomercial.py ;CALS=calendariosoporte.py CALT=calendariotwister.py CALS=pyastcal.py ;QUEUES QR=recepcionqueue QC=comercialqueue QS=soportequeue QT=twisterqueue ;BUZONES BR=1111 BC=2222 BS=3333 BT=4444 [incoming] include =>administracin include =>chansebi include =>spe [administracion] include =>acceso ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;MENU:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;---->0)Pasar con una operadora ;;;---->1)Duda en la utilizacion del programa :Comerciales ;;;---->2)Pasar con el Departamento de Soporte ;;;---->3)Pasar con el Departamento de Desarrollo :Twister ;;;---->t)Volver al menu: Excesivo tiempo en contestar ;;;---->i)Volver al menu: Se ha pulsado una tecla errnea ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 902147424,1,Answer exten => 902147424,n,Background(menu) exten => 0,1,Goto(recepcion,${PHONE1},1) exten => 1,1,Goto(comercial,${PHONE1},1) exten => 2,1,Goto(soporte,${PHONE2},1) exten => 3,1,Goto(twister,${PHONE3},1)

483

exten => 1000,1,Goto(acceso,${EXTEN},1) exten => 1001,1,Goto(acceso,${EXTEN},1) exten => 1002,1,Goto(acceso,${EXTEN},1) exten => 1003,1,Goto(acceso,${EXTEN},1) exten => 1004,1,Goto(acceso,${EXTEN},1) exten => 1005,1,Goto(acceso,${EXTEN},1) exten => 1006,1,Goto(acceso,${EXTEN},1) exten => 2000,1,Goto(acceso,${EXTEN},1) exten => 2001,1,Goto(acceso,${EXTEN},1) exten => 2002,1,Goto(acceso,${EXTEN},1) exten => 2003,1,Goto(acceso,${EXTEN},1) exten => 2004,1,Goto(acceso,${EXTEN},1) exten => 2005,1,Goto(acceso,${EXTEN},1) exten => 2006,1,Goto(acceso,${EXTEN},1) exten => 3000,1,Goto(acceso,${EXTEN},1) exten => 3001,1,Goto(acceso,${EXTEN},1) exten => 3002,1,Goto(acceso,${EXTEN},1) exten => 3003,1,Goto(acceso,${EXTEN},1) exten => 3004,1,Goto(acceso,${EXTEN},1) exten => 3005,1,Goto(acceso,${EXTEN},1) exten => 3006,1,Goto(acceso,${EXTEN},1) exten => 3007,1,Goto(acceso,${EXTEN},1) exten => 4000,1,Goto(acceso,${EXTEN},1) exten => 5000,1,Goto(cisco,${EXTEN},1) ;Usuario Remoto exten => 6000,1,Goto(acceso,,${EXTEN},1) exten => t,1,Goto(${PHONE1},1) exten => i,1,Goto(${PHONE1},1) exten => 902147423,1,Goto(soporte,${PHONE2},1) exten => 945003903,1,Goto(twister,${PHONE3},1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;PRUEBAS CHAN_SEBI;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [chansebi] include => acceso ; Incomming SMS exten => sms,1,NoOp(Incoming SMS from ${SMSSRC}) exten => sms,n,System(/usr/src/recvSMS.sh "${SMSSRC}" "${SMSTXT}") exten => sms,n,Hangup ;Envio SMS exten => 1111,1,NoOp(Envio de Sms) exten => 1111,n,SebiSendSMS(huawei1,650664616,"sms prueba") exten => 1111,n,Hangup ;LLamadas con Chan_Sebi exten => 650664616,1,NoOp(Outgoing call through the SEBI device to ${EXTEN}) exten => 650664616,n,Dial(Sebi/g1/${EXTEN},60) exten => 650664616,n,Hangup [macro-general] ;1)COMPROBACION CON EL CALENDARIO

484

exten => s,1,Answer exten => s,n,Set(SALTO=${ARG1}) exten => s,n,AGI(${ARG2}) exten => s,n,Goto(${SALTO},${ARG3},1) [recepcion] exten => 902147424,1,Set(NUM=${EXTEN}) exten => 902147424,n,Macro(general,recepcionlaboral,${CALR},${NUM}) [comercial] exten => 902147424,1,Set(NUM=${EXTEN}) exten => 902147424,n,Macro(general,comerciallaboral,${CALC},${NUM}) [soporte] exten => 902147423,1,Set(NUM=${EXTEN}) exten => 902147423,n,Macro(general,soportelaboral,${CALS},${NUM}) [twister] exten => 945003903,1,Set(NUM=${EXTEN}) exten => 945003903,n,Macro(general,twisterlaboral,${CALT},${NUM}) [macro-laboral] exten => s,1,Answer exten => s,n,Wait(2) exten => s,n,SetMusicOnHold(default) ;Consultar con la base de datos si es VIP para pasar a la primera posicion de la cola exten => s,n,MYSQL(Connect connid localhost root root agenda) exten => s,n,MYSQL(Query resultid ${connid SELECT\ mant FROM\ clientes\ INNER\ JOIN\ telefono\ ON\ clientes.id=telefono.idEmp WHERE\ telefono="NUM2"}) exten => s,n,NoOp(resultid = ${resultid}) ;Si es VIP --> POSICIONAR DELANTE EN LA COLA exten => s,n,MYSQL(Fetch fetchid ${resultid} PRIO) exten => s,n,NoOp( ${PRIO}) exten => s,n,GotoIf($["${PRIO}"="VIP"]?prio:no) exten => s,n(prio),MYSQL(Disconnect ${connid}) exten => s,n,Set(QUEUE_PRIO=10) exten => s,n,Queue(${ARG1}|r) exten => s,n,Hangup exten => s,n(no),MYSQL(Disconnect ${connid}) exten => s,n,Queue(${ARG1}|r) exten => s,n,Hangup [recepcionlaboral] exten => 902147424,1,Macro(laboral,${QR}) [comerciallaboral] exten => 902147424,1,Macro(laboral,${QC}) [soportelaboral] exten => 902147423,1,Macro(laboral,${QS}) [twisterlaboral] exten => 945003903,1,Macro(laboral,${QT})

485

[macro-nodisponible] exten => s,1,PLayBack(grabacion2) exten => s,n,Voicemail(${ARG1}) exten => S,n,Hangup [No Disponible Recepcion] exten => 902147424,1,Macro(nodisponible,${BR}) [No Disponible Comercial] exten => 902147424,1,Macro(nodisponible,${BC}) [No Disponible Soporte] ;Comprobar en la base de datos si el cliente es VIP(contrato de mantenimiento de 24h).Si lo es se le envia a la prioridad 100 sino lo es a la 90. exten => 902147423,1,MYSQL(Connect connid localhost root root agenda) exten => 902147423,n,NoOp(connid = ${connid}) exten => 902147423,n,Set(NUM = ${CALLERID(num)}) exten => 902147423,n,MYSQL(Query resultid ${connid SELECT\ mant FROM\ clientes\ INNER\ JOIN\ telefono\ ON\ clientes.id=telefono.idEmp\ WHERE\ telefono="${NUM}"}) exten => 902147423,n,NoOp(resultid = ${resultid}) exten => 902147423,n,MYSQL(Fetch fetchid ${resultid} MANT) exten => 902147423,n,MYSQL(Disconnect ${connid}) exten => 902147423,n,GotoIf($["${MANT}"="VIP"]?100:90) exten => 902147423,90,Macro(nodisponible,${BS}) exten => 902147423,100,NoOp(${NUM}) exten => 902147423,n,Gotoif($["${NUM:0:1}" = "6"]?200:300) exten => 902147423,200,Dial(SIP/+34${MOVIL1}@proxy01.sipphone.com,20,r) exten => 902147423,n,Dial(Sebi/g1/${MOVIL1},30) exten => 902147423,n,Dial(SIP/+34${MOVIL2}@proxy01.sipphone.com,20,r) exten => 902147423,n,Dial(Sebi/g1/${MOVIL2},30) exten => 902147423,n,AGI(sms_send.php) exten => 902147423,n,Voicemail(${ARG1}) exten => 902147423,n,Hangup exten => 902147423,300,Dial(DAHDI/${MOVIL1},20,r) exten => 902147423,n,Dial(DAHDI/${MOVIL2},20,r) exten => 902147423,n,AGI(sms_send.php) exten => 902147423,n,Voicemail(3333) exten => 902147423,n,Hangup [No Dispnible Twister] exten => 945003903,1,Macro(nodisponible,${BT}) [macro-acceso] exten => s,1,Dial(SIP/${ARG1},30,Ttm) exten => s,n,Voicemail(${ARG1}) exten => s,n,Hangup [acceso] include => skype include => cisco include => meetme include => verbio include => administracion include => soportelaboral

486

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;PRUEBAS TRUNK IAX2;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 100,1,Dial(IAX2/portatil/${EXTEN},90,tr) exten => 100,n,Hangup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;VERBIO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 802,1,Goto(VERBIO_TEST,s,1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;VOICEMAIL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => _XXXX8,1,VoiceMail(${EXTEN:0:4}) exten => _XXXX9,1,VoiceMailMain(${EXTEN:0:4}@default) ;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;RECEPCION;; ;;;;;;;;;;;;;;;;;;;;;;;;; exten => 1000,1,Macro(acceso,${EXTEN}) exten => 1001,1,Macro(acceso,${EXTEN}) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;COMERCIALES;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 1002,1,Macro(acceso,${EXTEN}) exten => 1003,1,Macro(acceso,${EXTEN}) exten => 1004,1,Macro(acceso,${EXTEN}) exten => 1005,1,Macro(acceso,${EXTEN}) exten => 1006,1,Macro(acceso,${EXTEN}) ;;;;;;;;;;;;;;;;;;;;; ;;;;SOPORTE;; ;;;;;;;;;;;;;;;;;;;;; exten => 2000,1,Macro(acceso,${EXTEN}) exten => 2001,1,Macro(acceso,${EXTEN}) exten => 2002,1,Macro(acceso,${EXTEN}) exten => 2003,1,Macro(acceso,${EXTEN}) exten => 2004,1,Macro(acceso,${EXTEN}) exten => 2005,1,Macro(acceso,${EXTEN}) exten => 2006,1,Macro(acceso,${EXTEN}) ;;;;;;;;;;;;;;;;;;;; ;;;;TWISTER;; ;;;;;;;;;;;;;;;;;;;; exten => 3000,1,Macro(acceso,${EXTEN}) exten => 3001,1,Macro(acceso,${EXTEN})

487

exten => 3002,1,Macro(acceso,${EXTEN}) exten => 3003,1,Macro(acceso,${EXTEN}) exten => 3004,1,Macro(acceso,${EXTEN}) exten => 3005,1,Macro(acceso,${EXTEN}) exten => 3006,1,Macro(acceso,${EXTEN}) exten => 3007,1,Macro(acceso,${EXTEN}) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;DIRECTOR Y CONTABLE;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 4000,1,Macro(acceso,${EXTEN}) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;Usuario Remoto;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 6000,1,Dial(IAX2/${EXTEN},90,tr) exten => 6000,n,Hangup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Para permitir agregarnos/eliminarnos a/de cualquier cola : ;;;;;;;;;;COLAS:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;--->0: Recepcion ;--->1: Comercial ;--->2: Soporte ;--->3: Twister ;Para agregar: exten+0+numCola ;Para eliminar: exten+1+numCola ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => _XXXX00,1,AddQueueMember(${QR}|SIP/${EXTEN:0:4}) exten => _XXXX00,n,Hangup exten => _XXXX01,1,AddQueueMember(${QC}|SIP/${EXTEN:0:4}) exten => _XXXX01,n,Hangup exten => _XXXX02,1,AddQueueMember(${QS}|SIP/${EXTEN:0:4}) exten => _XXXX02,n,Hangup exten => _XXXX03,1,AddQueueMember(${QT}|SIP/${EXTEN:0:4}) exten => _XXXX03,n,Hangup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => _XXXX10,1,RemoveQueueMember(${QR}|SIP/${EXTEN:0:4}) exten => _XXXX10,n,Hangup exten => _XXXX11,1,RemoveQueueMember(${QC}|SIP/${EXTEN:0:4}) exten => _XXXX11,n,Hangup exten => _XXXX12,1,RemoveQueueMember(${QS}|SIP/${EXTEN:0:4}) exten => _XXXX12,n,Hangup

488

exten => _XXXX13,1,RemoveQueueMember(${QT}|SIP/${EXTEN:0:4}) exten => _XXXX13,n,Hangup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => _XXXX20,1,PauseQueueMember(${QR}|SIP/${EXTEN:0:4}) exten => _XXXX20,n,Hangup exten => _XXXX21,1,PauseQueueMember(${QC}|SIP/${EXTEN:0:4}) exten => _XXXX21,n,Hangup exten => _XXXX22,1,PauseQueueMember(${QS}|SIP/${EXTEN:0:4}) exten => _XXXX22,n,Hangup exten => _XXXX23,1,PauseQueueMember(${QT}|SIP/${EXTEN:0:4}) exten => _XXXX23,n,Hangup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => _XXXX30,1,UnpauseQueueMember(${QR}|SIP/${EXTEN:0:4}) exten => _XXXX30,n,Hangup exten => _XXXX31,1,UnpauseQueueMember(${QC}|SIP/${EXTEN:0:4}) exten => _XXXX31,n,Hangup exten => _XXXX32,1,UnpauseQueueMember(${QS}|SIP/${EXTEN:0:4}) exten => _XXXX32,n,Hangup exten => _XXXX33,1,UnpauseQueueMember(${QT}|SIP/${EXTEN:0:4}) exten => _XXXX33,n,Hangup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;CALLBACK;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 900,1,Answer exten => 900,n,Wait(1) ;Asigna a la variable id el numero del llamante exten => 900,n(inicio),Set(id=${CALLERID(num)}) ;Tenemos que indicar el numero de telefono que llamaremos ;(ej: el numero de un cliente). exten => 900,n,Playback(telephone-number&astcc-followed-by-the-pound-key) ;Asterisk se pondra a la espera de recibir el numero de telefono. ;La aplicacion Read lee literalmente los digitos que presionaremos y los asignara a la variable appunt. exten => 900,n,Read(appunt,,15,,2,10) exten => 900,n,SayDigits(${appunt}) exten => 900,n,Wait(1) exten => 900,n,Playback(year&month&day) ;Asterisk se pondra a la espera de recibir ao, mes y dia de esta forma: ; 4 digitos para el ao,

489

; 2 digitos para el mes y ; 2 digitos para el da. ;La aplicacion Read asignara esta fecha a la variable fecha. ;Esta sera la fecha en que se efectuara la llamada exten => 900,n,Read(fecha,,8,,2,10) exten => 900,n,SayDigits(${fecha}) exten => 900,n,Playback(hours) ;Asterisk se pondr a la espera de recibir la hora de esta forma: ; 2 digitos para las hora y ; 2 digitos para los minutos ;(ej 1130 para las once y treinta, 20:10 para las veinte y diez). ;La aplicacion Read asignara esta hora a la variable hora. ;Esta es la hora programada para la llamada. exten => 900,n,Read(hora,,4,,2,10) exten => 900,n,Saydigits(${hora}) exten => 900,n,Playback(if-this-is-correct-press&digits/1&if-this-is-notcorrect&digits/2) ;Asterisk se pondra a la espera de recibir nuestra respuesta (digito 1 o digito 2). ; La variable Read asignara nuestra respuesta a la variable sino. exten => 900,n,Read(sino,,1,,,5) ;Si la variable sino es igual a 1 iremos directamente a la prioridad marcada con la etiqueta (cita). ;sino a la prioridad con la etiqueta (inicio). exten => 900,n,GotoIf($["${sino}" = "1"]?cita:inicio) ;Si confirmamos los datos seguiremos desde esta linea. ;Aqui empieza la creacion del archivo de texto callback ;en la carpeta /tmp que tendra la sintaxis requerida para los callfiles. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;La estructura de un callfiles es la siguiente: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Channel: <channel> ; La extension que queremos llamar exten => 900,n(cita),System(echo Channel:SIP/${id} >> /tmp/callback) ; Callerid: <callerid> ; El identificativo de llamada que queremos enviar a la ;extension llamada exten => 900,n,System(echo Callerid:CallBackCita >> /tmp/callback) ; WaitTime: <number> ; Cuantos segundos esperamos antes de considerar la ;llamada sin xito exten => 900,n,System(echo WaitTime:30 >> /tmp/callback) ; Maxretries: <number> ; Numero de veces que intentaremos llamar la extensin exten => 900,n,System(echo Maxretries:3 >> /tmp/callback) ; RetryTime: <number> ; Cuantos segundos debe esperar asterisk para volver a ;marcar exten => 900,n,System(echo RetryTime:300 >> /tmp/callback) ; Account: <account> ; El nombre de la cuenta con la cual queremos grabar esta ;llamada (CDR) exten => 900,n,System(echo Account:${id} >> /tmp/callback) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

490

;Una vez que la extension llamada conteste tenemos que decirle a asterisk lo que tiene ;que hacer. ;Esto tambien se define en el mismo archivo. Hay dos opciones: ; * Ejecutar una aplicacion: ; Application: <appname> ; la aplicacion que queremos utilizar ; Data: <args> ; aqui podemos definir las opciones de la aplicacion ; * Ejecutar un punto exacto del plan de llamadas (dial plan) ; Context: <context> ; El contexto en el dial plan ; Extension: <exten> ; La extension que queremos usar en el contexto especificado ; Priority: <priority> ; El numero de la prioridad o la etiqueta si definir ; Setvar: <var=value> ; Variables que se pueden necesitar en el contexto, ;extension y prioridad que definimos. ;Elegimos la primera opcion. exten => 900,n,System(echo Application:Dial >> /tmp/callback) ;Ahora podemos tener dos situaciones: ; a) el numero de destinacion es una extension interna de la centralita, ; b) el numero es externo (por ejemplo un celular). ;Si el numero es externo el dialplan seguira desde la etiqueta (gizmo), ;es decir que utilizaremos el proveedor VoIP gizmo5 para hacer la llamada, sino desde ;la etiqueta (local). exten => 900,n,Gotoif($["${appunt:0:1}" = "6"]?gizmo:local) ;Representa las opciones con las cuales la aplicacion Dial sera ejecutada por ;Asterisk. exten => 900,n(local),System(echo Data:SIP/${appunt},45,m >> /tmp/callback) ;Con el comando touch cambiamos la fecha y la hora del archivo callback segun ;fecha y hora escogidas. ;Esta sera la fecha y la hora a la que se ejecutara la llamada programada. exten => 900,n,System(touch -t ${fecha}${hora} /tmp/callback) ;Movemos el archivo callback en la carpeta usada por asterisk para buscar los callfiles ; ;y, para que no hayan duplicados le cambiamos el nombre usando la fecha y la hora de ;la llamada programada. exten => 900,n,System(mv /tmp/callback/var/spool/asterisk/outgoing /${fecha} ${hora}) exten => 900,n,Hangup exten => 900,n(gizmo),System(echo Data:SIP/+34${appunt}@proxy01.sipphone.com >> /tmp/callback) exten => 900,n,System(touch -t ${fecha}${hora} /tmp/callback) exten => 900,n,System(mv /tmp/callback /var/spool/asterisk/outgoing/${fecha} ${hora}) exten => 900,n,Hangup ;Ahora a la fecha y hora programadas, asterisk llamara la extension que reservo ;la llamada, una vez que conteste, ejecutara la aplicacion Dial y llamara el numero de ;telefono escogido para la llamada programada y podremos hablar, por ejemplo, con ;nuestro cliente. ;Limites: ;;;;;;;;;;;;;;--------->las llamadas pueden ser programadas solamente desde una extension ;interna de nuestra centralita. ;;;;;;;;;;;;;;--------->Una vez programadas, las llamadas no se pueden borrar. ;Estos archivos se guardan en la carpeta : /var/spool/asterisk/outgoing.

491

[meetme] ;Agregarse a la conferencia 600 exten => 600,1,Meetme(600,i,1234) ;Saber cuantas personas hay en la conferencia exten => 601,1,Playback(conf-thereare) exten => 601,n,MeetMeCount(600) exten => 601,n,Playback(conf-peopleinconf) ;Retringir Numero de personas en la conferencia exten => 610,1,Set(confmax=2) exten => 610,n,Macro(meetme) exten => 602,1,Playback(conf-thereare) exten => 602,n,MeetMeCount(610) exten => 602,n,Playback(conf-peopleinconf) ;Crear una conferencia dinamica exten => 620,1,Meetme(,scDM(default)) exten => 620,n,Hangup exten => 621,1,Meetme() exten => 621,n,Hangup [macro-meetme] exten => s,1,MeetMeCount(${MACRO_EXTEN},count) exten => s,n,Gotoif($[${count} >= ${confmax}]?103) exten => s,n,MeetMe(${MACRO_EXTEN}) exten => s,n,Hangup exten => s,103,Playback(conf-invalid) exten => s,104,Hangup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;VERBIO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [verbio] include => acceso exten => 8000,1,Answer() exten => 8000,n,Set(UMBRAL=90) exten => 8000,n,VerbioLoadVcb(david.txt,connected,,,v) exten => 8000,n,VerbioLoadVcb(david2.txt,connected,,,v) exten => 8000,n,Goto(8090,1) exten => 8090,1,VerbioPromptAndRec(Indique el numero de incidencia para consultar su estado.Recuerde que tiene cuatro digitos.) exten => 8090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT0} ${VASR_RESULT1} ${VASR_RESULT2} ${VASR_RESULT3}. Score: ${VASR_SCORE} Umbral: ${UMBRAL}",,,v) exten => 8090,n,GotoIf($[$[${VASR_RESULT} != ERROR] & $[${VASR_SCORE}>${UMBRAL}]]?si:no) exten => 8090,n(si),VerbioPromptAndRec(Su numero de incidencia es: ${VASR_RESULT0} ${VASR_RESULT1} ${VASR_RESULT2} ${VASR_RESULT3}\, no?) exten => 8090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}. Score: ${VASR_SCORE} Umbral: ${UMBRAL}",,,v) exten => 8090,n,GotoIf($[$[${VASR_RESULT} != ERROR] & $[${VASR_SCORE}>${UMBRAL}]]?si2:no2)

492

exten => 8090,n(si2),VerbioPrompt(Gracias.) exten => 8090,n,Hangup exten => 8090,n,VerbioFreeChannel() exten => 8090,n(no),VerbioPrompt(Repita por favor.) exten => 8090,n,Goto(8090,1) exten => 8090,n(no2),VerbioPrompt(Repita por favor.) exten => 8090,n,Goto(8090,1) exten => 8091,1,VerbioFreeChannel() exten => 7000,1,Answer() exten => 7000,n,Set(UMBRAL=20) exten => 7000,n,VerbioLoadVcb(datos.txt,isolated,,,v) exten => 7000,n,Goto(7090,1) exten => 7090,1,VerbioPromptAndRec(Bienvenido a Yet Informatica \, de los siguientes departamentos indiquenos con cual desea hablar\, Soporte\, Administracion\, Twister\, Comercial.) exten => 7090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}. Score: ${VASR_SCORE} Umbral: ${UMBRAL}",,,v) exten => 7090,n,GotoIf($[$[${VASR_RESULT} != ERROR] & $[${VASR_SCORE}>${UMBRAL}]]?si:no) exten => 7090,n,VerbioFreeChannel() exten => 7090,n(si),VerbioLoadVcb(sino.txt,isolated,,,v) exten => 7090,n,Set(DPTO= ${VASR_RESULT}) exten => 7090,n,VerbioPromptAndRec(El departamento elegido es: ${VASR_RESULT} \, no?) exten => 7090,n,NoOp("PALABRAS ${VASR_WORDS}. Resultado: ${VASR_RESULT}. Score: ${VASR_SCORE} Umbral: ${UMBRAL}",,,v) exten => 7090,n,GotoIf($[$[${VASR_RESULT} != ERROR] & $[${VASR_SCORE}>${UMBRAL}]]?si2:no2) exten => 7090,n(si2),NoOp(" Vamos a llamar: ${DPTO}") exten => 7090,n,GotoIf($[${DPTO} = SOPORTE ]?soporte:otro) exten => 7090,n(soporte),Dial(SIP/2000,30,Ttm) exten => 7090,n,Hangup exten => 7090,n,VerbioFreeChannel() exten => 7090,n(otro),GotoIf($[${DPTO} = TWISTER ]?twister:otro1) exten => 7090,n(twister),Dial(SIP/2003,30,Ttm) exten => 7090,n,Hangup exten => 7090,n,VerbioFreeChannel() exten => 7090,n(otro1),GotoIf($[${DPTO} = COMERCIAL ]?comercial:otro2) exten => 7090,n(comercial),Dial(SIP/4000,30,Ttm) exten => 7090,n,Hangup exten => 7090,n,VerbioFreeChannel() exten => 7090,n(otro2),Dial(SIP/5000,30,Ttm) exten => 7090,n,Hangup exten => 7090,n,VerbioFreeChannel() exten => 7090,n(no),VerbioPrompt(Repita por favor.) exten => 7090,n,Goto(7090,1) exten => 7090,n(no2),VerbioPrompt(Repita por favor.) exten => 7090,n,Goto(7090,si) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;Ultimas llamadas recibidas;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 76,1,MYSQL(Connect connid localhost root root cdr) exten => 76,n,NoOp(connid = ${connid})

493

;Con LIMIT 1 indicamos que queremos solo el ultimo registro de esa columna. ;La variable resultid contendra el numero de resultados de la busqueda. exten => 76,n,MYSQL(Query resultid ${connid} SELECT src FROM cdr WHERE dst="${CALLERID(num)}" ORDER BY calldate DESC LIMIT 1) exten => 76,n,NoOp(resultid = ${resultid}) exten => 76,n,MYSQL(Fetch fetchid ${resultid} var1) exten => 76,n,NoOp(Variable = ${fetchid},${var1}) exten => 76,n,MYSQL(Clear ${resultid}) exten => 76,n,MYSQL(Disconnect ${connid}) exten => 76,n,GotoIf($[ ${fetchid} != 0 ]?bien:mal) exten => 76,n,NoOp(La ultima llamada recibida ha sido del numero ${var1}.) ;Para llamar a ese numero: exten => 76,n(bien),Dial(SIP/${var1},30,Ttm) ;Se podria tener en cuenta si el numero es externo o interno para sacarlo por un ;Operador VoIP o no. exten => 76,n,Hangup exten => 76,n(mal),NoOp(No hay ninguna llamada recibida.) exten => 76,n,Hangup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;Ultima llamada realizada;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 75,1,MYSQL(Connect connid localhost root root cdr) exten => 75,n,NoOp(connid = ${connid}) ;Con LIMIT 1 indicamos que queremos solo el ultimo registro de esa columna). ;La variable resulid contendra numero de resultados de la busqueda. exten => 75,n,MYSQL(Query resultid ${connid} SELECT dst FROM cdr WHERE src="${CALLERID(num)}" ORDER BY calldate DESC LIMIT 1) exten => 75,n,NoOp(resultid = ${resultid}) exten => 75,n,MYSQL(Fetch fetchid ${resultid} var1) exten => 75,n,NoOp(Variable = ${fetchid},${var1}) exten => 75,n,MYSQL(Clear ${resultid}) exten => 75,n,MYSQL(Disconnect ${connid}) ;exten => 76,n,VerbioPrompt(La ultima llamada realizada ha sido al numero ${var1}) ;Para llamar a ese numero de nuevo: exten => 75,n,Dial(SIP/${var1},30,Ttm) exten => 75,n,GotoIf($[${DIALSTATUS} = UNKNOW]?uno) ;Se podria tenern en cuenta si el numero es externo o interno para sacarlo por un ;Operador VoIP o no. exten => 75,n(uno),NoOp(No se puede llamar a este numero, posiblemente sea una extension del dialplan.Si quiere llamar a la extension anterior pulse 1.) exten => 75,n,Set(${DIALSTATUS}=CHANUNAVAIL) exten => 75,n,GotoIf($[${DIALSTATUS} = CHANUNAVAIL]?dos) exten => 75,n(dos),MYSQL(Connect connid localhost root root cdr) exten => 75,n,NoOp(connid = ${connid}) ;Con LIMIT 1 indicamos que queremos solo el ultimo registro de esa columna). ;La variable resulid contendra numero de resultados de la busqueda. exten => 75,n,MYSQL(Query resultid ${connid} SELECT dst FROM cdr WHERE src="${CALLERID(num)}" ORDER BY calldate DESC LIMIT 2) exten => 75,n,NoOp(resultid = ${resultid}) exten => 75,n,MYSQL(Fetch fetchid ${resultid} var2) exten => 75,n,NoOp(Variable = ${fetchid},${var2}) exten => 75,n,MYSQL(Clear ${resultid}) exten => 75,n,MYSQL(Disconnect ${connid}) ;Para llamar a ese numero de nuevo: exten => 75,n,Dial(SIP/${var2},30,Ttm)

494

exten => 75,n,GotoIf($[${DIALSTATUS} = UNKNOW]?uno) ;Se podria tenern en cuenta si el numero es externo o interno para sacarlo por un ;Operador VoIP o no. exten => 75,n(uno),NoOp(No se puede llamar tampoco este numero.Lo sentimos.) exten => 75,n,Hangup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;DISA;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;1) ;;;;;;;;;;DESCRIPCION:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;sI LLAMO DESDE MI MOVIL COMPRUEBA QUE ES MI NUMERO Y ;; ;GENERA UN CALL FILE , ESTE ME LLAMA Y ME DA TONO PARA;; ;QUE YO LLAME A TRAVES DE LA CENTRALITA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;exten => _6XXXXXXXX,1,Answer() ; ;Le asignamos a la variable ID el CALLERID ;exten => _6XXXXXXXX,n,Set(ID=${CALLERID(num)}) ; ;Si quiero que sea un servicio privado para mi movil hace falta el GotoIf ;Si quiero que sea un servicio accesible desde cualquier mvil ;Si estoy llamando yo desde mi movil va a la etiqueta llamada, sino cuelga ;exten => _6XXXXXXXX,n,GotoIf($[${ID}=650664616]?llamada:normal) ;;;;;;;;;;;;;;;;;;;Creamos un archivo de texto llamado callback;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;exten => _6XXXXXXXX,n(llamada),System(echo Channel:SIP/+34${ID}@proxy01.sipphone.com >> /tmp/disa) ; ;exten => _6XXXXXXXX,n,System(echo Callerid:RECALL >> /tmp/disa) ; ;exten => _6XXXXXXXX,n,System(echo WaitTime:30 >> /tmp/disa) ; ;exten => _6XXXXXXXX,n,System(echo Maxretries:2 >> /tmp/disa); ;exten => _6XXXXXXXX,n,System(echo RetryTime:300 >> /tmp/disa); ;exten => _6XXXXXXXX,n,System(echo Account:2000 >> /tmp/disa); ;exten => _6XXXXXXXX,n,System(echo Application:Disa >> /tmp/disa); ;exten => _6XXXXXXXX,n,System(echo Data:no-password|acceso >> /tmp/disa); ;exten => _6XXXXXXXX,n,Wait(1) ;La llamada se ha terminado ;exten => _6XXXXXXXX,n,Playback(call-terminated) ; ;exten => _6XXXXXXXX,n,System(mv /tmp/disa /var/spool/asterisk/outgoing); ;exten => _6XXXXXXXX,n(normal),Hangup() ; ;2) ;;;;;;;;;;DESCRIPCION:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;AL MARCAR LA EXTENSION 333 DEBE LLAMARME AL MOVIL Y DARME TONO PARA ;PODER LLMAR A TRAVES DE LA CENTRALITA;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 333,1,Answer() ; ;Le asignamos a la variable ID el CALLERID exten => 333,n,Set(ID=${CALLERID(num)}) ; exten => 333,n,GotoIf($[${ID}=2003]?llamada:normal) ; ;;;;;;;;;;;;;;;;;;Creamos un archivo de texto llamado disa;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 333,n(llamada),System(echo Channel:SIP/+34650664616 @proxy01.sipphone.com >> /tmp/disa) exten => 333,n,System(echo Callerid:RECALL >> /tmp/disa) exten => 333,n,System(echo WaitTime:30 >> /tmp/disa)

495

exten => 333,n,System(echo Maxretries:2 >> /tmp/disa) exten => 333,n,System(echo RetryTime:300 >> /tmp/disa) exten => 333,n,System(echo Account:2000 >> /tmp/disa) exten => 333,n,System(echo Application:Disa >> /tmp/disa) exten => 333,n,System(echo Data:1234 >> /tmp/disa) exten => 333,n,Wait(1) ;La llamada se ha terminado exten => 333,n,Playback(call-terminated) exten => 333,n,System(mv /tmp/disa /var/spool/asterisk/outgoing/disa) exten => 333,n(normal),Hangup() ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;Uso de DISA: LLAMAR 9999,MARCAR 1234#,SEGUN DE TONO MARCAR CUALQUIER ;EXTENSION DEL CONTEXTO ACCESO;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 9999,1,Answer exten => 9999,n,DISA(1234|acceso) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;DESVIO DE LLAMADAS AL EXTERIOR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => 71,1,Goto(callfwd-add,s,1) exten => 72,1,Goto(callfwd-remove,s,1) ;exten => 5000,1,Answer() ; contestamos la llamada ;exten => 5000,n,Set(NUM=${DB(${EXTEN}/FORW)}) ; Leemos la base de datos ;exten => 5000,n,GotoIf($["${NUM}" != ""]?forw) ;exten => 5000,n,Hangup() ;exten => 5000,n(forw),Dial(SIP/+34${NUM}@proxy01.sipphone.com,20,r) ;exten => 5000,n,Hangup() [callfwd-add] exten => s,1,Answer() exten => s,n,Set(NUM=${CALLERID(num)}) exten => s,n,Set(COUNT=1) exten => s,n(inicio),Playback(please-enter-the&telephone-number&for&your&callforwarding&astcc-followed-by-the-pound-key) ; digitar el numero al cual queremos desviar todas las llamadas exten => s,n,Read(forw,,15,,2,10) exten => s,n,Playback(call-forwarding) : La voz de asterisk dir que el desvo de la ;llamada ha sido configurado para el numero exten => s,n,Playback(has-been-set-to) exten => s,n,SayDigits(${forw}) exten => s,n,Playback(if-this-is-correct-press&digits/1&if-this-is-not-correct&digits/2) ; ;Si el numero que escuchamos es exacto presionamos 1 sino 2 exten => s,n,Read(sino,,1,,,5) exten => s,n,GotoIf($["${sino}" = "1"]?setf:conta) exten => s,n(conta),Set(COUNT=$[${COUNT} + 1]) exten => s,n,Gotoif($["${COUNT}" < "4"]?inicio:bye) ; si la variable COUNT es menor ;que 4 vamos a etiqueta inicio sino a la etiqueta bye. Esto sirve para permitir tres ;intentos de configuracin antes de colgar la llamada. exten => s,n(setf),Set(DB(${NUM}/FORW)=${forw}) ; etiqueta setf, guardamos en ;numero en la base de datos interna de Asterisk

496

exten => s,n,Wait(1) exten => s,n(bye),Playback(goodbye) exten => s,n,Hangup [callfwd-remove] exten => s,1,Answer exten => s,n,Set(NUM=${CALLERID(num)}) exten => s,n,Wait(1) exten => s,n,Set(forw=${DB_DELETE(${NUM}/FORW)}) exten => s,n,Playback(call-fwd-cancelled) exten => s,n,Playback(goodbye) exten => s,n,Hangup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;SKYPE FOR ASTERISK;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Context for our users [skype] include => acceso exten => 7000,1,Goto(acceso,3000,1) exten => 8000,1,Dial(Skype/davidin99,30,tT) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;CISCO 7941;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [cisco] include => acceso exten => 5000,1,Dial(SIP/5000) exten => 5000,n,Hangup()

sip.conf
[general] context=default allowoverlap=no bindport=5060 bindaddr=0.0.0.0 srvlookup=yes language=es callevents=yes register => 17473702523:Yet100:17473702523@proxy01.sipphone.com/17473702523 [plantillasip](!) type=friend secret=1234 host=dynamic context=acceso canreinvite=yes dtmfmode=rfc2833 nat=no

497

[1000](plantillasip) username=1000 mailbox=1000 callgroup=1 pickupgroup=1-4 [1001](plantillasip) username=1001 mailbox=1001 callgroup=1 pickupgroup=1-4 [1002](plantillasip) username=1002 mailbox=1002 callgroup=1 pickupgroup=1-4 [1003](plantillasip) username=1003 mailbox=1003 callgroup=1 pickupgroup=1-4 [1004](plantillasip) username=1004 mailbox=1004 callgroup=1 pickupgroup=1-4 [1005](plantillasip) username=1005 mailbox=1005 callgroup=1 pickupgroup=1-4 [1006](plantillasip) username=1006 mailbox=1006 callgroup=1 pickupgroup=1-4 [2000](plantillasip) username=2000 mailbox=2000 callgroup=2 pickupgroup=1-4 [2001](plantillasip) username=2001 mailbox=2001 callgroup=2 pickupgroup=2 [2002](plantillasip) username=2002

498

mailbox=2002 callgroup=2 pickupgroup=2 [2003](plantillasip) username=2003 mailbox=2003 callgroup=2 pickupgroup=2 [2004](plantillasip) username=2004 mailbox=2004 callgroup=2 pickupgroup=2 [2005](plantillasip) username=2005 mailbox=2005 callgroup=2 pickupgroup=2 [2006](plantillasip) username=2006 mailbox=2006 callgroup=2 pickupgroup=2 [3000](plantillasip) username=3000 mailbox=3000 callgroup=3 pickupgroup=1-4 [3001](plantillasip) username=3001 mailbox=3001 callgroup=3 pickupgroup=3 [3002](plantillasip) username=3002 mailbox=3002 callgroup=3 pickupgroup=3 [3003](plantillasip) username=3003 mailbox=3003 callgroup=3 pickupgroup=3 [3004](plantillasip) username=3004 mailbox=3004 callgroup=3 pickupgroup=3

499

[3005](plantillasip) username=3005 mailbox=3005 callgroup=3 pickupgroup=3 [3006](plantillasip) username=3006 mailbox=3006 callgroup=3 pickupgroup=3 [3007](plantillasip) username=3007 mailbox=3007 callgroup=3 pickupgroup=3 [4000](plantillasip) username=4000 mailbox=4000 callgroup=4 pickupgroup=1-4 [5000] username=5000 mailbox=5000 type=friend secret=1234 host=dynamic context=acceso canreinvite=yes dtmfmode=rfc2833 callgroup=4 pickupgroup=1-4 [proxy01.sipphone.com] type=peer context=from-external disallow=all allow=ulaw allow=alaw allow=ilbc dtmfmode=rfc2833 host=proxy01.sipphone.com fromdomain=proxy01.sipphone.com insecure=very qualify=yes username=17473702523 fromuser=17473702523 authuser=17473702523 secret=Yet100 canreinvite=no

500

iax.conf
[general] bindport=4569 bindaddr=0.0.0.0 srvlookup=yes accountcode=lss0101 delayreject=yes language=es disallow=all allow=gsm allow=ulaw allow=alaw [portatil] type=friend username=centralyet auth=plaintext context=acceso peercontext=acceso2 secret=123 host=192.168.1.207 callerid='portatil' trunk=yes requirecalltoken=no

501

Glosario

ACD: Sistema Automtico de Distribucin de Llamadas Entrantes AEL: Asterisk Exchange Language AGI: Asterisk Gateway Interface AJAM: Asyncronous Javascript Asterisk Manager AMI: Asterisk Management Interface ARA: Asterisk Realtime Architecture ATA: Analog Telephone Adapter
502

CDR: Call Detail Record CTI: Computer Telephony Integration DID: Direct In Dial DISA: Direct Inward System Adress DND: Do Not Disturb DUNDI: Dsitribud Universal Number Discovery FXO: Foreign Exchange Office FXS: Foreign Exchange Station IAX: Inter-Asterisk Exchange IETF: Internet Engineering Task Force ITU: International Telecomunication Union IVR: Interactive Voice Response LCR: Least Cost Routing MGCP: Media Gateway Control Protocol NAT: Network Adress Translators NT: Network Termination NTP: Network Transport Protocol PBX: Private Branch Exchange QoS: Quality of Service RDSI: Red Digital de Servicios Integrados RTCP: RealTime Transport Control Protocol RTP: RealTime Transport Protocol SIP: Session Initiation Protocol SCCP: Skinny Client Control Protocol
503

STUN: Simple Transversal of UDP through NATs TE: Terminal Equipment

504

Bibliografa

FOROS:
<http://groups.google.es/group/asterisk-es> <http://perlenespanol.com/foro/>

LIBROS Y TUTORIALES:
<http://cdn.oreilly.com/books/9780596510480.pdf> <http://asterio.com.ar/resources/downloads/Asterisk_desconsolado.pdf> <http://lax.franhp.net/Asterisk/Curs_asterisk_tecnoba_3.pdf>

VOIP:
<http://www.voipnovatos.es> <http://blog.voipminic.com/> <http://www.voip-info.org/>

505

ASTERISK:
<http://www.sinologic.net/> <http://www.asteriskdocs.org> <http://www.the-asterisk-book.com/unstable/>

PRACTICAS Y APLICACION:
<http://www.linux-es.org/distribuciones>

Instalacion y configuracion de Asterisk:


<http://www.asterisk.org/> <http://www.asteriskclub.org/> <http://www.loligo.com/asterisk/example-configs.2003-04-24/> <http://www.asteriskguru.com> <http://www.voztovoice.org/?q=node/199>

Preparacin del servidor:


<http://zeuz-dc.blogspot.com/2008/06/servidor-dhcp.html> <http://www.davidstclair.co.uk/node/18> <http://r3xet.blogspot.com/2008/11/instalar-mysql-5-sobre-linux-centos-5.html> <http://cjaraba.blogspot.com/2008/03/instalar-apache-y-tomcat-en-centos.html> <http://foro.portalhacker.net/index.php/topic,10896.0.html> <http://www.aoddy.com/2007/12/12/how-to-install-phpmyadmin-2113-on-centos-5/> <http://spot-myblog.blogspot.com/2009/09/glibc-svn-and-qt.html>

Funcionalidades:
<http://www.verbio.com/> <http://www.fop2.com/> <http://www.asternic.biz/> <http://blog.voz-ip.com/> <http://www.saghul.net/blog/> <http://www.voipnovatos.es/item/2009/12/cmo-instalar-chan_skype-para-asterisk-14-o-16> <http://www.asterisk-peru.org/node/25> <http://www.ecualug.org/?q=2007/03/19/comos/conectar_dos_localidades_usandoasterisk> <http://www.vicosoft.org/blog/%C2%BFque-es-nagios/> <http://www.bulma.net/body.phtml?nIdNoticia=2075> <http://bargues.info/?cat=35> <http://ualtech.wordpress.com/2009/02/05/tutorial-sobre-monitorizacion-de-asteriskusando-nagios/> <http://www.mitelefoniaip.com/item/72> <http://wiki.centos.org/es/HowTos/Nagios>

Precios:
<http://www.amazon.com/ProCurve-Switch-1400-8G-Gigabit-Network/dp/B000P22S2Q> <http://sanisidro-buenosaires.olx.com.ar/sipura-spa-3000-ata-adaptador-telefonico-analogicoiid-14097216> <http://www.ciao.es/Cisco_IP_Phone_7941__1114209>

506