domingo, 27 de diciembre de 2009

Versión de escritorio GCDesktop

Tras meses de no publicar nada en el blog por motivos de trabajo y personales os dejo la primera versión del gestor de colas para escritorio.
Al igual que su hermano para web esta escrito completamente en java y basado en las librerías asterisk-java.
Podéis descargar la versión para escritorio aquí.
Para acceder al manual, una vez instalado el programa id al enlace que aparecerá en el menu de inicio o bien podeis abrirlo en la carpeta del programa c:\Archivos de programa\GCDesktop.

Si solamente necesitáis el manual, podéis descargarlo aquí.

domingo, 23 de agosto de 2009

Nueva versión GCWEB 1.2.1

Ventana principal
-> Mejoradas rutinas de conexion para obtener mayor velocidad.
-> Al cargar la pagina web también mostrara las llamadas que estaban en cola antes de su ejecución, en la versión anterior solo controlaba las que entraban en cola desde que se abria la pagina web.
-> Tambien se mostraran las llamadas que no estan en una cola o en el parking de llamadas, de forma que muestra una carga mas real de llamadas de la centralita.
-> Un nuevo botón llamado TODAS, nos muestra todas las llamadas que hay en la centralita tanto en una cola como no, el resto de botones continuan filtrando por la cola seleccionada.
-> En pantalla nos aparecera filtrado la cola en la que se haya efectuado el ultimo evento de entrada en cola, indicando el filtro actual en la cabecera.
-> En el menú contextual que aparece al hacer click con el botón derecho sobre cada llamada, ademas de transferir la llamada a la extensión que queramos ahora también podemos Terminar la llamada.

Ventana de mantenimiento
-> Se ha quitado el mensaje erróneo que indicaba que se iban a cortar las llamadas al recargar la cola.
-> Muestra un mensaje de comando ejecutado, compruebe el funcionamiento de la centralita, una vez ejecutado el comando.

Ventana de Registro de Llamadas
-> Si no se selecciona ninguna extensión para filtrar muestra el resultado de todas las extensiones.
-> En las fechas de inicio y de fin para la consulta se establece por defecto el dia actual
-> Se sustituye el campo destino por los campos "Destino inicial" y "Destino final", indicandonos cada uno de ellos el destino inicial de la llamada ( por ejemplo fue a la extensión 110 o a la cola 900) y destino final seria la extensión que finalmente contesto la llamada.
-> Añadido un menú contextual con dos opciones "Filtrar por" y "Traza de llamada", la opción "Filtrar por...", filtrara la consulta actual por el valor seleccionado en la celda en la que se ha activado el menú contextual, la opción "Traza de llamada" nos mostrara todos los registros generados por la llamada seleccionada, pudiendo estudiar los distintos estados en los que ha estado la llamada.
-> Añadido botón "Imprimir" que nos permite imprimir la tabla en el estado en que se esta mostrando por pantalla en ese momento.


Este es el enlace para la descarga
Un saludo

PD: Espero vuestras sugerencias.




Edit : El desarrollo del proyecto GCWeb, se encuentra de momento parado, trataremos de ponerlo en marcha de nuevo con mejoras.

miércoles, 19 de agosto de 2009

Configuración de SIP en elastix cuando esta detras de un router

Para el correcto funcionamiento de las extenxiones del tipo SIP cuando hay un router entre la centralita y la extension se deben tener en cuenta varias cosas.

1 -> En el router deben abrirse los puertos 5060 ( SIP ), 10000 - 20000 (RTP ), apuntando a la centralita.
2 -> En los archivos de configuración de elastix debemos modificar los ficheros /etc/sip_nat.conf y rtp.conf

El fichero sip_nat.conf debe quedar asi.

externip="dirección ip externa o nombre de dominio externo"
localnet=192.168.1.0/24
nat=yes

El fichero rtp.conf debe quedar así

[general]
rtpstart=10000
rtpend=20000

Además en cada una de las extensiones que vayan a conectar con la centralita desde detrás del router debemos asegurarnos que tengan activado el parámetro nat=yes, esto ultimo se puede hacer también desde la interfaz web.

Para que los cambios surgan efectos basta con recargar asterisk #asterisk -rx reload

martes, 28 de julio de 2009

Obtener estado de una extension determinada

Para obtener el estado de una extensión, utilizaremos la clase ManagerConnection y el método sendAction, la accion que utilizamos es ExtensionStateAction(), todo de las librerías asterisk-java.

/**
* Devuelve el estado de la extension en el contexto "from-internal"
* Los valores son :
* -1 Extensión no encontrada
* 0 Extensión disponible
* 1 Extensión en uso
* 2 Extensión ocupada
* 4 Extensión no disponible
* 8 Extensión sonando
* 16 Extensión en espera
*
* @param extensión
* @return int
*/
public int EstadoExtension(String extension) {
ExtensionStateAction accion;
ExtensionStateResponse respuesta;
ManagerConnection conect;
conect = servidorasterisk.getManagerConnection();
accion = new ExtensionStateAction();
accion.setContext("from-internal");
accion.setExten(extension);
try {
respuesta = (ExtensionStateResponse) conect.sendAction(accion, 1000);
return respuesta.getStatus();
} catch (IOException ex) {
Logger.getLogger(GCConexion.class.getName()).log(Level.SEVERE, null, ex);

} catch (TimeoutException ex) {
Logger.getLogger(GCConexion.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalArgumentException ex) {
Logger.getLogger(GCConexion.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalStateException ex) {
Logger.getLogger(GCConexion.class.getName()).log(Level.SEVERE, null, ex);
}

return -1;
}

Obtener listado de extensiones.

Método quizás no muy elegante, pero funcional, de obtener un vector con las extensiones SIP o IAX2 de una centralita asterisk, utilizando las librerías asterisk-java y el método "executeCliCommand" de la clase DefaultAsteriskServer.


public Vector ListarExtensiones(String tipo) throws ManagerCommunicationException {

String instruccion; // Guardaremos el resultado devuelto por el cli de asterisk
String[] partinstruccion = null; // Guardaremos cada una de las lineas de la instrucción
Vector listadoextensiones = new Vector(2); // Vector que se devolvera

// Ejecutamos el comando en asterisk que corresponda
if (tipo.equals("SIP")) {
instruccion = servidorasterisk.executeCliCommand("sip show peers").toString();
} else {
instruccion = servidorasterisk.executeCliCommand("iax2 show peers").toString();
}

// lo dividimos en lineas.
partinstruccion = instruccion.split(",");
// la primera y las tres ultimas lineas las podemos omitir.
// Separamos cada una de las palabras que nos darán las extensiones y
// lo vamos guardando en el vector.
for (int i = 1; i <>
StringTokenizer tokens = new StringTokenizer(partinstruccion[i]);
listadoextensiones.add(tokens.nextToken());
}
return listadoextensiones;
}

Crear una conexion con el servidor asterisk mediante DefaultAsteriskServer

Con esta primera entrada comienzo la colección de trozos de código útiles para, mediante la utilización de las librerías asterisk-java interactuar con el AMI de asterisk, espero que os sirva de ayuda.


import org.asteriskjava.live.DefaultASteriskServer;

public class GCConexion{

public DefaultAsteriskServer servidorasterisk;

public GCConexion(String servidor, String usuario, String password){


servidorasterisk = new DefaultAsteriskSErver(servidor, usuario,password);


}

}

sábado, 25 de julio de 2009

Capturas de pantalla de GCWeb

Pantalla principal del programa














Ventana de registro de llamadas




















Ventana de mantenimiento.
















Visualización de estado de extensiones y de llamadas

Configuración de GCWeb

Para el correcto funcionamiento de GCWeb, necesitamos:

- Practicamente todo el programa funciona conectandose a asterisk mediante el AMI ( Asterisk Manager Interface ) para lo cual necesitamos ademas del puerto correspondiente ( por defecto 5038) un usuario con el que poder conectarnos, para esto añadiremos un usuario en el fichero /etc/asterisk/manager.conf
[usuario_gcweb] secret = 1234 permyt=0.0.0.0/0.0.0.0 read = system,call,log,verbose,command,agent,user write = system,call,log,verbose,command,agent,user
- Un usuario con el que poder conectar por ssh.
- Un usuario de mysql con permisos para conectar desde el ordenador que se vaya a utiliza el applet ( o desde cualquier maquina ) y con acceso a la tabla cdr de la base de datos asteriskcdrdb
-
Un directorio web en el que poder colocar los ficheros.

Los ficheros de los que consta el Applet son dos, index.html y GCWeb2.jar, el primero es el fichero que abrira el explorador y donde colocaremos los parametros de conexion y el segundo es el applet propiamente dicho, ambos deben estar en el mismo directorio, el cual debe ser accesible por el servidor Apache.

Este seria el contenido del fichero index.html:

< code="GCWEB.class" archive="GCWeb2.jar" codebase="./" width="1076">&ltspan style="font-style: italic;">&ltapplet code="GCWEB.class" archive="GCWeb2.jar" codebase="./" height="747" width="1076">
< name="servidor" value="Dirección IP de la centralita">
< name="usuario" value="Usuario creado en manager.conf">
< name="password" value="Contraseña del usuario creado en manager.conf">
< name="usuariossh" value="Usuario con permiso de conexion por ssh">
< name="passwordssh" value="Contraseña del usuario de conexion ssh">
< name="servidormysql" value="Dirección ip del servidro mysql">
< name="usuariomysql" value="Usuario con permiso de conexion al servidor mysql">
< name="passwordmysql" value="Contraseña del usuario de conexion a mysql">
< /applet>

Presentación de GCWeb

Gestor de Colas Web, ( GCWeb ) es un applet creado a partir de las necesidades de un cliente, esta desarrollado en java y gracias a las librerías asterisk-java en su mayoría, aunque se usan otras como jsch para los comandos enviados por ssh o JExcelApi para la exportación de los resultados a Excel.

Este applet permite :
- Ver las llamadas que estan en una cola o en el parking de llamadas, incluyendo el tiempo de duración y el número del que proviene la llamada.
- Visualizar el estado de todas las extensiones SIP e IAX.
- Consultar el CDR de asterisk, filtrando por fecha de llamada, por extensión y por llamadas entrantes o salientes.
- Exportar los resultados de la consulta al cdr en formato xls.
- Ejecución de comandos desde la interfaz del propio applet.
- Reiniciar la centralita ( el ordenador ).
- Reiniciar servicios RDSI ( reiniciar wanrouter para las tarjeas sangoma )
- Reiniciar servicios asterisk.
- Recargar la configuración.
- Ejecución de cualquier comando del shell de linux escrito en un JText ( muy peligroso ).

Establecer contraseña root en mysql.

Información extraida de
Tranquilidad tecnologica

Por lo menos a mi, cada dos por tres se me olvida la contraseña de acceso a mysql del usuario root, y en ocasiones no hay mas manera que resetearla, el proceso es bastante sencillo.

1 - Como root paramos el servicio mysql : $ /etc/init.d/mysqld stop
2- Creamos un fichero de inicio con la instrucción para resetear la clave :
$ echo "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Nueva contraseña');" > /init.my
3- Ejecutamos mysql_safe pasandole el fichero de inicio que hemos creado
$ mysqld_safe --init-file=/init.my
4- Con esto la clave ya esta reseteada, por ultimo podemos borrar el fichero creado /init.my
$ rm /init.my


Comenzamos....

Bueno... otra vez estamos aqui, no se ya cuantas paginas web he comenzado y al final han quedado en el olvido. Por eso esta vez, y antes de que aquellos que me conocen, comiencen a rasgarse las vestiduras por que no diseño yo la pagina, que no utilizo nuestros servidores... etc etc, os comentare que esta pagina va a ser tan solo una especie de agenda, cajon desastre, o llamalo X de todos aquellos trozos de codigos, ayudas y trucos que cada vez que tengo un problema con asterisk, java, mysql o alguna de las herramientas de mi trabajo diario, me toca ponerme a buscar por internet ( gracias San Google ) , y como "buen informático" no tengo ni idea de donde la he guardado de una vez para otra, aunque intento organizarme.

Y para los que no me conocen, llevo trabajando en informática desde que tengo uso de razón, si queréis ponerme titulación ( que ultimamente esta de moda, al menos en mi país de residencia que es España ) soy Técnico Superior, he trabajado programando en Delphi y Java durante la primera parte de mi carrera profesional, desde hace un par de años, por exigencias de la empresa en la que trabajo actualmente, investigo, juego, trabajo con centralitas basadas en asterisk y una de las obsesiones que he tenido desde el primer día es hacer que sean fáciles de administrar por los clientes a los que se las instalamos.

No me enrollo mas, espero que si estáis buscando ayuda, la podáis encontrar en esta página.

PD: Gran parte, por no decir todo el contenido de esta pagina esta sacado de otras personas que saben de esto mas que yo, si ves contenido en esta pagina que es tuyo y no quieres que sea publicado, por favor ponte en contacto conmigo.