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