Enviar sms desde una aplicación Java
3 de marzo de 2009En esta entrada os mostraremos cómo enviar sms desde una aplicación Java. Seguro que esta funcionalidad os la ha pedido algún cliente que querÃa integrar directamente en vuestra aplicación la posibilidad de enviar un sms en alguna situación como comunicarse con sus propios clientes, enviar una alerta en determinadas ocasiones, etc…
Lo primero es encontrar un proveedor que permita el envÃo de sms mediante una conexión a su servidor. Un proveedor para enviar sms sirve de intermediario entre nuestra aplicación Java y los operadores de telefonÃa móvil. La misión del programa Java será por tanto conectarse de algún modo al proveedor elegido (HTTP, SMTP…) y pasarle los datos del sms en algún formato (con los propios parámetros de HTTP, con un xml…).
Después de buscar entre varios proveedores, nos hemos quedado con la pasarela de envÃo de sms de Altiria. El envÃo de sms se realiza con este proveedor mediante una petición POST a su servidor con los datos del sms que se quiere enviar como parámetros de la propia petición, siendo los más importantes el contenido del sms y los destinatarios. Se puede encontrar el documento de especificaciones de la conexión también en su web.
Queremos resaltar que el para que el ejemplo que ponemos a continuación funcione y envÃe un sms, es necesario ponerse en contacto con Altiria y contratar un bono de envÃo de sms que permita la conexión a su pasarela de envÃo. El ejemplo sirve para ilustrar lo fácil que serÃa el envÃo del sms una vez contratado el bono.
Ya tenemos el proveedor y el mecanismo de envÃo (HTTP). Ya sólo queda implementar esta conexión HTTP en nuestro programa Java. Para ello necesitamos un cliente HTTP para realizar la conexión. Hemos elegido la librerÃa HTTP de Jakarta, (HttpClient) que debe estar presente en el classpath de nuestra aplicación. El siguiente código realiza la conexión enviando los parámetros del sms.
//Se inicia el objeto HTTP HttpClient client = new HttpClient(); client.setStrictMode(true); //Se fija el tiempo máximo de espera de la respuesta del servidor client.setTimeout(60000); //Se fija el tiempo máximo de espera para conectar con el servidor client.setConnectionTimeout(5000); PostMethod post = null; //Se fija la URL sobre la que enviar la petición POST //Como ejemplo se supone www.pasarela_push_altiria.com/post/sms post = new PostMethod("http://www.pasarela_push_altiria.com/post/sms"); //Se fija la codificación de caracteres en la cabecera de la petición post.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); //Se crea la lista de parámetros a enviar en la petición POST NameValuePair[] parametersList = new NameValuePair[3]; parametersList[0] = new NameValuePair("dest", "34600111222"); parametersList[1] = new NameValuePair("dest", "34600111333"); parametersList[2] = new NameValuePair("msg", "Mensaje de prueba"); //Se rellena el cuerpo de la petición POST con los parámetros post.setRequestBody(parametersList); int httpstatus = 0; String response = null; try { //Se envÃa la petición httpstatus = client.executeMethod(post); //Se consigue la respuesta response = post.getResponseBodyAsString(); } catch (Exception e) { //Habrá que prever la captura de excepciones return; } finally { //En cualquier caso se cierra la conexión post.releaseConnection(); } //Habrá que prever posibles errores en la respuesta del servidor if (httpStatus!=200){ return; } else { //Se procesa la respuesta capturada en la cadena ‘‘response’’ } |
Este código se traduce en el envÃo de un sms con el texto «Mensaje de Prueba» a los móviles 34600111222 y 34600111333.