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.