Professional Documents
Culture Documents
Manual estar de igual manera, dividido en tres mdulos, los cuales han sido
analizados por separado, para la mejor comprensin del mismo. Estos son:
magnitud del alcance del mismo. Sin embargo, hemos tratado slo los
Recomendaciones
Este manual deber ser utilizado solamente como gua, debido a que est
Pgs.
Introduccin
Propsito
Recomendaciones
CAPTULO 1:
ASTERISK
2. Herramientas utilizadas .. 2
7.7.3 Contextos .. 56
CAPTULO 2:
ASTERISK JAVA
1. Introduccin 62
2. Descripcin de la Herramienta 63
5. Requerimientos 66
7.1.1. AMI . 71
7.1.2. AGI . 72
JAVA-ORACLE
7 iReport 148
8 Java .. 156
Pgs.
Pgs.
Pgs.
2. Herramientas utilizadas
Softphone
Est desarrollada por cAos Foundation y est basada en las fuentes de Red
tan estable y potente como ella. La versin 4.4 incorpora la ltima versin de
kernel 2.6.
64
operativo y funcional.
Softphone
Utilizaremos el softphone de XLite 3.0, el cual ofrece toda la productividad a
X-Lite les exige a los usuarios que tengan Altavoces y/o audfono
grfico 1.1).
65
Dispositivo CDRom
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
carga.
codecs nuevos
codecs nuevos.
70
b) Pre-Instalacin de Asterisk
c) Instalacin de Asterisk
d) Instalacin de Libpri
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
herramientas
descompresin.
otros paquetes.
c) Instalacin de Asterisk
Este comando se utiliza para darle una direccin IP otorgada por el administrador de
la red exclusivamente para nuestro servidor.
Est pendiente del proceso para que cuando se le pregunte la clave de root
puede olvidar.
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
asterisk-addons-1.2.0.Software adicional
indicadas.
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
/var/lib/asterisk/sounds
# cd /var/lib/asterisk/sounds
# ls
Configuracin de Asterisk
al futuro.
empresa LAN (Red del rea Local) o VoIP red de proveedor de servicio.
arquitectura Asterisk
formato de archivo.
mdulos cargables.
su operacin normal.
organizados en subdirectorios.
saludo.
84
Los servidores del Asterisk son capaces de instalar conexiones entre varias
para llamadas.
caractersticas:
lnea.
Para ello, algunas de las tarjetas que est disponibles son las siguientes:
Analgicas:
- Dialogic D/41JCT-LS
85
Digitales:
ficheros:
analgicas y digitales
Operadores IP
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
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
Estas interfaces son integradas dentro de Asterisk con las tarjetas de Digium
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.
Modo TE: En Este modo, Asterisk puede conectarse con interfaces RDSI
extensiones Digitales.
89
Asterisk.
datos dentro del mdulo del sistema, tratando de dar una idea de cmo se
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:
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.
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.
opuesto.
para ser parte de la red, cada uno tiene su propio nombre de usuario, clave y
/etc/asterisk/ls
siguientes:
sip.conf
extensions_ivr.conf
manager_custom.conf
[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
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
[101]
1
Esta configuracin es la misma para todos los usuarios prueba de Asterisk
111
Manager_custom.conf
Para poder manipular los eventos recibidos por el servidor Asterisk, por
[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
extensions_ivr.conf
Asterisk.
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
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
[from-internal-ivr]
;men
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
7.7.3 Contextos
1. PUBLICIDAD
DE SERVICIOS
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
Servcable
[Servcable]
[PlanBasico]
[PlanPremium]
ServAerocable
[ServAerocable]
[PlanBasicoAr]
[PlanPremiumAr]
PagueporVer
[ServPagueporVer]
ServInternet
[ServInternet]
;exten=> 1,4,Goto(servicios,1,1)
CUADRO 1.11. Contexto ServInternet
2 PROMOCIN
[promociones]
3. SISTEMA
INTERACTIVO
[Sistema-Interactivo]
4. ATENCIN AL
CLIENTE
;----------------------------------------------------
; OPCION 4 IVR Call System
;----------------------------------------------------
[Atencin al Cliente]
0. SALIR
;-----------------------------------------------------
; OPCION 0 IVR Call System
;-----------------------------------------------------
[Salir]
1. Introduccin
2. Descripcin de la Herramienta
actualmente de Asterisk
este mdulo:
La interfaz AGI permite que los programas externos puedan aadir nuevas
canal de voz.
En esta arquitectura utilizamos la interfaz del Asterisk llamada AMI que nos
informacin de los mismos, una vez obtenido los datos los grabamos en la
base de datos.
104
proceso que ser levantado para captar todos los eventos de Asterisk, nos
podremos contar con una ayuda eficiente acerca de la utilizacin de esta API.
105
implementar su funcin HandlerEvent para que pueda tratar cada uno de los
5. Requerimientos
software:
Java J2SDK
106
Studio Creator.
direccin:
http://java.sun.com/j2ee/1.4/download.html#sdk
107
chmod +x j2sdk-1_4_2_13-linux-i586.bin
ejemplo: /usr/local/
./j2sdk-1_4_2_13-linux-i586.bin
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
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
sintxis:
nuestra clase java, el nombre del archivo debe estar entre parntesis y
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
Datos Oracle.
110
java, una vez que se ha realizado la ejecucin del programa, el control vuelve
Los programas pueden tomar datos de las variables de entorno del contexto
sido procesadas.
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
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
7.1.1 AMI
112
OJDBC14.ZIP
MONITORASTERISKIVR
API ASTERISK-JAVA
7.1.2 AGI
- La clase de java
113
CLASES DE JAVA
OJDBC14.ZIP
ASTERISK-JAVA.
114
Conexin
Contrato
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();
}
}
}
por un cliente desde el softphone. Para esto crea una instancia de la clase
mensaje de error.
Clave
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
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
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
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
vlido, mostrar por medio de un mensaje de voz que plan tiene contratado y
Clase buzn
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
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
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.err.println("hecho: "+linea);
v_ban1=false;
}catch(SQLException
e){
e.printStackTrace();
}
conn2.commit();
conn2.close();
}else{
if(d1.equals("51")){
v_ban3=false;
}else{
if(d1.equals("52")){
v_ban5=false;
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
graba
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
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
el detalle:
cConexin
cExtensiones
137
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
La clase cExtensiones muestra los mtodos set y get para obtener las
los registros de las llamadas realizadas, recepta los datos y los almacena.
140
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
MonitorAdministrador
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");
}
}
try {
obj.run33();
} catch (Exception e) {
System.out.println("errrorrun");
}
}
143
concurrencia.
por la base de datos, es decir; cada que el usuario presione una opcin por
de datos.
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
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
CAPTULO 3
147
JAVA ORACLE
En este mdulo se desarrollarn pginas jsp, una para cada tabla a la cual le
registros en la base de datos). Cabe recalcar adems, que unas tablas sern
el registro o eliminarla; debido a que son datos que son el fiel reflejo de las
2. Herramientas utilizadas
Base de Datos
rendimiento.
Servidor
- HDD IDE de 80 GD
3. Arquitectura
de memoria.
utilizadas.
152
Oracle que utilizaremos es la 9i, a continuacin unos sencillos pasos que nos
muestran su instalacin:
9.2.0.1.0.
queramos acceder.
154
caracteres):
caso ser importante que el juego de caracteres del servidor que recibir los
Instalar:
programa:
Instalacin de ANT
raz. C:\
b. JAVA_HOME = C:\jdk1.5.0
c. PATH = C:\ANT\bin
160
Instalacin de iReport
necesitamos)
a. CLASSPATH: C:\iReport\lib\jasrreports-0.6.0.jar
b. CLASSPATH: C:\iReport\lib\itext-1.0.2b.jar
datos dentro del mdulo del sistema, tratando de dar una idea de cmo se
- Informacin General
- Edicin
- Reportes
- Acerca de
162
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.
Muestra los casos de uso, actores y sus relaciones. Son importantes para el
opuesto.
Describe la secuencia de pantallas que el usuario espera ver para cumplir las
funciones requeridas.
cConexion
B/D CRM
SYSDBA al usuario CRM lo que nos permitir ejecutar sentencia DML con
actualizacin, eliminacin.
Para nuestro proyecto creamos dos tablespaces uno para almacenar la data
procedimientos, paquetes
al nombre de la tabla.
Sintaxis:
PrefijoNombreTabla PrefijoNombreMdulo NombreTabla
CRM_IVR_ARCHIVO
Sintaxis:
PrefijoNombreTabla NombreCampo
ARC_NOMBRE
Constraints.
es una restriccin en los valores que puede tomar una o varias columnas
Constraints de Integridad:
- Check Constraints.
Convencin:
separador _
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
nombre de la vista.
178
Sintaxis:
PrefijoNombreSistema PrefijoNombreMdulo NombreVista
CRM_IVR_V_REPORTECLIENTES
Secuencias.
deben poseer el un prefijo que identifica al sistema, seguido del prefijo del
este objeto.
Sintaxis:
PrefijoNombreSistema PrefijoNombreMdulo NombreSecuencia
CRM_IVR_S_LLAM_CODIGO
functions y packages.
179
proceder a su actualizacin.
Esta compuesto por tres caracteres que identifican el nombre del Mdulo.
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
Sintaxis:
PrefijoNombreMdulo KS NombreObjeto
IVR_KS_NOMBRE_PAQUETE
Sintaxis:
PrefijoNombreMdulo KB NombreObjeto
IVR_KB_NOMBRE_PROCEDIMIENTO
Variables.
Se puede usar cualquier item de forma para almacenar un valor como una
variable.
variable VL_
Ejemplo: VL_nom_var_loc.
Ejemplo: GLOBAL_nom_var_global
Ejemplo: VC_nombre_var_cur
Ejemplo:
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;
--=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
---------------- 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
-------------------------------------------------------------------------------------
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;
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;
5.2.7. Paquetes
en la aplicacin.
5.2.8. Procedimientos
similar para cada una de las tablas del mdulo del proyecto.
Procedimiento de Insercin
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);
Tan solo se declararn los campos que sern utilizados en el desarrollo del
procedimiento de Insercin.
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
END INSERTAR_CRM_IVR_ARCHIVO_IVR;
Procedimiento de Eliminacin
PROCEDURE BORRAR_CRM_IVR_ARCHIVO_IVR(
COD_ARCHIVO IN CRM_IVR_ARCHIVO.ARC_COD_ARCHIVO%TYPE);
procedimiento de eliminacin.
Buscamos el registro que coincida con el valor que hemos enviado como
Procedimiento de Actualizar
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);
procedimiento de actualizacin.
191
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;
Buscamos el registro que coincida con el valor que hemos enviado como
archivo_Ivr pros_cliente
menu_Ivr historialivr
llamadas_recibidas promociones
llamadas_cliente llama_promociones
192
nuestro IVR a los clientes del sistema con la finalidad de emitir publicidad.
- Para cada una de las pginas jsp que creemos deberemos crear un
Estos registros sern creados para cada una de las pginas que luego
IVR0011).
- Para la creacin de cada uno de los niveles del rbol se deber crear
5.3. iReport
impresora o para archivos en formato PDF, HTML, RTF, XLS, CSV y XML.
contenido dinmico.
iReport.
la siguiente:
196
Con ayuda de los diferentes objetos que texto daremos la apariencia visual
Los documentos que se generan con iReport & Jasperreports tienen varios
variables:
b) Campos: Son los campos tipo texto que llenaremos desde las
Para definir los parmetros se tienen que pulsar el botn Parameters desde
la barra de herramientas
199
ejecutarlo.
siguientes pasos:
el usuario y password
5.4. Java
Dentro de Java Sun Creator tendremos diversas clases y pginas jsp, las
CLASE: cConexion
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
Connection.
public cDatosArchivoIvr(){
oConexion = new cConexion();
oArchivoIvr = new cArchivoIvr();
}
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);
}
}
Sun Creator.
registro)
2 }
Cabe recalcar que la clase cDatosxxx (xxx=nombre de la tabla), ser utilizada para todas las tablas del
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
eliminar.
btnInsertar.setDisabled(true);
btnActualizar.setDisabled(false);
btnEliminar.setDisabled(false);
info("Modo Actualizacion");
return null;
}
210
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
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
Seteamos las cajas de texto para que el usuario administrador ingrese los
un archivo con extensin .pdf; esta clase llama al reporte creado en iReport.
Las pginas jsp realizadas en Java Sun Creator; estn divididas segn las
medio del objeto de Java Sun Creator table. Aqu se podrn visualizar
214
(segn el alcance que tenga cada una de las tablas del mdulo).
- la Base de Datos y el
- Servidor de iReport.
netstat
Para levantando la aplicacin del iReport, debe dirigirse hasta el lugar donde
en la siguiente figura:
MANUAL DE USUARIO
Marketing Interactivo IVR
220
Introduccin.
- JAVA ORACLE: Este mdulo deber ser manejado tan slo por un
al mdulo de IVR.
221
ndice General
Introduccin
Pgs.
Captulo 1:
Captulo 2:
CAPTULO 1
MANUAL DE USUARIO ORACLE JAVA
1.1 Introduccin
Sun.
empresa.
1.2 Propsito del Manual
administrador tenga a mano una gua fcil y sencilla, que le ayudar al mejor
El sistema est elaborado para que pueda ser administrado por un usuario
experimentado, o por un usuario novato que con una pequea tutora; podr
- entre otros,.
227
mdulo de IVR.
230
- Acerca de: Nos dar una breve descripcin del sistema, as como de
INF. GENERAL:
- Men IVR: Nos dar una descripcin de las diferentes opciones del
promocionales de la empresa
Para acceder a una de estas tablas slo damos clic encima de las opciones
EDICIN:
nuestro IVR
tabla que queremos manipular, luego de lo cual se visualizar la tabla con los
transaccin.
239
Luego de este nos aparecer el mensaje del sistema que nos muestra si la
REPORTES:
prospectos de clientes
ACERCA DE:
- Versin,
- Ao de creacin,
- Ayuda,
- Licencia,
Pestaa Help:
Pestaa License:
CAPTULO 2
MANUAL DE USUARIO ASTERISK
2.1. Introduccin
Call System, por medio de diversas opciones del men IVR, guindole por
vocales.
men del IVR Call System, y a su vez se esta reproduccin una archivo de
de Bienvenida al Sistema.
nuestro modulo.
255
Publicidad de Servicios
Promocin
Sistema Interactivo
Atencin al Cliente
con un agente.
Salir
Para salir de nuestro sistema IVR Call System, solo debe presionar el #
sistema IVR
257
Cable.
dos tipos de planes. La cual tendr que seleccionar marcando los dgitos # 1
# 999
Aerocable.
ofrece dos tipos de planes. La cual deber seleccionar entre las opciones
marcando el # 999
ofrece dos tipos de planes. La cual deber seleccionar entre las opciones
marcando el # 999
Internet.
261
ofrece dos tipos de planes. La cual deber seleccionar entre las opciones
marcando el # 999
Si el usuario y/o cliente desea regresar al men principal del IVR Call
archivo de voz.
263
mximo de 3 intentos.
0. SALIR
Para salir del men principal del IVR Call System, se debe marcar # 0,
Terminologa
inmediatamente
extensiones.
comandos.
itinerario que sigue una llamada desde que entra o sale del sistema hasta
lgico de la centralita.
267
finaliza.
Anexos