Download Manual Tecnico (Tomo II)

Document related concepts
no text concepts found
Transcript
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA DE INGENIERÍA EN SISTEMAS
COMPUTACIONALES
IMPLEMENTACIÓN DE UN IVR PARA ATENCIÓN TELEFÓNICA A
ESTUDIANTES EN LA CARRERA DE INGENIERÍA
EN SISTEMAS COMPUTACIONALES DE LA
UNIVERSIDAD DE GUAYAQUIL
TESIS DE GRADO
MANUAL TÉCNICO
Previa a la obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
AUTORES: EMILIA ESTEFANIA RAMÍREZ SAVERIO
FREDDY ANDRES NOBOA ORRALA
TUTOR: ING. DAVID BENAVIDES
GUAYAQUIL – ECUADOR
2011
1
Contenido
1.
ARQUITECTURA DE LA SOLUCIÓN.......................................................................................... 3
2.
ARQUITECTURA DEL DESARROLLO ........................................................................................ 4
2.1. Tecnologías de la Solución ................................................................................................. 4
3.
4.
2.1.1.
El Asterisk .............................................................................................................. 4
2.1.2.
Lenguaje de Programación..................................................................................... 4
2.1.3.
Asterisk - Java ........................................................................................................ 5
2.1.4.
Diseño AGI del paquete ASTERISK-JAVA ......................................................... 6
2.1.5.
JasperReports ......................................................................................................... 7
2.1.6.
IReports .................................................................................................................. 7
2.1.7.
JavaMail ................................................................................................................. 9
2.1.8.
SoftPhone (WebPhone MIZU) ............................................................................... 9
2.1.9.
Base de Datos del Sistema ................................................................................... 12
2.1.10.
Servidor de Aplicaciones ..................................................................................... 12
2.1.11.
Servidor TTS ........................................................................................................ 13
2.1.12.
GUI ...................................................................................................................... 13
DICCIONARIO DE LIBRERIAS. ................................................................................................ 15
3.1.
INFORMACION GENERAL ...................................................................................... 15
3.2.
INFORMACION FUNCIONES. ................................................................................. 15
3.2.1.
CISCAGI-AGI ..................................................................................................... 15
3.2.2.
CISCAGI-AMI .................................................................................................... 34
3.2.3.
CISCAGIVIEWER .............................................................................................. 53
3.2.4.
CISCAGILIBRARY ............................................................................................ 54
3.2.5.
ModuloIVR .......................................................................................................... 55
DIAGRAMAS DE LA APLICACIÓN .......................................................................................... 57
4.1.
Diagrama de desarrollo CISCAGI ............................................................................... 57
4.2.
Diagrama general de secuencia CISACAGI IVR. ....................................................... 58
2
5.
4.3.
Diagrama general de secuencia CISACAGI administrador. ........................................ 59
4.4.
Diagramas UML .......................................................................................................... 60
4.6.1.
UML AGISCRIPT. .............................................................................................. 60
4.4.2.
UML CISCAGI AMI1 ......................................................................................... 61
4.6.3.
UML CISCAGI AMI2 ......................................................................................... 62
INSTALACIONES Y CONFIGURACIONES. ............................................................................... 63
5.1.
Instalación Asterisk (Distribución Elastix). ................................................................ 63
5.2.
Instalación Festival. (TTS [Conversor de texto a voz]). .............................................. 67
5.3.
Instalación Cacti (Monitorizador de Servidores). ........................................................ 69
Configurando Apache .......................................................................................................... 71
Configurando Mysql ............................................................................................................. 71
Instalando Cacti.................................................................................................................... 71
Creación de base de datos MYSQL para datos de cacti ...................................................... 73
Asignando permisos necesarios ........................................................................................... 74
Graficando la Red ................................................................................................................. 77
Viendo las graficas ............................................................................................................... 79
5.4.
Configuration AMI (Asterisk Manager Interface) ....................................................... 80
5.5.
Configuración CDR ..................................................................................................... 83
Campos del CDR ................................................................................................................... 83
5.6.
Configurando Asterisk para guardar los registros del CDR en MySQL ...................... 85
5.7.
Configuración FAST-AGI ........................................................................................... 91
ARCHIVO EXTENSIONS.CONF ............................................................................................... 92
ARCHIVO FASTAGI-MAPING.PROPERTIES ............................................................................ 92
ARCHIVO CISCAGIROUTER:XML ........................................................................................... 93
5.8.
Configuración de la Base de seguridad CISCAGISEGU ............................................ 96
3
1. ARQUITECTURA DE LA SOLUCIÓN
La Arquitectura propuesta contará de tres elementos:
• El servidor Asterisk
• El servidor de aplicaciones
• La Base de Datos
El servidor de aplicaciones se encargará de hacer las conexiones a base de datos y de
recibir la información de entrada que dará el usuario al sistema IVR así como también
procesar la información para brindar una respuesta adecuada, albergando el script del
IVR mismo. El servidor de aplicaciones se encargará también de alojar el sistema web y
requerimiento de información de la base de datos.
El servidor Asterisk será el encargado de contener la central telefónica y todas sus
bondades, contendrá el TTS (Festival) para las conversiones de texto a voz, también
CACTI (Monitorización de servidores para verificar el estado del servidor), el AGI para
la comunicación con las aplicaciones, también el CDR para reportes sobre la central
telefónica.
La base de datos el cual contendrá la información de los estudiantes de la carrera.
4
2. ARQUITECTURA DEL DESARROLLO
2.1. Tecnologías de la Solución
A continuación se detallarán las herramientas para el diseño e implementación del
sistema, indicando la justificación de la debida elección.
2.1.1. El Asterisk
Asterisk soporta muchos protocolos de VoIP, presenta capacidades que anteriormente
sólo eran encontradas en equipos propietarios, llevadas a cabo por medio de
implementaciones en software y arquitecturas funcionales.
Para el desarrollo del proyecto de tesis, se utilizará Asterisk en su versión dada la
capacidad de esta versión de interactuar con paquetes de software como Asterisk – Java,
ha ser descritos posteriormente.
2.1.2. Lenguaje de Programación
El lenguaje de programación elegido es Java. Se ha convertido en un lenguaje de
programación muy popular dada su robustez, simple sintaxis e interoperabilidad. Entre
las características principales de Java tenemos:
• Lenguaje de programación Orientado a objetos (POO) que permite la reutilización de
código, agilizando el desarrollo de software en la creación de sistemas de mayor
complejidad.
•
Lenguaje multiplataforma: Funciona de manera similar en diferentes sistemas
operativos.
5
Esto se debe a la interpretación del lenguaje realizado por la máquina virtual Java JVM;
dado que normalmente un lenguaje compilado es traducido y adaptado a un archivo
ejecutable para una determinada plataforma.
• Tiene capacidades de extender funcionalidades de un servidor web.
2.1.3.
Asterisk - Java
El API Asterisk – Java ofrece un conjunto de clases que permite la creación de
aplicaciones que puedan controlar y monitorear centrales PBX basadas en Asterisk 1.0,
1.2 y trabajos futuros en gestión de la versión 1.4. Actualmente este paquete está en su
versión 0.3 y está registrado bajo licencia Apache Versión 2.0.
El paquete Asterisk – Java está desarrollado mediante el protocolo FastAGI, por lo que
se permite poner en funcionamiento un servidor de requerimientos que recibirá y
mandará comandos por un socket TCP. Para esto será necesaria la configuración del
archivo extensions.conf ubicado en /etc/asterisk del servidor PBX.
A continuación se describirá el diseño del soporte de FastAGI del API Asterisk-Java en
su paquete org.asteriskjava.fastagi. Éste se basa en tres importantes interfaces:
AgiServer, AgiScript y MappingStrategy.
• La interfaz AgiServer tiene como responsabilidad escuchar los requerimientos AGI
provenientes de un servidor Asterisk y luego elegir el proceso para ese requerimiento,
invocarlos para proveer los medios para enviar comandos a Asterisk y recibir la
6
respuesta correspondiente. El API Asterisk-Java incluye ya la implementación de esta
interfaz en DefaultAgiServer. (Método utilizado en el proyecto)
• AgiServer usa una estrategia de mapeo (MappingStrategy) para la selección del
proceso, y esto se basa en la lectura del recurso y verificando la URL, esto es llamado
ResourceBundleMappingStrategy.
2.1.4. Diseño AGI del paquete ASTERISK-JAVA
• La tercera interfaz es el AgiScript, el cual se refiere al código mismo invocado para
atender un requerimiento. AgiScript es para Asterisk-Java lo que un servlet es para un
contenedor de servlets (servlet container). La interfaz AgiScript es bastante simple, usa
un método llamado service () al cual se le pasan el AgiRequest y el AgiChannel,
permitiendo enviar comandos Agi hacia Asterisk.
Para el desarrollo del presente proyecto se utilizarán principalmente los métodos
definidos en la clase BaseAgiScript, la cual nos ofrece control sobre acciones de la
propia central para pedir y brindar información necesaria para la implementación del
sistema IVR. Esta clase está ubicada en org.asteriskjava.fastagi y sus método son el
reflejo de los comandos AGI como métodos de una clase extensible en Java, lo que nos
permitirá ya en este ambiente generar otras clases necesarias para la interacción con la
base de datos.
Algunos de los métodos de la clase BASEAGISCIPT
7
Tipo
Nombre
Descripción
Void
Answer()
Contesta el canal
Int
Exec(String aplicacion)
Ejecuta un comando de una aplicación dada.
String
getData(String archivo)
Reproduce y espera datos para almacenar.
Void
StreamFile(String archivo)
Reproduce un archivo dado
Void
sayDigits(String cadena)
Reproduce una cadena de digitos
2.1.5. JasperReports
JasperReports es una fuente abierta de Java de presentación de informes herramienta que
puede
escribir
en
la
pantalla,
una
impresora
o
en PDF ,HTML , Microsoft
Excel , RTF , ODT , valores separados por comas y XML archivos.
Puede ser utilizado en aplicaciones Java habilitado, incluyendo Java EE o aplicaciones
Web, para generar contenido dinámico. Se lee las instrucciones de un XML o archivo.
Jaspe.
2.1.6. IReports
La herramienta iReport es un constructor / diseñador de informes visual, poderoso,
intuitivo y fácil de usar para JasperReports escrito en Java. Este instrumento permite que
los usuarios corrijan visualmente informes complejos con cartas, imágenes, sub
informes, etc. iReport está además integrado con JFreeChart, una de la biblioteca
gráficas Open Source más difundida para Java. Los datos para imprimir pueden ser
8
recuperados por varios caminos incluso múltiples uniones JDBC, TableModels,
JavaBeans, XML, etc.
Características de iReport
La lista siguiente describe algunas de las características importantes de iReport:

100% escrito en JAVA y además OPENSOURCE y gratuito.

Maneja el 98% de las etiquetas de JasperReports

Permite diseñar con sus propias herramientas: rectángulos, líneas, elipses,
campos de los textfields, cartas, subreportes (subreportes).

Soporta internacionalización nativamente.

Browser de la estructura del documento.

Recopilador y exportador integrados.

Soporta JDBC.

Soporta JavaBeans como orígenes de datos (éstos deben implementar la interface
JRDataSource).

Incluye Wizard‟s (asistentes) para crear automáticamente informes.

Tiene asistentes para generar los subreportes

Tiene asistentes para las plantillas.

Facilidad de instalación.
9
2.1.7. JavaMail
JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde
código java.
El JavaMail API no es parte del núcleo de Java SE, sino una extensión
opcional. Además, se requiere en Java Enterprise Edition. Los paquetes de JavaMail se
puede acceder de dos maneras:

mediante la colocación de j2ee.jar en la ruta de clases

o, mediante la colocación de dos mail.jar y activation.jar en la ruta de clases
El javax.mail API utiliza un archivo de propiedades para los nombres de servidor de
lectura y de configuración relacionados. Esta configuración anula cualquier defecto del
sistema. Por otra parte, la configuración se puede ajustar directamente en el código,
usando la API JavaMail.
2.1.8. SoftPhone (WebPhone MIZU)
El Mizu-Teléfono Web es un peso ligero estándar de VoIP de teléfono basado en
software que puede ser ejecutado desde páginas web . Basado en el estándar SIP
protocolo de la industria, es compatible con todos los dispositivos de VoIP y
servicios. Se puede llamar a cualquier otro teléfono SIP suave / teléfono IP (para la
carga gratis) o cualquier teléfono fijo y número de teléfono móvil a través de un
proveedor de servicios de VoIP de su elección.
10
El teléfono se implementa como un applet de Java o la aplicación y es totalmente
independiente de la plataforma que se ejecutan en cualquier navegador habilitado para
Java en todos los sistemas operativos (Windows, MAC, Linux, Solaris). Puede ser
utilizado como un softphone normal de funcionamiento en su sitio web o como-como los
botones de Skype (Haga clic aquí para llamar).
La persona que llama puede aceptar la llamada en un dispositivo VoIP (softphone,
teléfono IP, aplicaciones de call-centers) o puede ser contactado directamente a su
teléfono fijo o móvil. Todas las llamadas habituales características de enrutamiento se
puede habilitar (desvío de llamadas, transferencia de llamadas, etc)
Con Mizu-Teléfono Web puede agregar rápidamente las capacidades de VoIP para su
sitio web. (Página web, blog, foro, soporte / página de las ventas, sitio de redes sociales,
call center, etc.) El resto depende de tu imaginación.
Características WebPhone

SIP y RTP pila (compatible con cualquier servidor de VoIP o un dispositivo
como Cisco, Astérix, softphone, ATA y otros)

Norma applet de Java (no requiere instalación de software, se ejecuta
directamente desde todos los navegadores)

Las llamadas de VoIP con auto QoS

Protocolos de transporte: UDP, TCP, TLS, HTTP túnel
11

NAT / Firewall de apoyo, estable SIP y los puertos de RTP, la luz del protocolo
STUN y configuración automática

Protocolos de los medios de comunicación: mensajería instantánea (chat) y
capacidad de presencia

RFC: 2543, 3261, 2976, 3892, 2778, 2779, 3428, 3265, 3515, 3311, 3911, 3581,
3842, 1889, 2327, 3550, 3960, 4028, 3824, 3966, 2663, 3022

métodos compatibles: INVITE, ACK, PRACK, BYE, CANCELAR, UPDATE
MENSAJE, INFO, OPCIONES, suscribir, NOTIFICAR, CONSULTE

Codec: PCMU, PCMA, G.729 , GSM, Speex, iLBC

Banda ancha y banda ultra-ancha codec y salida estéreo

DTMF (método INFO en la señalización)

Volver a marcar, llamada espera , silencio y la transferencia (con operador y
automáticas)

Conferencia de llamadas (integrado en el mezclador RTP)

Llame al parque y recogida

Unlimited líneas

Balance de la pantalla, temporizador de llamadas

Grabación de voz (local y / o ftp upload)

Señalización y los medios de comunicación cifrado

Haga clic para llamar
12

Servidor de integración lado usando PHP,. NET, J2EE, etc

JavaScript API

Construido con su propia marca

Personalizable interfaz gráfica de usuario e idiomas

Funciones personalizadas
2.1.9. Base de Datos del Sistema
La base de datos elegida para el sistema IVR es Mysql, sistema de base de datos
relacional orientado a funcionar más en sincronía con las necesidades del Internet; por lo
que es el sistema preferido por las empresas dada su robustez y fidelidad.
Para la interacción con la base de datos desde los Scripts generados en Java para el
funcionamiento del Sistema IVR y su interacción con el sistema de base de datos se
utilizará el paquete mysql-conector-java-5.1.7.jar de MySQL compatible con JDK.
Para una mejor organización de las sentencias SQL (Structured Query Language) se
utilizarán paquetes y procedimientos almacenados en el mismo servidor de base de datos
con el fin de poder hacer transacciones para el desarrollo del sistema.
2.1.10. Servidor de Aplicaciones
El servidor de aplicaciones elegido para albergar la aplicación web de inscripción inicial
del flujo del servicio IVR es el BlazeDS que no es más que un Tomcat 5.5.12, el cual se
encuentra bajo licencia Open Source (Código Abierto) y fue creado en conjunto por
13
Apache Software Foundation y Sun Microsystems y que permite interactuar con
aplicaciones Flex y AIR enviando las consultas mediante protocolos AMF.
Una de las ventajas del uso de BlazeDS es que al estar desarrollado en Java, sólo
requerirá de una máquina virtual Java JVM para funcionar correctamente
indistintamente de la plataforma operativa en la que se encuentre.
2.1.11. Servidor TTS
Como parte de la tecnología anexa usada en los sistemas IVR, descritos en el capítulo
anterior, se ha visto necesaria la inclusión de un servidor TTS (Text to Speech) en el
desarrollo del presente proyecto. Para esto se ha elegido el sistema “Festival”,
desarrollado por el CSTR (The Centre for Speech Technology Research) de la
Universidad de Edimburgo, Inglaterra. “Festival” es un marco de trabajo que permite
construir sistemas de síntesis de voz. La versión actual de este sistema es el 2.0 y que
está disponible para descarga, ofreciendo soporte tanto en inglés americano y británico
así también como en español.
2.1.12. GUI
El diseño de la interfaz gráfica del aplicativo web que acompaña al servicio telefónico es
un juego de páginas en FLEX - AIR dada la sencillez de este lenguaje y la necesidad de
14
tan sólo un navegador web el único requerimiento seria que estas navegadores soporten
flash.
La arquitectura MVC o Modelo-Vista-Controlador se encarga de separar la presentación,
la lógica de control y el estado de la aplicación con el objetivo de hacer el sistema
modular; es decir, una parte puede ser cambiada sin alterar la otra.
El “controlador” será el encargado de recibir los requerimientos y es el responsable de
tomar acciones apropiadas en respuesta a cada requerimiento. El “modelo” está referido
a la representación del estado de la aplicación en la base de datos y los DAOS;
Finalmente la “vista” tomará la información provista por el “controlador” y el “modelo”
y la presenta al usuario.
Cabe notar que la vista del proyecto está formada por un modelo Factory method el cual
nos permite crear pantallas genéricas de manera sencilla y sin tener que crear clases lo
hace dinámicamente obteniendo la forma de las pantallas de una plantilla XML
guardada en una base de datos.
15
3. DICCIONARIO DE LIBRERIAS.
3.1.
INFORMACION GENERAL
Documentación técnica de las funciones del servidor java de conexiones AMI y AGI.
Para esto tenemos dos proyectos:
CISCAGI – AMI: encargado de conectarse con el manager de Asterisk e interactuar con
las diversas líneas de comando y con los archivos de configuración.
CISCAGI – AGI: Encargado de mantener levantado un servidor AGI para que este
reciba las reciba y envié procesos por voz siendo este un Dial Plan.
3.2.
INFORMACION FUNCIONES.
3.2.1. CISCAGI-AGI
Class Summary
Clase encargada levantar un servidor fastagi
Constructor Detail
CiscAgiScriptIVR
public CiscAgiScriptIVR()
CiscAgiScriptIVR
Method Detail
ivrRespuesta
public java.lang.String
ivrRespuesta(java.lang.String routerSoundsIVR,
16
org.asteriskjava.fastagi.AgiChannel channel,
long time,
int maximoNumeroDigits)
throws java.lang.Exception
Ivr de bienvenidas estos archivos de sonido no pueden ser
interrunpidos hasta que se termine el audio.
Parameters:
routerSoundsIVR channel Throws:
java.lang.Exception
candado
public java.lang.String
candado(java.lang.String routerSoundsIVR,
java.lang.Long time,
int maximoNumDigits)
throws java.lang.Exception
Candado de seguridad [ingreso de cedula]
17
Returns:
Throws:
java.lang.Exception
readAccion
public void readAccion(java.lang.String accion,
org.asteriskjava.fastagi.AgiChannel channel,
java.lang.String modo)
throws java.lang.Exception
Throws:
java.lang.Exception
cerrarLlamada
public void cerrarLlamada()
throws org.asteriskjava.fastagi.AgiException
Throws:
org.asteriskjava.fastagi.AgiException
inicializador
public int inicializador()
18
ivrSinInterrupcion
public boolean ivrSinInterrupcion()
ivrConInterrupcionTiempo
public boolean ivrConInterrupcionTiempo()
verificaSiTieneCandado
public boolean verificaSiTieneCandado()
verificaDtmfTienedata
public boolean verificaDtmfTienedata()
verificaAccionEnOpcion
public boolean verificaAccionEnOpcion()
service
public void service(org.asteriskjava.fastagi.AgiRequest request,
org.asteriskjava.fastagi.AgiChannel channel)
19
Clase encargada de manejar las distintas funciones e interpretarlas
para la clase agiscript encargada de retornar el IVR (dialplan)
Methods inherited from class com.ciscagi.dao.SecuryDao
consultaItem, consultaItems, consultaOpciones, getLogon, proce
dimientoAlmacenado, procedimientoAlmacenadoItems,procedi
mientoAlmacenadoItemsPorMenu, procedimientoAlmacenadoO
pcionesPorMenuItems
FuncionalidadesAgi
Script
Methods inherited from class com.ciscagi.utilitarios.Utils
anidarXml, convertstring, diferenciaDias, differenceTime, esCe
dulaValida, fechaHoraActual, formarFormasxml,formarJournalx
ml, formarSignxml, generarDate, generarHora, generarNumero
ConCeros, getVersion, leerDocDOM, loadXml, main,messagex
ml, messagexml, messagexml1, messageXmlPrinter, obtenerCan
tidadDigitos, obtenerFechaDeFormateoEspecial,readDocDOM,
readNodosxml, redondeoDecimalDouble, validarNulo, verificar
Cedula, verificarXml
20
Methods inherited from class
com.ciscagi.utilitarios.Formateador
fechaStringValue, generarDateSql, generarDateTimeUtil, genera
rDateUtil
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait,
wait, wait
Field Detail
items
public int items
privates ****************************
ivr
public java.lang.String ivr
timeout
public java.lang.Long timeout
21
digits
public int digits
candado
public java.lang.String candado
digitsLock
public int digitsLock
opc
public int opc
ivrLock
public java.lang.String ivrLock
idopc
public int idopc
idivr
22
public int idivr
accion
public java.lang.String accion
send
public java.lang.String send
avanza
public boolean avanza
mailEstud
public java.lang.String mailEstud
Method Detail
getIdopc
public int getIdopc()
setIdopc
public void setIdopc(int idopc)
23
getIdivr
public int getIdivr()
setIdivr
public void setIdivr(int idivr)
getAccion
public java.lang.String getAccion()
setAccion
public void setAccion(java.lang.String accion)
getSend
public java.lang.String getSend()
setSend
public void setSend(java.lang.String send)
getIvrLock
public java.lang.String getIvrLock()
24
setIvrLock
public void setIvrLock(java.lang.String ivrLock)
getItems
public int getItems()
setItems
public void setItems(int items)
getIvr
public java.lang.String getIvr()
setIvr
public void setIvr(java.lang.String ivr)
getTimeout
public java.lang.Long getTimeout()
setTimeout
25
public void setTimeout(java.lang.Long timeout)
getDigits
public int getDigits()
setDigits
public void setDigits(int digits)
getCandado
public java.lang.String getCandado()
setCandado
public void setCandado(java.lang.String candado)
getDigitsLock
public int getDigitsLock()
getDigitsLock
public void getDigitsLock(int digitsLock)
26
getOpc
public int getOpc()
setOpc
public void setOpc(int opc)
items
public void items(ReadXMLIVR readm)
throws java.lang.Exception
Throws:
java.lang.Exception
opcion
public void opcion(ReadXMLIVR readm,
int opc)
nextItemsIvr
public void nextItemsIvr(int it,
ReadXMLIVR readm)
Determina el siguiente items
27
Parameters:
items readm Throws:
java.lang.Exception
sayTTS
public void sayTTS(java.lang.String string,
org.asteriskjava.fastagi.AgiChannel channel)
throws java.lang.Exception
Función encargada de transformar texto a voz en español
usando tts festival
Parameters:
string channel Throws:
java.lang.Exception
envioMail
public int envioMail(java.lang.String messages,
28
java.lang.String destinatario,
java.lang.String cedula)
stringConvertSounds
public java.lang.String
stringConvertSounds(java.lang.String string,
org.asteriskjava.fastagi.AgiChannel channel)
throws java.lang.Exception
Funcion encargada de convertir una determinada cadena a
un archivo de sonido devolviendo su ubicacion y nombre
Parameters:
string channel Returns:
String (ubicacion y nombre del archivo)
Throws:
java.lang.Exception
eliminarUlaw
29
public void eliminarUlaw(java.lang.String ruta,
org.asteriskjava.fastagi.AgiChannel channel)
throws java.lang.Exception
Elimina los archivos de audio creados por el tts y despues
reproducidos en la llamada esperando un digito de
respuesta para acceder una respuesta IVR
Parameters:
ruta channel Throws:
java.lang.Exception
verificaDataCandado
public boolean verificaDataCandado(java.lang.String candado,
org.asteriskjava.fastagi.AgiChannel channel)
ReadXMLConsulta
Constructor Detail
30
ReadXMLConsulta
public ReadXMLConsulta(java.lang.String archivo)
cosntructor ****************************
Method Detail
GetOpcionesMS
public java.util.List<java.util.Vector> getOpcionesMS()
getters and setters ****************************
setOpcionesMS
public void
setOpcionesMS(java.util.List<java.util.Vector> opcionesMS)
getOpcionesTS
public java.util.List<java.util.Vector> getOpcionesTS()
setOpcionesTS
public void
setOpcionesTS(java.util.List<java.util.Vector> opcionesTS)
31
getOpcionesHC
public java.util.List<java.util.Vector> getOpcionesHC()
setOpcionesHC
public void
setOpcionesHC(java.util.List<java.util.Vector> opcionesHC)
crearDocDOM
public org.w3c.dom.Document
crearDocDOM(java.lang.String fichero)
Busca file dentro de repositorio
Parameters:
fichero Returns:
Document
leerDocDOM
public void leerDocDOM(org.w3c.dom.Document docDOM)
Lee file tipo Document el debe tener un xml y es recorrido
uno a uno sus nodos para setear campos de conexion
32
Parameters:
docDOM -
Constructor Detail
ReadXMLIVR
public ReadXMLIVR(java.lang.String archivo)
cosntructor ****************************
Method Detail
GetItems
public java.util.List<java.util.Vector> getItems()
ReadXMLIVR
getters and setters ****************************
setItems
public void setItems(java.util.List<java.util.Vector> items)
getOpciones
public java.util.List<java.util.Vector> getOpciones()
setOpciones
33
public void
setOpciones(java.util.List<java.util.Vector> opciones)
crearDocDOM
public org.w3c.dom.Document
crearDocDOM(java.lang.String fichero)
Busca file dentro de repositorio
Parameters:
fichero Returns:
Document
leerDocDOM
public void leerDocDOM(org.w3c.dom.Document docDOM)
Lee file tipo Document el debe tener un xml y es recorrido
uno a uno sus nodos para setear campos de conexion
Parameters:
docDOM -
34
3.2.2. CISCAGI-AMI
Class Summary
Clase que permite la comunicacion con la base de datos.
Constructor Summary
BaseDatosManager()
Constructor que permite iniciar la comunicación con la base de
datos.
Method Summary
BaseDatosManage
java.lang.String[] listarExtensiones()
r
Permite obtener una lista de las
extensiones asignadas a usuarios en la base de
datos.
static void
main(java.lang.String[] args)
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait,
35
wait
Constructor Detail
BaseDatosManager
public BaseDatosManager()
Constructor que permite iniciar la comunicación con la
base de datos.
Method Detail
listarExtensiones
public java.lang.String[] listarExtensiones()
Permite obtener una lista de las extensiones asignadas a
usuarios en la base de datos.
Returns:
El array con las extensiones
Clase que permite establecer y terminar una conexión con la API
ConexionManager Manager de Asterisk.
Field Summary
36
org.asteriskjava.manager.ManagerConnect managerConnectio
ion
n
Identificador
lara la conexión con
la API Manager que
se establecerá
Constructor Summary
ConexionManager()
Permite crear la ManagerConnection necesaria para
conectarse a la API Manager.
Method Summary
void finalizarConexion()
Finaliza la conexión a la API Manager.
void iniciarConexion()
Inicia la conexión a la API Manager.
37
Methods inherited from class
org.asteriskjava.manager.AbstractManagerEventListener
OnManagerEvent
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait,
wait
Field Detail
managerConnection
public org.asteriskjava.manager.ManagerConnection
managerConnection
Identificador lara la conexión con la API Manager que se
establecerá
Constructor Detail
ConexionManager
public ConexionManager()
throws java.io.IOException
Permite crear la ManagerConnection necesaria para
38
conectarse a la API Manager.
Throws:
java.io.IOException - Si la conexión de red falla
Method Detail
iniciarConexion
public void iniciarConexion()
throws java.io.IOException,
org.asteriskjava.manager.AuthenticationFailedException,
org.asteriskjava.manager.TimeoutException
Inicia la conexión a la API Manager.
Throws:
java.io.IOException - Si la conexión de red falla
org.asteriskjava.manager.AuthenticationFailedException Si falla la autenticación en Asterisk
org.asteriskjava.manager.TimeoutException - Si se excede
del Timeout
finalizarConexion
public void finalizarConexion()
39
Finaliza la conexión a la API Manager.
Clase que permite leer y escribir en los archivos de configuración
de la centralita PBX Asterisk.
Constructor Detail
ConfiguracionFicheros
public ConfiguracionFicheros(java.lang.String file)
throws java.io.IOException,
ConfiguracionFich
org.asteriskjava.manager.AuthenticationFailedException,
org.asteriskjava.manager.TimeoutException
eros
Constructor que permite inicializar la conexión a la API
Manager de Asterisk, así como los campos de la clase.
Parameters:
file - Nombre del archivo de configuración a leer/escribir
Throws:
java.io.IOException - Si la conexión de red falla
org.asteriskjava.manager.AuthenticationFailedException Si falla la autenticación en Asterisk
40
org.asteriskjava.manager.TimeoutException - Si se excede
del Timeout
ConfiguracionFicheros
public ConfiguracionFicheros(java.lang.String file,
ConexionManager con)
throws java.io.IOException,
org.asteriskjava.manager.AuthenticationFailedException,
org.asteriskjava.manager.TimeoutException
Constructor que permite asociar este servicio a una
conexión a la API Manager de Asterisk ya creada e
inicializada.
Parameters:
file - Nombre del archivo de configuración a leer/escribir
con - ConexionManager ya inicializada
Throws:
java.io.IOException - Si la conexión de red falla
org.asteriskjava.manager.AuthenticationFailedException Si falla la autenticación en Asterisk
41
org.asteriskjava.manager.TimeoutException - Si se excede
del Timeout
Method Detail
listarCategorias
public void listarCategorias()
Permite lanzar la acción GetConfigAction para el archivo
de configuración cuyo nombre sea el que figura en el
campo archivo.
Además, después obtiene una lista de las categorías
disponibles y la almacena en el campo cat.
Throws:
java.io.IOException - Si la conexión de red falla
org.asteriskjava.manager.TimeoutException - Si se excede
del Timeout
buscarCategoria
public int buscarCategoria(java.lang.String categ)
Permite buscar una categoría determinada dentro de un
archivo de configuración de Asterisk.
42
Previamente debe haberse ejecutado el
código listarCategorias().
Parameters:
categ - El nombre de la categoría a buscar
Returns:
-1 si no lo encontró. Un valor mayor que 0 indicará la
posición que ocupa la categoría en la variable cat
See Also:
org.yournamehere.server.ConfiguracionFicheros#listarCate
gorias()
listarCaracteristicas
public java.lang.String[][] listarCaracteristicas(int index)
Obtiene las características de una categoría concreta,
indicada con su índice (lugar que ocupa en el campo cat.
Si no se conociera el índice del mismo, pero sí el nombre
de la categoría, hay que usar primero el
código buscarCategoria(String), el cual devolverá el índice
deseado.
Parameters:
43
index - El índice que ocupa la categoría de la que queremos
extraer las características
Returns:
La lista de características, separando en la primera columna
el nombre de la característica y en la segunda el valor de la
misma. Por filas, las diferentes características
See Also:
org.tutatisk.server.ConfiguracionFicheros#buscarCategoria
(java.lang.String)
buscarCaracteristica
public int buscarCaracteristica(java.lang.String[][] lista,
java.lang.String carac)
Permite buscar una característica determinada dentro del
array de características pasado como argumento.
Previamente se recomienda haber ejecutado el
código listarCaracteristicas(int) para obtener el array que
pasar como argumento.
Parameters:
carac - El nombre de la característica a buscar
44
Returns:
-1 si no lo encontró. Un valor mayor que 0 indicará la
posición que ocupa la característica en la variable lista
See Also:
org.yournamehere.server.ConfiguracionFicheros#listarCara
cteristicas(int)
crearAccionEscritura
public MyUpdateConfigAction crearAccionEscritura()
Permite crear la acción MyUpdateConfigAction para poder
realizar la escritura en los archivos de configuración de
Asterisk.
Posteriormente a este código, habrá que añadir los
comandos a enviar y enviar la acción. Para ello
ver incluirComandos(String[], String[], String[], String[],
String[],
MyUpdateConfigAction) y enviarAccionEscritura(MyUpda
teConfigAction).
Returns:
La acción MyUpdateConfigAction creada
45
incluirComandos
public void incluirComandos(java.lang.String[] com,
java.lang.String[] cat,
java.lang.String[] var,
java.lang.String[] val,
java.lang.String[] mat,
MyUpdateConfigAction accion)
Permite añadir a una acción MyUpdateConfigAction
múltiples comandos para escribir.Cada comando completo
estará formado por un elemento de cada array de String
pasado como argumento.
Por ejemplo, para enviar dos comandos, cada uno de esos 5
arrays tendrá una longitud de 2, y en el índice 0 estará el
primer comando y en el índice 1 estará el segundo.
Parameters:
com - Array con todos los comandos a enviar
sucesivamente. Para ello, ver los comandos en los campos
estáticos de MyUpdateConfigAction
cat - Array con todas las categorías a las que se referirán
46
cada uno de los comandos anteriores
var - Array con las variables para cada comando
val - Array con los valores de las variables anteriores
mat - Array con los valores match para los anteriores
comandos
accion - Acción MyUpdateConfigAction sobre la que
añadir los comandos
enviarAccionEscritura
public void
enviarAccionEscritura(MyUpdateConfigAction accion)
throws java.io.IOException,
org.asteriskjava.manager.TimeoutException
Permite enviar la acción ya completa
MyUpdateConfigAction a la conexión a la API Manager.
Parameters:
accion - La acción MyUpdateConfigAction a enviar
Throws:
java.io.IOException - Si la conexión de red falla
org.asteriskjava.manager.TimeoutException - Si se excede
47
del Timeout
getArchivo
public java.lang.String getArchivo()
Devuelve el campo archivo
Returns:
El nombre del archivo de configuración a leer/escribir
setArchivo
public void setArchivo(java.lang.String arc)
Modifica el campo archivo
Parameters:
arc - El nombre del archivo de configuración a leer/escribir
Clase que permite gestionar todo lo relacionado con usuarios:
Registro Modificación de datos Eliminación de usuario
GestionUsuarios
Constructor Detail
GestionUsuarios
public GestionUsuarios(java.lang.String usuario,
48
java.lang.String password,
java.lang.String dni,
java.lang.String extension,
java.lang.String nombre,
java.lang.String apellido1,
java.lang.String apellido2,
java.lang.String email,
java.lang.String telefono,
java.lang.String tipo,
BaseDatosManager bbdd)
Inicializa un objeto. Inicializa el usuario. Se le pasa como
argumento la manager de la base de datos.
Parameters:
usuario - El nick de usuario
password - La contraseña para el acceso web
dni - El DNI de la persona en formato 11111111A. A su
vez, la clave por defecto para la conexión SIP será el DNI
sin la letra, en este caso, 11111111 (al querer que sea
numérico)
extension - La extensión escogida por el usuario
49
nombre - El nombre del usuario
apellido1 - El primer apellido
apellido2 - El segundo apellido
email - El email
telefono - El teléfono de contacto del usuario (ajeno al
sistema)
tipo - El tipo de usuario que es. Hay tres disponibles:
Alumno, Profesor y Administrador
bbdd - La manager de la base de datos
Method Detail
Registrar
public java.lang.String registrar()
Permite registrar un usuario en el sistema, tanto en la base
de datos como en la centralita asterisk.
Returns:
Mensaje de éxito/fracaso al registrar usuario
setUsuario
public void setUsuario(Usuario us)
50
Modifica el usuario sobre el que se realiza la gestión
Parameters:
us - CiscagiUsuario a gestionar
eliminar
public java.lang.String eliminar()
Permite eliminar un usuario en el sistema, tanto en la base
de datos como en la centralita asterisk.
Returns:
Mensaje de éxito/fracaso al eliminar usuario
modificar
public java.lang.String modificar(Usuario us,
java.lang.String passAsterisk)
Permite modificar los datos de un usuario ya registrado.
Además, da la opción de que la contraseña web sea
diferente de la contraseña de la extensión del usuario y
de su buzón de voz. Al crear el usuario, por defecto se
habà an cogido los números del DNI (la letra no).
Parameters:
51
us - Los datos del nuevo usuario, dentro de un objeto de la
clase CiscagiUsuario
passAsterisk - La contraseña que queremos poner a la
extensión y buzón de voz
Returns:
Mensaje de éxito/fracaso al modificar usuario
Clase encargada de ejecutar las distinas acciones con el AMI
Constructor Detail
MyUpdateConfigAction
public MyUpdateConfigAction()
MyUpdateConfig
MyUpdateConfigAction
Action
public MyUpdateConfigAction(java.lang.String srcFilename,
java.lang.String dstFilename,
boolean reload)
Method Detail
addCommand
public void addCommand(java.lang.String action,
52
java.lang.String cat,
java.lang.String var,
java.lang.String value,
java.lang.String match)
Overrides:
addCommand in
class org.asteriskjava.manager.action.UpdateConfigAction
ghostActionString
public java.lang.String ghostActionString()
getReload
public java.lang.String getReload()
Overrides:
getReload in
class org.asteriskjava.manager.action.UpdateConfigAction
Documentación técnico de clases de cliente Flex y sus distintas paqueterías.
En el aplicativo cliente AIR/Flex esta dividido en tres proyectos:
53
CISCAGI VIEWER : Proyecto AIR/Flex encargado de proveer la interfaz
grafica y principal del proyecto.
CISCAGI LIBRARY: Proyecto tipo Modules encargado de proveer las
diferentes librerías y clases utilitarios para el resto del proyecto.
ModuloIVR: Modulo encargado de generar interfaz grafica para consulta
de menú IVR estas no se generan de manera genérica ya que su i nterfaz
en un poco más compleja pero el proyecto AIR/Flex permite generar
formas genéricas así también permite el ingreso de módulos de extensión
swf. Estos ingresos si son de manera fácil solo bastaría con ingresarlo
dentro de la base objetos.
3.2.3. CISCAGIVIEWER
Packages
src.default
Contiene las distintos utilitarios utilizados tales como definiciones
src.assets
de hojas de estilo, imágenes, skins, fonts.
Contiene paquetes tales como:
ciscagi: Contiene clases principales del proyecto tales como:
src.com

Clases de conexiones a SQL Lite

Clases de conexiones via com.
54

Clases de mapeo para los distintos eventos.

Clases de manejo de interfaces GUI genéricas, objeto
abierto y modules de extensión swf.
flexmdi: Contiene clases actiosnscripts para los manejo de diseños
de las distintas GUI, tales como el uso de reflejos, manejo de las
hojas de estilo y skins.
3.2.4. CISCAGILIBRARY
Packages
Contiene las distintos utilitarios utilizados tales como definiciones
assets.images
de hojas de estilo, imágenes.
Contiene paquetes tales como:
Constants:Contiene el definiciones de contantes utilizados en los
proyectos.
alexsoft.common
Controls: Contiene clases actiosnscripts para los distintos
controles generales de las GUI.
Log :Contiene las constantes de clase Logs.
Utilis: Contiene los distintos clases que ayudaran con utilitarios
55
básicos tales como las diferentes validaciones tanto de
identificación , fechas, formatos etc.
Contiene las distintas clases de manejo de eventos para las
alexsoft.events
diferentes formas.
Contiene las clases tipo entidades para el manejo de objetos
alexsoft.vo
predeterminados para este proyecto.
3.2.5. ModuloIVR
Packages
Contiene la clase:
Class moduloivr.mxml
See Also:
src.default
Clase encargada de presentar la GUI principal que invocara a los
distintos mxml para funciones de consulta de totales y de
transacciones.
src.modules
Contiene paquetes tales como:
56
events: Contiene la definiciones manejo de eventos.
maps: Contiene las rutas de los eventos sucitados en el proyecto
GUI.
model :Contiene las clases manejadoras de funciones
trascendentales para el modulo.
ui: Contiene los distintos clases GUI para transacciones y consulta
de totales.
57
4. DIAGRAMAS DE LA APLICACIÓN
4.1.
Diagrama de desarrollo CISCAGI
Fuente: Datos de la Investigación
Elaborado: Autores de la Tesis
58
4.2.
Diagrama general de secuencia CISACAGI IVR.
Fuente: Datos de la Investigación
Elaborado: Autores de la Tesis
59
4.3.
Diagrama general de secuencia CISACAGI administrador.
Fuente: Datos de la Investigación
Elaborado: Autores de la Tesis
60
4.4.
Diagramas UML
4.6.1. UML AGISCRIPT.
Fuente: Datos de la Investigación
Elaborado: Autores de la Tesis
61
4.4.2. UML CISCAGI AMI1
Fuente: Datos de la Investigación
Elaborado: Autores de la Tesis
62
4.6.3. UML CISCAGI AMI2
Fuente: Datos de la Investigación
Elaborado: Autores de la Tesis
63
5. INSTALACIONES Y CONFIGURACIONES.
5.1.
Instalación Asterisk (Distribución Elastix).
Inserte el CD de instalación de Elastix al momento de encender su máquina. Una vez
hecho esto aparecerá una pantalla como la siguiente:
Si usted es un usuario experto puede ingresar en modo avanzado digitando el comando:
advanced
Caso contrario espere, el CD de instalación iniciará la instalación automáticamente ó
presione enter.
Proceda a escoger el tipo de teclado de acuerdo al idioma. Si su teclado es de idioma
español seleccione la opción es:
64
Seleccione la hora zona horaria de su región:
Digite la contraseña que será usada por el administrador de Elastix. Recuerde que esta es
una parte crítica para la seguridad del sistema.
65
Nota: Los procedimientos a continuación los realizará el CD de instalación de manera
automática.
Primero se buscará las dependencias necesarias para la instalación:
66
Luego se procede con la instalación, inicialmente usted verá algo como esto:
Imagen del proceso de instalación por finalizar:
Una vez se realice la instalación completa, se procede a reiniciar el sistema.
Luego de reiniciar el sistema usted podrá escoger entre las opciones de boot la distro de
Elastix.
Ingrese como usuario root y la contraseña digitada al momento de la instalación.
67
5.2.
Instalación Festival. (TTS [Conversor de texto a voz]).
Una vez instalado Asterisk, se procederá a la instalación de los paquetes adicionales para
el funcionamiento del sistema e iniciaremos con el Festival, software usado para las
funciones del TTS. Para esto se ejecutamos en el promt del root el comando “yum install
festival”, esta sentencia descargará, descomprimirá e instalará el paquete festival que de
manera predeterminada viene en inglés, así que ahora procedemos a instalar el paquete
de español disponible en [FES2007], descargando el archivo de extensión .tar.gz y
descomprimiéndolo para un mejor desempeño en nuestro entorno.
Para programar el lenguaje a ser utilizado, alteraremos el archivo festival.scm, ubicado
en /usr/share/festival, al cual le agregaremos el siguiente script para usar por defecto el
lenguaje español en modo servidor:
ARCHIVO FESTIVAL.SCM – LENGUAJE ESPAÑOL
(language_spanish)
(set! voice_default 'voice_pc_diphone)
Una vez hecho esto, agregaremos un script en el mismo archivo que permitirá que
Asterisk interactúe directamente con Festival, el cual define la forma en que Asterisk
pasará las cadenas de texto a ser reproducidas:
ARCHIVO FESTIVAL.SCM – INTERACCION ASTERISK
;; Command for Asterisk begin
68
(define (tts_textasterisk string mode)
"(tts_textasterisk STRING MODE)
Apply tts to STRING. This function is specifically designed for
use in server mode so a single function call may synthesize the string.
This function name may be added to the server safe functions."
(utt.send.wave.client (utt.wave.resample (utt.wave.rescale (utt.synth
(eval (list 'Utterance 'Text string))) 5) 8000)))
;;; Command for Asterisk end
Finalmente se crea un usuario en el archivo festival.conf ubicado en /etc/asterisk en el
cual indicaremos las características de la conexión entre Asterisk y Festival, indicando la
ubicación del host Festival, en el caso de este proyecto encontrándose juntos: el puerto y
el comando, entre otros:
ARCHIVO /ETC/ASTERISK/FESTIVAL.CONF
[general]
host=localhost
port=1314
usecache=yes
cachedir=/var/cache/asterisk/festival/
festivalcommand=(tts_textasterisk "%s" 'file)(quit)\n
69
5.3.
Instalación Cacti (Monitorizador de Servidores).
Esta herramienta gráfica de red que extrae los datos desde el snmp para poder
monitorizar de manera gráficas los recursos de nuestros servidores y otros equipos en la
red.
Dependencias a instalar:
MySQL: Almacenar datos cacti.
Servidor de NET-SNMP - SNMP (Simple Network Management Protocol).
PHP con el módulo Net-SNMP - SNMP de datos de Access mediante PHP.
Apache / lighttpd / ngnix servidor web: servidor web para mostrar gráficos creados con
PHP y RRDtool.
Luego de instaladas estas dependencias, ejecutamos el comando “php –m | less” para
verificar que PHP tenga los siguientes módulos externos:
-mysql
-snmp
-xml
-session
-sockets
El siguiente paso será editar el archivo de configuración “/etc/php.ini” y modificar el
siguiente parámetro:
extensión_dir = /etc/php.d
70
En ese directorio se encuentran mayormente las librerías necesarias, pero en caso de
CentOs y otras distribuciones, estas librerías se encuentran en “/usr/lib/php/modules”
así que necesitaremos copiar las librerías ubicadas en ese directorio y copiarlas a
“/etc/php.d”, con el siguiente comando lo hacemos:
cp /usr/lib/php/modules/* /etc/php.d/
Y verificamos, modificamos o creamos los siguientes archivos del directorio /etc/php.d/
En /etc/php.d/mysql.ini
; Enable mysql extension module
extension=mysql.so
En /etc/php.d/snmp.ini
; Enable snmp extension module
extension=snmp.so
Luego de verificar que este todo correcto hasta el momento, debemos modificar el
archivo /etc/php.ini, verificando que este parámetro este de la siguiente manera:
file_upload = on ::: Para permitir la importación de plantillas :::
71
Configurando Apache
Editamos el archivo de configuración /etc/httpd/conf.d/php.conf y verificamos que los
siguientes parámetros estén de la siguiente manera:
LoadModule php5_module modules/libphp5.so
AddHandler php5-script .php
AddType text/html .php
DirectoryIndex index.php
Configurando Mysql
Subimos el servicio de mysql, con el comando ''service mysqld start''
Le damos una password a root:
mysqladmin –-user=root password „contraseña‟
Instalando Cacti
Para instalar cacti en CentOS es necesario tener los repositorios RPMforge, para su
instalación:
Descargamos los repositorios dependiendo de su arquitectura:
X86:
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
72
X86_64:
Wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.11.el5.rf.x86_64.rpm
Importamos las llaves Públicas:
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
Instalamos el paquete:
rpm –i rpmforge-release-XXX.XXX.XXX.rpm
Y verificamos que se instalaron los repositorios con:
yum check-update
Luego podemos instalar Cacti, con todas las dependencias necesarias.
yum install cacti
Entre las dependencias que se instalaran están:
-rrdtool
-perl-rrdtool
73
Cuando finalice la instalación, podemos verificar que Cacti se instalo en /var/www/cacti,
y que creó un alias en /etc/http/conf.d/ llamado cacti.conf
Creación de base de datos MYSQL para datos de cacti
Nos ubicamos en /var/www/cacti, y usamos mysql para crear nuestra base de datos para
cacti.
Shell>mysqladmin –-user=root –p create cacti
shell> mysql --user=root -p cacti < cacti.sql
shell> mysql --user=root -p mysql
mysql> GRANT ALL ON cacti.* TO cacti@localhost IDENTIFIED BY „Contraseña‟;
mysql> flush privileges;
mysql> exit
Editamos el archivo /var/www/cacti/include/config.php, y verificamos que los siguientes
parámetros estén de la siguiente manera:
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "127.0.0.1";
74
$database_username = "cacti";
$database_password = "contraseña";
Asignando permisos necesarios
Nos ubicamos en el directorio /var/www/, y le cambiamos el propietario a la carpeta
cacti, le ponemos como propietario a apache.
chown –R apache.apache cacti/
Entramos al directorio cacti, y le cambiamos el usuario a las carpetas rra y log.
chown –R cacti rra/ log/
Agregamos a /etc/crontab, lo siguiente:
*/5 * * * * cacti php /var/www/html/cacti/poller.php > /dev/null 2>&1
Reiniciamos los servicios
service httpd restart
service snmpd restart
service mysqld restart
75
Y entramos desde nuestro explorador a htto://localhost/cacti/
Elegimos nueva instalación
76
3er Paso – Confirmamos todas las rutas
En caso de falta de paquetes, instalar net-snmp-utils
4to Paso – Ingresar a Cacti
El UserName y el Password son admin, luego nos pedirá que escribamos la nueva
contraseña.
77
Graficando la Red
El primer paso para crear gráficas de la red es agregando un host por cada host en la red
que se desea crear gráficas. Un host especifica detalles importantes como el nombre del
host, parámetros SNMP y el tipo de host.
Para manejar equipos dentro de Cacti, haga click en Devices en el menú de la izquierda.
Luego haga click en Add para llenar el formulario de una nuevo equipo. Los primeros
dos campos, Description y Hostname son los únicos campos que requieren entrada más
allá de las por defecto. Si su tipo de host está definido bajo el menú desplegable,
asegúrese de seleccionar este en el menú. Usted siempre puede elegir “Generic SNMPenables host” si solo va a graficar tráfico o “None” si no está seguro.
Ahora que ha creado nuevos equipos, es tiempo de crear gráficas para el mismo. Para
hacer esto, selección del menú de la izquierda la opción “New Graphs”. Si aun está en la
78
pantalla de editar el equipo, seleccione “Create Graphs for this Host” para ver una
pantalla similar a la siguiente imagen mostrada mas abajo.
El menú desplegable que contiene cada equipo debe ser usado para seleccionar el equipo
al cual usted quiere crear nuevas gráficas. El concepto básico en esta página es simple,
seleccione el cuadro de verificación en cada columna que usted quiere crear una grafica
y haga click en “Create”.
Si usted está creando gráficas dentro de la caja “Data Query”, hay algunas cosas
adicionales para tener en mente. Primero es que se puede encontrar con la situación
mostrada en la grafica mostrada más arriba con la consulta de datos “SNMP – Interface
Statistics”. Si esto ocurre usted quizás quiera consultar la sección en consultas de datos
en depuración para ver porque su consulta de datos no está retornando ningún resultado.
También, usted quiera ver el menú desplegable debajo de algunas cajas de consulta de
datos. Cambiando el valor de este menú afecta cual tipo de grafica Cacti construirá
79
después de hacer click en el botón “Create”. Cacti solo muestra este menú cuando hay
más de un tipo de donde escoger, así que puede que no se muestre en todos los casos.
Una vez ha seleccionado las gráficas que quiere crear, simplemente haga click en el
botón “Create” al final de la página. Usted será llevado a una nueva página que le
permite especificar información adicional sobre las gráficas que esta por crear. Solo vera
los campos que no son parte de cada plantilla, de todas formas el valor viene
automáticamente de la plantilla. Cuando todos los valores en esta página parezcan
correctos, haga click en el botón “Create” una última vez para crear finalmente las
gráficas.
Si le gustaría editar o eliminar gráficas después de haberlas creado, use el enlace “Graph
Management” en el menú de la izquierda de la pagina.
Viendo las graficas
En la parte superior de la página haga click en el boton “graphs” para ver las graficas.
80
5.4.
Configuration AMI (Asterisk Manager Interface)
La Interface de Administración de Asterisk, cuando se encuentra habilitada, abre un
socket TCP/IP (utiliza como puerto por defecto el 5038), éste es utilizado por un
programa cliente que se conecta a Asterisk y con ello tiene la facultad de ejecutar
comandos y leer las respuestas y eventos generados por el PBX. Para poder utilizar esta
característica es necesario establecer una sesión de administrador (Manager Sesión) y
autenticarse como tal. Para tal efecto debemos crear una cuenta de administración
(nombre de usuario y contraseña) en el archivo /etc/asterisk/manager.conf. En este
mismo archivo se establecerán los permisos y atribuciones a los que cada cuenta tiene
derecho.
Esta interfaz permite a las aplicaciones externas la capacidad de crear, monitorizar y
gestionar Asterisk.
Es decir que permite la manipulación de los archivos de configuración de los contextos
de los distintos archivos de configuración del Asterisk.
Para esto debemos acceder al asterisk y ubicarnos en la siguiente ruta
/etc/asterisk/manager.conf
Este archivo deberá contener lo siguiente:
81
[general]
displaysystemname = yes
enabled = yes
port = 5038
bindaddr = 127.0.0.1
displayconnects = yes
; Cuenta de usuario astmanproxy
[usuario]
secret = supersegura
; Contraseña
deny=0.0.0.0/0.0.0.0
; Host's a los que se les niega conexión
permit=127.0.0.1/255.255.255.255 ; Host's a los que se les permite conexión (localhost
en este caso)
; Permisos de lectura y escritura para 'usuario'
read = system,call,log,verbose,command,agent,user,config
write = system,call,log,verbose,command,agent,user,config
Para nuestro proyecto quedaría así:
82
;
; Asterisk Call Management support
;
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
[admin]
secret = elastix456
;deny=0.0.0.0/0.0.0.0
;permit=127.0.0.1/255.255.255.0
permit=0.0.0.0/0.0.0.0
read =all,system,call,log,verbose,command,agent,user,agi,config,originate,a
write =all,system,call,log,verbose,command,agent,user,agi,config,originate,a
#include manager_additional.conf
#include manager_custom.conf
El puerto por defecto es el 5038 se deberá dar permisos de IP
permit=0.0.0.0/0.0.0.0
En las siguientes líneas se dará permisos de escritura y lectura al AMI
read =all,system,call,log,verbose,command,agent,user,agi,config,originate,a
83
write =all,system,call,log,verbose,command,agent,user,agi,config,originate,a
Las líneas resaltadas son los permisos agregados siendo los más importantes agi,
originate para manipular el AMI.
El user y Password para ingresar al AMI mediante una aplicación para este caso es
user=admin Password=elastix456 (la clave varia segun la distribución asterisk a usar
esto es para Elastix.).
5.5.
Configuración CDR
CDR (Call Detail Records)
Un registro de detalle de llamadas (CDR) es el registro informático producido por una
central telefónica con los detalles de una llamada originada, interna o externa del lugar
de operaciones del PBX.
Asterisk normalmente almacena el Registro de Detalles de Llamadas en valores
separados por coma en el archivo (CSV). Si desea que el CDR sea almacenado en una
base de datos, tendrá que cargar el módulo apropiado y definir el archivo en cuestión.
Campos del CDR
1. accountcode: ¿Qué número de cuenta de usar: cuenta de facturación de Asterisk,
2. src: Caller * número de identificación.
3. dst: Extensión de destino.
4. dcontext: Contexto de destino.
5. clid: Caller * ID con el texto.
6. Channel: Canal utilizado.
84
7. dstchannel: Canal de destino, si procede.
8. lastapp: La última aplicación en su caso.
9. lastdata: La última solicitud de datos.
10. start: Inicio de la llamada (fecha/hora).
11. answer: Respuesta de la llamada (fecha/hora).
12. end: Fin de la llamada (fecha/hora).
13. duration: Tiempo total en el sistema, en segundos (entero), de marcar para colgar.
14. billsec: Llamada en tiempo total es, en cuestión de segundos (entero), de respuesta a
Colgar.
15. disposition: ¿Qué pasó con la llamada?
RESPONDIDAS, NO RESPONDIDAS, OCUPADA, FALLIDA (en algunos backends
CDR, por ejemplo, ODBC, estos pueden ser números enteros; en cuenta que
información más detallada se puede encontrar en la variable
HANGUPCAUSE).
16. amaflags: ¿Qué parámetros de uso? FACTURACIÓN, IGNORAR, etc.
Especificado en una base por canal como accountcode.
17. user field: Un usuario definido por el campo.
$ dialplan
85
5.6.
Configurando Asterisk para guardar los registros del CDR en MySQL
Por default Asterisk guarda los registros de llamadas en un archivo llamado Master.csv
el cuál es un archivo de texto separado por comas, pero para otros fines a veces es
necesario tenerlo en una base de datos para su posterior consulta, por ello pongo aquí un
tutorial de como conectar Asterisk a MySQL para guardar los CDRs.
Por cuestión de licencias de MySQL, Asterisk ya no incluye la opción de guardar los
registros en una base de datos de MySQL, por lo que ahora esa opción viene en
Asterisk-addons el cuál se tiene que bajar para la versión de Asterisk a usar y
compilarla.
wgethttp://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-addons1.4.9.tar.gz
sudo tar -xzvf asterisk-addons-1.4.9.tar.gz
cd asterisk-addons-1.4.9
#Luego de que se descargue y se descomprima la versión de Asterisk Addons se tendrán
que editar los siguientes archivos
sudo editor cdr/cdr_addon_mysql.c
#agregar al principio la siguiente línea tal como está
#define MYSQL_LOGUNIQUEID
sudo editor cdr/Makefile
86
#agregar al final la siguiente línea tal como está
CFLAGS+=-DMYSQL_LOGUNIQUEID
#ahora si compilamos asterisk-addons
sudo make clean && sudo ./configure && sudo make && sudo make install
#si es una instalación nueva tendrías que ejecutar despues sudo make samples, si no, no
es recomendable para que no borre configuraciones ya realizadas.
#si todo salió bien en la compilación ahora edita el archivo
sudo editor /etc/asterisk/modules.conf
# y agrega al final
load => cdr_addon_mysql.so
#ahora crea un usuario con su password y una base de datos de mysql que será para el
cdr de asterisk
mysql -u root -p
create database asteriskcdrdb;
grant all privileges on asterisk.* to asterisk@localhost identified by"password";
flush privileges;
exit;
sudo editor asterisk.sql
# crea un archivo y agrega lo siguiente
87
CREATE TABLE `cdr` (
`calldate` datetime NOT NULL default '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL default ,
`SRC`
V A R C HA R (80)
NOT NULL
DE FA UL T
,
`dst` varchar(80) NOT NULL default ,
` D C ON T E X T `
V A R C HA R (80)
NOT NULL
D E FA UL T
,
`channel` varchar(80) NOT NULL default ,
`DSTCHANNEL `
V A R C HA R (80)
NOT NULL
DE F AU L T
,
`lastapp` varchar(80) NOT NULL default ,
`LASTDATA`
V A R C H A R (80)
NOT NULL
D E FA UL T
,
`duration` int(11) NOT NULL default '0',
`billsec` int(11) NOT NULL default '0',
`disposition` varchar(45) NOT NULL default ,
` AM A F L A GS `
I N T (11)
` A C C O U N T C OD E `
NOT NULL
V A R C HA R (20)
DE FA UL T
NOT NULL
'0',
DE FA UL T
`uniqueid` varchar(32) NOT NULL default ,
` U S E R FI E L D `
V A R C H A R (255)
NOT NULL
DE F AU L T
);
ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
,
88
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );
#ahora ejecutemos el script de sql
mysql -u asterisk -p asteriskcdrdb < asterisk.sql
#ahora solo falta editar la conexión de asterisk a mysql, para eso editar el siguiente
archivo
sudo editor /etc/asterisk/cdr_mysql.conf
#aqui editar los siguientes valores
[global]
hostname = localhost
dbname=asteriskcdrdb
table=cdr
password = password
user = Asterisk
port=3306
sock=/var/run/mysqld/mysqld.sock
userfield=1
#es importante que en sock= asignes dónde mysql coloca ese arhivo en Debian y
ubuntu por default lo pone en /var/run/mysqld/mysqld.sock
89
#Ahora ya teniendo casi todo listo solo inicia asterisk
sudo asterisk start
#si usas freepbx entonces
sudo amportal restart
#verificamos que se haya cargado el módulo de mysql para Asterisk
sudo asterisk -rvvv
PhylevnMobile*CLI> module show like mysql
#y debería mostrar algo como lo siguiente
Module
Description
Use
cdr_addon_mysql.so
MySQL CDR
Backend
0
Interface
0
Driver
0
app_addon_sql_mysql.so
res_config_mysql.so
Simple Mysql
MySQL RealTime Configuration
3 modules loadedI>
#ahora vemos el status de la conexión de MySQL
PhylevnMobile*CLI> cdr mysql status
#y mostraría algo como lo siguiente
Count
90
Connected to asteriskcdrdb@localhost, port 3306 using table cdr for 1hours, 1 minutes,
0 seconds.
Wrote 1 records since last restart.
-- Registered IAX2 '300' (AUTHENTICATED) at 127.0.0.1:32768
#Si dice Not Connected entonces verificar los parámetros de conexión a la base de
datos e igual checar que la base de datos esté dada de alta.
#salimos
PhylevnMobile*CLI> exit
#ahora marcamos algún número desde un Softphone o teléfono IP para verificar que
esté trabajando.
#Checamos el registro de la base de datos
mysql .u asterisk -p asteriskcdrdb
mysql> select * from cdr;
+---------------------+-------------+-----+--------+-----------+------------------+
| calldate
| clid
| src | dst
| dcontext | channel
+---------------------+-------------+-----+--------+-----------+------------------+
| 2009-07-21 21:36:44 | "1103" <Support> | 1103 | vmu101
91
+---------------------+-------------+-----+--------+-----------+------------------+
1 row in set (0.00 sec)
5.7.
Configuración FAST-AGI
El archivo extensions.conf, el cual se encuentra en “/etc/asterisk” y contiene el plan de
discado (dialplan) del contexto “sistema”, será configurado asignando un número al
sistema IVR, el cuál será la extensión 601. Esta extensión hará referencia al servidor
AGI y al nombre mapeado en fastagi-mapping.properties, archivo de propiedades que
será explicado más adelante. Adicionalmente se implementaron 2 extensiones llamadas
“usuario0” y “usuario1” en los archivos iax.conf y sip.conf respectivamente para
pruebas iniciales en el mismo contexto.
Adicionalmente se creó la carpeta “tesis” en la ruta /home/ivrciscagi/error,
/home/ivrciscagi/general,
/home/ivrciscagi/menu
para
almacenar
las
locuciones
grabadas.
Nota: Estas rutas también se deben configura en la base ciscagisegu en la definición del
dial plan ahí se definen las rutas donde están los archivos de sonido.
92
ARCHIVO EXTENSIONS.CONF
[sistema]
exten => 1234,1,Dial(IAX2/usuario0)
exten => 1234,2,Hangup()
exten => 1235,1,Dial(SIP/usuario1)
exten => 1235,2,Hangup()
exten => 600,1,Answer
exten => 600,2,SetMusicOnHold(default)
exten => 600,5,Background(/tesis/en/00)
[outbound-allroutes]
exten => #TELEFONICO,1,Agi(agi:// 127.0.0.1/hello.agi)
exten => #TELEFONICO,2,Hangup
[INbound-allroutes]
exten => #TELEFONICO,1,Agi(agi://127.0.0.1/hello.agi)
exten => #TELEFONICO,2,Hangup
ARCHIVO FASTAGI-MAPING.PROPERTIES
hello.agi = com.ciscagifastagi.fastagi.CiscAgiScriptIVR
Para esto debemos contar con el paquete Asterisk-Java en una ubicación del sistema de
archivos, y el archivo fastagi-mapping.properties, el cual será el encargado de mapear el
93
script realizado en Java correspondiente a la lógica del negocio del IVR a una extensión
“.agi” , la cual será empleada para invocar el script remotamente, utilizando el socket ya
explicado previamente.
El archivo antes mencionado referencia al código propio del IVR llamado
CiscAgiScriptIVR.java, el cual se colocará también en la misma ubicación del sistema
de archivos que el archivo de mapeo, o en su defecto se colocará la ruta entera de la
ubicación de CiscAgiScriptIVR.java en el archivo fastagi-mapping.properties.
Con
esto
realizado
sólo
queda
levantar
el
servidor,
ejecutando
org.asteriskjava.fastagi.DefaultAgiServer, el cual levantará el hilo respectivo para recibir
los requerimientos FASTAGI vía el puerto 4573.
Para la manipulación de ésta variable, se generó el archivo fastagi-mapping.properties,
ciscagirouter.xml y se colocó en el Classpath al momento de la ejecución.
ARCHIVO CISCAGIROUTER:XML
<?xml version="1.0" encoding="UTF-8"?>
<configuracion>
<!--* Archivo de configuración que me permite setear las distintas bases con la
que interactuara el proyecto CiscAgi-Voice entre las cuales están los login y direcciones
ip para ingreso a base de seguridades, base de datos de respuesta según ivr (en este caso
94
base de estudiantes de la carrera ingeniería en sistemas), manager del asterisk (para
permisos de acceso creación y lectura de archivos en las rutas /etc/asterisk/).*******
example:
Conexión a base sql
<base>sql</base>
<url>jdbc:sqlserver://</url>
<url>jdbc:microsoft:sqlserver://</url>
<serverName>asserver</serverName>
<portNumber>1492</portNumber>
<databaseName>Fenix</databaseName>
<userName>sa</userName>
<password>alexsoft</password>
<selectMethod>cursor</selectMethod>
-->
<!-- Conexión a MangerAsterisk; quien proporciona los permisos de conexión al
Asterisk y sus distintos archivos para su manipulación tanto lectura y escritura. -->
<managerserver>192.168.188.129</managerserver>
<managerlogin>admin</managerlogin>
<managerpass>elastix456</managerpass>
95
<!-- Conexion a Asterisk -->
<urlAsterisk>jdbc:mysql://</urlAsterisk>
<serverNameAsterisk>192.168.188.129</serverNameAsterisk>
<portNumberAsterisk>3306</portNumberAsterisk>
<databaseNameAsterisk>asterisk</databaseNameAsterisk>
<userNameAsterisk>root</userNameAsterisk>
<passwordAsterisk>123456</passwordAsterisk>
<selectMethod>cursor</selectMethod>
<!-- Conexion a Base Seguridad -->
<urlSecury>jdbc:mysql://</urlSecury>
<serverNameSecury>127.0.0.1</serverNameSecury>
<portNumberSecury>3306</portNumberSecury>
<databaseNameSecury>ciscagisegu</databaseNameSecury>
<userNameSecury>root</userNameSecury>
<passwordSecury>alexsoftsa</passwordSecury>
<selectMethod>cursor</selectMethod>
<!-- Conexion a Base Estudiantes -->
<urlCisc>jdbc:mysql://</urlCisc>
96
<serverNameCisc>127.0.0.1</serverNameCisc>
<portNumberCisc>3306</portNumberCisc>
<databaseNameCisc>ciscbd</databaseNameCisc>
<userNameCisc>root</userNameCisc>
<passwordCisc>alexsoftsa</passwordCisc>
<selectMethod>cursor</selectMethod>
<tiempoBase>10</tiempoBase>
</configuracion>
Este archivo contiene las rutas user y password de las base de datos con las que se va a
obtener el dialplan y la información a presentar en este caso el de la base de estudiantes.
Ahora solo queda correr el jar generado desde la consola java –jar CiscAgiFastAgi.jar.
Y está listo para escuchar inBounds u OutBounds según sean los requerimientos y
generar el dial plan para responder con la operadora automática.
Nota. Este jar se lo puede dejar corriendo como demonio o servicio según sean los
requerimientos.
5.8.
Configuración de la Base de seguridad CISCAGISEGU
Esta base maneja los niveles de seguridad del aplicativo web así como también guarda el
dial plan que se generara en la central esta base contiene las rutas de los archivos de
97
sonido así como también las acciones a seguir dependiendo del ingreso DTMF al
realizar una consulta.
Aquí una breve explicación del contenido de sus tablas y procedimientos:
Contiene 7 tablas y 4 procedimientos.
Tables:
Items: Contiene los ítems es decir todas las líneas dialplan
MenuIvr: Contiene las descripciones de los diferentes dialplan y define el principal y
con que ítems está ligado.
98
MenuOpcion: Contiene las diferentes acciones a tomar dependiendo de la línea
escogida.
Permisos: Permiso de visualización en el administrador web.
Screen: Pantallas con las que interactuara el administrador web es de donde tomara las
diversas pantallas a utilizar.
Sesiones
User: Permisos de usuario para el administrador web.
Procedures:
ConsultaItems
99
ConsultaItemsPorMenu
ConsultaOpcionesPorItem
ConsultaOpcionesPorMenuItem
Las tablas contiene la información que se visualice más abajo el Proyecto lo que realice
es transformar esta información obtenida desde la base y transformarla en un XML el
cual es cargado en una variable y guardado cuando inicie el aplicativo.(No realiza una
consulta a la base por cada llamada para extraer la información del dialplan lo hace una
sola vez para no cargar demasiado al servidor lo hace al subir el servicio Fastagi).
<?xml version='1.0' encoding='iso-8859-1'?>
<ivr>
<items ivr='/home/ivrciscagi/general/bienvenida' id='1' timeout='0' digits='0'
candado='" "' digitsLock='0' ivrLock='" "' ></items>
<items ivr='/home/ivrciscagi/menu/001001000' id='2' timeout='20000' digits='1'
candado='" "' digitsLock='0' ivrLock='" "' >
<opciones opc='1' accion='' idivr='3' send='v' />
<opciones opc='2' accion='' idivr='9' send='v' />
<opciones opc='0' accion='EXT' idivr='0' send='o' />
<opciones opc='3' accion='EXT' idivr='0' send='e' />
</items>
100
<items ivr='/home/ivrciscagi/menu/001002000' id='3' timeout='20000' digits='1'
candado='c' digitsLock='10' ivrLock='/home/ivrciscagi/general/candado' >
<opciones opc='1' accion='' idivr='4' send='v' />
<opciones opc='2' accion='' idivr='6' send='v' />
<opciones opc='3' accion='' idivr='5' send='v' />
<opciones opc='4' accion='' idivr='7' send='v' />
<opciones opc='0' accion='' idivr='2' send='v' />
</items>
<items ivr='/home/ivrciscagi/menu/001003000' id='4' timeout='20000' digits='1'
candado='" "' digitsLock='0' ivrLock='" "' >
<opciones opc='1' accion='NP1' idivr='0' send='v' />
<opciones opc='2' accion='NP2' idivr='0' send='v' />
<opciones opc='3' accion='REC' idivr='0' send='v' />
<opciones opc='0' accion='' idivr='3' send='v' />
</items>
<items ivr='/home/ivrciscagi/menu/001004000' id='5' timeout='20000' digits='1'
candado='" "' digitsLock='0' ivrLock='" "' ></items>
<items ivr='/home/ivrciscagi/menu/001005000' id='6' timeout='20000' digits='1'
candado='" "' digitsLock='0' ivrLock='" "' >
<opciones opc='1' accion='CNH' idivr='0' send='m' />
101
<opciones opc='2' accion='CNH' idivr='0' send='m' />
<opciones opc='0' accion='' idivr='3' send='v' />
</items>
<items ivr='/home/ivrciscagi/menu/001006000' id='7' timeout='0' digits='0'
candado='" "' digitsLock='0' ivrLock='" "' ></items>
<items ivr='/home/ivrciscagi/menu/001007000' id='8' timeout='20000' digits='1'
candado='" "' digitsLock='0' ivrLock='" "' ></items>
<items ivr='/home/ivrciscagi/menu/001008000' id='9' timeout='20000' digits='1'
candado='" "' digitsLock='0' ivrLock='" "' >
<opciones opc='1' accion='' idivr='8' send='v' />
<opciones opc='2' accion='' idivr='11' send='v' />
<opciones opc='3' accion='' idivr='10' send='v' />
<opciones opc='0' accion='' idivr='3' send='v' />
</items>
<items ivr='/home/ivrciscagi/menu/001009000' id='10' timeout='20000' digits='1'
candado='" "' digitsLock='0' ivrLock='" "' ></items>
<items ivr='/home/ivrciscagi/menu/001010000' id='11' timeout='20000' digits='1'
candado='" "' digitsLock='0' ivrLock='" "' ></items>
</ivr>
Aquí interpretaremos un ítem para su mejor comprensión:
102
<items ivr='/home/ivrciscagi/general/bienvenida' id='1' timeout='0' digits='0' candado='"
"' digitsLock='0' ivrLock='" "' ></items>
Items = dialplan
Propiedades
Ivr: Esta propiedad contiene la ruta del archive de sonido a invocar (recordar que estos
archivos de sonido deben estar en una ruta del servidor Asterisk).
Id: Esta propiedad indica el número del sonido a interpretar es decir la línea que se
emitirá por sonido.
Timeout: Esta propiedad es encargada de determinar si tiene un tiempo espera para
terminar la locución completa caso contrario si es igual a 0 esta se cortaría en caso de
escuchar un tono DTMF.
Recordar que los valores de Timeout están en milisegundos.
Digits: indica cuantos tonos DTMF va escuchar para generar una orden, ejemplo en el
caso del candado digital se deberá ingresar 10 dígitos que forman el número de cédula,
por tanto esperará 10 tonos DTMF para enviar a una acción. Pero por default será 1.
Candado: Si se va a habilitar un candado digital por defecto será el numero de cedula y
se pondrá c caso contrario será un espacio en blanco.
<items
ivr='/home/ivrciscagi/menu/001002000'
id='3'
timeout='20000'
candado='c' digitsLock='10' ivrLock='/home/ivrciscagi/general/candado' >
<opciones opc='1' accion='' idivr='4' send='v' />
digits='1'
103
<opciones opc='2' accion='' idivr='6' send='v' />
<opciones opc='3' accion='' idivr='5' send='v' />
<opciones opc='4' accion='' idivr='7' send='v' />
<opciones opc='0' accion='' idivr='2' send='v' />
</items>
Aquí
por
ejemplo
primero
emitirá
ivrLock='/home/ivrciscagi/general/candado'
el
sonido
que
este
en
y esperara tantos tonos DTMF como
indique digitsLock='10' una vez realizado el candado si es correcta la validación
entonces emitirá el sonido grabado en ivr='/home/ivrciscagi/menu/001002000' y según
el digito marcado escogerá una opción:
<opciones opc='1' accion='' idivr='4' send='v' />
<opciones opc='2' accion='' idivr='6' send='v' />
<opciones opc='3' accion='' idivr='5' send='v' />
<opciones opc='4' accion='' idivr='7' send='v' />
<opciones opc='0' accion='' idivr='2' send='v' />
DigitsLock: Esta propiedad va amarrada al candado digital aquí se definen el numero de
tonos DTMF escuchara para efectuar una acción.
104
IvrLock: Esta propiedad se encarga de contener la ruta de un archivo de sonido a
escuchar antes de ingresar el candado digital.
Opciones
<items
ivr='/home/ivrciscagi/menu/001008000'
id='9'
timeout='20000'
digits='1'
candado='" "' digitsLock='0' ivrLock='" "' >
<opciones opc='1' accion='' idivr='8' send='v' />
<opciones opc='2' accion='' idivr='11' send='v' />
<opciones opc='3' accion='' idivr='10' send='v' />
<opciones opc='0' accion='' idivr='3' send='v' />
</items>
Una vez escuchado el sonido de determinada línea si el digito DTMF es igual a uno
definido dentro de opciones entonces genera una acción.
Aquí definimos el significado de las propiedades.
Opc: numero de tono DTMF escogido si es igual al definido en opc entonces tiene una
acción caso contrario no existe esa opción.
Accion: Esta propiedad genera una acción definida por unas variables

Accion =CNH Consulta de notas de estudiantes por parcial.

Accion =NP1 Consulta de notas de estudiantes parcial 1.

Accion =NP2 Consulta de notas de estudiantes parcial 2.
105

Accion =REC Consulta de notas de estudiantes mejoramiento.

Accion =PRO Consulta de notas de estudiantes promedio.
Send: Este indica el tipo de acción que se generara es decir solo hay dos eventos envió
por mail o enviar las notas vía sonido.
send =m Envió por mail
send = m Envió por sonido
Idivr: Indica a que línea o ítems deberá ser accesada y enviada vía sonido para esto la
propiedad acción deberá estar vacía.