Recibir SMS en Java

La guía en esta página está a punto de darte una breve introducción sobre cómo puedes obtener los mensajes recibidos desde SMS Gateway en tu aplicación Java. Esta operación se demuestra con un código Java simple que utiliza solicitudes HTTP para recopilar los mensajes entrantes desde SMS Gateway. Si sigues esta guía, aprenderás cómo crear una aplicación Java de ejemplo que obtiene los mensajes de la carpeta de entrada y podrás ver cómo probar la solución. Así que, comencemos.

¿Qué es una API de SMS para Java?

La API de SMS para Java te permite implementar servicios de SMS en tu aplicación Java. La API se comunica con SMS Gateway mediante solicitudes HTTP que envían el mensaje y reciben una respuesta.

Requisitos previos

Recibir SMS en Java

  1. Abre Apache NetBeans IDE
  2. Crea una nueva aplicación Java
  3. Crea una nueva clase Java
  4. Copia y pega el código fuente de ejemplo a continuación
  5. Escribe 'https://localhost:9515' en tu navegador para abrir SMS Gateway
  6. Selecciona la conexión HTTP Server y abre su formulario HTML
  7. Envía algunos mensajes de prueba
  8. Ejecuta la aplicación Java para obtener los mensajes

Video 1 - Cómo recibir SMS en Java (Tutorial en video)

El código de ejemplo Java a continuación, que puede obtener los mensajes entrantes desde SMS Gateway, es de uso gratuito, puedes modificarlo o usarlo en tu proyecto. Si solo deseas probar la solución, debes seguir las instrucciones paso a paso a continuación o también puedes ver el video anterior para aprender cómo crear la aplicación Java de ejemplo que puede obtener los mensajes entrantes desde SMS Gateway.

package ozeki;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate;
import java.util.stream.Collectors;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.xml.parsers.*;
import org.xml.sax.InputSource;
import org.w3c.dom.*;
import java.io.*;

public class ReceiveSMS {
 
    public static void main(String[] args) {
 
        TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager() {
                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
 
                @Override
                public void checkClientTrusted(
                        java.security.cert.X509Certificate[] certs, String authType) {
                }
 
                @Override
                public void checkServerTrusted(
                        java.security.cert.X509Certificate[] certs, String authType) {
                }
            }
        };
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
 
            HostnameVerifier allHostsValid = new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
 
        } catch (GeneralSecurityException e) {
            System.out.println(e.getMessage());
        }
 
        try {
            StringBuilder sendString = new StringBuilder();
            String username = "john";
            String password = "Xc3ffs";
            String httpUrl = "https://127.0.0.1:9508/";
            String folder = "inbox";
            String limit = "3";
 
            sendString.append(httpUrl).append("api?action=receivemessage&username=").
                    append(username).append("&password=").
                    append(password).append("&folder=").append(folder).
                    append("&limit=").append(limit).append("&afterdownload=delete");
 
            System.out.println("Sending request: " + sendString.toString());
 
            URL url = new URL(sendString.toString());
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");
 
            BufferedReader br = null;
            System.out.println("Http response received: ");
            if (con.getResponseCode() == 200) {
                br = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String response =  br.lines().collect(Collectors.joining("\n"));
                response = response.substring(response.indexOf('\n')+1);
                response = response.substring(response.indexOf('\n')+1);
                DisplayMessages(response);
  
            } else {
                br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
                String response =  br.lines().collect(Collectors.joining("\n"));
                System.out.println(response);
            }
            
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }
    
    static void DisplayMessages(String response) {
        try{
            DocumentBuilderFactory dbf =
                DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(response));

            Document doc = db.parse(is);
            NodeList nodes = doc.getElementsByTagName("message");
            
            for (int i = 0; i < nodes.getLength(); i++) {
                Element element = (Element) nodes.item(i);

                NodeList originator = element.getElementsByTagName("originator");
                Element line = (Element) originator.item(0);
                String sender = getCharacterDataFromElement(line);
                
                NodeList messagedata = element.getElementsByTagName("messagedata");
                line = (Element) messagedata.item(0);
                String text = getCharacterDataFromElement(line);
                DisplayMessage(sender, text);
            }
        } catch (Exception ex) {
            System.out.println("The inbox is empty");
        } 
    }
    public static void DisplayMessage(String sender, String text) {
        System.out.println(sender + ": "+ text);
    }
      
    public static String getCharacterDataFromElement(Element e) {
        Node child = e.getFirstChild();
        if (child instanceof CharacterData) {
           CharacterData cd = (CharacterData) child;
           return cd.getData();
        }
        return "?";
      }
}

Paso 1 - Abrir Apache NetBeans IDE

Para poder crear una aplicación Java, necesitas tener un programa capaz de hacerlo. Uno de estos programas es Apache NetBeans IDE, que se puede descargar en la sección de Requisitos previos. Si ya tienes este IDE, solo necesitas abrirlo desde tu escritorio, como se muestra en la Figura 1.

abrir netbeans
Figura 1 - Abrir Apache NetBeans

Paso 2 - Crear una nueva aplicación Java

Después de abrir Apache NetBeans IDE, lo primero que debes hacer es crear una aplicación Java. Para ello, selecciona la opción 'Nuevo proyecto...' en la barra de herramientas. Al hacer esto, aparecerá una ventana con todos los proyectos disponibles que se pueden crear en Apache NetBeans. Aquí, selecciona la opción de aplicación Java como en la Figura 2 y, finalmente, haz clic en 'Siguiente'.

crear nuevo proyecto
Figura 2 - Crear nuevo proyecto de aplicación Java

Paso 3 - Configurar la aplicación Java

Antes de crear la aplicación Java, debes realizar algunas configuraciones. En este menú, debes especificar un nombre para el proyecto, también puedes seleccionar una ubicación para el proyecto. El nombre del paquete también se puede especificar aquí. Si has terminado con todas las configuraciones, haz clic en 'Finalizar', como en la Figura 3.

configurar proyecto
Figura 3 - Configurar nombre del proyecto y paquete

Paso 4 - Crear una clase Java

Después de crear la aplicación Java, debes crear una clase Java, ya que en este momento no contiene ninguna. Para ello, haz clic derecho en el paquete, selecciona 'Nuevo' y, como muestra la Figura 4, haz clic en 'Clase Java...'. Luego, debes especificar un nombre para la clase Java y, cuando termines, haz clic en 'Crear'.

crear nueva clase java
Figura 4 - Crear nueva clase Java

Paso 5 - Reemplazar el código Java de esta página

En este punto, tienes la aplicación Java que necesitas, pero no contiene el código correcto. Para solucionarlo, debes reemplazar el código original con el código de ejemplo de esta página. Así que ve al código de ejemplo y cópialo al portapapeles usando el atajo de teclado Ctrl+C. Luego, ve a la clase Java creada y, primero, elimina el código que encuentres allí. Después, presiona Ctrl+V para pegar el código de ejemplo en la clase Java, como se muestra en la Figura 5.

reemplazar código java
Figura 5 - Reemplazar código Java desde el sitio web

Paso 6 - Enviar algunos mensajes de prueba

Antes de ejecutar la aplicación Java de ejemplo, necesitas tener algunos mensajes entrantes que la aplicación pueda recopilar. SMS Gateway te brinda la oportunidad de simular mensajes entrantes para que puedas probar tu solución. Para ello, simplemente abre SMS Gateway y selecciona la conexión HTTP Server. Si no tienes una conexión HTTP Server, consulta cómo crear una conexión HTTP Server. Aquí, abre el formulario HTML de esta conexión y, como en la Figura 6, envía algunos mensajes de prueba.

simular mensajes entrantes
Figura 6 - Simular algunos SMS entrantes

Paso 7 - Ejecutar la aplicación Java

El último paso de esta guía es ejecutar la aplicación Java. Esta es una operación sencilla; todo lo que necesitas hacer es hacer clic en el botón 'Ejecutar' en Apache NetBeans, como en la Figura 7. Esta acción ejecuta el código Java de ejemplo, que imprime la solicitud HTTP enviada a SMS Gateway y luego también imprime la respuesta de SMS Gateway, que contiene todos los mensajes entrantes.

ejecutar código java
Figura 7 - Ejecutar el código Java en NetBeans para recibir SMS

En resumen

Esta guía que acabas de leer te brinda información sobre cómo recibir mensajes SMS desde SMS Gateway utilizando una aplicación Java. Usando nuestra API de SMS para Java, puedes aprovechar los recursos del lenguaje Java y utilizarlos para controlar SMS Gateway. La API de Java combinada con Ozeki SMS Gateway creará un potente sistema de envío de SMS capaz de enviar hasta 1000 SMS por segundo.

Si deseas conocer más información útil sobre las ventajas de otras soluciones de API similares, visita nuestra página sobre Python para gestionar tráfico de SMS.

Si necesitas reenvío de correo electrónico a SMS y aún no lo has hecho, ¡Descarga Ozeki SMS Gateway ahora y configura esto!