You are on page 1of 248

MANUAL TCNICO

Marketing Interactivo IVR


Introduccin.

Debido a que nuestro proyecto consta de tres mdulos principales, ste

Manual estar de igual manera, dividido en tres mdulos, los cuales han sido

analizados por separado, para la mejor comprensin del mismo. Estos son:

- Captulo I: ASTERISK. Este captulo es muy extenso debido a la

magnitud del alcance del mismo. Sin embargo, hemos tratado slo los

puntos concernientes al desarrollo de nuestro proyecto.

- Captulo II: MONITOR ASTERISK JAVA. Este captulo tratar de

dar una gua respecto a la paquetera utilizada para el desarrollo de

este mdulo, cuyo propsito es, simplemente, la comunicacin entre el

mdulo correspondiente a Asterisk y el mdulo correspondiente a la

Base de Datos Oracle.

- Captulo III: JAVA ORACLE. En este captulo consta del mdulo

correspondiente al Mantenimiento de la Base de Datos Oracle, a

travs de la herramienta de programacin Java.


Propsito

El propsito de este manual es explicar de forma tcnica el desarrollo de este

proyecto, con la finalidad de que sirva de gua para la elaboracin de un

proyecto subsiguiente o para el mejoramiento del actual.

Recomendaciones

Este manual deber ser utilizado solamente como gua, debido a que est

explicado de una forma simple y sencilla, debido a la complejidad del mismo.

Para un mejor conocimiento de las herramientas utilizadas en la elaboracin

de este proyecto, se recomienda realizar una profunda investigacin de las

mismas en sitios en Internet y llevar a cabo los correspondientes all

explicados. Adems se recomienda participar en foros de Asterisk, con el fin

de nutrirse de conocimientos de personas ya experimentadas.


ndice de Contenido

Pgs.

Introduccin

Propsito

Recomendaciones

CAPTULO 1:

ASTERISK

1. Breve descripcin del mdulo 1

2. Herramientas utilizadas .. 2

2.1 Requerimientos de Software .. 2

2.2 Requerimientos de Hardware . 4

2.3 Requisitos Logsticos 5

3 Arquitectura del Mdulo .. 5

3.1 Arquitectura de Asterisk 6

4 Instalacin y Configuracin del ambiente de trabajo .. 9

4.1 Instalacin y configuracin de Asterisk .. 9

4.1.1 Instalacin del Sistema Operativo 9

4.1.2 Pre-Instalacin de Asterisk 10

4.1.3 Instalacin de Asterisk 12


4.1.4 Instalacin de Libpri ... 15

4.1.5 Instalacin de Sonidos en espaol .. 16

4.2 Instalacin y configuracin de X-Lite 18

4.2.1 Pasos de instalacin de X-Lite . 18

4.2.2 Configuracin de X-Lite . 18

5 Organizacin de Directorios de Asterisk 20

6 Asterisk y la Tecnologa Tradicional .. 23

6.1.1 Interfaces Analgicos . 25

6.1.2 Interfaces Digitales . 27

7 Desarrollo del proceso de Software .. 28

7.1 Especificaciones Generales . 28

7.2 Especificacin de Diagramas de Procesos 28

7.3 Especificacin de Casos de Uso . 34

7.4 Especificacin de Diagramas de Caso de Uso 37

7.5 Especificacin de Diagramas de Secuencia . 42

7.6 Especificacin de Diagramas de Colaboracin 45

7.7 Configuracin de Asterisk como IVR .. 48

7.7.1 Configuracin Etc/Asterisk 48

7.7.2 Men de Voz Interactivo . 53

7.7.3 Contextos .. 56
CAPTULO 2:

ASTERISK JAVA

1. Introduccin 62

2. Descripcin de la Herramienta 63

3. Breve descripcin del mdulo . 63

4. Arquitectura del Mdulo 64

4.1. Arquitectura de Asterisk Java .. 64

4.2. Arquitectura del Subsistema Monitor . 64

5. Requerimientos 66

6. Instalacin y Configuracin del ambiente de trabajo .. 67

6.1. Instalacin de Asterisk Java 67

6.2. Instalacin de J2SDK .. 67

6.3. Configuracin de las variables de entorno .. 68

7. Desarrollo del proceso de Software 71

7.1. Librera utilizadas .. 71

7.1.1. AMI . 71

7.1.2. AGI . 72

7.2. Especificaciones de Diagramas de Caso de Uso .. 73

7.3. Especificaciones de Diagramas de Secuencia 74

7.4. Especificaciones de las clases de Asterisk Java . 74

7.4.1. Especificacin de las clases Java (JDK) 75

7.4.2. Especificacin de las clases Java (Java Sun Studio Creator) 90


CAPTULO 3:

JAVA-ORACLE

1. Breve descripcin del mdulo . 101

2. Herramientas utilizadas 102

2.1 Requerimientos de Software .. 102

2.2 Requerimientos de Hardware . 103

3 Arquitectura del Mdulo 104

3.1 Arquitectura de Oracle . 104

3.2 Arquitectura de iReport 105

4 Instalacin y Configuracin del ambiente de trabajo 105

4.1 Instalacin de Oracle y Creacin de la Base de Datos 106

4.2 Instalacin de iReport . 113

5 Desarrollo del proceso de Software . 114

5.1 Especificaciones Generales . 115

5.2 Especificacin de Diagramas de Procesos 116

5.3 Especificacin de Casos de Uso 117

5.4 Especificacin de Diagramas de Caso de Uso 118

5.5 Especificacin de Diagramas de Secuencia .. 120

5.6 Especificacin de Diagramas de Colaboracin 121

5.7 Flujo de Ventanas 122

5.8 Especificacin de Diagramas de Componentes .. 123

5.9 Especificacin de Diagramas de Clases . 124


5.10 Especificacin de Diagramas de Relacin . 125

6 Base de Datos 126

6.1 Creacin de Usuarios . 126

6.2 Creacin de Tablespaces 127

6.3 Identificadores de la base de datos: variables, funciones,

procedimientos, paquetes . 127

6.4 Diagrama de la Base de Datos .. 138

6.5 Script de la Base de Datos .. 139

6.6 Secuencias, Vistas 141

6.7 Paquetes . 141

6.8 Procedimientos 142

6.9 Diccionario de la Base de Datos . 145

6.10 Creacin del rbol de opciones . 147

7 iReport 148

7.1 Creacin de Reportes con iReport 148

8 Java .. 156

8.1 Clases Componentes . 156

8.2 Especificacin de las pginas jsp . 167

9 Levantando los servicios . 168

9.1 Levantando la Base de Datos . 168

9.2 Levantando iReport 168


ndice de Grficos

Pgs.

GRFICO 1.1. Interfaz de X-Lite 4

GRFICO 1.2 Arquitectura de Asterisk .. 7

GRFICO 1.3 Instalacin Asterisk (a) 13

GRFICO 1.3 Instalacin Asterisk (b) 14

GRFICO 1.3 Instalacin Asterisk (c) 14

GRFICO 1.4. Configuracin de X-Lite .. 19

GRFICO 1.5. Configuracin de X-Lite 20

GRFICO 1.6. Interfaces de Asterisk 25

GRFICO 1.7. Puertos FXO 26

GRFICO 1.8. Puertos FXS . 26

GRFICO 1.8. Diagrama del Proceso Recibe Llamadas .. 29

GRFICO 1.9. Diagrama del Proceso Realiza Llamadas 30

GRFICO 1.10. Diagrama del Proceso S. Interactivos . 31

GRFICO 1.11. Diagrama del Proceso Transfiere Llamada . 32

GRFICO 1.12. Diagrama del Proceso Publicidad . 33

GRFICO 1.13. Diagrama del Caso de Uso Proceso Principal . 37

GRFICO 1.14. Diagrama del Caso de Uso. Recibe Llamada .. 38

GRFICO 1.15 Diagrama del Caso de Uso. Emite Llamada . 39

GRFICO 1.16. Diagrama del Caso de Uso. Ingreso Cliente 40

GRFICO 1.17. Diagrama del Caso de Uso. Servicios Interactivos . 41


GRFICO 1.18. Diagrama de Secuencias. Emisin de Llamadas 42

GRFICO 1.19. Diagrama de Secuencias. Servicios Interactivos 43

GRFICO 1.20. Diagrama de Secuencias. Recibe llamadas . 44

GRFICO 1.21. Diagrama de Secuencias. Transferencia de llamadas 44

GRFICO 1.22. Diagrama de Colaboracin. Recibe llamadas .. 45

GRFICO 1.23. Diagrama de Colaboracin. Sistemas interactivos 46

GRFICO 1.24. Diagrama de Colaboracin. Emite llamadas 46

GRFICO 1.25. Diagrama de Colaboracin. Transferencia de llamadas 47

GRFICO 2.1. Diagrama de Caso de Uso Asterisk Java .73

GRFICO 2.2. Diagrama de Secuencia. Asterisk Java . 74

GRFICO 3.1. Arquitectura de Oracle ..104

GRFICO 3.2. Arquitectura de iReport 105

GRFICO 3.3. a. Instalacin Oracle .106

GRFICO 3.3. b. Instalacin Oracle .107

GRFICO 3.3. d. Instalacin Oracle .108

GRFICO 3.3. e. Instalacin Oracle .109

GRFICO 3.3. f. Instalacin Oracle . 110

GRFICO 3.3. g. Instalacin Oracle 110

GRFICO 3.3. g. Instalacin Oracle 111

GRFICO 3.3. h. Instalacin Oracle .112


GRFICO 3.3. i. Instalacin Oracle 112

GRFICO 3.3. j. Instalacin Oracle 113

GRFICO 3.3. Diagrama de Procesos 116

GRFICO 3.4. Diagrama de Caso de uso Principal .. 118

GRFICO 3.5. Diagrama de Caso de uso del mdulo .. 119

GRFICO 3.6. Diagrama de Secuencia 120

GRFICO 3.7. Diagrama de Colaboracin 121

GRFICO 3.8. Diagrama de Flujo de Ventanas 122

GRFICO 3.9. Diagrama de Componentes 123

GRFICO 3.10. Diagrama de Clases .. 124

GRFICO 3.11. Diagrama de Entidad Relacin 125

GRFICO 3.12. Diagrama de Base de Datos .138

GRFICO 3.13.a. Trabajando con iReport 148

GRFICO 3.13.b. Trabajando con iReport .... 149

GRFICO 3.13.c. Trabajando con iReport .. 149

GRFICO 3.13.d. Trabajando con iReport 151

GRFICO 3.13.e. Trabajando con iReport . 152

GRFICO 3.13.f. Trabajando con iReport .. 153

GRFICO 3.13.g. Trabajando con iReport 154

GRFICO 3.13.h. Trabajando con iReport 154

GRFICO 3.13.i. Trabajando con iReport 155

GRFICO 3.14 Levantando iReport 169


GRFICO 3.15 Levantando iReport 169

GRFICO 3.16 Levantando iReport . 170

ndice de Cuadros y Tablas

Pgs.

TABLA 1.1. Requerimientos de Hardware de Asterisk 5

TABLA 1.2. Configuracin de Asterisk 17

TABLA 1.3. Caso de Uso (A) . 34

TABLA 1.4. Caso de Uso (B) .. 35

TABLA 1.5. Caso de Uso (C) .. 36

TABLA 3.1. Casos de Uso 117

CUADRO 1.1. Sip.conf .. 49

CUADRO 1.2. Sip_additional.conf 49

CUADRO 1.3. Manager_custom.conf . 51

CUADRO 1.4. [from-internal-ivr] .. 54

CUADRO 1.4.b Opciones IVR . 55

CUADRO 1.5. Contexto Publicidad de Servicios .. 56

CUADRO 1.6. Contexto Servcable . 57

CUADRO 1.7. Contexto Servcable (B) 57


CUADRO 1.8. Contexto ServAerocable 58

CUADRO 1.9. Contexto ServAerocable (B) 58

CUADRO 1.10. Contexto ServPagueporVer 59

CUADRO 1.11. Contexto ServInternet .. 59

CUADRO 1.12. Contexto Promociones . 59

CUADRO 1.13. Contexto Sistema-Interactivo 60

CUADRO 1.14. Atencin al Cliente 61

CUADRO 1.15. Contexto Salir 61

CUADRO 2.1. contrato.agi 69

CUADRO 2.2. clave.agi .70

CUADRO 2.3. promociones.agi 71

CUADRO 2.4. cConexion.java . 75

CUADRO 2.5 contrato.java(a) . 76

CUADRO 2.6 contrato.java(b) . 76

CUADRO 2.7 clave.java 78

CUADRO 2.8 clave.java(b) 79

CUADRO 2.9 clave.java(c) 80

CUADRO 2.10. clave.java(d) .. 81

CUADRO 2.11. buzon.java . 82

CUADRO 2.12. buzon.java(b) . 83

CUADRO 2.13. buzon.java(c) . 84


CUADRO 2.14. buzon.java(d) . 85

CUADRO 2.15. buzon.java(e) .. 86

CUADRO 2.16. buzon.java(f) . 87

CUADRO 2.17. graba.java 88

CUADRO 2.18. graba.java(b) .. 89

CUADRO 2.19. cConexion.java 91

CUADRO 2.20. cExtensiones.java 92

CUADRO 2.21. cExtensiones.java(b) .. 93

CUADRO 2.22. Listener.java .. 95

CUADRO 2.23. MonitorJava 96

CUADRO 2.24. Transacciones.java 97

CUADRO 2.25. Transacciones.java(b) .. 98

CUADRO 2.26. Transacciones.java(c) 99

CUADRO 3.1. Procedure .. 137

CUADRO 3.2.a Script de Base de Datos 139

CUADRO 3.2.b Script de Base de Datos .140

CUADRO 3.3 Vistas 141

CUADRO 3.4. Package(a) .. 142

CUADRO 3.4.a. Package(b) .. 142

CUADRO 3.4.b Package(b) .. 143

CUADRO 3.4.c Package(c) . 143


CUADRO 3.4.d Package(d) 144

CUADRO 3.4.e Package(e) . 144

CUADRO 3.4.f Package(f) 145

CUADRO 3.5. rbol de Opciones 147

CUADRO 3.6. Script para el rbol de Opciones .. 147

CUADRO 3.7 Clase cConexion . 156

CUADRO 3.8 Clase cDatos Archivo . 157

CUADRO 3.9 Procedure Actualizar 158

CUADRO 3.10 Procedure voidInit 160

CUADRO 3.11 Procedure destroy ... 160

CUADRO 3.12 Procedure Insertar . 162

CUADRO 3.13a Procedure Editar 163

CUADRO 3.13b Procedure Eliminar .. 164

CUADRO 3.14 Procedure Actualizar 165

CUADRO 3.15 Procedure Nuevo 166

CUADRO 3.16 Procedure generarPdf 167


ndice de Pantallas

Pgs.

PANTALLA 1. Ingreso al Sistema 3

PANTALLA 2. Ingreso Login & Password .. 4

PANTALLA 3. Bienvenida al Sistema . 5

PANTALLA 4. Pantalla Principal IVR .. 7

PANTALLA 5. Men de Opciones INF. GENERAL 9

PANTALLA 6. Consultar Archivo IVR 9

PANTALLA 7. Men de Opciones EDICION 11

PANTALLA 8. Mantenimiento Archivo IVR 11

PANTALLA 9. Mantenimiento Archivo IVR (b) .. 12

PANTALLA 10. Mensajes sistema .. 14

PANTALLA 11. Modificacin .. 15

PANTALLA 12. Actualizacin .. 16

PANTALLA 13. Mensaje de Actualizacin 17

PANTALLA 14. Eliminacin . 18

PANTALLA 15. Mensaje de Eliminacin 19

PANTALLA 16. Opcin REPORTES .. 20

PANTALLA 17. Opcin ACERCA DE.. 21

PANTALLA 18. Pestaa IVR CALL SYSTEM 22

PANTALLA 19. Pestaa HELP 22


PANTALLA 20. Pestaa LICENSE .23

PANTALLA 21. Pestaa SYSTEM PROPERTIES 23

PANTALLA 22. Pantalla del Softphone XLITE 24

PANTALLA 23. Nmero del IVR Call System . 27

PANTALLA 24. Ingreso Vlido al IVR Call System 27


CAPTULO 1
ASTERISK

1. Breve descripcin del mdulo

Este mdulo describir los aspectos ms relevantes de Asterisk, debido a

que es muy complejo slo se detallarn las configuraciones utilizadas para

nuestro mdulo. El software Asterisk es capaz de simular las funciones de

una IPBX, conectndose a cualquier telfono, lnea telefnica, circuito

especfico de telefona o interfaz de Voz IP a cualquier otro interfaz o servicio

a travs de las aplicaciones de Asterisk.

Un carcter diferenciador de Asterisk, es la integracin de todos los

aplicativos, dentro de la misma mquina hardware. Al contrario que otros

muchos sistemas, que montan un sistema base y cualquier aadido se debe

realizar mediante la integracin de tarjetas propietarias o incluso nuevos

equipos fsicos con aplicaciones independientes.


Esto, no significa que Asterisk no se pueda interconectar con cualquier otro

sistema, todo lo contrario, Asterisk est basado en cdigo abierto, es la

posibilidad de desarrollar cualquier interfaz o aplicativo para que interaccione

con el sistema, como parte de l o de forma independiente.

2. Herramientas utilizadas

A continuacin detallaremos las herramientas de software necesarias para el

desarrollo de este mdulo:

2.1 Requerimientos de Software

Sistema Operativo CentOs 4.4.

Software Asterisk 1.4

Softphone

Sistema Operativo CentOS 4.4


En la implementacin de este proyecto se escogido la distribucin de Linux

CentOS (The Comunity Enterprise Operating System) versin 4.4. Como su

nombre indica se trata de una distribucin diseada para el uso empresarial.

Est desarrollada por cAos Foundation y est basada en las fuentes de Red

Hat Enterprise Server 4. Es totalmente compatible con esta distribucin y es

tan estable y potente como ella. La versin 4.4 incorpora la ltima versin de

kernel 2.6.
64

El sistema operativo y Asterisk conforman la base para el funcionamiento de

nuestro proyecto. Con ello se puede construir un sistema PBX totalmente

operativo y funcional.

Software Asterisk 1.4

Asterisk es un software de conectividad entre las distintas tecnologas

telefnicas o canales y las aplicaciones vinculadas a la telefona, como por

ejemplo, las conferencias, transferencia de llamadas, IVR, etc.

Softphone
Utilizaremos el softphone de XLite 3.0, el cual ofrece toda la productividad a

los usuarios de un tradicional telfono con escritorio y los perfeccionamientos

de la computadora mviles. De un simple click en el botn o desde el teclado.

Los usuarios pueden marcar, pueden contestar, o pueden manejar llamadas.

X-Lite les exige a los usuarios que tengan Altavoces y/o audfono

estereofnicos que tengan micrfono para realizar y aceptar llamadas. (ver

grfico 1.1).
65

GRFICO 1.1. Interfaz de X-Lite

2.2 Requerimientos de Hardware

Los equipos de hardware requeridos para el buen funcionamiento de nuestro

mdulo son: (ver tabla 1.1)

Equipo Pentium III de 1G o superior

Memoria Ram 512MB

Disco duro desde 30GB

Dispositivo CDRom

Disquetera 3 1/4, teclado, Monitor 14


66

Mnimo ptimo
Intel Pentium III Intel Pentium 4
Procesador
700 MHz o equivalente 2.0 GHz o equivalente
Memoria 256 MB RAM 256 MB RAM
Espacio de disco duro 30 MB 30 MB
Windows 2000
Sistema Operativo
Windows XP
Conexin Redes IP (ejemplo: broadband, LAN, inalmbrica)
Tarjeta de Sonido Full duplex, 16-bit

Tabla 1.1. Requerimientos de Hardware de Asterisk

2.3 Requisitos Logsticos

El personal administrativo delegado es quien tiene facultad de conocimiento,

experiencia y administrar correctamente el sistema operativo Linux;

instalacin del Centos 4.4, comandos bsicos, dominio, red, etc.

3. Arquitectura del Mdulo

A continuacin detallamos la arquitectura de la herramienta utilizada en este

mdulo, en nuestro caso: Asterisk.


67

3.1 Arquitectura de Asterisk

La arquitectura de Asterisk cuenta con la versatilidad del sistema para

desarrollar cualquier nuevo canal de comunicaciones, codificadores de audio,

formato de ficheros que puede controlar Asterisk.

Asterisk es de licencia GPL dando la libertad de ejecutar, modificarlo y aplicar

mejoras al programa con cualquier propsito.

Asterisk esta formado por un ncleo principal encargado de gestionar todo el

sistema PBX. Tiene las mismas caractersticas de servicios de un PBX como

IVR, buzn de voz entre otros. Permitiendo utilizar cualquier hardware

conveniente y tecnologa disponible.

Asterisk tambin funciona sin la necesidad de hardware alguno para

conectividad siendo la ventaja, para nuestro proyecto Marketing Interactive

IVR basado en Voz sobre IP.

Sus funciones principales son:

PBX Switching: La esencia del Asterisk, por supuesto es un sistema de

conmutacin de intercambio de rama privada, conectando llamadas entre

varios usuarios y tareas automatizadas. La base de conmutacin conecta a

los usuarios llegando a varios software y hardware de interfaces.


68

Lanzador de Aplicaciones: Lanza aplicaciones de servicios para usos tales

como voicemail, lista de directorio.

Traductor de Cdigos: usa mdulos de cdigos para codificar y decodificar

varios formatos de comprensin de audio, usadas en la industria de la

telefona. Un gran numero de cdigos estn disponibles para satisfacer

necesidades y llegar al mejor balance entre la calidad del audio.

Organizador y Manejador: Maneja organizacin de tareas de bajo nivel y

sistemas de manejo para un ptimo ejecucin bajo cualquier condicin de

carga.

GRFICO 1.2 Arquitectura de Asterisk


69

Destacan cuatros API utilizadas por el ncleo de Asterisk:

API de Formato de Ficheros: Sirve para controlar el formato de

ficheros que pueden ser controlados por el sistema.

API de Aplicaciones: Se han desarrollado muchas aplicaciones de

IVR, MultiConferencia, etc. Pudiendo desarrollar todas aquellas

aplicaciones mediante AGI (Asterisk Gateway Interface) pudiendo

desarrollarse aplicaciones en C, C++, perl, php, etc.

API de Traduccin de Codec: Controla la traduccin de codecs

entre participantes en una comunicacin. Se pueden implementar

codecs nuevos

API de Traduccin de Codec: Controla la traduccin de codecs

entre participantes en una comunicacin. Se pueden implementar

codecs nuevos.
70

4. Instalacin y Configuracin del ambiente de trabajo

A continuacin detallaremos la instalacin de las herramientas usadas para

el desarrollo de este mdulo:

4.1 Instalacin y Configuracin de Asterisk

Para la instalacin de Asterisk es necesario seguir el siguiente orden:

a) Instalacin del Sistema Operativo

b) Pre-Instalacin de Asterisk

c) Instalacin de Asterisk

d) Instalacin de Libpri

e) Instalacin de Sonidos en espaol

A continuacin los detalles:

a) Instalacin del Sistema Operativo

Ivr Call System, ha utilizado para el servidor el sistema operativo Centos v.4.4

que utiliza el kernel 2.6, sin interfaz graficas. Para instalar el servidor se

requiere insertar el CD que contiene el sistema solicitado (Centos v.4.4)

Advertencia: Cada vez que se ejecuta la instalacin se formatea el disco

duro y se perdern todos los archivos contenidos en el mismo.


71

Bsicamente solicita informacin respecto a la configuracin del idioma, de red,


hardware no detectado automticamente, el formateo y particin del disco duro.
Cuando el instalador solicita el tipo de instalacin (Installation Type) se debe
seleccionar la opcin personalizada (Server).

Seguidamente pregunta que paquetes de software se desea instalar en el

sistema. Se debe seleccionar la instalacin mnima, que desmarcar todos

los paquetes instalados. El software requerido se instalar manualmente una

vez instalado el sistema operativo.

b) Pre-Instalacin del Asterisk

Despus de terminar la correcta instalacin del sistema operativo, el

siguiente paso es ejecutar el servidor asterisk, con el usuario root para

instalar el resto del software.

Antes de Instalar los componentes de Asterisk, se necesita para su correcta

compilacin y funcionamiento ciertos paquetes necesarios.

- openssh-server; para acceso remoto seguro.


- gcc-c++; compilador de lenguaje C y herramientas
- libstdc++-devel.

La instruccin de CentOS yum se puede descargar en el Internet e instala

automticamente los paquetes solicitados y las dependencias necesarias, en

el prompts del CentOS las siguientes lneas de comandos:


72

Compilador de lenguaje C, expansin del compilador gcc, y

herramientas

- Yum install libstdc++-devel


- Yum install gcc-c++

Bison y flex: Son necesarios para compilar Asterisk. Bison es un

generador de analizadores sintcticos de propsito general que

convierte una descripcin gramatical para una gramtica

independiente del contexto y Flex es una utilidad para generar

programas que reconocen patrones de texto.

- Yum install bison


- Yum install flex

Zlib zlib-devel: El paquete zlib contiene rutinas de compresin y

descompresin.

- Yum install zlib

ncurses y ncurses-devel: El paquete Ncurses proporciona libreras

para el manejo de caracteres y terminales, incluidos paneles y mens.

Necesario para construir algunas nuevas herramientas de Asterisk.

- Yum install ncurses ncurses-devel


73

Kernel-sourcecode y kernel-devel: Para poder compilar Asterisk es

necesario tener instaladas las Fuentes del kernel y el paquete de

desarrollo del kernel.

- Yum install kernel-sourcecode kernel-devel

Openssl y openssl-devel: El paquete OpenSSL contiene

herramientas de administracin y libreras relacionadas con la

criptografa. Son tiles para suministrar funciones criptogrficas a

otros paquetes.

- Yum install openssl openssl-devel

c) Instalacin de Asterisk

Para descargar gratuitamente Asterisk se encuentra disponible en la pgina

principal www.asterisk.org, se recomiendo descargar la versin estable

aunque tambin se encuentra versiones de desarrollo, esto queda a

consideracin del administrador se recomienda por obvias razones la versin

estable. A continuacin es necesario configurar la IP del servidor tecleando

en la lnea de comando de CentOS lo siguiente: netconfig y presionar enter.

Este comando se utiliza para darle una direccin IP otorgada por el administrador de
la red exclusivamente para nuestro servidor.

A continuacin aparecer una pantalla de configuracin y en esta de deber

teclear la direccin de IP del servidor (direccin otorgada por el Administrador


74

de la red) La IP debe estar en la misma subred del router y de todas las

computadora que van a utilizar el telfono con VoIP.

Est pendiente del proceso para que cuando se le pregunte la clave de root

la suministre y recuerde, si olvida la clave tendr problemas para ingresar a

su sistema as que cpiela y gurdela en un lugar seguro si cree que la

puede olvidar.

GRFICO 1.3 Instalacin Asterisk (a)

Cuando vea la pantalla anterior presione el botn 'Yes' para continuar, este

paso requiere que usted tenga una tarjeta de red en su sistema y que esta

haya sido reconocida correctamente durante la instalacin del sistema.


75

GRFICO 1.3 Instalacin Asterisk (b)

En el campo de la direccin IP ingrese una direccin vlida, por ejemplo:

192.168.1.56, si usted esta conectando su sistema a una red existente,

consulte al administrador de la red el valor adecuado de la direccin IP.

La mscara de red toma usualmente el valor de 255.255.255.0, si usted esta

conectando su sistema a una red existente, consulte al administrador de la

red el valor adecuado de la mscara.

GRFICO 1.3 Instalacin Asterisk (c)


76

Paquetes necesarios para el funcionamiento de nuestro sistema son:

asterisk-1.2.1 Ncleo del sistema

asterisk-addons-1.2.0.Software adicional

libpri-1.2.0 Librera para gestionar enlaces RDSI Primarios

El orden de instalacin es el libpri, asterisk y los adicionales, es vital

respetar el orden. Entonces insertamos el CD en el Equipo, montamos el CD

de Paquetes, ubicamos los archivos y procede a copiarlos a las carpetas

indicadas.

Estos paquetes debern ser colocados en el directorio /usr/src del CentOS

en sus respectivas carpetas y el paquete libpri en el directorio /usr/src/libpri.

d) Instalacin de Libpri

# cd /usr/src/libpri

# make clean

# make install

Es posible tambin que necesite instalar Libiax: que es una librera para

utilizar el protocolo IAX. Cuando se tenga que conectar entre dos Asterisk.
77

e) Instalacin de Sonidos en espaol

Por defecto Asterisk se encuentra instalado en ingles, aunque soporta

mltiples idiomas, se puede configurar los sonidos en espaol, estos

archivos de sonidos estn comprimidos en Zip, se tendr que

descomprimirlo a la carpeta sounds, ubicado en el directorio

/var/lib/asterisk/sounds

Nota: Nuestro proyecto Marketing Interactive Ivr proporciona sus propios

archivos de voz en espaol.

Se debe primero montar dispositivo a usar puede ser CD o un Pendrive

# mount /media/cdrom o usbdisk

Verificamos la existencia de los archivos.

# cd /var/lib/asterisk/sounds
# ls

Si esta correctamente descargado el archivo, visualizamos 4 carpetas, digits,

es, letters, phonetic, recomendamos que se respalde la carpeta sounds

antes de descargar los archivos.


78

Configuracin de Asterisk

El comportamiento de Asterisk se debe a la configuracin de sus propios

archivos, se recomienda instalar las extensiones de demostracin, ser de

ayuda para programar las aplicaciones necesario que se desea implementar

al futuro.

El archivo ms importante para el funcionamiento de Asterisk, es el archivo

de extensions.conf, es el que coordina todas las acciones dentro de Asterisk,

ya que se encarga de todo el ruteo de llamadas.

Todos estos Archivos de Configuracin se encuentran en el directorio

/etc/asterisk/ls. Se advierte de no modificar estos archivos que son propias

del funcionamiento del asterisk, causara fatales problemas en su uso.

root@asterisk] /etc/asterisk /ls

asterisk.conf festival.conf sip.conf


extensions.conf iax.conf sip_additional.conf
extensions_custom.conf manager.conf voicemail.conf
extensions_ivr.conf manager_custom.conf zapata.conf

TABLA 1.2. Configuracin de Asterisk


79

4.2 Instalacin y Configuracin de X-Lite

Vamos a usar el softphone gratuito de counterpath el Xlite. Usted puede

bajarlo de http://www.counterpath.com/. Este softphone est diseado para

trabajar sistemas basado IP, X-Lite, servidores de la telefona dentro de una

empresa LAN (Red del rea Local) o VoIP red de proveedor de servicio.

4.2.1. Pasos Instalacin de X-Lite

1. Ejecute el arreglo de X-Lite el archivo ejecutable y siga las

sugerencias del instale del archivo wizard.

2. Al final wizard, verifique el Lanzamiento el checkbox de X-Lite

para empezar usando el softphone.

3. Pulse el botn finalizar para completar la instalacin.

4.2.2 Configurando X-Lite

1. Usar el X-Lite iniciando en el men de Windows o pulsando

doble-click en el icono del escritorio.

2. El despliegue de la Llamada muestra Inicializando, seguido

Descubriendo red y esperando la informacin del proxy. Los

usuarios deben preparar por lo menos una cuenta antes de

usar X-Lite para hacer o recibir llamadas.

3. Para usar una cuenta mediante la comunicacin de VoIP, la

cuenta debe habilitarse dentro del X-Lite, pulse el botn del


80

softphone, seleccione SIP Account Settings para habilitar una

cuenta para el cliente.

Primero se de habilitar una cuenta SIP, aadiendo la IP de la red, el nombre

del usuario y el nombre display.

GRFICO 1.4. Configuracin de X-Lite

Segundo luego se habilita Properties of Account1

Los usuarios podrn poner y recibe slo llama en esa cuenta.

Los usuarios nunca pueden recibir llamadas en una cuenta invlida


81

GRFICO 1.5. Configuracin de X-Lite

5. Organizacin de directorios de Asterisk

Asterisk.conf Este es el archivo que indica los directorios que utiliza

Asterisk, son creados durante su instalacin.

A continuacin los siguientes directorios que utiliza Asterisk:

/etc/asterisk - Contiene los archivos de configuracin de Asterisk.

/usr/sbin - Es el directorio de binarios del sistema. Contiene los

ejecutables y scripts de Asterisk.


82

/usr/lib/asterisk - Contiene los objetos binarios especficos de la

arquitectura Asterisk

/usr/lib/asterisk/modules - Contiene los mdulos de tiempo de

ejecucin para aplicaciones, drivers de canales, codecs, drivers de

formato de archivo.

/usr/incluye/asterisk - Contiene los archivos de cabecera necesarios

para construir las aplicaciones de Asterisk, drivers de canales, y otros

mdulos cargables.

/var/lib/asterisk - Contiene los datos variables utilizados por Asterisk en

su operacin normal.

/var/lib/asterisk/agi-bin - Contiene los scripts AGI para ser utilizados con

las aplicaciones AGI en el plan de numeracin.

/var/lib/asterisk/astdb - Base de datos de Asterisk. Es el equivalente al

registro de Windows. Este archivo nunca se usa directamente, pero sus

contenidos pueden ser visualizados y modificados en la lnea de

comandos de Asterisk con el set de funciones database.


83

/var/lib/asterisk/moh/mp3 - Directorio de almacenamiento para la

msica en espera en formato mp3

/var/lib/asterisk/sounds - Directorio de almacenamiento para archivos

de audio, usados por las aplicaciones de Asterisk. Algunos prompts estn

organizados en subdirectorios.

/var/spool/asterisk - Usado por los archivos de encolado de tiempo de

ejecucin del buzn de voz, llamadas salientes

/var/spool/asterisk/outgoing - Monitorizado por Asterisk para las

llamadas salientes. Cuando un archivo es creado en este directorio,

Asterisk analiza el archivo e intenta una llamada saliente que es

descargada en la PBX si es respondida.

/var/spool/asterisk/vm - Almacenamiento de los buzones de voz,

saludo.
84

6. Asterisk y la Telefona Tradicional

Los servidores del Asterisk son capaces de instalar conexiones entre varias

oficinas utilizando un protocolo de intercambio del Asterisk(IAX) este

protocolo apoya muchas conexiones simultaneas y funciona fcilmente sobre

conexiones NAT, de esta manera puede construir routers menos costosos

para llamadas.

Asterisk es capaz de conectarse a las redes tradicionales (analgicas o

digitales) a travs de tarjetas de comunicaciones consiguiendo las siguientes

caractersticas:

Es posible conectar extensiones analgicas o RDSI.

Es posible dotar de lneas analgicas o RDSI (Bsicas o primarias) al

Sistema con Asterisk.

Es posible Conectar Centralitas tradicionales como extensin o como

lnea.

Para ello, algunas de las tarjetas que est disponibles son las siguientes:

Analgicas:

- Digium X100P o TDM400P

- Dialogic D/41JCT-LS
85

Digitales:

- Digium TE110P, TE410P y TE405P

Para la comunicacin de Asterisk se necesita configurar los siguientes

ficheros:

zaptel.conf / zapata.conf : Configuracin de lneas y extensiones

analgicas y digitales

capi.conf : Configuracin de lneas y extensiones RDSI bsicas

sip.conf : Configuracin de extensiones y conexiones con

Operadores IP u otros Asterisk

h323.conf / oh323.conf : Configuracin de conexiones con

Operadores IP

iax.conf : Configuracin de extensiones y conexiones con

Operadores IP u otros Asterisk


86

GRAFICO 1.6. Interfaces de Asterisk

6.1.1 Interfaces Analgicos

Puertos FXO: Estos interfaces que integra el Asterisk, es utilizado para

conectarse con la RTPC o como extensin de una centralita tradicional

analgica. Para establecer estas conexiones se pueden utilizar las tarjetas

X100P y TDM400P de Digium o bien tarjetas TE110P o TE410P conectadas

con bancos de Canales.


87

X100P ASTERISK
(1FXO)
TDM400P
RTPC (4FXS)
TDM400P
(4FXO) * BancodeCanales
TE110P (modoFXS)
(30FXS)
BancodeCanales TE110P
(modoFXO) (30FXO)
GRAFICO 1.7. Puertos FXO

Puertos FXS: Estas interfaces que integra el Asterisk son utilizadas para que

se puedan conectar extensiones analgicas al Sistema. Para establecer estar

conexiones se pueden utilizar las tarjetas TDM400P de Digium o bien tarjetas

E110P o TE410P conectadas con Bancos de Canales.

Terminales
RDSI

ASTERISK
RDSI-PRI RDSI-BRI
Modo TE Modo NT
RED RDSI
RDSI-BRI
Modo TE
* RDSI-BRI
Modo NT PBX con lneas
RDSI bsicas

RDSI-BRI
Modo TE
RDSI-PRI
PBX con Modo NT PBX con lneas
extensiones RDSI RDSI primarias

GRAFICO 1.8. Puertos FXS


88

6.1.2 Interfaces Digitales

La Red Digital de Servicios Integrados (RDSI) utiliza, en principio, dos tipos

de capacidades de acceso. El acceso Bsico(2 Canales de voz + 1 de

sealizacin) y el acceso Primario(30 canales de Voz + 1 de sealizacin).

Estas interfaces son integradas dentro de Asterisk con las tarjetas de Digium

TE110P y TE410P para acceso primarios y por las tarjetas QuadBRI y

OctoBRI de Junghanns, las Tarjetas Diva Server de Eicon, las Fritz de AVM

as como aquellas tarjetas RDSI con chipset HFC-S para accesos bsicos.

Adems del tipo de sealizacin, los interfaces RDSI pueden funcionar en

modo NT(Network Termination) o TE(Terminal Equipment).

Modo TE: En Este modo, Asterisk puede conectarse con interfaces RDSI

(BRI o PRI) o con Centrales Digitales Tradicionales que tengan conexin

RDSI de forma esclava.

Modo NT: En este modo el Asterisk puede conectarse con Centrales

Digitales Tradicionales que tengan conexin RDSI de forma Maestro o con

extensiones Digitales.
89

7. Desarrollo del proceso de Software

A continuacin se detalla el proceso de desarrollo del software del mdulo de

Asterisk.

7.1. Especificaciones Generales

Dentro de este punto de desarrollo explicaremos, de forma grfica, los

procesos correspondientes al mdulo de Asterisk.

7.2 Especificacin de Diagramas de Procesos

Describiremos el flujo de datos del proceso que cambian o transforman los

datos dentro del mdulo del sistema, tratando de dar una idea de cmo se

realizar el movimiento de los datos a travs del sistema.


90

GRFICO 1.8. Diagrama del Proceso Recibe Llamadas


91

GRFICO 1.9. Diagrama del Proceso Realiza Llamadas


92

GRFICO 1.10. Diagrama del Proceso S. Interactivos


93

GRFICO 1.11. Diagrama del Proceso Transfiere Llamada


94

GRAFICO 1.12. Diagrama del Proceso Publicidad


95

7.3. Especificacin de Casos de Uso

A continuacin se detallan los casos de uso del mdulo de Asterisk.

Caso de Uso: Emisin de Llamada

Nombre: Emitir llamada


Autor: Grupo 4
Fecha: Diciembre del 2.006
Descripcin:
Emitir automticamente la llamada a promocionar.

Actores:
Clientes de la empresa que cuentan con un servicio

Precondiciones:
Para activar el servicio promocionado el actor deber ingresar su nmero de
contrato y nmero de cdula.

Flujo Normal:
1. El sistema emite automticamente un llamado a un cliente para ofrecer
una promocin de un servicio o producto. Adems mostrar la interfaz
del telfono.
2. Si el usuario acepta la llamada. El sistema enva el archivo de voz con
la promocin.
3. Si el usuario acepta la promocin, ste podr, luego de ingresar al
sistema loguearse y activar el servicio promocional.

Flujo Alternativo:
2. Si el sistema no es respondido (acepta la llamada) sta ser realizada
en un nuevo lapso de tiempo.
3. Si el usuario no acepta la promocin podr cerrar el sistema o podr
solicitar mayor informacin al Call Center

PostCondiciones:

El actor activa un servicio en promocin.

TABLA 1.3. Caso de Uso (A)


96

Caso de Uso: Recepcin de Llamada

Nombre: Recibir llamada


Autor: Grupo 4
Fecha: Diciembre del 2.006
Descripcin:
Recibir un llamado de un cliente y/o tercero que desee conocer los servicios
de la empresa.

Actores:
Terceros y/o clientes de la empresa

Precondiciones:
Para realizar la llamada al IVR de la empresa, el actor deber de acceder al
vnculo contenido en el E-CRM.

Flujo Normal:
1. El actor accede al sistema por medio del vnculo contenido en el E-CRM
2. Si el sistema est disponible, entonces proceder a escuchar el
correspondiente mensaje de bienvenida y sus respectivas opciones.
3. El usuario podr acceder a las diferentes opciones del men por medio de
la interfaz telefnica y el sistema enviar el correspondiente archivo de voz.
4. El actor podr por medio de las diferentes opciones activar/desactivar un
producto o servicio, en el caso de ser cliente.

Flujo Alternativo:
3. El actor podr adems, por medio de una opcin acceder al Call Center.
4. En caso de que el actor no sea cliente de la empresa, podr registrar sus
datos.

PostCondiciones:
Los clientes podrn escuchar sus requerimientos.

TABLA 1.4. Caso de Uso (B)


97

Caso de Uso: Ingreso posible cliente

Nombre: Ingreso posible cliente


Autor: Grupo 4
Fecha: Diciembre del 2.006
Descripcin:
Permite almacenar datos de un posible cliente.

Actores:
Usuario interesado en un servicio o producto

Precondiciones:
El actor debe de haber escuchado las bondades del producto y/o servicio

Flujo Normal:
1. El actor escucha las caractersticas del servicio y/o producto
2. El actor se interesa por el producto y/o servicio
3. Si el actor desea ser contactado por personal del departamento de Ventas,
podr dejar un mensaje de voz con sus datos de contacto.
4. El sistema almacenar los datos del cliente y emitir una alarma (email) al
mdulo de ventas para indicar que un nuevo cliente requerir ser contactado.

Flujo Alternativo:
3. Si el actor es cliente de la empresa, entonces podr loguearse y acceder al
servicio
4. El sistema comprueba la validez de los datos. Si no son correctos se avisa
al actor de ello, permitindole que los corrija.

PostCondiciones:
Los datos personales del posible cliente son almacenados en el sistema para
luego ser contactado.

TABLA 1.5. Caso de Uso (C)


98

7.4 Especificacin de Diagramas de Caso de Uso

Los diagramas de caso de uso nos especificarn de manera

grfica los casos de uso del sistema.

CASO DE USO: IVR Call System

GRAFICO 1.13. Diagrama del Caso de Uso Proceso Principal


99

CASO DE USO: Sistema recibe llamada

GRAFICO 1.14. Diagrama del Caso de Uso. Recibe Llamada


100

CASO DE USO: Sistema emite llamada

GRAFICO 1.15 Diagrama del Caso de Uso. Emite Llamada


101

CASO DE USO: Ingreso prospecto cliente

GRAFICO 1.16. Diagrama del Caso de Uso. Ingreso Cliente


102

CASO DE USO: Servicios Interactivos

GRAFICO 1.17. Diagrama del Caso de Uso. Servicios Interactivos


103

7.5. Especificacin de Diagramas de Secuencia

Son diagramas de interaccin, muestran un conjunto de objetos y sus

relaciones, as como los mensajes que se intercambian entre ellos. Cubren la

vista dinmica del sistema.

Diagramas de Secuencia: Emisin de Llamadas por el sistema

GRAFICO 1.18. Diagrama de Secuencias. Emisin de Llamadas


104

Diagramas de Secuencia: Servicios Interactivos

GRAFICO 1.19. Diagrama de Secuencias. Servicios Interactivos


105

Diagramas de Secuencia: Sistema recibe llamadas

GRAFICO 1.20. Diagrama de Secuencias. Recibe llamadas

Diagramas de Secuencia: Transferencia de Llamadas

GRAFICO 1.21. Diagrama de Secuencias. Transferencia de llamadas


106

7.6. Especificacin de Diagramas de Colaboracin

Muestran la organizacin estructural de los objetos que envan y reciben

mensajes. Los diagramas de secuencia se pueden convertir en diagramas de

colaboracin sin perdida de informacin, lo mismo ocurren en sentido

opuesto.

Diagrama de Colaboracin: Sistema recibe llamada

GRAFICO 1.22. Diagrama de Colaboracin. Recibe llamadas


107

Diagrama de Colaboracin: Sistemas Interactivos

GRAFICO 1.23. Diagrama de Colaboracin. Sistemas interactivos

Diagrama de Colaboracin: Sistema emite llamada

GRAFICO 1.24. Diagrama de Colaboracin. Emite llamadas


108

Diagrama de Colaboracin: Transferencia de llamada

GRAFICO 1.25. Diagrama de Colaboracin. Transferencia de llamadas


109

7.7. Configuracin de Asterisk como IVR

Como ya es de conocimiento, Asterisk tiene muchas aplicaciones, aqu

mostramos su configuracin para un IVR.

7.7.1. Configuracin Etc / Asterisk

En el sistema se ha desarrollado para tres usuarios que se deben registrar

para ser parte de la red, cada uno tiene su propio nombre de usuario, clave y

IP. En el sub-modulo Marketing Interactivo IVR es necesaria la configuracin

de ciertos archivos. En el prompt de asterisk se escribe el comando

/etc/asterisk/ls

Los archivos utilizados para nuestro proyecto en el Asterisk son los

siguientes:

sip.conf

extensions_ivr.conf

manager_custom.conf

Nota: Se advierte de no modificar estos archivos que son propias del


funcionamiento del Asterisk IVR, causara fatales problemas en su uso.

El siguiente paso es configurar el protocolo, se debe editar el archivo Sip.conf

que es el encargado de manejar las caractersticas del SIP.


110

Sip.conf. Aqu se definen los canales o protocolos que se trabajaran de

acuerdo a las aplicaciones tecnolgicas que se implemente.

[general]
language=es ; Lenguaje por defecto
port = 5060 ; Puerto SIP
bindaddr = 0.0.0.0 ; Direccin IP a usar
allow=all ; Permite todo tipo de codec
context= from-sip-external

#include sip_additional.conf

CUADRO 1.1. Sip.conf

Sip_additional.conf. En este archivo se definen todos los usuarios, clientes

softphone (telefnicos del X-lite) que se conectaran a Asterisk por medio del

canal Sip de tipo friends que permite recibir y enviar llamadas interno del

Asterisk. Los clientes deben ser configurados en este archivo antes de poder

recibir o hacer llamadas1

[101]

username=101 ;Nombre de usuario


type=friend ;Defino el tipo de conexin
secret=101 ;Password
record_out=Always
record_in=Always
qualify=no
port=5060 ;Defino el Puerto SIP
nat=never
mailbox=101@device
host=dynamic
dtmfmode=rfc2833
context=from-internal ;Llamadas entrantes van a from-internal
canreinvite=no
callerid=Usuario IVR <101> ;nombre de usuario

CUADRO 1.2. Sip_additional.conf

1
Esta configuracin es la misma para todos los usuarios prueba de Asterisk
111

Nota: Luego se procede a recargar la configuracin de forma independiente


con el comando SIP reload o desde la consola del Cli con el comando reload.

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 y mejor tratamiento de los entornos NAT.

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.


112

Manager_custom.conf

Para poder manipular los eventos recibidos por el servidor Asterisk, por

medio de la utilizacin de la interfaz AMI, para establecer esta comunicacin

se requiere conocer la clave de un usuario, el puerto donde el servidor

Asterisk escuchara las peticiones de gestin. En este archivo configuramos

todos los usuarios administradores del Asterisk.

La direccin IP para nuestro servidor de Asterisk es la direccin

192.168.1.56, y para el administrador remoto la direccin es 192.168.1.1,

tambin como vemos en la ilustracin le otorgamos ciertos permisos de

lectura y escritura para la administracin de Asterisk.

[ivr_manager]

secret=ivr
deny=0.0.0.0./0.0.0.0
permit=192.168.1.1/255.255.255.0
read=system,call,log,verbose,command,agent,user
write=system,call,log,verbose,command,agent,user

CUADRO 1.3. Manager_custom.conf


113

extensions_ivr.conf

El archivo extensions_ivr.conf es el corazn del funcionamiento de Asterisk,

donde se define como se deben manejar la llamadas(que entran y salen del

sistema). En nuestro proyecto se ha establecido solo llamadas internas del

Asterisk.

Aqu se ha definido todos los contextos y extensiones para IVR CALL

SYSTEM

[from-internal-ivr]
[Servicios]
[Servcable]
[PlanBasico]
[PlanPremium]
[ServAerocable]
[PlanBasico]
[Plansuperpremium]
[ServInternet]
[PagueporVer]
[Home]
[Corporativo]
[ACT-DESC-PLANBASICO]
[Ventas]
[Promociones]
[Sistemas Interactivo]
[Centro-LLamada]
[Salir]
114

Asterisk, cuando recibe una llamada la procesa en una determinada

extensin mediante una lista de comandos a ejecutar. Los comandos se

ejecutan generalmente en el orden definido por su prioridad, pero algunos

comandos, tales como los comandos Dial y Goto, tienen la capacidad de

redireccionarse a alguna otra parte, basado en ciertas condiciones.

7.7.1 Men de Voz Interactivo

Un IVR es un men interactivo telefnico, la siguiente configuracin

corresponde a un IVR base, el cual consiste en dar un mensaje de

bienvenida, y dar las opciones pre-grabadas en un archivo de sonido .gsm,

guardado en asterisk-sounds/es .

Cd/var/lib/asterisk/sounds/es

[from-internal-ivr]

Este contexto contiene las opciones del men IVR Call System, el usuario

podr escoger las alternativas de las extensiones segn mencione el sistema

IVR por medio de archivos de audio, logrando interactuar con el sistema de

comprensin y uso adecuado. A continuacin detallamos lo siguiente:


115

[from-internal-ivr]

exten => 1020,1,Answer


exten => 1020,2,Wait(1)
exten => 1020,3,Background('bienvenidaIVRymenu')
exten => 1020,4,DigitTimeout(5)
exten => 1020,5,ResponseTimeout(3)
exten => 1020,6,WaitExten(5)

;exten =>1020,n,Goto(from-internal-ivr,1020,3);regrese al menu


principal

exten => i,1,Background('operainvalid');opcion invalida


exten => i,2,Wait(1)
exten => i,3,hangup(); Goto(1020,3)
exten => t,4,hangup()

;men

exten => 1,1,goto(Servicios,1,1)


exten => 2,1,goto(Promocion,2,1)
exten => 3,1,goto(Sistema-Interactivo,s,1)
exten => 4,1,goto(Centro-Llamada,s,1)
;exten => 5,1,goto(ext-local,999,1)
;Centro-LLamada,3,1)
exten => 0,1,goto(Salir,0,1)

exten => 1020,7,Background('tiempo')


exten => 1020,8,WaitExten(10)

exten => 1020,n,Goto(from-internal-ivr,1020,3);regrese al menu


principal

CUADRO 1.4. [from-internal-ivr]

Men de Voz Interactivo

A continuacin mostramos el men de voz interactivo que hemos utilizado en

el desarrollo de este proyecto.


116

Mensaje de Bienvenida
1 Publicidad de Servicios
1.1 Cable
1.1.1 Plan Bsico
1.1.1.1 Publicidad
1.1.2 Plan Premium
1.1.2.2 Publicidad
1.2 Aerocable
1.2.1 Plan Sper Premium
1.2.1.1 Publicidad
1.2.2 Plan Super Premium Plus
1.2.2.2 Publicidad
1.3 Pague por Ver
1.3.1 Plan Bsico
1.3.1.1 Publicidad
1.3.2 Plan Premium
1.3.2.2 Publicidad
1.4 Internet
1.4.1 Plan Bsico
1.4.1.1 Publicidad
1.4.2 Corporativo
1.4.2.2 Publicidad
2 Promociones
3 Sistema Interactivo
1.2 Cable
1.1.1 Plan Bsico
1.1.1.1 Activacin/ Desactivacin del Servicio
1.1.1.2 Cambio de Plan
1.1.2 Plan Premium
1.1.2.1 Activacin/ Desactivacin del
Servicio
1.1.2.2 Cambio de Plan
1.2 Aerocable
1.2.1 Plan Sper Premium
1.2.1.1 Activacin/ Desactivacin del Servicio
1.2.1.2 Cambio de Plan
1.2.2 Plan Super Premium Plus
1.2.2.1 Activacin / Desactivacin del Servicio
1.2.2.2 Cambio de Plan
1.3 Pague por Ver
1.3.1 Activacin / Desactivacin del Servicio
1.3.2 Cambio de Plan
1.4 Internet
1.4.1 Activacin / Desactivacin del Servicio
1.4.2 Cambio de Plan
4 Atencin Personalizada
0 Salir

CUADRO 1.4. [from-internal-ivr]


117

7.7.3 Contextos

1. PUBLICIDAD
DE SERVICIOS

La opcin 1, corresponde al contexto Publicidad de Servicios, sta opcin

ofrece los servicios de la empresa CableSystem.

El contexto Publicidad de Servicios contiene otros contextos las cuales

mencionamos a continuacin:

;------------------------------------------------------
; OPCION 1 SERVICIOS
;------------------------------------------------------

[Publicidad de Servicios]

exten=>1,1,Background('servicios11');opcion de publiservicios
exten => 1,2,DigitTimeout(5);
exten => 1,3,ResponseTimeout(3);

;salta a la extension

exten => 1,1,Goto(Servcable,1,1);


exten => 2,1,Goto(ServAerocable,2,1);
exten => 3,1,Goto(ServPagueporVer,31);
exten => 4,1,Goto(ServInternet,4,1);

;exten => 1,n,Goto(from-internal-ivr,1020,3)

exten => i,2,Wait(1)


exten => 0,3,goto(Salir,0,3)
exten => 1,2,hangup()

CUADRO 1.5. Contexto Publicidad de Servicios


118

Servcable

[Servcable]

exten => 1,1,Background('planes1');


exten => 1,2,DigitTimeout(5)
exten => 1,3,ResponseTimeout(3)

exten => 1,1,Goto(PlanBasico,1,1);opcion 1 plan basico


exten => 2,1,Goto(PlanPremium,2,1);opcion 2 plan premium

exten => 2,n,Goto(from-internal-ivr,1020,3)

CUADRO 1.6. Contexto Servcable

[PlanBasico]

exten => 1,1,Background('planbasico'); opcion 1 plan basico


;para publicidad y opcion 2 para act/desct servicio
exten => 1,2,DigitTimeout(5)
exten => 1,3,ResponseTimeout(3)
;exten => 1,1,Goto(PUBLICIDAD,1,1)
;exten => 2,1,Goto(ACT-DESC-PLANBASICO,s,1)
;exten => 3,n,Background(salir);gracias solicitar nuestro
servicio

exten => 3,n,Goto(from-internal-ivr,1020,3)

;exten => 3,4,Goto(1,1)


;exten => 1,1,Background('mon-11'); publicidad plan basico
;exten => 3,6,Background('mon-9'); activa y desactiva plan
basico cedula

[PlanPremium]

exten => 4,1,Background('premium'); PLAN PREMIUN


exten => 4,2,DigitTimeout(5)
exten => 4,3,ResponseTimeout(3)

exten => 4,n,Goto(from-internal-ivr,1020,3)

;exten => 2,4,Goto();opcion 2 plan basico


;exten => 21,6,Background('novecientos');opcion 3 plan premium

CUADRO 1.7. Contexto Servcable (B)


119

ServAerocable

[ServAerocable]

exten => 2,1,Background('aeroplanes1');


exten => 2,2,DigitTimeout(5)
exten => 2,3,ResponseTimeout(3)

exten => 1,1,Goto(PlanBasicoAr,1,1);opcion 1 plan basico cable


exten => 2,1,Goto(PlanPremiumAr,2,1);opcion 2 plan premium
cable

exten => 2,n,Goto(from-internal-ivr,1020,3);

CUADRO 1.8. Contexto ServAerocable

[PlanBasicoAr]

exten => 1,1,Background('planSupPremPlus');

exten => 1,2,DigitTimeout(5)


exten => 1,3,ResponseTimeout(3)

[PlanPremiumAr]

exten => 2,1,Background('planSupPremium');


exten => 2,2,DigitTimeout(5)
exten => 2,3,ResponseTimeout(3)

exten => i,2,Wait(1)


exten => 0,3,goto(Salir,0,3)
exten => 1,2,hangup()

CUADRO 1.9. Contexto ServAerocable (B)


120

PagueporVer

[ServPagueporVer]

exten => 3,1,Background('paguepver');


exten => 3,2,DigitTimeout(5)
exten => 3,3,ResponseTimeout(3)

exten => 1,1,Goto(PlanBasicoAr,1,1);opcion 1 plan basico cable


exten => 2,1,Goto(PlanPremiumAr,2,1);opcion 2 plan premium
cable

exten => 3,n,Goto(from-internal-ivr,1020,3);

CUADRO 1.10. Contexto ServPagueporVer

ServInternet

[ServInternet]

exten => 4,1,Background('internet');


exten => 4,2,DigitTimeout(5)
exten => 4,3,ResponseTimeout(3)

exten => 4,n,Goto(from-internal-ivr,1020,3);si vale

;exten=> 1,4,Goto(servicios,1,1)
CUADRO 1.11. Contexto ServInternet

2 PROMOCIN

La opcin 2, que corresponde al contexto Promocin, sta opcin ofrece las

promociones vigentes de la empresa CableSystem.

[promociones]

exten => 9010,1,Answer


exten => 9010,2,Background('promopremium')
exten => 9010,3,Hangup

exten => 9020,1,Answer


exten => 9020,2,Background('promointernet')
exten => 9020,3,Hangup

CUADRO 1.12. Contexto Promociones


121

3. SISTEMA
INTERACTIVO

La opcin 3, que corresponde al contexto Sistema Interactivo, sta opcin

ofrece a los clientes de CableSystem cambiar el estado de su Plan

contratado y/o cambiar su plan.

[Sistema-Interactivo]

exten => s,1,Set(Contador=1)


exten => s,n,Background('contrato'); ingrese su numero de
contrato
exten => s,n(inicio),Read(Contrato)
exten => s,n,Background('NumerContrato'); Su # ingresado es
exten => s,n,SayDigits(${Contrato}) ;
exten => s,n,AGI(contrato.agi)
exten => s,n,Math(Contador,${Contador}+1)
exten => s,n,GotoIf($[${Contador}=4.000000]?salto1)
exten => s,n,Background('nonumcontrato'); # contrato no
econtrado
exten => s,n,Background('nuevoingresonumcontrato'); numero
contrato no encontrado
exten => s,n,Goto(inicio)
exten => s,n(salto1),Background('intentospermitidos')
exten => s,n,Background('llamadafinalizada')
exten => s,n,hangup()
exten => s,n(clave1),Background('clave'); ingrese su clave de
seguridad
exten => s,n,Set(Contador=1)
exten => s,n(clave2),Read(Clave)
exten => s,n,Background('NumerContrato'); Su # ingresado es
exten => s,n,SayDigits(${Clave})
exten => s,n,AGI(clave.agi)
exten => s,n,Math(Contador,${Contador}+1)
exten => s,n,GotoIf($[${Contador}=4.000000]?salto2)
exten => s,n,Background('nonumcontrato'); # contrato no
encontrado
exten => s,n,Goto(clave2)
exten => s,n(salto2),Background('intentospermitidos')
exten => s,n,Background('llamadafinalizada')
exten => s,n,hangup()
exten => s,n(exito),Background('clave'); ingrese su clave de
seguridad

CUADRO 1.13. Contexto Sistema-Interactivo


122

4. ATENCIN AL
CLIENTE

La opcin 4, que corresponde al contexto Atencin al Cliente, sta opcin

ofrece a los clientes de CableSystem transferir su llamada al Call Center.

;----------------------------------------------------
; OPCION 4 IVR Call System
;----------------------------------------------------

[Atencin al Cliente]

exten => 4,1,Background('operador');transferencia de


informacin
exten => 4,2,Hangup()

CUADRO 1.14. Atencin al Cliente

0. SALIR

La opcin 0, que corresponde al contexto Salir, sta opcin ofrece a los

clientes de CableSystem salir del sistema.

;-----------------------------------------------------
; OPCION 0 IVR Call System
;-----------------------------------------------------

[Salir]

exten => 0,1,Background('salir');gracias por utilizar nuestro


servicio
;exten => 0,2,Goto(from-internal-ivr,1020,3)
exten => 0,2,Hangup()

CUADRO 1.15. Contexto Salir


123
CAPTULO 2
ASTERISK JAVA

1. Introduccin

La arquitectura de IVR est formada por la arquitectura propia del Asterisk

que es el manejo de las extensiones. sta se complementa con la

programacin de funciones mediante la interfaz AGI.

Para el buen funcionamiento del IVR, utilizamos adems una segunda

arquitectura, se trata de un monitor de llamadas que se producen en el

servidor Asterisk, para la cual se utiliza la interfaz AMI, se interrelacionan con

el API de java Asterisk-Java, para obtener la informacin relevantes de los

eventos que suceden.


Adicionalmente, estamos utilizando el lenguaje de Java J2SDK, para qu

interrelacione con la interfaz de programacin AGI, logrando uniformidad en

cuanto a lenguaje, ya que nuestro diseo de Web se encuentra tambin en

lenguaje de programacin Java.

2. Descripcin de la Herramienta

Asterisk-Java es compatible con Asterisk 1.0, 1.2 y 1.4.

Las implementacin FastAGI soporta todos los comandos disponibles

actualmente de Asterisk

La implementacin Manager API soporta la recepcin de eventos

desde el servidor de Asterisk (ejemplo: progreso de llamadas, registro

de puntos, estado del canal, etc.) y enva acciones a Asterisk

(ejemplo: origen de la llamada, si el agente est disponible o no,

comienzo/fin de grabacin de voz).

3. Breve descripcin del Mdulo


102

El paquete de Asterisk-Java consiste de un juego de clases Java que permite

construir fcilmente aplicaciones Java que interactan con un Servidor PBX

Asterisk. Asterisk-Java soporta ambas interfaces que Asterisk provee para

este escenario: El protocolo FastAGI y el Manager API.

4. Arquitectura del Mdulo

A continuacin detallamos la Arquitectura de las herramientas utilizadas en

este mdulo:

4.1 Arquitectura de Asterisk Java

La interfaz AGI permite que los programas externos puedan aadir nuevas

funcionalidades a Asterisk. Podemos diferenciar cuatro tipos de interfaces:

AGI: permite a la aplicacin controlar el dialplan de Asterisk.

EAGI (Enhanced AGI): aade la posibilidad de acceder y controlar un

canal de voz.

DeadAGI: permite adems acceder a un canal despus de colgar.


103

FastAGI: permite que la interfaz sea accesible a travs de la red.

4.2 Arquitectura del Subsistema MONITOR

En esta arquitectura utilizamos la interfaz del Asterisk llamada AMI que nos

permite administrar los servicios de Asterisk y el API Asterisk-Java

desarrollado para monitorear los eventos de Asterisk, el cual lo

personalizamos mediante nuestro paquete MonitorAsteriskIVR.

A continuacin explicamos en detalle nuestro diseo

En Asterisk Manager Interface (AMI) interfaz que permite a aplicaciones

externas la capacidad de crear, monitorizar y gestionar Asterisk. La

aplicacin desarrollada logra por medio de Asterisk-java comunicarse con la

interface AMI de Asterisk, con esto conseguimos la captura de eventos y la

informacin de los mismos, una vez obtenido los datos los grabamos en la

base de datos.
104

Desarrollamos una Clase principal MonitorAdministradorIvr, la cual es un

proceso que ser levantado para captar todos los eventos de Asterisk, nos

basamos en la utilizacin de una clase ManagerConnectionFactory, definida

en org.asteriskjava.manager, que permite obtener una conexin con Asterisk

mediante el protocolo AMI.

La interfaz API Asterisk-Java ha sido desarrollada mediante el protocolo

FastAGI y AMI. De esta forma, los desarrolladores nicamente han de llamar

al conjunto de funciones o mtodos definidos en esta interfaz con un alto

nivel de abstraccin de estos dos protocolos.

La estructura de esta API permite que se puedan combinar la utilizacin de

los dos protocolos o cada uno de forma separada. Entre el material

entregado se encuentra el JavaDoc de la API Asterisk-Java 0.3, donde

podremos contar con una ayuda eficiente acerca de la utilizacin de esta API.
105

Para establecer esta comunicacin se requiere conocer adems de la

direccin IP de la Central Telefnica, el nombre, clave de usuario y el puerto

donde el servidor Asterisk escuchar las peticiones de gestin.

Estos tres parmetros se encuentran definidos en el archivo de configuracin

de Asterisk, manager.conf, ubicado en /etc/asterisk. Una vez obtenida la

conexin es necesario asociar un objeto encargado de tratar cada uno de los

eventos originados. Este objeto es una clase abstracta conocido como

AbstractManagerEventListener y en el caso de esta API al crearlo ha de

implementar su funcin HandlerEvent para que pueda tratar cada uno de los

eventos definidos en el paquete org.asteriskjava.manager.event.

5. Requerimientos

Para la elaboracin de este mdulo tenemos los siguientes requerimientos de

software:

Paquetera Asterisk Java. Esta librera es compatible slo con

Asterisk 1.0, 1.2 y 1.4

Java J2SDK
106

6. Instalacin y Configuracin del Ambiente de Trabajo

A continuacin mostramos la configuracin de las herramientas utilizadas

dentro del desarrollo de este mdulo y su correspondiente configuracin.

6.1 Instalacin Asterisk Java

Toda la paquetera de Asterisk Java puede ser descargada desde la

direccin Web: http://sourceforge.net/projects/asterisk-java/

Una vez descargada esta paquetera la agregamos a las libreras de la

interfaz de diseo de nuestro proyecto principal; en nuestro caso Java Sun

Studio Creator.

6.2 Instalacin J2SDK

Lo primero que se debe hacer es instalar Java en nuestro servidor Linux.

Para lo cual necesitamos descargar los instaladores desde la siguiente

direccin:

http://java.sun.com/j2ee/1.4/download.html#sdk
107

Pasos para la instalacin son los siguientes:

1. Establecer permisos de ejecucin al archivo:

chmod +x j2sdk-1_4_2_13-linux-i586.bin

2. Luego nos situamos en el directorio donde queremos instalar el SDK. Por

ejemplo: /usr/local/

3. Ejecutamos el archivo de instalacin. Supongamos que este archivo est

en el directorio actual, entonces ejecutamos:

./j2sdk-1_4_2_13-linux-i586.bin

Se mostrar la licencia y tendremos que aceptar algunos trminos de uso. La

instalacin correcta se crean cinco Java. Se crearon los siguientes:

lib/tools.jar

jre/lib/rt.jar

jre/lib/jsse.jar

jre/lib/charsets.jar

jre/lib/ext/localedata.jar

jre/lib/plugin.jar
108

jre/javaws/javaws.jar

6.3. Configurando las variables de entorno

Tenemos que editar el archivo .bash_profile del usuario, por ejemplo:

vi /home/admin/.bash_profile.

JAVA_HOME=/usr/local/j2sdk1.4.2_13
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export PATH JAVA_HOME

Nota:
Para comprobar la instalacin escribimos en la lnea de comandos:
java version

La funcin del interfaz AGI en nuestro proyecto es llamar a las clases java

localizado en el directorio /var /lib/asterisk/agi-bin, mediante la siguiente

sintxis:

exten => s,n,AGI(contrato.agi)


109

Donde s es el nmero de la extensin, n la prioridad de ejecucin, y

contrato.agi es el nombre del archivo que nos va ha servir para llamar a

nuestra clase java, el nombre del archivo debe estar entre parntesis y

antecedido por la palabra agi.

A continuacin nostramos el contenido del archivo .agi

contrato.agi

#!/bin/bash
AGI_DIR=/var/lib/asterisk/agi-bin
ORA_DIR=/var/lib/asterisk/agi-bin/ojdbc14.zip
/usr/local/j2sdk1.4.2_13/bin/java -cp $ORA_DIR:$AGI_DIR
contrato

CUADRO 2.1. contrato.agi

Este archivo contendr, el comando que ejecutara el programa java. En este

caso particular hemos credos variables para el directorio donde se encuentra

el programa y las clases controladoras o drives de la conexin de la Base de

Datos Oracle.
110

Cuando pasemos el archivo contrato.agi, este ejecuta la clase contrato de

java, una vez que se ha realizado la ejecucin del programa, el control vuelve

al dialplan mediante las extensiones.

Los programas pueden tomar datos de las variables de entorno del contexto

donde se encuentra la llamada, setear valores de la mismas, mandar

comandos de ejecucin al dialplan y mediante la conexin Oracle podemos

realizar operaciones con los datos de la base de Datos despus de haber

sido procesadas.

A continuacin describimos dos archivos .agi, que utilizamos en nuestra

arquitectura, y los programas sern explicados y detallados en el capitulo 2.5

Desarrollo del Software

clave.agi

#!/bin/bash
AGI_DIR=/var/lib/asterisk/agi-bin
ORA_DIR=/var/lib/asterisk/agi-bin/ojdbc14.zip
/usr/local/j2sdk1.4.2_13/bin/java -cp $ORA_DIR:$AGI_DIR
clave
111

CUADRO 2.2. clave.agi

promociones.agi

#!/bin/bash
AGI_DIR=/var/lib/asterisk/agi-bin
ORA_DIR=/var/lib/asterisk/agi-bin/ojdbc14.zip
/usr/local/j2sdk1.4.2_13/bin/java -cp $ORA_DIR:$AGI_DIR promo

CUADRO 2.3. promociones.agi

7. Desarrollo del Proceso de Software

A continuacin mostramos el desarrollo de este mdulo.

7.1. Libreras utilizadas

A continuacin explicaremos las libreras utilizadas en el proyecto:

7.1.1 AMI
112

Los paquetes que se utilizan para la comunicacin entre Linux y

nuestra aplicacin java es el paquete Asterisk Java :

El drive para la conexin de Java a la Base de Datos Oracle.

El paquete de las clases del proyecto IVR.

El paquete para la comunicacin entre interfaz AMI de Java y

nuestro paquete de clases.

OJDBC14.ZIP

MONITORASTERISKIVR

API ASTERISK-JAVA

7.1.2 AGI

Para el funcionamiento de nuestro sistema mediante esta interfaz

necesitaremos de los siguientes componentes:

- El instalador de java JSDK

- La clase de java
113

- El drive Oracle para grabar los datos de Asterisk

directamente a la Base de Datos

J2SDK - 1_4_2_13 -linux-i586.bin

CLASES DE JAVA

OJDBC14.ZIP

7.2 Especificaciones de Diagramas de Caso de Uso

A continuacin mostramos el diagrama de caso de uso de la clase

ASTERISK-JAVA.
114

GRAFICO 2.1. Diagrama de Caso de Uso Asterisk - Java

7.3 Especificaciones de Diagramas de Secuencia


115

Se mostrar un diagrama de secuencia del mdulo de Asterisk-Java

GRAFICO 2.2. Diagrama de Secuencia. Asterisk - Java

7.4 Especificaciones de las clases de Asterisk Java

Dentro de las clases utilizadas en el mdulo de Asterisk Java,

tenemos dos tipos de clases; unas desarrolladas en Java JDK y otras

desarrolladas en Java Sun Studio Creator. A continuacin el detalle:


116

7.4.1 Especificacin de las clases Java (JDK)

Estas clases permitirn una directa interaccin entre Java y Asterisk.

Debido a que necesitaremos enviar parmetros a Asterisk desde la

Base de Datos de Oracle.

Conexin

public class cConexion


{
public Connection getConexion()
{
Connection Conn=null;
try
{
String url= "jdbc:oracle:thin:@192.168.1.1:1521:crm";
Class.forName("oracle.jdbc.driver.OracleDriver");
Conn=DriverManager.getConnection(url,"crm", "crm");
}
catch(Exception e)
{
System.out.println(e.toString());
}
return Conn;
}
public void cerrarConexion(Connection pCon)
{
try
{
pCon.close();
}
catch(SQLException se)
{
se.printStackTrace();
}}}
117

CUADRO 2.4. cConexion.java

Esta clase nos permitir conectarnos desde el Servidor de Linux al Servidor

de Base de Datos Oracle, debido a que la informacin con la que vamos a

trabajar est contenida en nuestra base de datos de Oracle.

Contrato

public class contrato {

public static void main( String[] args ) {


cConexion occon;
occon=new cConexion();
Connection conn;
String contrato="";
String linea;

LineNumberReader in=new LineNumberReader(new


InputStreamReader(System.in));
try {
do{ //leer el ambiente AGI
linea=in.readLine();
} while(linea.length()>0);
System.out.println("GET VARIABLE Contrato \n");
linea = in.readLine();
System.out.println("GET VARIABLE Contrato \n");
linea = in.readLine();
linea = in.readLine();
System.err.println("e"+linea);
int a=linea.lastIndexOf("(");
int b=linea.lastIndexOf(")");
contrato=linea.substring(a+1,b);
System.err.println("f"+contrato);
}catch( Exception ex ){
System.err.println("Error: "+ex.getMessage());
};
String v_idl="";
String cadena = "SELECT b.sec_estado FROM
crm_vop_contrato_cliente a, "+
"crm_vop_serv_cont b WHERE
a.ctc_codcontrato=b.sec_cod_contrato AND "+
"sysdate < a.ctc_fec_caducidad and
118

CUADRO 2.5 contrato.java(a)

while (rs.next()){
v_idl=rs.getString("sec_estado");
bandera=1;
}

if(bandera==1){
System.out.println("SET PRIORITY clave1 \n");
}
System.err.println("rrr4"+contrato);
conn.close();
}catch(SQLException e){
//conn.close();
e.printStackTrace();
}
}
}

CUADRO 2.6 contrato.java(b)


119

Esta clase contrato nos permitir obtener un nmero de contrato ingresado

por un cliente desde el softphone. Para esto crea una instancia de la clase

coneccion, lee el nmero ingresado del ambiente AGI y busca en la base de

datos de Oracle si el nmero ingresado existe, caso contrario enviar un

mensaje de error.

Clave

public class clave {

public static void main( String[] args ) {


cConexion occon;
occon=new cConexion();
Connection conn;
Connection conn2;
String contrato=""; String cclave="";

String linea;
LineNumberReader in=new LineNumberReader(new
InputStreamReader(System.in));
try {
do{ //leer el ambiente AGI
linea=in.readLine();
} while(linea.length()>0);
//System.out.println("GET VARIABLE Contrato \n");
//linea = in.readLine();
System.out.println("GET VARIABLE Contrato \n");
linea = in.readLine();
120

CUADRO 2.7 clave.java

System.err.println(cadena);
try{
conn = occon.getConexion();
conn2 = occon.getConexion();
ResultSet rs; ResultSet rd;
Statement sentenciasql = conn.createStatement();
Statement sentenciasql2 = conn.createStatement();
Statement sentenciasql3 = conn2.createStatement();
rs = sentenciasql.executeQuery(cadena);
int bandera=0;int bandera2=0; String bandera3="";
while (rs.next()){
121
122

CUADRO 2.8 clave.java(b)

linea = in.readLine();
System.out.println("STREAM FILE "+v_id5+" \"*#\"");
linea = in.readLine();
System.out.println("STREAM FILE activadoservicio
\"*#\"");
linea = in.readLine();
System.out.println("WAIT FOR DIGIT 3000 ");
linea = in.readLine();
System.err.println(linea+"<<<<<");
int c = linea.lastIndexOf("=");
String d = linea.substring(c+1);
if(d.equals("49")){
System.err.println("00000000");
if(v_id3.equals("A")){
cadena="UPDATE crm_vop_serv_cont SET
sec_estado='I' WHERE sec_cod_contrato="+contrato+" AND
sec_codigo_serv="+v_idl+" AND sec_codigo_plan="+v_id2+" ";
try{
int g = sentenciasql3.executeUpdate(cadena);
System.out.println("STREAM FILE deactivado
\"*#\"");
linea = in.readLine();
}catch(SQLException e){
e.printStackTrace();
}
}else{
cadena="UPDATE crm_vop_serv_cont SET sec_estado='A'
WHERE sec_cod_contrato="+contrato+" AND
sec_codigo_serv="+v_idl+" AND sec_codigo_plan="+v_id2+" ";
try{
int g = sentenciasql3.executeUpdate(cadena);
System.out.println("STREAM FILE activado
\"*#\"");
linea = in.readLine();
}catch(SQLException e){
e.printStackTrace();
}
};
conn2.commit();
}else{
if(d.equals("50")){
System.err.println("1111111");
cadena="UPDATE crm_vop_serv_cont SET
sec_codigo_plan="+v_id7+" WHERE sec_cod_contrato="+contrato+"
AND sec_codigo_serv="+v_idl+" AND sec_codigo_plan="+v_id2+" ";
123

CUADRO 2.9 clave.java(c)

tieneactivelplan \"*#\"");
}else{
System.out.println("STREAM FILE
tienedesactvelplan \"*#\"");
}
linea = in.readLine();
System.out.println("STREAM FILE "+v_id6+"
\"*#\"");
linea = in.readLine();
}catch(SQLException e){
e.printStackTrace();
}
}else{
System.err.println("xxxxxxx");
}
}
}catch(Exception ex){
};
bandera=1;
}
if(bandera==1){
System.out.println("SET PRIORITY exito \n");
System.err.println("lllllllll");
}
System.err.println("eeee");
conn2.close();
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
124

CUADRO 2.10. clave.java(d)

La clase clave nos permitir obtener un nmero de clave ingresado por un

cliente desde el softphone. Para esto crea una instancia de la clase

coneccion, lee el nmero ingresado del ambiente AGI y busca en la base de

datos de Oracle si el nmero ingresado existe, caso contrario enviar un

mensaje de error. Si existe el nmero de contrato y clave de usuario es

vlido, mostrar por medio de un mensaje de voz que plan tiene contratado y

si desea activar o desactivar un servicio o cambiarse de plan.

Clase buzn

public class buzon {

public static void main( String[] args ) {


cConexion occon;
occon=new cConexion();
Connection conn2;
Connection conn;
String v_numero=""; String v_ext="";
String linea;
LineNumberReader in=new LineNumberReader(new
InputStreamReader(System.in));
try{
do{ //leer el ambiente AG
linea=in.readLine();
System.err.println("r: "+linea);
int i = linea.lastIndexOf(":");
if(i>0){
String tmp = linea.substring(0,i);
if(tmp.equals("agi_extension"))
v_ext=linea.substring(i+1);
}
}while(linea.length()>0);
System.out.println("STREAM FILE bienvenida-ventas \"*#\"");
linea = in.readLine();
125

CUADRO 2.11. buzon.java

rs.next();
v_numero=rs.getString("numero");
System.out.println("STREAM FILE tiene-mensajes
\"*#\"");
linea = in.readLine();
System.err.println("stream a:"+linea);
System.out.println("SAY NUMBER "+v_numero+"
\"*#\"");
linea = in.readLine();
System.err.println("stream a:"+linea);
System.out.println("STREAM FILE mensajes-
nuevos \"*#\"");
linea = in.readLine();
System.err.println("stream a:"+linea);
if(v_numero.equals("0")){
126

CUADRO 2.12. buzon.java(b)


127

rs.next();
v_numero=rs.getString("numero");
System.out.println("STREAM FILE tiene-mensajes
\"*#\"");
linea = in.readLine();
System.err.println("stream a:"+linea);
System.out.println("SAY NUMBER "+v_numero+"
\"*#\"");
linea = in.readLine();
System.err.println("stream a:"+linea);
System.out.println("STREAM FILE mensajes-
nuevos \"*#\"");
linea = in.readLine();
System.err.println("stream a:"+linea);
if(v_numero.equals("0")){

}else{
cadena = "SELECT MNS_COD_ARCHIVO AS
numero FROM crm_ivr_mensajes WHERE MNS_ESTADO=1";
sentenciasql = conn.createStatement();

rs = sentenciasql.executeQuery(cadena);
boolean v_ban5=true;
while (rs.next() && v_ban5){
boolean v_ban3=false;
do{
v_numero=rs.getString("numero");
System.out.println("STREAM FILE
/var/spool/asterisk/buzon/mensa_"+v_numero+" \"*#\"");
linea = in.readLine();
System.err.println("mensa-
:"+v_numero+linea);
System.out.println("STREAM FILE
pregunta-mensaje \"*#\"");
linea = in.readLine();
System.err.println("stream
a:"+linea);
System.out.println("WAIT FOR
DIGIT 6000 ");
linea = in.readLine();
System.err.println("wait:
"+linea);
int c1 = linea.lastIndexOf("=");
String d1 =
linea.substring(c1+1);
if(d1.equals("49")){
128

CUADRO 2.13. buzon.java(c)


v_ban3=true;
}else{
if(d1.equals("50")){

System.err.println("2222222");
try{
String[]
command2={"sh","-c","rm
/var/spool/asterisk/llamadas/llamada.txt"};
final Process
proceso = Runtime.getRuntime().exec(command2);
conn2 =
occon.getConexion();
Statement
sentenciasql3 = conn2.createStatement();
cadena="UPDATE
crm_ivr_mensajes SET mns_estado=3 WHERE
mns_cod_archivo="+v_numero+" ";
try{
int g2 =
sentenciasql3.executeUpdate(cadena);

System.out.println("STREAM FILE elimina-mensaje \"*#\"");


linea =
in.readLine();

System.err.println("hecho: "+linea);
v_ban1=false;
}catch(SQLException
e){

e.printStackTrace();
}
conn2.commit();
conn2.close();

} catch( IOException exr


) {

System.out.println("STREAM FILE noelimina-mensaje \"*#\"");


linea =
129

CUADRO 2.14. buzon.java(d)

}else{
if(d1.equals("51")){
v_ban3=false;
}else{
if(d1.equals("52")){
v_ban5=false;

System.out.println("STREAM FILE menu-inicial \"*#\"");


linea =
in.readLine();
}
v_ban3=false;
}
}
}
}while(v_ban3);
}
}
}catch(SQLException e){
//ojo
e.printStackTrace();
}
conn.close();
v_ban1=true;
}else{
if(d.equals("50")){
System.err.println("22222");
String cadena = "SELECT COUNT(MNS_COD_ARCHIVO) AS
numero FROM crm_ivr_mensajes WHERE MNS_ESTADO=2";
conn = occon.getConexion();
130

CUADRO 2.15. buzon.java(e)

System.err.println("stream a:"+linea);
}catch(SQLException e){
//ojo
e.printStackTrace();
}
conn.close();
v_ban1=true;
}else{
if(d.equals("51")){
System.err.println("3333");
v_ban1=false;
}
}
}
}while(v_ban1);
}catch( Exception ex ){
System.err.println("Error: "+ex.getMessage());
};
}
131

CUADRO 2.16. buzon.java(f)

Para reproducir los mensajes de voz que el usuario ha dejado dentro de

nuestro sistema, tenemos la clase buzn, la cual permite al usuario de ventas

(que es el que realizar el trmite de prospectos de clientes) conocer cuntos

mensajes de voz tiene (ledos y no ledos) y reproducirlos. Adems por medio

de una opcin podr eliminarlos fsicamente de la base de datos.


132

graba

public class graba {


public static void main( String[] args ) {
cConexion occon;
occon=new cConexion();
Connection conn;
String v_numero=""; String v_ext="";
String linea;
LineNumberReader in=new LineNumberReader(new
InputStreamReader(System.in));
try{
do{ //leer el ambiente AG
linea=in.readLine();
System.err.println("r: "+linea);
int i = linea.lastIndexOf(":");
if(i>0){
String tmp = linea.substring(0,i);
if(tmp.equals("agi_extension"))
v_ext=linea.substring(i+1);
}
}while(linea.length()>0);
System.out.println("GET VARIABLE Contrato \n");
linea = in.readLine();
linea = in.readLine();
boolean v_ban1=false; boolean v_ban2=true;
String cadena = "SELECT NVL(MAX(MNS_COD_ARCHIVO),0)+1 AS
numero FROM crm_ivr_mensajes";
try{
conn = occon.getConexion();
ResultSet rs;
Statement sentenciasql = conn.createStatement();
rs = sentenciasql.executeQuery(cadena);
rs.next();
v_numero=rs.getString("numero");
cadena = "INSERT INTO crm_ivr_mensajes
(mns_cod_archivo,mns_fecha,mns_estado,mns_origen) VALUES
("+v_numero+",sysdate,0,'"+v_ext+"')";
int f = sentenciasql.executeUpdate(cadena);
conn.commit();
conn.close();
}catch(SQLException e){
//ojo
e.printStackTrace();
}
do{
System.err.println("entro al do: ");
System.out.println("GET VARIABLE Contrato \n");
linea = in.readLine();
linea = in.readLine();
133

CUADRO 2.17. graba.java

System.out.println("RECORD FILE
/var/spool/asterisk/buzon/mensa_"+v_numero+" gsm 1234
20000\"*#\"");
System.err.println("comenzo a grabar: ");
linea = in.readLine();
System.err.println("recorde: RECORD FILE
mensa_"+v_numero+" gsm 1234 20000");
System.err.println("record: "+linea);
System.out.println("STREAM FILE pregunta-graba
\"*#\"");
linea = in.readLine();
System.err.println("stream a:"+linea);
System.out.println("WAIT FOR DIGIT 6000 ");
linea = in.readLine();
System.err.println("wait: "+linea);
int c = linea.lastIndexOf("=");
String d = linea.substring(c+1);
if(d.equals("49")){
System.err.println("1111111");
conn = occon.getConexion();
Statement sentenciasql2 = conn.createStatement();
cadena="UPDATE crm_ivr_mensajes SET mns_estado=1
WHERE mns_cod_archivo="+v_numero+" ";
try{
int g = sentenciasql2.executeUpdate(cadena);
System.out.println("STREAM FILE confirma-graba
\"*#\"");
linea = in.readLine();
System.err.println("hecho: "+linea);
v_ban1=false;
}catch(SQLException e){
e.printStackTrace();
}
conn.commit();
conn.close();
}else{
if(d.equals("50")){
System.err.println("22222");
v_ban1=true;
System.out.println("STREAM FILE nueva-graba
\"*#\"");
linea = in.readLine();
134

CUADRO 2.18. graba.java(b)

La clase graba permite que un usuario que desea ser contactado deje un

mensaje de voz con sus datos personales , el mismo que luego ser

decodificado por el Departamento de Ventas para contactar al prospecto de

cliente. La duracin de este mensaje ser de 20 segundos, sin embargo este

valor podr cambiarse en la variable:

System.err.println("recorde: RECORD FILE


mensa_"+v_numero+" gsm 1234 20000");
135

Posteriormente a esto, el usuario podr aceptar esta grabacin o en caso

contrario podr repetirla. Una vez aceptada la grabacin, se crear un

registro en la base de datos para que luego el Departamento de Ventas

decodifique estos mensajes de prospectos de clientes.

7.4.2 Especificacin de las clases Java Sun Studio Creator

Dentro de esta herramienta programaremos el paquete Monitor

Asterisk el cual nos permitir registrar las acciones que se realizan en

el Asterisk y los almacena en la base de datos Oracle. A continuacin

el detalle:

cConexin

public class cConexion


{
public Connection getConexion()
{
Connection Conn=null;
try
{
String url= "jdbc:oracle:thin:@192.168.1.1:1521:crm";
Class.forName("oracle.jdbc.driver.OracleDriver");
Conn=DriverManager.getConnection(url,"crm", "crm");
}
catch(Exception e)
{
System.out.println(e.toString());
}
return Conn;
}
public void cerrarConexion(Connection pCon)
{
try
{
136

CUADRO 2.19. cConexion.java

Esta clase cConexion permitir la conexin entre la base de datos Oracle y

Java. Lo que nos permitir almacenar registro de los historiales de las

llamadas realizadas y recibidas. Adems esta clase consta de un mtodo

para cerrar la conexin de las base de datos cuando hayamos realizado

todas las transacciones: cerrarConexin.

cExtensiones
137

public class cExtensiones {


private String exten;

public String getexten(){


return exten;
}
public void setcontexto(String pcontexto){
contexto = pcontexto;
}
public int Detallellamadaivr() throws SQLException
{
CallableStatement sentenciaSql;
String cadena ="";
System.out.println("actualizaSQL");
int lohizo=0;
try
{ conn = occon.getConexion();
if(getexten().equals("1020") &&
getcontexto().equals("from-internal") &&
getaplic().equals("Answer")){
cadena = "{call
MANTENIMIENTO_IVR.INSERTAR_IVR_LLAMADAS_RECIBI(?,?,?,?,?)}";
sentenciaSql = conn.prepareCall(cadena);
sentenciaSql.setString(1, getfecha());
sentenciaSql.setString(2,
getcanal().substring(4));
sentenciaSql.setString(3, getexten());
sentenciaSql.setString(4, getcanal());
sentenciaSql.setString(5, getidast());
conn.setAutoCommit(false);
sentenciaSql.execute();
}else{
if(getcontexto().equals("promociones") &&
getprioridad()==1){
int v_codigo=0; boolean v_si=false;
cadena = "SELECT llp_codigo FROM
crm_ivr_llamadas_cliente WHERE
TRIM(llc_idasterisk)=TRIM('"+getidast()+"')";
ResultSet rs;
Statement sentenciaselec =
conn.createStatement();
rs = sentenciaselec.executeQuery(cadena);
while (rs.next()){
v_codigo=rs.getInt("llp_codigo");
v_si=true;
}
if(v_si){
138

CUADRO 2.20. cExtensiones.java

if(v_si){
cadena = "UPDATE
crm_ivr_llamadas_cliente SET
llc_estado=2,llc_src="+getexten()+" WHERE
TRIM(llc_idasterisk)=TRIM('"+getidast()+"')";
Statement sentenciaSql2 =
conn.createStatement();
int rw =
sentenciaSql2.executeUpdate(cadena);
conn.commit();
conn.setAutoCommit(false);
cadena = "UPDATE
crm_ivr_llama_promociones SET llp_estado=2 WHERE
llp_codigo="+v_codigo+" ";
sentenciaSql2 = conn.createStatement();
rw =
sentenciaSql2.executeUpdate(cadena);
conn.commit();
conn.setAutoCommit(false);
}
}else{
if(getcontexto().equals("macro-
hangupcall")){}else{
cadena = "{call
MANTENIMIENTO_IVR.INSERTAR_DETALLE_LLAMADAS_IVR(?,?,?,?,?,?,?)}
";
sentenciaSql =
conn.prepareCall(cadena);
sentenciaSql.setString(1, getexten());
sentenciaSql.setString(2,
getcontexto());
sentenciaSql.setString(3, getfecha());
sentenciaSql.setString(4, getidast());
sentenciaSql.setString(5, getcanal());
sentenciaSql.setString(6, getaplic());
sentenciaSql.setString(7,
getapldata());
conn.setAutoCommit(false);
sentenciaSql.execute();
}
}
}
lohizo=1;
conn.commit();
conn.setAutoCommit(true);
139

CUADRO 2.21. cExtensiones.java(b)

La clase cExtensiones muestra los mtodos set y get para obtener las

extensiones, canal, contexto, etc., y lo almacena en la tabla de llamadas

recibidas; lo cual nos permitir mantener un registro de las transacciones

realizadas por el IVR.

La clase cLlamada es similar a la clase cExtensiones, sirve para almacenar

los registros de las llamadas realizadas, recepta los datos y los almacena.
140

La clase Listener est siempre a la escucha de que suceda un evento y nos

permite manejarlos gracias al API Asterisk-Java, logrando que la funcin

handleEvent actu de manera diferente segn el tipo de objeto que recibe

Listener

public Listener(){
public Listener obtenerInstancia(){
return this;
}
public void handleEvent(DialEvent _event) {
String respuesta ="";
System.out.println("DialEvent event:
"+ToString.convert(_event));
}
public void handleEvent(HangupEvent _event) {
String respuesta ="";
System.out.println("HangupEvent event:
"+ToString.convert(_event));
Transacciones ctb = new Transacciones();
respuesta=ctb.cancelallamada(_event);
}
public void handleEvent(LinkEvent _event) {
String respuesta ="";
System.out.println("LinkEvent event:
"+ToString.convert(_event));
141

CUADRO 2.22. Listener.java


142

MonitorAdministrador

public class MonitorAdministrador extends Thread implements


Runnable{
private Listener listener;
private ManagerConnection managerconnection;
public MonitorAdministrador obtenerInstancia(){
return this;
}
public MonitorAdministrador(String p1,String p2,String p3){
ManagerConnectionFactory factory = new
ManagerConnectionFactory(p1,p2,p3);
try{
managerconnection = factory.createManagerConnection();

managerconnection.login();
} catch (Exception e) {
System.out.println("connectionerrrorhilo");
}

}
public void run33(){
System.out.println("event");
listener= new Listener();
managerconnection.addEventListener(listener) ;
System.out.println("555555");
try {
Thread.sleep(999100);
// managerconnection.logoff();
} catch (Exception e) {
System.out.println("errrorhilo");
}
}

public static void main(String arg[]){


MonitorAdministrador obj=new
MonitorAdministrador("192.168.1.56","ivr_manager","ivr");

try {
obj.run33();
} catch (Exception e) {
System.out.println("errrorrun");

}
}
143

CUADRO 2.23. MonitorJava

La clase MonitorAdministrador es la clase principal del mdulo Asterisk-

Java, esta clase crear instancias de nuestro sistema IVR y permitir la

concurrencia.

La clase Transacciones almacena cada una de las transacciones realizadas

por la base de datos, es decir; cada que el usuario presione una opcin por

medio de la clase Transacciones se podr almacenar este registro en la base

de datos.

public class Transacciones {


private String datos;
private NewExtenEvent _onee;
private NewCallerIdEvent _oncie;
private NewChannelEvent _onche;
private HangupEvent _ohe;
private ExtensionStatusEvent _oese;
private PeerStatusEvent _opse;

/** Creates a new instance of TransaccionesBasededatos */


public Transacciones() {
}
public Transacciones(NewExtenEvent pmio) {
_onee=pmio;
}
public Transacciones(NewChannelEvent pmio) {
_onche=pmio;
}
public Transacciones(NewCallerIdEvent pmio) {
_oncie=pmio;
}
public Transacciones(String pmio) {
datos=pmio;
}
144

CUADRO 2.24. Transacciones.java

public String LlamadasIvr(NewExtenEvent pmio){


_onee=pmio;
cExtensiones oext=new cExtensiones();
oext.setapldata(_onee.getAppData());
oext.setaplic(_onee.getApplication());

oext.setcanal(ToString.extractcanal(_onee.getChannel()));
oext.setcontexto(_onee.getContext());
oext.setexten(_onee.getExtension());
oext.setprioridad(_onee.getPriority().intValue());
java.text.SimpleDateFormat df = new
java.text.SimpleDateFormat("dd-MM-yyyy hh:mm:ss",
Locale.ENGLISH);
String fecha = df.format(_onee.getDateReceived());
oext.setfecha(fecha);
oext.setidast(_onee.getUniqueId());
try{
if(oext.Detallellamadaivr()==1){
System.out.println("Datos actualizados
satisfactoriamente...");
return "ok";
}else{
System.out.println("Error SQL a ingresar...");
};
}catch(SQLException se){
System.out.println("Error Excepcion a ingresar...");
}
return "no-----------------";
}
public String canales(){
return "no-----------------";
}
public String cancelallamada(HangupEvent pmio){
_ohe=pmio;
145

CUADRO 2.25. Transacciones.java(b)

olla.setidasterisk(_oncie.getUniqueId());
try{
if(olla.InsertarLlamadaCliente()==1){
System.out.println("Datos grabados
satisfactoriamente...");
return "ok";
}else{
System.out.println("Error en los datos a
ingresar...");
};
}catch(SQLException se){
System.out.println("Error al grabar...");
}
return "no";

}
146

CUADRO 2.26. Transacciones.java(c)

CAPTULO 3
147

JAVA ORACLE

1. Breve descripcin del mdulo

El mdulo correspondiente a la Base de Datos Oracle y Java, permitir el

mantenimiento de los datos de las tablas de la Base de Datos a travs de la

herramienta de programacin Java. Para hacer posible la comunicacin

Java-Oracle se har uso de la clase Conexin, la cual sumada a unos

paquetes desarrollados con sentencias de DML, nos permitirn la

manipulacin de los datos de una forma sencilla para el usuario.

En este mdulo se desarrollarn pginas jsp, una para cada tabla a la cual le

vayamos a dar el correspondiente mantenimiento (entindase por

mantenimiento, opciones como: Creacin, Modificacin y Eliminacin de

registros en la base de datos). Cabe recalcar adems, que unas tablas sern

slo de consulta. Es decir, no se podr manipular la informacin contenida en

el registro o eliminarla; debido a que son datos que son el fiel reflejo de las

operaciones realizadas por la empresa.


148

2. Herramientas utilizadas

Las herramientas utilizadas en la elaboracin de este mdulo de nuestro

proyecto (Java-Oracle), son las siguientes:

Base de Datos

Herramientas para la elaboracin de reportes

Herramienta de programacin Java

En el siguiente punto especificaremos con ms detalle los requerimientos.

2.1. Requerimientos de Software

Las herramientas de software requeridas para el desarrollo de nuestro

proyecto son las siguientes:

Base de datos Oracle 9i Enterprise Edition. La cual es una base de

datos relacional escalable y fcilmente manejable. Adems, provee

muchas ventajas, sobre todo seguridades, lo que la hacen ptimo su

rendimiento.

iReport. El cual es un constructor / diseador de informes visual,

poderoso, intuitivo y fcil de usar para JasperReports escrito en Java.

Permite construir informes con grficos. Los datos pueden ser

recuperados de una base de datos. Previo a la instalacin de iReport

se deber instalar herramientas adicionales: Apache Ant,


149

Jassperreport 0.x.x, JDK 1.4 (SDK) o posterior, Acrobat 5.0 no es

requerido, pero es fuertemente recomendado, para la conexin con la

base de datos, se debe proporcionar el Driver JDBC correspondiente.

Java Sun Creator. Es una potente herramienta grfica de Java que

nos permitir trabajar con Data Providers (proveedores de datos) y

componentes visuales que nos facilitarn el desarrollo del proyecto.

Todas estas herramientas operarn bajo el Sistema Operativo Windows XP.

2.2. Requerimientos de Hardware

Para el funcionamiento de las 3 herramientas de programacin en conjunto

recomendamos utilizar el siguiente hardware:

Servidor

- HDD IDE de 80 GD

- Memoria de 512 MB mnimo. Recomendado: I GB

- Procesador PIV de 2.4 GHZ. Recomendado: 3.0 GHZ

- Mainboard Intel PIV

- Tarjeta de red 10/100 Mbps


150

3. Arquitectura

A continuacin presentaremos la arquitectura de las herramientas utilizadas:

3.1. Arquitectura de Oracle

GRAFICO 3.1. Arquitectura de Oracle

La arquitectura de Oracle incluye un nmero de componentes primarios:

Oracle Server: Incluye archivos, procesos y estructuras de memoria. El

Oracle Server consta de una instancia Oracle y la base de datos Oracle.

Instancia Oracle: Es la combinacin de procesos de memoria y estructura

de memoria.

Base de Datos Oracle: Consiste de archivos del sistema operativo que

proveen almacenamiento fsico de la informacin de la base.


151

3.2. Arquitectura de iReport

GRAFICO 3.2. Arquitectura de iReport

iReport puede leer y modificar ambos tipos de archivo, XML y jasper. A

travs de JasperReports, es capaz de compilar XML a archivos jasper y

ejecutar reportes para llenarlos usando varios tipos de fuentes de datos

(JRDataSource) y exportar el resultado a PDF, HTML, XLS, CSV, otros.

4. Instalacin y configuracin del ambiente de trabajo

A continuacin se detallan la instalacin de la instalacin de las herramientas

utilizadas.
152

1. Instalacin de Oracle y Creacin de la Base de Datos

A continuacin se explica la instalacin de Oracle para Windows XP debido a

que se trabaj con este sistema operativo. La versin de la Base de Datos

Oracle que utilizaremos es la 9i, a continuacin unos sencillos pasos que nos

muestran su instalacin:

Introduciremos el CD 1 de la instalacin, los tres CDs que componen el

programa de instalacin se pueden descargar gratuitamente desde la propia

web de oracle: www.oracle.com

GRAFICO 3.3. a. Instalacin Oracle

Tras seleccionar la ruta de los ficheros de Oracle pulsaremos en Siguiente.


153

A continuacin seleccionaremos el tipo de instalacin que deseemos:

GRAFICO 3.3. b. Instalacin Oracle

En nuestro caso, puesto que crearemos la base de datos en el servidor

donde estamos realizando la instalacin seleccionaremos Oracle9i Database

9.2.0.1.0.

Si ya disponemos de un servidor de Oracle con las correspondientes bases

de datos a las que queramos acceder ser suficiente con seleccionar la

opcin Oracle9i Client 9.2.0.1.0 , en este caso la instalacin es bastante ms

simple, pues slo es necesario especificar la IP o el nombre de red del

servidor de Oracle as como el nombre (sid) de la base de datos a la que

queramos acceder.
154

Seleccionaremos el tipo de instalacin que queramos realizar:

GRAFICO 3.3. c. Instalacin Oracle

En nuestro caso, seleccionaremos Enterprise Edition, que es la que ms se

ajusta a nuestros requerimientos

Seleccionaremos la siguiente opcin dependiendo del uso que le queramos

dar a nuestra base de datos, normalmente es para Uso General . Si no

queremos crear una base de datos en el proceso de instalacin (se puede

crear en otro momento) seleccionaremos Slo software:


155

GRAFICO 3.3. d. Instalacin Oracle

Seleccionaremos el puerto para Oracle MTS Service, normalmente se suele

seleccionar el puerto por defecto 2030. Este parmetro es muy importante

pues, si decidimos cambiar el puerto por defecto, cuando queramos que un

cliente se conecte al servidor deberemos especificar el puerto que hayamos

seleccionado en este punto de la instalacin:


156

GRAFICO 3.3. e. Instalacin Oracle

Especificaremos el nombre de la base de datos (con un mximo de 8

caracteres):

GRAFICO 3.3. f. Instalacin Oracle


157

Nota: el SID es el identificador interno que utilizar Oracle para referenciar a

nuestra base de datos, se puede elegir uno diferente al del nombre de la

Base de Datos, aunque se suele utilizar el mismo.

En este punto de la instalacin seleccionaremos la ubicacin de los

archivos de la base de datos que la instalacin crear.

Seleccionaremos el juego de caracteres que vayamos a utilizar, si dejamos

el juego de caracteres por defecto Oracle utilizar el juego de caracteres que

tengamos configurado en nuestro sistema operativo, es la opcin

recomendada. Este parmetro slo sera importante en el caso en que

queramos exportar nuestra base de datos a otro servidor de Oracle, en este

caso ser importante que el juego de caracteres del servidor que recibir los

datos coincida con el que los export. Si no coinciden podran aparecer

errneamente caracteres como alojados en nuestra base de datos:

GRAFICO 3.3. g. Instalacin Oracle


158

Como ltimo paso de la preinstalacin nos aparecer una ventana con el

software que se va a instalar, tras comprobar que es correcto pulsaremos en

Instalar:

GRAFICO 3.3. h. Instalacin Oracle

Introduciremos los CDs de instalacin conforme los vaya pidiendo el

programa:

GRAFICO 3.3. i. Instalacin Oracle

Tras la instalacin de Oracle y la creacin de la base de datos aparecer

una ventana indicando que el proceso de instalacin ha finalizado:


159

GRAFICO 3.3. j. Instalacin Oracle

4.2. Instalacin de iReport

Previo a la instalacin de iReport se requiere la instalacin de Ant. A

continuacin se detallan los pasos:

Instalacin de ANT

a) Descargar la versin apache-ant-1.6.2-bin.zip o superior

b) Descomprimir el archivo zip

c) Crear un directorio con el nombre ANT_HOME o ANT. En el directorio

raz. C:\

d) Copiar el contenido de Ant en la carpeta creada

e) Configurar las variables de entorno:

a. ANT_HOME = C:\ANT_HOME o ANT_HOME = C:\ANT

b. JAVA_HOME = C:\jdk1.5.0

c. PATH = C:\ANT\bin
160

Instalacin de iReport

1. Descargar la versin iReport-0.3.2.zip o superior

2. Descomprimir el archivo zip

3. Crear un directorio con el nombre iReport en el directorio raz C:\

4. Copiar en contenido del iReport en la carpeta creada

5. Copiar el archivo tools.jar que se encuentra en C:\jdk1.5.0\lib del

jdk al directorio C:\iReport\lib

6. Colocar el Driver classes12.jar de oracle en el directorio

C:\iReport-0.2.2\lib (Aplica para cualquier driver JDBC que

necesitamos)

7. Configurar las variables de entorno:

a. CLASSPATH: C:\iReport\lib\jasrreports-0.6.0.jar

b. CLASSPATH: C:\iReport\lib\itext-1.0.2b.jar

Finalmente deber compilar las fuentes. Para esto ubquese en C:\iReport

y ejecute el comando Ant

5. Desarrollo del proceso de Software

En este apartado explicaremos todo lo acontecido con el desarrollo del

proceso de software, tales como: Especificacin de los diagramas del

mdulo, base de datos, clases, paquetera, etc.


161

5.1. Especificaciones Generales

Dentro de este punto de desarrollo explicaremos, de forma grfica, los

procesos correspondientes a ste mdulo.

5.1.1. Especificacin de Diagramas de Procesos

Describiremos el flujo de datos del proceso que cambian o transforman los

datos dentro del mdulo del sistema, tratando de dar una idea de cmo se

realizar el movimiento de los datos a travs del sistema de base de datos.

A continuacin mostraremos el Diagrama de Procesos:

1. El usuario ingresa con su usuario y password

2. Si el password es vlido podr ingresar al mdulo de IVR

3. El usuario-administrador podr escoger entre las diferentes opciones:

- Informacin General

- Edicin

- Reportes

- Acerca de
162

GRAFICO 3.3. Diagrama de Procesos


163

5.1.2. Especificacin de Casos de Uso

Describe un conjunto de secuencias de acciones que un sistema ejecuta,

para producir un resultado observable de inters. Se emplea para estructurar

los aspectos de comportamiento de un modelo.

CASO DE USO: Administracin del IVR

Nombre: Administracin del Ivr


Autor: Grupo 4
Fecha: Diciembre del 2.006
Descripcin:
Permite realizar el mantenimiento a las tablas del mdulo.

Actores:
Usuario administrador

Precondiciones:
El actor debe de haber sido logueado por el sistema

Flujo Normal:
1. El actor entra a la pantalla principal de administracin del Ivr
2. El actor escoge la opcin que le interesa segn sea su necesidad
3. El usuario decidir si guarda los cambios realizados, los mismos que
causarn efecto en la base de datos del sistema
4. El sistema validar los cambios y los almacenar.

Flujo Alternativo:
3. Si decide no realizar los cambios, podr seguir navegando a travs de las
diferentes opciones del sistema
4. El sistema comprueba la validez de los cambios. Si no son correctos se
avisa al actor de ello, permitindole que los corrija.

PostCondiciones:
Realizacin de cambios en las tablas del mdulo del Ivr.

TABLA 3.1. Casos de Uso


164

5.1.3. Especificacin de Diagramas de Caso de Uso

Muestra los casos de uso, actores y sus relaciones. Son importantes para el

modelado y organizacin del comportamiento.

CASO DE USO: Principal IVR Call System

GRAFICO 3.4. Diagrama de Caso de uso Principal


165

CASO DE USO: Administracin de JAVA ORACLE

GRAFICO 3.5. Diagrama de Caso de uso del mdulo


166

5.1.4. Especificacin de Diagramas de Secuencia

Son diagramas de interaccin, muestran un conjunto de objetos y sus

relaciones, as como los mensajes que se intercambian entre ellos. Cubren la

vista dinmica del sistema.

GRAFICO 3.6. Diagrama de Secuencia


167

5.1.5. Especificacin de Diagramas de Colaboracin

Muestran la organizacin estructural de los objetos que envan y reciben

mensajes. Los diagramas de secuencia se pueden convertir en diagramas de

colaboracin sin perdida de informacin, lo mismo ocurren en sentido

opuesto.

GRAFICO 3.7. Diagrama de Colaboracin


168

5.1.6. Flujo de ventanas

Describe la secuencia de pantallas que el usuario espera ver para cumplir las

funciones requeridas.

GRAFICO 3.8. Diagrama de Flujo de Ventanas


169

5.1.7. Diagramas de Componentes

Se mostrar la organizacin y las dependencias entre los componentes del

mdulo. Se relaciona con los diagramas de clases.

GRAFICO 3.9. Diagrama de Componentes


170

5.1.8. Diagramas de Clases

Muestra la relacin entre las clases implementadas dentro del mdulo.

cConexion

B/D CRM

GRAFICO 3.10. Diagrama de Clases


171

5.1.9. Diagramas de Entidad Relacin

Muestra la relacin entre las entidades de la base.

GRAFICO 3.11. Diagrama de Entidad Relacin


172

5.2. Base de Datos

A continuacin analizaremos en detalle las instrucciones de PL/SQL

necesarias para realizar los scripts necesarios para el buen funcionamiento

del desarrollo del mdulo.

5.2.1. Creacin de Usuarios

El usuario con el que trabajaremos en nuestro proyecto es el usuario CRM,

podemos crearlo a travs de la Consola de Oracle o a travs de sentencias

PL/SQL, en nuestro caso lo haremos a travs de la sentencia PL/SQL la cual

la ejecutaremos en la herramienta SQL Plus o PLSQL Developer

CREATE USER CRM nombre del usuario


IDENTIFIED BY CRM_1 contrasea de usuario
DEFAULT TABLESPACE CRM_DAT tablespace por defecto
TEMPORARY TABLESPACE TEMP; --tablespace temporal

Luego le damos permisos para crear sesin, de conexin y el privilegio

SYSDBA al usuario CRM lo que nos permitir ejecutar sentencia DML con

este usuario, es decir nos permitir realizar operaciones de insercin,

actualizacin, eliminacin.

GRANT CREATE SESSION TO CRM;


CONN SYS/GRUPO4 AS SYSDBA
GRANT SYSDBA TO CRM;
173

5.2.2. Creacin de Tablespaces

Para nuestro proyecto creamos dos tablespaces uno para almacenar la data

y otro para el almacenamiento de los ndices, los cuales sern llamados

CRM_DAT & CRM_IDX segn su orden correspondiente, para esto

ingresamos el tamao del tablaespace, el tamao en que se incrementar y

el tamao mximo del tablespace.

CREATE TABLESPACE CRM_DAT


DATAFILE
'C:\ORACLE\ORADATA\GRUPO4\CRM_DAT01.DBF' SIZE 500M
AUTOEXTEND ON NEXT 50M MAXSIZE 500M;

CREATE TABLESPACE CRM_IDX


DATAFILE
'C:\ORACLE\ORADATA\GRUPO4\CRM_IDX01.DBF' SIZE 150M
AUTOEXTEND ON NEXT 10M MAXSIZE 200M;

5.2.3. Identificadores de la base de datos: variables, funciones,

procedimientos, paquetes

Identificador para Tablas:

Los nombres de Tablas estn conformado por:

Prefijo Nombre Sistema. Esta compuesto por tres caracteres que

identifican al nombre del Sistema.

Ejemplo: CRM (Customer Relationship Management)


174

Prefijo Nombre Mdulo. Esta compuesto por tres caracteres que

identifican al nombre del Mdulo.

Ejemplo: IVR (Mdulo de IVR)

Nombre de Tabla. Est compuesto hasta 20 caracteres que identifican

al nombre de la tabla.

Ejemplo: ARCHIVOS (Archivos de IVR)

Sintaxis:
PrefijoNombreTabla PrefijoNombreMdulo NombreTabla
CRM_IVR_ARCHIVO

Identificador para Campos:

El campo especifica el nombre de una columna de la tabla. El nombre del

campo debe estar conformado de la siguiente manera:

Prefijo Nombre Tabla. Est compuesto por tres caracteres que

identifican al nombre de la Tabla

Ejemplo: ARC (Tabla Archivo)


175

Nombre de Campo. Est compuesto hasta 20 caracteres que

identifican al nombre del campo.

Ejemplo: CODIGO (Cdigo de los Archivos de IVR)

Sintaxis:
PrefijoNombreTabla NombreCampo
ARC_NOMBRE

Constraints.

Los constraints pueden ser definidos por diferentes tipos y dependiendo

del tipo de restriccin que se desee utilizar. Como concepto un constraint

es una restriccin en los valores que puede tomar una o varias columnas

de una tabla. Existiendo los siguientes tipos de constraints:

Constraints de Integridad:

- Not Null Constraints.

- Check Constraints.

- Unique Key Constraints.

- Primary Key Constraints.


176

Constraints de Integridad Referencial o Relacional:

- Foreign Key Constraints.

Convencin:

3 caracteres para el prefijo del modulo + separador _

2 caracteres para el prefijo del tipo de restriccin (constraint) +

separador _

4 o 5 caracteres para la descripcin de la tabla + separador _

3 o 4 caracteres para la descripcin de las columnas, utilizando

separador _

NOT NULL

Sintaxis:
PrefijoNombreMdulo NN DescripcinTablaColumna
IVR_NN_COD_ARC

CHECK CONSTRAINTS

Sintaxis:
PrefijoNombreMdulo CK DescripcinTablaColumna
IVR_CK_ARC_EST
177

UNIQUE KEY

Sintaxis:
PrefijoNombreMdulo UK DescripcinTablaColumna
IVR_UK_ARC_COD

PRIMARY KEY

Sintaxis:
PrefijoNombreMdulo PK DescripcinTablaColumna
IVR_PK_ARCHIVO_CODIGO

FOREING KEY

Sintaxis:
PrefijoNombreMdulo FK DescripcinTablaColumna
IVR_FK_LLAMREC_LLAMREA

Vistas

Las vistas son tablas lgicas que tienen acceso a datos de otras tablas

y/o vistas, estn implementadas por un query (consulta) donde se pueden

mostrar datos de diferentes tablas incluso. Para la convencin de

nombrado tambin poseen un prefijo que identifica al sistema, seguido del

prefijo del mdulo que pertenece, ms la letra V (Vista) y por ltimo el

nombre de la vista.
178

Sintaxis:
PrefijoNombreSistema PrefijoNombreMdulo NombreVista
CRM_IVR_V_REPORTECLIENTES

Secuencias.

Las secuencias son objetos de base de datos que normalmente son

propios de un campo o columna Primary Key de tabla, estos tambin

deben poseer el un prefijo que identifica al sistema, seguido del prefijo del

mdulo que pertenece, acompaado de una letra S (Secuencia) y al

ltimo nombre de la secuencia preferiblemente debe tener relacin con la

tabla y el campo o columna que almacenar la generacin automtica de

este objeto.

Sintaxis:
PrefijoNombreSistema PrefijoNombreMdulo NombreSecuencia
CRM_IVR_S_LLAM_CODIGO

Stored Program Units

Son procedimientos, funciones o paquetes almacenados de base de

datos que incluyen programacin PL/SQL y se clasifican en procedures,

functions y packages.
179

Esta clasificacin tambin existe en nivel de la herramienta Forms del

Developer en la opcin de program untis y se encuentran residentes en el

cliente con la limitante que si se realiza un cambio en la programacin de

los program units se tendr que generar un nuevo archivo ejecutable y

proceder a su actualizacin.

En cambio con los procedimientos de base de datos podemos hacer que

la versin cliente no tenga demasiadas actualizaciones por cada cambio

que se realice en los stored program units, estos haciendo el cdigo

independiente. Adems esto nos permite ejecutar el mismo objeto en

repetidas ocasiones ya que estos se encuentran cargados en el rea

compartida global de la Base de Datos, haciendo que el funcionamiento

del cliente sea ms liviano y utilizando los recursos del servidor.

Prefijo Nombre Mdulo.

Esta compuesto por tres caracteres que identifican el nombre del Mdulo.

Prefijo Stored Program Units.

Programas almacenados de base de datos.

Prefijo Descripcin
P Procedimiento (Procedure)
F Funcin (Function)
KS Especificacin del paquete (Package Specification)
KB Cuerpo del paquete (Package Body)
180

PROCEDIMIENTO

Sintaxis:
PrefijoNombreMdulo P NombreObjeto
IVR_P_NOMBRE_PROCEDIMIENTO

FUNCIN

Sintaxis:
PrefijoNombreMdulo F NombreObjeto
IVR_F_NOMBRE_FUNCIN

ESPECIFICACIN DEL PAQUETE

Sintaxis:
PrefijoNombreMdulo KS NombreObjeto
IVR_KS_NOMBRE_PAQUETE

CUERPO DEL PAQUETE

Sintaxis:
PrefijoNombreMdulo KB NombreObjeto
IVR_KB_NOMBRE_PROCEDIMIENTO

Variables.

Usted puede declarar variables locales y globales en cualquier trigger,

comando de item de men, subprogramas de usuario PL/SQL que cree.


181

Se puede usar cualquier item de forma para almacenar un valor como una

variable.

Para la definicin de variables locales anteponemos al nombre de la

variable VL_

Ejemplo: VL_nom_var_loc.

En las variables globales se antepone dos puntos y la palabra GLOBAL

Ejemplo: GLOBAL_nom_var_global

A las variables de cursor podemos anteponer antes del nombre de

variable las iniciales VC_

Ejemplo: VC_nombre_var_cur

Cursor C_CLIENTES (VC_CODIGO number) IS


Select nombres, apellidos from ge_clientes where codigo =
VC_CODIGO;
182

Parmetros de Entrada y Salida.

Si usted declara un parmetro debera indicar el tipo de dato y el modo de

acceso dentro de la lista formal de parmetros. Los parmetros pueden

ser declarados como tipos VARCHAR2, DATE, NUMBER BOOLEAN,

cualquiera de los tipos de Objetos de Oracle Forms. Cuando usted cree

una funcin o procedimiento ingrese los tipos de datos despus del

nombre de cada parmetro formal.

Ejemplo:

PROCEDURE VTA_P_DATOS_CLIENTE (VL_COD_CLI NUMBER)


FUNCTION VTA_F_SALDO_CREDITOS (VL_CLIENTE VARCHAR2) RETURN
BOOLEAN

Los modos de acceso de un parmetro pueden ser IN (por defecto), OUT

o IN OUT. Un parmetro IN pasa un valor a un subprograma. El

subprograma puede leer el valor del parmetro de entrada (IN), pero no

se puede escribir sobre este valor. Un parmetro de entrada actual puede

ser una constante, variable inicializada o expresin.

Un parmetro de salida (OUT) retorna un valor desde un subprograma.

Un parmetro actual de salida puede ser solo variable local y el programa

asignara un valor a la variable.


183

Un parmetro de entrada y salida (IN OUT) pasa un valor a un

subprograma y retorna un valor desde el subprograma. A estas variables

por lo tanto si se les puede asignar un valor pero no es requerido.

Ejemplo:

PROCEDURE VTA_P_DATOS_CLIENTE (VL_COD_CLI IN NUMBER)

Dentro de la definicin de un procedimiento se puede utilizar variables de

IN, OUT o IN OUT, para el efecto citamos un ejemplo.

PROCEDURE FAC_P_CANCELA_DEUDA
(vi_numero_factura IN NUMBER, //vi variable entrada)
vio_codigo_mensaje IN OUT VARCHAR2, //vio(variable entrada y
salida)
vo_mensaje IN VARCHAR2 ) IS //vo (variable salida)
BEGIN

END;

CUADRO 3.1. Procedure


184

5.2.4. Diagrama de Base de Datos


185

5.2.5. Script de la Base de Datos

--=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
---------------- GRUPO 4 -------------------------
--=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:

-------------------------------------------------------------------------------------
CREATE TABLE CRM_IVR_ARCHIVO
-------------------------------------------------------------------------------------
( ARC_COD_ARCHIVO VARCHAR2(4)
CONSTRAINT IVR_PK_ARCHIVO PRIMARY KEY USING INDEX TABLESPACE CRM_IDX,
ARC_NOM_ARCHIVO VARCHAR2(40),
ARC_DESCRIPCION VARCHAR2(70),
ARC_UBICACION VARCHAR2(70),
ARC_ESTADO VARCHAR2(1) CONSTRAINT IVR_CK_ARC_ESTADO CHECK
(ARC_ESTADO IN('A','I'))
)TABLESPACE CRM_DAT;

-------------------------------------------------------------------------------------
CREATE TABLE CRM_IVR_MENU_IVR
-------------------------------------------------------------------------------------
( MNI_COD_OPCION NUMBER
CONSTRAINT IVR_PK_MENU_IVR PRIMARY KEY USING INDEX TABLESPACE CRM_IDX,
MNI_CONT_ORIGEN VARCHAR2(4) ,
MNI_COD_ARC_IVR VARCHAR2(4) ,
MNI_DESCRIPCION VARCHAR2(80) ,
MNI_ESTADO VARCHAR2(1) CONSTRAINT IVR_CK_MNI_ESTADO CHECK
(MNI_ESTADO IN('A','I'))
)TABLESPACE CRM_DAT;

-------------------------------------------------------------------------------------
CREATE TABLE CRM_IVR_LLAMADAS_CLIENTE --(REALIZADAS)
-------------------------------------------------------------------------------------
( LLC_COD_LLAMADA NUMBER
CONSTRAINT IVR_PK_LLAM_CLI PRIMARY KEY USING INDEX TABLESPACE CRM_IDX,
LLC_COD_CLIENTE NUMBER,
LLC_CODIGO NUMBER,
LLC_INICIO_LLAMADA DATE,
LLC_IDASTERISK VARCHAR2(30),
LLC_SRC VARCHAR2(30),
LLC_DST VARCHAR2(30),
LLC_SCONTEXT VARCHAR2(80),
LLC_DCONTEXT VARCHAR2(80),
LLC_DURATION NUMBER
)TABLESPACE CRM_DAT;

-------------------------------------------------------------------------------------
CREATE TABLE CRM_IVR_LLAMADAS_RECIBIDAS
-------------------------------------------------------------------------------------
( LLR_COD_LLAMADA NUMBER
CONSTRAINT IVR_PK_LLAM_REC PRIMARY KEY USING INDEX TABLESPACE CRM_IDX,
LLR_INICIO_LLAMADA DATE,
LLR_CSRC VARCHAR2(80),
LLR_CDST VARCHAR2(80),
LLR_SRC VARCHAR2(80),
LLR_DST VARCHAR2(80),
LLR_DCONTEXT VARCHAR2(80),
LLR_DURATION VARCHAR2(8)
LLR_UNIQUEID VARCHAR2(80),
)TABLESPACE CRM_DAT;
CONTINUA

CUADRO 3.2.a Script de Base de Datos


186

-------------------------------------------------------------------------------------
CREATE TABLE CRM_IVR_PROS_CLIENTE
-------------------------------------------------------------------------------------
( PRC_CODIGO NUMBER,
CONSTRAINT IVR_PK_PROS PRIMARY KEY USING INDEX TABLESPACE CRM_IDX,
PRC_CODIGO VARCHAR2(4),
PRC_NOMBRE VARCHAR2(70),
PRC_ARCHIVO VARCHAR2(30),
PRC_EXTENSION VARCHAR2(70)
)TABLESPACE CRM_DAT;

-------------------------------------------------------------------------------------
CREATE TABLE CRM_IVR_HISTORIALIVR
-------------------------------------------------------------------------------------
( HIL_COD_HIS NUMBER
CONSTRAINT IVR_PK_HISTORIALIVR PRIMARY KEY USING INDEX TABLESPACE CRM_IDX,
HIL_CONTEXT VARCHAR2(60),
HIL_CANAL VARCHAR2(60),
HIL_IDASTERISK VARCHAR2(70),
HIL_MENU VARCHAR2(4),
HIL_APPLICAT VARCHAR2(60),
HIL_DATAAPLICA VARCHAR2(60),
HIL_ID_LLAMADA VARCHAR2(10),
HIL_FECHA DATE,
HIL_MENU_ANT VARCHAR2(16)
)TABLESPACE CRM_DAT;

-------------------------------------------------------------------------------------
CREATE TABLE CRM_IVR_PROMOCIONES
-------------------------------------------------------------------------------------
( PRM_CODIGO NUMBER,
PRM_NOMBRE VARCHAR2(25),
PRM_ARCHIVO VARCHAR2(50),
PRM_EXTENSION VARCHAR2(15),
CONSTRAINT IVR_PK_CODIGO PRIMARY KEY (PRM_CODIGO) USING INDEX TABLESPACE
CRM_IDX
) TABLESPACE CRM_DAT;

-------------------------------------------------------------------------------------
CREATE TABLE CRM_IVR_LLAMA_PROMOCIONES
-------------------------------------------------------------------------------------
( LLP_CODIGO NUMBER,
LLP_CLIENTE NUMBER,
LLP_TELEFONO VARCHAR2(9),
LLP_DIA VARCHAR2(2),
LLP_MES VARCHAR2(2),
LLP_MINUTO VARCHAR2(2),
LLP_HORA VARCHAR2(2),
LLP_AO VARCHAR2(4),
LLP_PROMO NUMBER,
LLP_ESTADO NUMBER,
LLP_INTENTOS VARCHAR2(5),
LLP_ESPERA VARCHAR2(5),
LLP_TIEMPO_INT VARCHAR2(5)
CONSTRAINT IVR_PK_CODIGO PRIMARY KEY (LLP_CODIGO) USING INDEX TABLESPACE
CRM_IDX,
CONSTRAINT IVR_FK_CLIENTE_LLAM_CLIE FOREIGN KEY(LLP_CLIENTE)
REFERENCES CRM_SCO_CLIENTES(CLI_CODIGO)
) TABLESPACE CRM_DAT;

CUADRO 3.2.b Script de Base de Datos


187

5.2.6. Vistas

-------------------------------------------------------------------------------------
CREATE OR REPLACE VIEW CRM_IVR_V_CLIENTE AS
-------------------------------------------------------------------------------------
SELECT CLN_ID AS CODIGO,CLN_NOMBRES||' '||CLN_APELLIDOS AS CLIENTE,
NVL(CLN_CEDULA,CLN_PASAPORTE) AS CEDRUC,'N' AS TIPO FROM CRM.CRM_SCO_CLIENTE_NATURAL
UNION SELECT CLJ_ID AS CODIGO,CLJ_RAZON AS CLIENTE,
CLJ_RUC AS CEDRUC,'J' AS TIPO FROM CRM.CRM_SCO_CLIENTE_JURIDICO;

CUADRO 3.3 Vistas

5.2.7. Paquetes

Dentro de este mdulo hemos desarrollado el paquete:

MANTENIMIENTO_IVR, en el cual estarn especificados los procedimientos

que utilizaremos en la realizacin de nuestro proyecto.

Este paquete est dividido en dos partes:

- Specification. Es la interface de sus aplicaciones. Aqu estar

declarado el tipo, variables, constantes, excepciones, cursores y

subprogramas que sern utilizados dentro del mdulo.

- Body. Define los cursores y subprogramas que sern implementados

en la aplicacin.

CREATE OR REPLACE PACKAGE MANTENIMIENTO_IVR IS


.
.
.
END MANTENIMIENTO_IVR;
/

CREATE OR REPLACE PACKAGE BODY MANTENIMIENTO_IVR IS


.
.
.
END MANTENIMIENTO_IVR;
/
188

5.2.8. Procedimientos

A continuacin detallaremos un ejemplo de procedimiento de Insercin,

Actualizacin y Eliminacin de registros de la tabla. Este procedimiento ser

similar para cada una de las tablas del mdulo del proyecto.

Procedimiento de Insercin

SPECIFICATION PACKAGE. TABLA: Archivo_Ivr

PROCEDURE INSERTAR_CRM_IVR_ARCHIVO_IVR(
INS_ARC_NOM_ARCHIVO IN CRM_IVR_ARCHIVO.ARC_NOM_ARCHIVO%TYPE,
INS_ARC_DESCRIPCION IN CRM_IVR_ARCHIVO.ARC_DESCRIPCION%TYPE,
INS_ARC_UBICACION IN CRM_IVR_ARCHIVO.ARC_UBICACION%TYPE,
INS_ARC_ESTADO IN CRM_IVR_ARCHIVO.ARC_ESTADO%TYPE);

CUADRO 3.4. Package(a)

Tan solo se declararn los campos que sern utilizados en el desarrollo del

procedimiento de Insercin.

BODY PACKAGE. TABLA: Archivo_Ivr

PROCEDURE INSERTAR_CRM_IVR_ARCHIVO_IVR(
INS_ARC_NOM_ARCHIVO IN CRM_IVR_ARCHIVO.ARC_NOM_ARCHIVO%TYPE,
INS_ARC_DESCRIPCION IN CRM_IVR_ARCHIVO.ARC_DESCRIPCION%TYPE,
INS_ARC_UBICACION IN CRM_IVR_ARCHIVO.ARC_UBICACION%TYPE,
INS_ARC_ESTADO IN CRM_IVR_ARCHIVO.ARC_ESTADO%TYPE)
IS
COD_ARCHIVO CRM_IVR_ARCHIVO.ARC_COD_ARCHIVO%TYPE;
BEGIN

SELECT MAX(TO_NUMBER(ARC_COD_ARCHIVO)) INTO COD_ARCHIVO


FROM CRM_IVR_ARCHIVO;

IF COD_ARCHIVO IS NULL THEN


COD_ARCHIVO:='0000';
ELSE
COD_ARCHIVO:=LPAD(TO_CHAR(COD_ARCHIVO+1),4,'0');
END IF;

CUADRO 3.4.a. Package(b)


189

Hacemos un SELECT donde buscamos el ltimo cdigo ingresado, con

ayuda de la funcin MAX, la cual busca el valor mximo (valor numrico),

pero debido a que el campo cdigo es de tipo VARCHAR2 tenemos que

convertirlo a numrico con la funcin TO_NUMBER.

Si el cdigo es NULL (no existe), le asignamos a cdigo el valor de 0001,

primer registro de la tabla. Caso contrario le suma uno, convierte el valor a

tipo VARCHAR2 con la funcin TO_CHAR, y completa con 0 a la izquierda

el cdigo hasta completar 4 posiciones.

INSERT INTO CRM_IVR_ARCHIVO


(
ARC_COD_ARCHIVO,
ARC_NOM_ARCHIVO,
ARC_DESCRIPCION,
ARC_UBICACION,
ARC_ESTADO
)
VALUES(
COD_ARCHIVO,
INS_ARC_NOM_ARCHIVO,
INS_ARC_DESCRIPCION,
INS_ARC_UBICACION,
INS_ARC_ESTADO
);

END INSERTAR_CRM_IVR_ARCHIVO_IVR;

CUADRO 3.4.b Package(b)


Por ltimo, insertamos el valor del registro en la tabla.

Procedimiento de Eliminacin

SPECIFICATION PACKAGE. TABLA: Archivo_Ivr

PROCEDURE BORRAR_CRM_IVR_ARCHIVO_IVR(
COD_ARCHIVO IN CRM_IVR_ARCHIVO.ARC_COD_ARCHIVO%TYPE);

CUADRO 3.4.c Package(c)


190

Declaramos los campos que sern utilizados en el desarrollo del

procedimiento de eliminacin.

BODY PACKAGE. TABLA: Archivo_Ivr


PROCEDURE BORRAR_CRM_IVR_ARCHIVO_IVR(
COD_ARCHIVO IN CRM_IVR_ARCHIVO.ARC_COD_ARCHIVO%TYPE)IS
BEGIN
DELETE CRM_IVR_ARCHIVO
WHERE ARC_COD_ARCHIVO = COD_ARCHIVO;
END BORRAR_CRM_IVR_ARCHIVO_IVR;
CUADRO 3.4.d Package(d)

Buscamos el registro que coincida con el valor que hemos enviado como

parmetro (cdigo a buscar) y lo eliminamos con la sentencia DELETE.

Procedimiento de Actualizar

SPECIFICATION PACKAGE. TABLA: Archivo_Ivr

PROCEDURE ACTUAL_CRM_IVR_ARCHIVO_IVR(
COD_ARCHIVO IN CRM_IVR_ARCHIVO.ARC_COD_ARCHIVO%TYPE,
INS_ARC_NOM_ARCHIVO IN CRM_IVR_ARCHIVO.ARC_NOM_ARCHIVO%TYPE,
INS_ARC_DESCRIPCION IN CRM_IVR_ARCHIVO.ARC_DESCRIPCION%TYPE,
INS_ARC_UBICACION IN CRM_IVR_ARCHIVO.ARC_UBICACION%TYPE,
INS_ARC_ESTADO IN CRM_IVR_ARCHIVO.ARC_ESTADO%TYPE);

CUADRO 3.4.e Package(e)

Declaramos los campos que sern utilizados en el desarrollo del

procedimiento de actualizacin.
191

BODY PACKAGE. TABLA: Archivo_Ivr

PROCEDURE ACTUAL_CRM_IVR_ARCHIVO_IVR(
COD_ARCHIVO IN CRM_IVR_ARCHIVO.ARC_COD_ARCHIVO%TYPE,
INS_ARC_NOM_ARCHIVO IN CRM_IVR_ARCHIVO.ARC_NOM_ARCHIVO%TYPE,
INS_ARC_DESCRIPCION IN CRM_IVR_ARCHIVO.ARC_DESCRIPCION%TYPE,
INS_ARC_UBICACION IN CRM_IVR_ARCHIVO.ARC_UBICACION%TYPE,
INS_ARC_ESTADO IN CRM_IVR_ARCHIVO.ARC_ESTADO%TYPE) IS
BEGIN
UPDATE CRM_IVR_ARCHIVO
SET
ARC_NOM_ARCHIVO = INS_ARC_NOM_ARCHIVO,
ARC_DESCRIPCION = INS_ARC_DESCRIPCION,
ARC_UBICACION = INS_ARC_UBICACION,
ARC_ESTADO = INS_ARC_ESTADO
WHERE ARC_COD_ARCHIVO = COD_ARCHIVO;
END ACTUAL_CRM_IVR_ARCHIVO_IVR;

CUADRO 3.4.f Package(f)

Buscamos el registro que coincida con el valor que hemos enviado como

parmetro (cdigo a buscar) y lo actualizamos con los nuevos valores que

hemos obtenido desde la interface creada en Java Sun Creator.

5.2.9. Diccionario de la Base de Datos

A continuacin detallaremos el diccionario de datos de las tablas utilizadas

en el proyecto: (Ver anexos para mayor detalle)

archivo_Ivr pros_cliente

menu_Ivr historialivr

llamadas_recibidas promociones

llamadas_cliente llama_promociones
192

CRM_IVR_ARCHIVO_IVR: Almacenar la ubicacin de los archivos de

sonido que sern emitidos en el IVR.

CRM_IVR_MENU_IVR: Almacenar las opciones del nuestro IVR.

CRM_IVR_LLAMADAS_RECIBIDAS: Almacenar el registro de las

llamadas que nuestros clientes y/o usuarios han realizado al sistema.

CRM_IVR_LLAMADAS_CLIENTE: Almacenar las llamadas realizadas por

nuestro IVR a los clientes del sistema con la finalidad de emitir publicidad.

CRM_IVR_PROS_CLIENTE: Almacenar los prospectos de clientes de

nuestro sistema IVR.

CRM_IVR_HISTORIALIVR: Almacenar un historial de las opciones

marcadas por los clientes que llamaron a nuestro sistema.

CRM_IVR_PROMOCIONES: Almacenar los archivos promocionales que

sern emitidos por nuestro sistema de IVR.


193

CRM_IVR_LLAMA_PROMOCIONES: Almacenar las llamadas

promocionales que sern emitidas a nuestros clientes del IVR.

5.2.10 Creacin del rbol de Opciones

Para esto ser necesaria la ejecucin de las siguientes en PL/SQL:

- Para cada una de las pginas jsp que creemos deberemos crear un

registro con la siguiente estructura:

CUADRO 3.5. rbol de Opciones

INSERT INTO CRM_ADM_APLICACIONES


(APL_CODIGO, APL_DESCRIPCION, APL_FECHA_CREACION, APL_COD_TIPO
_APLICACION, APL_URL_RUTA, APL_CODIGO_MODULO, APL_ESTADO)
VALUES (IVR0011, PAGINA DE MENU UVR, TRUNC(SYSDATE),
JSP,/faces/ivr/pMMenuIvr.jsp, IVR, A);

Estos registros sern creados para cada una de las pginas que luego

sern direccionadas al rbol segn el cdigo asociado (Por ejemplo:

IVR0011).

- Para la creacin de cada uno de los niveles del rbol se deber crear

un registro de los mostrados a continuacin y asociarlos con el cdigo

correspondiente a la pgina. (Para el nivel 0 del rbol, no se coloca

ningn nombre de pgina como se muestra a continuacin)

INSERT INTO CRM_ADM_ROL_MENU


(MNM_OPCION_MENU, MNM_CODIGO_ROL, MNM_CODIGO:MODULO,
MNM_DESCRIPCION, MNM_PADRE)
VALUES (40, ADM, IVR, Acerca de, 0);
CUADRO 3.6. Script para el rbol de Opciones

INSERT INTO CRM_ADM_ROL_MENU


(MNM_OPCION_MENU, MNM_CODIGO_ROL, MNM_CODIGO:MODULO,
MNM_DESCRIPCION, MNM_PADRE)
VALUES (1000, ADM, IVR, Archivo IVR,10,IVR0002);
194

5.3. iReport

Es la mejor herramienta de cdigo libre en Java para generar reportes.

Puede entregar ricas presentaciones o diseos en la pantalla, para la

impresora o para archivos en formato PDF, HTML, RTF, XLS, CSV y XML.

Est completamente escrita en Java y se puede utilizar en una gran variedad

de aplicaciones de Java, incluyendo J2EE o aplicaciones Web, para generar

contenido dinmico.

5.3.1. Creacin de Reportes con iReport

A continuacin mostraremos brevemente el desarrollo de reportes con

iReport.

1. Seleccionar Project New


195

GRAFICO 3.13.a. Trabajando con iReport

2. Seleccionar File New Document

GRAFICO 3.13.b. Trabajando con iReport

Aqu se definir el nombre del reporte, tamao de la pantalla, orientacin,

mrgenes, etc. La apariencia del layout (plantilla) de la pgina del reporte es

la siguiente:
196

GRAFICO 3.13.c. Trabajando con iReport


Los objetos de texto, imgenes, etc., pueden ser colocados en la plantilla del

documento usando el mtodo de arrastrar y pegar.

Para insertar Texto:

Para insertar Campos:

Para insertar Imgenes:


197

Cuando insertamos un objeto de texto, lo haremos arrastrando el elemento al

lugar donde lo queremos visualizar. Luego presionaremos clic derecho para

editar las propiedades del objeto y as poder definir las mismas.

Con ayuda de los diferentes objetos que texto daremos la apariencia visual

que deseemos a nuestro reporte.

GRAFICO 3.13.d. Trabajando con iReport


198

Los documentos que se generan con iReport & Jasperreports tienen varios

valores que son seteables y configurables, estos son: parmetros, campos y

variables:

a) Parmetros: Son valores generales como el ttulo del reporte /

subreporte, ubicacin, autor, etc.

b) Campos: Son los campos tipo texto que llenaremos desde las

consultas lanzadas a la aplicacin durante la ejecucin del reporte.

c) Variables: Una variable es un valor calculado como sumatoria.

Para definir los parmetros se tienen que pulsar el botn Parameters desde

la barra de herramientas
199

GRAFICO 3.13.e. Trabajando con iReport


200

GRAFICO 3.13.e. Trabajando con iReport

GRAFICO 3.13.f. Trabajando con iReport

Una vez que tenemos terminado nuestro reporte, debemos compilarlo y

ejecutarlo.

GRAFICO 3.13.g. Trabajando con iReport


201

Luego de compilado, ejecutamos el reporte: Build Execute Report

GRAFICO 3.13.h. Trabajando con iReport


Para realizar la conexin de la Base de Datos con iReport seguiremos los

siguientes pasos:

- Seleccionar DataSource Connection/DataSource New

o Name: Escribir el nombre de la base de datos

o JDBC Driver: Seleccionar el Driver de la base de datos con la

cual se realizar la conexin

o JDBC URL: Escribir la direccin URL de donde se encuentra

alojado el ambiente de trabajo de la base de datos


202

o Especificar la cadena de conexin con la base de datos, colocar

el usuario y password

o Salvar la configuracin de la conexin

GRAFICO 3.13.i. Trabajando con iReport


- Presionar el botn Test, para verificar que la conexin es la correcta

5.4. Java

Dentro de Java Sun Creator tendremos diversas clases y pginas jsp, las

cuales nos facilitarn el desarrollo de nuestro mdulo.


203

5.4.1. Clases Componentes

Dentro de nuestro mdulo tendremos las siguientes clases:

CLASE: cConexion

public class cConexion{


public Connection getConexion(){
InitialContext IC;
DataSource DS;
Connection Conn=null;

try{
IC = new InitialContext();
DS = (DataSource)IC.lookup("jdbc/crm");
Conn = DS.getConnection();
} catch(NamingException ne)
{ ne.printStackTrace();
} catch(SQLException se)
{
se.printStackTrace();
}return Conn;
}
public void cerrarConexion(Connection pCon){
try{
pCon.close();
}catch(SQLException se)
{se.printStackTrace();}
}}
CUADRO 3.7 Clase cConexion
Esta clase nos servir para conectarnos con nuestro origen de datos, en

nuestro caso Oracle. Dentro de esta clase especificaremos: Contexto

inicial, DataSource (nombre de la base de datos) y establece la

Connection.

CLASE: cDatosxxx (xxx = nombre de la tabla)

public class cDatosArchivoIvr {

private cConexion oConexion;


public cArchivoIvr oArchivoIvr;
private Connection Conn;

public cDatosArchivoIvr(){
oConexion = new cConexion();
oArchivoIvr = new cArchivoIvr();
}

public void DML_InsertarArchivoIvr() throws SQLException{


CallableStatement sentenciaSql;
String cadena = "{call
MANTENIMIENTO_IVR.INSERTAR_CRM_IVR_ARCHIVO_IVR(?,?,?,?)}";
try{
Conn = oConexion.getConexion();
204

CUADRO 3.8 Clase cDatos Archivo

public void DML_ActualizarArchivoIvr() throws SQLException{


CallableStatement sentenciaSql;
String cadena = "{call
MANTENIMIENTO_IVR.ACTUAL_CRM_IVR_ARCHIVO_IVR(?,?,?,?,?)}";

try{
Conn = oConexion.getConexion();
sentenciaSql = Conn.prepareCall(cadena);

sentenciaSql.setString(1, oArchivoIvr.getCodigo());
sentenciaSql.setString(2, oArchivoIvr.getNombre());
sentenciaSql.setString(3, oArchivoIvr.getDescripcion());
sentenciaSql.setString(4, oArchivoIvr.getUbicacion());
sentenciaSql.setString(5, oArchivoIvr.getEstado());

Conn.setAutoCommit(false);
sentenciaSql.execute();
Conn.commit();

Conn.setAutoCommit(true);
}catch(SQLException se)
{ Conn.rollback();
} finally{
oConexion.cerrarConexion(Conn);
}
}

public void DML_EliminarArchivoIvr() throws SQLException {


CallableStatement sentenciaSql;
String cadena = "{call
MANTENIMIENTO_IVR.BORRAR_CRM_IVR_ARCHIVO_IVR(?)}";
205

CUADRO 3.9 Procedure Actualizar

En esta clase tenemos los procedimientos:

public cDatosArchivoIvr(); En este procedimiento declararemos una

instancia de la clase Conexion y de la clase ArchivosIvr.

public void DML_InsertarArchivoIvr() throws SQLException ; En este

procedimiento creamos una cadena la cual contendr una sentencia que

llamar a un procedimiento contenido dentro de un paquete de base de

datos, el cual nos permitir realizar la insercin de un registro en la tabla


206

especificada, segn los datos que hemos obtenido en la pgina de Java

Sun Creator.

public void DML_ActualizarArchivoIvr() throws SQLException ;

Enviamos como parmetros todos los campos con las correspondientes

modificaciones y enviamos a ejecutar la sentencia (actualizacin del

registro)

public void DML_EliminarArchivoIvr() throws SQLException ; Segn

el dato enviado como parmetro (cdigo de archivo), enviamos el

parmetro y mandamos a ejecutar la sentencia (eliminacin del registro). 2

La pgina correspondiente al mantenimiento de esta tabla, tambin consta de

procedimientos, los cuales sern detallados a continuacin:

public void init() {


super.init();
try { _init();
} catch (Exception e) {
log("AdmjspPlantilla Initialization Failure", e);
throw e instanceof FacesException ? (FacesException) e:
new FacesException(e);
}
if(getIVRSessionBean1().isCrmSesion())
{ // Limpiar y Crear Men
cConsultarMenu oCM = new cConsultarMenu();
oCM.LimpiarArbol(treeMenu);
treeMenu = oCM.CargarMenu(treeMenu,getIVRSessionBean1().
getCrmModulo(),getIVRSessionBean1().getCrmCodUsu());
}

2 }
Cabe recalcar que la clase cDatosxxx (xxx=nombre de la tabla), ser utilizada para todas las tablas del

mdulo, con los respectivos cambios en los campos, segn la tabla.


207

CUADRO 3.10 Procedure voidInit

El procedimiento void init() se ejecuta al cargarse la pgina, con lo cual se

inicia la instancia y se crea el rbol de opciones, el cual ser especificado

con ms detalles en una seccin posterior.

CUADRO 3.11 Procedure destroy

public void destroy() {


crm_ivr_archivoDataProvider.close();
}

El procedimiento void destroy(), cerrar el proveedor de datos luego

terminar la ejecucin de los procesos asociados.

public void ConstruirArbol(){


cConsultarMenu oCM = new cConsultarMenu();
oCM.LimpiarArbol(treeMenu);
treeMenu = oCM.CargarMenu(treeMenu,getIVRSessionBean1().
getCrmModulo(),getIVRSessionBean1().getCrmCodUsu());
}

Este procedimiento, ConstruirArbol, consultar en la base de datos las

opciones que sers desplayadas en el rbol de opciones y lo cargar, para

esto har uso de los mtodos correspondientes al objeto tree.


208

private Object ultimoSeleccionado = "0";


public Object getRBSeleccionado(){
String sv = (String)radioButton1.getSelectedValue();
return sv.equals(ultimoSeleccionado) ? sv : null;
}
public void setRBSeleccionado(Object seleccionado){
if (seleccionado != null){
ultimoSeleccionado = seleccionado;
}
}

Creamos un objeto ultimoSeleccionado que nos servir de puntero para

conocer el registro con el cual vamos a trabajar (modificar u eliminar).

public String btnInsertar_action(){

cDatosArchivoIvr oDatos = new cDatosArchivoIvr();


cDatos.oArchivoIvr.setNombre(txtNomArchivo.getText().toString());
oDatos.oArchivoIvr.setDescripcion(txtDescripcion.getText().
toString());
oDatos.oArchivoIvr.setUbicacion(txtUbicacion.getText().
toString());
oDatos.oArchivoIvr.setEstado(ldEstado.getValue().toString());

try{
oDatos.DML_InsertarArchivoIvr();
crm_ivr_archivoDataProvider.refresh();
info("Datos grabados satisfactoriamente...");
txtCodArchivo.setValue("");
txtNomArchivo.setValue("");
txtDescripcion.setValue("");
txtUbicacion.setValue("");
}
catch(SQLException se)
{
info("Error al grabar...");
}
btnInsertar.setDisabled(true);
btnActualizar.setDisabled(true);
btnEliminar.setDisabled(true);
return null;
}
209

CUADRO 3.12 Procedure Insertar

Este procedimiento se ejecutar cuando el botn INSERTAR sea clickeado.

Creamos una instancia de la clase cDatosArchivo, y obtenemos los datos

que el usuario-administrador ingreso en las cajas de texto. Seguido, se

ejecutar la sentencia DML, si el proceso fue exitoso se enviar el mensaje

Datos grabados satisfactoriamente, caso contrario mostrar el mensaje

Error al grabar...; luego de lo cual se borrarn los datos ingresados por el

usuario-administrador y se deshabilitarn los botones de insertar, actualizar y

eliminar.

public String btnEditar_action(){


String idFila = (String)RadioButton.getSelected("grupoBoton");
RowKey aRowKey = crm_ivr_archivoDataProvider.getRowKey(idFila);
label1.setVisible(true);txtCodArchivo.setVisible(true);
txtCodArchivo.setDisabled(true);
txtCodArchivo.setText(crm_ivr_archivoDataProvider.
getValue("arc_cod_archivo", aRowKey));
txtNomArchivo.setText(crm_ivr_archivoDataProvider.getValue
("arc_nom_archivo", aRowKey));
txtDescripcion.setText(crm_ivr_archivoDataProvider.getValue
("arc_descripcion", aRowKey));
txtUbicacion.setValue(crm_ivr_archivoDataProvider.getValue
("arc_ubicacion", aRowKey));
ldEstado.setValue(crm_ivr_archivoDataProvider.getValue
("arc_estado", aRowKey));

btnInsertar.setDisabled(true);
btnActualizar.setDisabled(false);
btnEliminar.setDisabled(false);

info("Modo Actualizacion");

return null;
}
210

CUADRO 3.13a Procedure Editar

Este procedimiento se ejecutar cuando el botn EDITAR sea clickeado,

luego de lo cual los datos podrn ser Modificados o Eliminados. Obtenemos

los datos seleccionados desde la tabla por el usuario-administrador y los

mostramos en las cajas de texto correspondientes segn el campo,

Habilitaremos los botones de Insertar, Actualizar y Eliminar y mostramos el

mensaje Modo de Actualizacin.

public String btnEliminar_action() {


cDatosArchivoIvr oDatos = new cDatosArchivoIvr();
oDatos.oArchivoIvr.setCodigo(txtCodArchivo.getText().
toString());

try{
oDatos.DML_EliminarArchivoIvr();
crm_ivr_archivoDataProvider.refresh();
info("Datos eliminados satisfactoriamente...");

txtCodArchivo.setValue("");
txtNomArchivo.setValue("");
txtDescripcion.setValue("");
txtUbicacion.setValue("");
}
catch(SQLException se)
{
info("Error al eliminar...");
}

btnInsertar.setDisabled(true);
btnActualizar.setDisabled(true);
btnEliminar.setDisabled(true);

return null;
}
211

CUADRO 3.13b Procedure Eliminar

Este procedimiento se ejecutar cuando el botn ELIMINAR sea clickeado.

Creamos una instancia de la clase cDatosArchivo, y obtenemos el registro

seleccionado por el usuario-administrador para ser eliminado y lo enviamos

como parmetro de bsqueda (cdigo). Seguido, se ejecutar la sentencia

DML, si el proceso fue exitoso se enviar el mensaje Datos eliminados

satisfactoriamente, caso contrario mostrar el mensaje Error al eliminar...;

luego de lo cual se borrarn los datos de las cajas de texto y se

deshabilitarn los botones de insertar, actualizar y eliminar.

public String btnActualizar_action() {


cDatosArchivoIvr oDatos = new cDatosArchivoIvr();
label1.setVisible(true);txtCodArchivo.setVisible(true);
txtCodArchivo.setDisabled(true);
oDatos.oArchivoIvr.setCodigo(txtCodArchivo.getText().
toString());
oDatos.oArchivoIvr.setNombre(txtNomArchivo.getText().
toString());
oDatos.oArchivoIvr.setDescripcion(txtDescripcion.getText().
toString());
oDatos.oArchivoIvr.setUbicacion(txtUbicacion.getText().
toString());

oDatos.oArchivoIvr.setEstado(ldEstado.getValue().toString());

try{
oDatos.DML_ActualizarArchivoIvr();

crm_ivr_archivoDataProvider.refresh();
info("Datos actualizados satisfactoriamente...");
txtCodArchivo.setValue("");
txtNomArchivo.setValue("");
txtDescripcion.setValue("");
txtUbicacion.setValue("");

}catch(SQLException se)
{
info("Error al Actualizar...");
}
212

CUADRO 3.14 Procedure Actualizar

Este procedimiento se ejecutar cuando el botn ACTUALIZAR sea

clickeado. Creamos una instancia de la clase cDatosArchivo, y obtenemos

los nuevos datos que el usuario-administrador ingres. Seguido, se ejecutar

la sentencia DML, si el proceso fue exitoso se enviar el mensaje Datos

grabados satisfactoriamente; luego de lo cual se deshabilitarn los botones

de insertar, actualizar y eliminar.

public String btnNuevo_action() {


txtCodArchivo.setValue("");
txtNomArchivo.setValue("");
txtDescripcion.setValue("");
txtUbicacion.setValue("");
label1.setVisible(false);
txtCodArchivo.setVisible(false);
btnInsertar.setDisabled(false);
btnActualizar.setDisabled(true);
btnEliminar.setDisabled(true);
info("Modo Insercion");
return null;
}
CUADRO 3.15 Procedure Nuevo
213

Este procedimiento se ejecutar cuando el botn NUEVO sea clickeado.

Seteamos las cajas de texto para que el usuario administrador ingrese los

datos que desee guardar (a excepcin del cdigo el cual es generado

automticamente); luego de esto se habilitar el botn Insertar y se

deshabilitarn los botones actualizar y eliminar.

public String generarPdf_action() {


crm_ivr_arc_new_clienteDataProvider1.close();
Map fillParams = new HashMap();
try {
fillParams.put"LogoURL",getExternalContext().
getResource("/resources/images/logo.gif"));
getIVRApplicationBean1().jasperReport
("nuevo_clientes","application/pdf",
getIVRSessionBean1().
getCrm_ivr_arc_new_clienteRowSet1(),fillParams);
} catch (Exception e) {
log("Exception generating report", e);
error("Exception generating report: " + e);
} return null;

CUADRO 3.16 Procedure generarPdf

Tambin se cre una clase generarPdf, la cual permite generar el reporte en

un archivo con extensin .pdf; esta clase llama al reporte creado en iReport.

5.4.2. Especificacin de las pginas jsp

Las pginas jsp realizadas en Java Sun Creator; estn divididas segn las

opciones del rbol, en:

- Consulta: En estas pginas se visualizarn las tablas del mdulo, por

medio del objeto de Java Sun Creator table. Aqu se podrn visualizar
214

todos los registros con sus respectivos campos, pero no se podr

realizar ningn cambio en las mismas.

- Edicin: En estas pginas se podrn ejecutar sentencias DML sobre

las tablas, es decir: Insercin, Eliminacin y Actualizacin de registros

(segn el alcance que tenga cada una de las tablas del mdulo).

- Reportes: En estas pginas se mostrar las tablas del mdulo ms

relevantes para la organizacin, las cuales podrn ser mostradas (por

medio de un botn), en forma de reporte.

- Acerca de: Esta pgina permitir la visualizacin de datos acerca

de nuestro sistema IVR Call System, tales como: versin,

requerimientos del sistema, ayuda, etc.

6. Levantando los Servicios

A continuacin detallamos los pasos para levantar los servicios:

- la Base de Datos y el

- Servidor de iReport.

6.1. Levantando la Base de Datos

Para levantar la Base de Datos escribimos las siguientes sentencias:


215

lsnrctl start ;levantamos el listener

lsnrctl status ;mostramos el estado del listener

netstat

set oracle_sid = crm ;especificamos el SID de base de datos

sqlplus ;nos conectamos a SQLPLUS

/ as sysdba ;nos conectamos como usuario administrador

6.2. Levantando el iReport

Para levantando la aplicacin del iReport, debe dirigirse hasta el lugar donde

descomprimi los archivos, ah ejecutar el comando iReport.bat como se

muestra en la siguiente figura:

GRAFICO 3.14 Levantando iReport


216

Otra forma de levantar la aplicacin es a travs de ANT, para ello se debe

abrir una ventana de cmd, ubicarse en la ruta donde se encuentra instalado

el iReport, ej: C:\iReport y colocar el comando ant iReport, como se muestra

en la siguiente figura:

GRAFICO 3.15 Levantando iReport

La interfaz grfica de iReport comienza a cargarse:


217

GRAFICO 3.16 Levantando iReport


218
219

MANUAL DE USUARIO
Marketing Interactivo IVR
220

Introduccin.

Al igual que en el manual tcnico explicaremos por separado los manuales

de usuario de cada uno de los mdulos:

- JAVA ORACLE: Este mdulo deber ser manejado tan slo por un

usuario administrador, ya que en este mdulo se harn cambios

importantes en la informacin de la empresa; la cual no puede ser

manipulada por cualquier tipo de usuario. Como medida de seguridad

el ingreso al mdulo exige la autentificacin del usuario (ingreso de

usuario y clave) para entrar al sistema.

- ASTERISK: Asterisk manejar dos tipos de usuario: el usuario cliente

de la empresa, que es el que escuchar las opciones de nuestro

sistema de IVR y acceder a los diferentes tipos de servicio por medio

del mismo y el usuario administrador, el cual se encargar de efectuar

los cambios que pudieren presentarse en la empresa y que afectaran

al mdulo de IVR.
221

ndice General

Introduccin

Pgs.

Captulo 1:

Manual de Usuario ORACLE - JAVA

1.1. Introduccin al Manual

1.2. Propsito del Manual

1.3. Aplicabilidad del Sistema

1.4. Interfaz de Usuario

1.5. Ingreso al sistema

1.6. Bienvenida al sistema

1.7. Opciones del sistema

Detalle de las mismas


222

Captulo 2:

Manual de Usuario ASTERISK

2.1. Introduccin al Manual

2.2. Aplicabilidad del Sistema

2.3. Interfaz de Usuario IVR

2.4. Ingreso al sistema IVR

2.5. Bienvenida al sistema

2.6. Opciones del sistema

Detalle de las mismas


223
224
225

CAPTULO 1
MANUAL DE USUARIO ORACLE JAVA

1.1 Introduccin

El Mdulo de Mantenimiento ORACLE JAVA, nos permitir interactuar con

la Base de datos Oracle por medio de interfaces grficas (pginas jsp)

implementadas con Java Sun Creator, una herramienta de los estudios de

Sun.

Aqu podremos ejecutar sentencias DML tales como insercin, modificacin y

eliminacin de los registros de la base. Es importante el monitoreo constante

de las tablas del sistema, ya que el sistema abarcar operaciones de la

empresa; tales como: ingreso de prospectos de clientes, llamadas al sistema

y realizadas por el sistema; informacin valiosa para el crecimiento de la

empresa.
1.2 Propsito del Manual

Este manual ha sido realizado con la finalidad de que el usuario

administrador tenga a mano una gua fcil y sencilla, que le ayudar al mejor

mantenimiento del sistema.

1.3 Aplicabilidad del Sistema

El sistema est elaborado para que pueda ser administrado por un usuario

experimentado, o por un usuario novato que con una pequea tutora; podr

fcilmente dedicarse al mantenimiento del mdulo.

1.4 Interfaz de Usuario

La interfaz de usuario est desarrollada siguiendo los principios bsicos de

diseo de interfaces, pero adems siguiendo ciertas reglas como:

- Visibilidad del estado del sistema

- Lenguaje utilizado por los usuarios

- Control y libertad para los usuarios

- Minimizar la carga de memoria del usuario,

- entre otros,.
227

1.5 Ingreso al Sistema

PANTALLA 1. Ingreso al Sistema

Para acceder a la pgina principal del sistema de mantenimiento del IVR, se

deber ingresar a travs de la pgina principal del sistema, con el

correspondiente login y password.


228

PANTALLA 2. Ingreso Login & Password

El sistema validar si el login y password ingresados son correctos, luego

de lo cual se presentar la correspondiente pantalla de bienvenida o en caso

contrario nos mostrar un mensaje de error de ingreso.


229

1.6 Bienvenida al Sistema

PANTALLA 3. Bienvenida al Sistema

Desde la pantalla de Bienvenida podremos acceder a los diferentes mdulos

de nuestro sistema CABLE SYSTEM, en nuestro caso nos referiremos al

mdulo de IVR.
230

1.7 Opciones del IVR

Dentro de la pgina principal del mdulo de IVR tendremos un rbol de

opciones, el cual est estructurado de la siguiente manera:

- Info. General: El cual provee una interfaz por medio de la cual

podremos realizar consultas de las tablas de IVR.

- Edicin: Esta opcin nos permitir manipular, por medio de

sentencias DML, los campos de nuestro sistema. Es decir, nos

permitir ingresar, eliminar o modificar campos en nuestras tablas

- Reportes: Nos permitir consultar en forma de reportes los

movimientos que ha tenido nuestro sistema IVR CALL SYSTEM en

cierto periodo de tiempo

- Acerca de: Nos dar una breve descripcin del sistema, as como de

las personas que trabajaron en su desarrollo.


231

PANTALLA 4. Pantalla Principal IVR

INF. GENERAL:

Dentro de la opcin INF. GENERAL tenemos un submen dentro del cual se

encuentran el nombre de las tablas de las cuales podremos efectuar nuestra

consulta, las cuales son:

- Archivo IVR: Nos dar una descripcin de los archivos de sonidos

empleados en la implementacin de nuestro IVR


232

- Men IVR: Nos dar una descripcin de las diferentes opciones del

men de opciones de nuestro IVR

- Llam. Realizadas: Nos dar una descripcin de las llamadas

realizadas a nuestros clientes para ofrecerles una promocin

- Llam. Recibidas: Nos dar una descripcin de las llamadas recibidas

por nuestros clientes

- Nuevos Clientes: Nos dar una descripcin de los mensajes de voz

dejados por los prospectos de clientes

- Historial IVR: Nos dar una descripcin de la tabla histrica de las

llamadas de nuestro IVR

- Arc. Promociones: Nos dar una descripcin de los archivos

promocionales de la empresa

- Llamadas Promo: Nos dar una descripcin de las llamadas que

sern emitidas a nuestros clientes para ofrecerles una promocin


233

PANTALLA 5. Men de Opciones INF. GENERAL

Para acceder a una de estas tablas slo damos clic encima de las opciones

de la tabla que deseemos consultar y listo! En dicha pgina tambin estar

un botn con la que regresaremos a la pgina principal.

PANTALLA 6. Consultar Archivo IVR


234

EDICIN:

Dentro de la opcin EDICIN tenemos un submen dentro del cual se

encuentran el nombre de las tablas de las cuales podremos manipular la

informacin que se encuentra en dichas tablas, las cuales son:

- Men IVR: Nos permitir manipular (insertar, modificar, eliminar) la

informacin de las diferentes opciones del men de opciones de

nuestro IVR

- Archivo IVR: Nos permitir manipular (insertar, modificar, eliminar) la

informacin de los archivos de sonidos empleados en la

implementacin de nuestro IVR

- Arc. Promociones: Nos permitir manipular (insertar, modificar,

eliminar) la informacin de los archivos promocionales de la empresa

- Llamadas Promo: Nos permitir manipular (insertar, modificar,

eliminar) la informacin de las llamadas que sern emitidas a nuestros

clientes para ofrecerles una promocin


235

PANTALLA 7. Men de Opciones EDICION

Para realizar las operaciones de manipulacin de datos, damos clic en la

tabla que queremos manipular, luego de lo cual se visualizar la tabla con los

campos que estn ingresados:

PANTALLA 8. Mantenimiento Archivo IVR


236

Y adems, se podrn visualizar 5 botones; de los cuales dos estarn

habilitados: EDITAR y NUEVO. Y otros tres estarn deshabilitados:

INSERTAR, ACTUALIZAR y ELIMINAR.

PANTALLA 9. Mantenimiento Archivo IVR (b)

Insercin. Si queremos insertar un nuevo registro presionaremos el botn

NUEVO luego de lo cual se desaparecer el campo cdigo, ya que ste no

es ingresado sino generado secuencialmente por el sistema, y debern

ingresarse los campos: NOMBRE, DESCRIPCIN y UBICACIN. El campo

ESTADO podr elegirse dentro de dos opciones: ACTIVO e INACTIVO.


237

Ingresamos los datos que queremos registrar en nuestra tabla y

presionaremos el botn INSERTAR.


238

PANTALLA 10. Mensajes sistema

Luego de esto, el sistema nos presentar un mensaje de xito en la

transaccin.
239

Modificacin. Si queremos modificar la informacin almacenada en nuestros

registros, tendremos que: Escoger el registro que queremos modificar por

medio de un click en la columna SELECCIN.

PANTALLA 11. Modificacin

Seleccionamos el botn EDITAR, luego de lo cual nos mostrar en la parte

inferior, de manera individual los campos de nuestro registro con su

correspondiente contenido. El campo CDIGO estar deshabilitado porque

ser el nico campo de la tabla el cual no podremos modificar.


240

PANTALLA 12. Actualizacin

Efectuamos los cambios que deseemos realizar en nuestro registro y

presionamos el botn ACTUALIZAR.


241

PANTALLA 13. Mensaje de Actualizacin

Luego de este nos aparecer el mensaje del sistema que nos muestra si la

operacin se realiz o no con xito.


242

Eliminacin. Si queremos eliminar la informacin almacenada en nuestros

registros, tendremos que: Escoger el registro que queremos eliminar por

medio de un click en la columna SELECCIN.

PANTALLA 14. Eliminacin

Seleccionamos el botn EDITAR, luego de lo cual nos mostrar en la parte

inferior, de manera individual los campos de nuestro registro con su

correspondiente contenido. El campo CDIGO se mostrar deshabilitado.


243

PANTALLA 15. Mensaje de Eliminacin

Presionamos el botn ELIMINAR. Luego de este nos aparecer el mensaje

del sistema que nos muestra si la operacin se realiz o no con xito.

REPORTES:

Dentro de la opcin REPORTES tenemos un submen dentro del cual se

encuentran el nombre de las tablas, las cuales podremos visualizar en forma

de reporte, las cuales son:


244

- Clientes Nuevos: Nos mostrar un reporte de nuestra tabla de

prospectos de clientes

- Historial IVR: Nos mostrar un reporte de la tabla histrica de las

llamadas de nuestro IVR

- Llam. Realizadas: Nos mostrar un reporte de las llamadas

realizadas a nuestros clientes para ofrecerles una promocin

- Llam. Recibidas: Nos mostrar un reporte de las llamadas recibidas

por nuestros clientes

PANTALLA 16. Opcin REPORTES


245

ACERCA DE:

Dentro de la opcin ACERCA DE podremos obtener informacin de

nuestro sistema IVR Call System, como:

- Personas que lo realizaron,

- Versin,

- Ao de creacin,

- Ayuda,

- Licencia,

- Propiedades del Sistema,

- Y una pequea ayuda del sistema.

PANTALLA 17. Opcin ACERCA DE


246

Pestaa IVR Call System:

PANTALLA 18. Pestaa IVR CALL SYSTEM

Pestaa Help:

PANTALLA 19. Pestaa HELP


247

Pestaa License:

PANTALLA 20. Pestaa LICENSE

Pestaa System Properties:

PANTALLA 21. Pestaa SYSTEM PROPERTIES


248
250

CAPTULO 2
MANUAL DE USUARIO ASTERISK

2.1. Introduccin

Nuestro modulo Marketing Interactivo IVR ofrece al usuario y/o cliente

activar y desactivar un plan de servicio, podr interactuar con el sistema IVR

Call System, por medio de diversas opciones del men IVR, guindole por

archivos de sonidos propios del sistema.

El usuario debe estar registrado para obtener su propia cuenta, as podr

ingresar a nuestro sistema IVR Call System.


251

2. 2 Aplicabilidad del Manual

El sistema est elaborado con interfaces vocales fciles de entender o

interpretar por un usuario sin previa capacitacin o por un usuario

experimentado. Este ir guiando paso a paso, las instrucciones a seguir, para

acceder a los planes y servicios de la empresa, por medio de interfaces

vocales.

2.3 Interfaz de Usuario IVR

En la siguiente ilustracin se podr apreciar las partes que corresponde

nuestro Softphone aplicado para nuestro sistema IVR Call System

PANTALLA 22. Pantalla del Softphone XLITE


252

Si desea realizar llamadas deber presionar con la ayuda el mouse o con el

teclado el botn telfono de color verde:

SI el usuario y/o cliente esta realizando una operacin valido en nuestro

men del IVR Call System, y a su vez se esta reproduccin una archivo de

voz al interactuar por los diferentes opciones ofrecida por el sistema. Se

activara en la pantalla del Softphone el siguiente icono:

Si desea realizar colgar o suspender una llamadas deber presionar con la

ayuda el mouse o con el teclado el botn telfono de color rojo:

2.4 Ingreso al Sistema IVR

El usuario y/o cliente deber marcar o digitar el nmero correspondiente a

nuestro sistema IVR Call System.


253

PANTALLA 23. Nmero del IVR Call System

En la realizacin de nuestro proyecto hemos utilizado una interfaz grfica

(Softphone), que permite llamar al IVR Call System utilizando tecnologa

VozIP, adaptada a nuestros servicios y activacin de planes.

PANTALLA 24. Ingreso Vlido al IVR Call System


254

2.5 Bienvenida al Sistema IVR

El usuario y/o cliente al marcar o digitar el 1020 se efectuara el ingreso

valido al sistema IVR Call System, inmediatamente se reproducir el archivo

de Bienvenida al Sistema.

2. 6 Opciones del Sistema

Luego de ingresar al sistema, podr interactuar con las diferentes alternativas

del IVR Call System. A continuacin detallaremos el men principal de

nuestro modulo.
255

Publicidad de Servicios

La opcin nmero 1 es Publicidad de Servicios, la cual si es seleccionada

por el usuario y/o cliente, podr tener informacin de todos nuestros

servicios y sus tipos de planes.

Promocin

Si el usuario y/o cliente a marcado o digitado el # 2, se reproducir las

promociones de nuestro empresa IVR Call System.

Sistema Interactivo

En esta opcin solo es valido para cliente de nuestra empresa, puede

marcar o digitar el # 3, para solicitar y consultar planes de servicios

actual y cambiar cualquier plan a su gusto.


256

Atencin al Cliente

Para solicitar ms informacin debe marcar el digito # 4, y se comunicar

con un agente.

Salir

Para salir de nuestro sistema IVR Call System, solo debe presionar el #

0 y automticamente saldr del sistema.

2.6 Navegacin entre Men del IVR

En esta opcin el usuario podr escoger la diferente publicidad de servicios

que ofrece nuestro sistema IVR Call System, mediante archivo de

reproduccin solo con digitar o marcar el nmero especificado por nuestro

sistema IVR
257

Al marcar 1 el usuario podr escuchar el archivo Publicidad de Servicios de

Cable.

Luego el sistema le guiar que la Publicidad de Servicios de Cable ofrece

dos tipos de planes. La cual tendr que seleccionar marcando los dgitos # 1

y # 2. A continuacin son los siguientes:

Marca # 1 Plan Bsico Marca # 2 Plan Sper Premium


258

Si el usuario y/o cliente esta interesado en el uso de estos planes de

servicios de Cable podr dejar su mensaje al buzn de Ventas, marcando el

# 999

Al marcar 2 el usuario podr escuchar el archivo Publicidad de Servicios de

Aerocable.

Luego el sistema le guiar que la Publicidad de Servicios de Aerocable, este

ofrece dos tipos de planes. La cual deber seleccionar entre las opciones

marcando los dgitos # 1 y # 2 A continuacin son los siguientes:


259

Marca # 1 Plan Super Premium Marca # 2 Plan Sper Premium

Si el usuario y/o cliente esta interesado en el uso de estos planes de

servicios de Aerocable podr dejar su mensaje al buzn de Ventas,

marcando el # 999

Al marcar 3 el usuario podr escuchar el archivo Publicidad de Servicios de

Pague por Ver.


260

Luego el sistema le guiar que la Publicidad de Servicios de Aerocable, este

ofrece dos tipos de planes. La cual deber seleccionar entre las opciones

marcando los dgitos # 1 y # 2 A continuacin son los siguientes:

Marca # 1 Plan Bsico Marca # 2 Plan Premium

Si el usuario y/o cliente esta interesado en el uso de estos planes de

servicios de Aerocable podr dejar su mensaje al buzn de Ventas,

marcando el # 999

Al marcar 4 el usuario podr escuchar el archivo Publicidad de Servicios de

Internet.
261

Luego el sistema le guiar que la Publicidad de Servicios de Aerocable, este

ofrece dos tipos de planes. La cual deber seleccionar entre las opciones

marcando los dgitos # 1 y # 2 A continuacin son los siguientes:

Marca # 1 Plan Bsico Marca # 2 Plan Corporativo

Si el usuario y/o cliente esta interesado en el uso de estos planes de

servicios de Aerocable podr dejar su mensaje al buzn de Ventas,

marcando el # 999

Grfico # 2.6 Opcin 2 Promocin


262

Al marcar 2 el usuario y/o cliente podr escuchar el archivo de las

Promociones actuales del IVR Call System.

SI el usuario y/o cliente dentro de la opcin Promocin marca otro digito, se

reproducir automticamente el archivo de:

Si el usuario y/o cliente desea regresar al men principal del IVR Call

System, para seleccionar las dems opciones, se reproducir el siguiente

archivo de voz.
263

Grfico # 2.7 Opcin 3 Sistema Interactivo

Al marcar 3, solo los clientes podrn escuchar el archivo Sistema Interactivo

del IVR Call System.

Para cambiar Plan de Servicios

Luego de digitar # 3, de la opcin sistema interactivo se pedir el nmero de

clave dado para cliente fijo y su nmero de contrato.


264

Si el cliente al ingresar su nmero de contrato digito o se equivoco. Se

reproducir el siguiente archivo de voz:

El nmero de intentos para su clave y nmero de contrato permitidos es un

mximo de 3 intentos.

Si el cliente al ingresar su nmero de contrato no consta con la de nuestro

sistema. Se reproducir el siguiente archivo de voz:

Grfico # 2.8 Opcin 4 Atencin al Cliente


265

Al marcar 4, si el usuario y/o cliente desea obtener ms informacin, se

transferir al Call Center para que se comunique con un operador.

0. SALIR

Grfico # 2.9 Opcin 0 Salir

Para salir del men principal del IVR Call System, se debe marcar # 0,

reproduciendo el siguiente archivo de voz:


266

Terminologa

Answer(): Acepta la llamada entrante por el canal.

API : Interfaz de Programa de Aplicacin.

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

Background (fichero): Reproduce el fichero, pero continua la ejecucin

inmediatamente

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 VozIP

- H.323, IAX2, SIP, MGCP: Protocolos VozIP

- Zap: Lineas analgicas y digitales.

Contexto (Context): El Dialplan o lgica de comportamiento de Asterisk se

divide en uno o varios contextos. Un contexto es una coleccin de

extensiones.

CLI (CLI: Command Line Interface) :Asterisk soporta un intrprete de

comandos.

Dialplan: Se trata de la configuracin de la centralita Asterisk que indica el

itinerario que sigue una llamada desde que entra o sale del sistema hasta

que llega a su punto final. Se trata en lneas generales del comportamiento

lgico de la centralita.
267

DigitTimeout (segundos): Establece el tiempo de espera mximo cuando el

origen de la llamada marca una extensin (para detectar el fin de cadena).

Extension: En telefona tradicional, las extensiones se asocian con

telfonos, interfaces o mens.

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.

Hangup(): Cuelga la llamada.

IVR : Interactive Voice Response.

PlayBack (fichero ):Reproduce el fichero, continua la ejecucin cuando

finaliza.

SayDigits ( dgitos): Reproduce los dgitos.

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

WaitExten (n): Espera n segundos, pero gestionando los dgitos marcados.


268

Anexos

You might also like