Receber SMS em Java

O guia nesta página está prestes a dar-lhe uma breve introdução sobre como você pode obter as mensagens recebidas do SMS Gateway para sua aplicação Java. Esta operação é demonstrada por um código Java simples que utiliza requisições HTTP para coletar as mensagens recebidas do SMS Gateway. Se você seguir este guia, vai aprender como criar uma aplicação Java de exemplo que obtém as mensagens da pasta de entrada e você será capaz de ver como testar a solução. Então, vamos começar.

O que é uma API de SMS para Java?

A API de SMS para Java permite que você implemente serviços de SMS em sua aplicação Java. A API se comunica com o SMS Gateway usando requisições HTTP que enviam a mensagem e retornam com uma mensagem de resposta.

Pré-requisitos

Receber SMS em Java

  1. Abra o Apache NetBeans IDE
  2. Crie um novo Aplicativo Java
  3. Crie uma nova Classe Java
  4. Copie e cole o código-fonte de exemplo abaixo
  5. Digite 'https://localhost:9515' no seu navegador para abrir o SMS Gateway
  6. Selecione a conexão HTTP Server e abra seu formulário HTML
  7. Envie algumas mensagens de teste
  8. Execute o aplicativo Java para receber as mensagens

Vídeo 1 - Como receber SMS em Java (Tutorial em vídeo)

O código de exemplo em Java abaixo, que pode receber mensagens do SMS Gateway, é livre para uso, você pode modificá-lo ou usá-lo em seu projeto. Se você quiser apenas testar a solução, precisa seguir as instruções passo a passo abaixo ou também pode assistir ao vídeo acima para aprender como criar o aplicativo Java de exemplo que pode receber mensagens do 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 "?";
      }
}

Passo 1 - Abrir o Apache NetBeans IDE

Para poder criar uma aplicação Java, você precisa de um aplicativo capaz de fazer isso. Um desses aplicativos é o Apache NetBeans IDE, que pode ser baixado na seção de Pré-requisitos acima. Se você já tem esse IDE, basta abri-lo a partir da sua área de trabalho, como você pode ver na Figura 1.

abrir netbeans
Figura 1 - Abrir o Apache NetBeans

Passo 2 - Criar uma nova aplicação Java

Depois de abrir o Apache NetBeans IDE, a primeira coisa que você precisa fazer é criar uma aplicação Java. Para isso, selecione a opção 'Novo projeto...' na barra de ferramentas. Ao fazer isso, uma janela será exibida, contendo todos os projetos disponíveis que podem ser criados no Apache NetBeans. Aqui, selecione a opção de aplicação Java, como na Figura 2, e, por fim, clique em 'Avançar'.

criar novo projeto
Figura 2 - Criar novo projeto de aplicação Java

Passo 3 - Configurar a aplicação Java

Antes de criar a aplicação Java, você precisa fazer algumas configurações. Neste menu, você precisa especificar um nome para o projeto, também pode selecionar um local para o projeto. O nome do pacote também pode ser especificado aqui. Se você terminou todas as configurações, basta clicar em 'Concluir', como na Figura 3.

configurar projeto
Figura 3 - Configurar nome do projeto e do pacote

Passo 4 - Criar uma classe Java

Depois de criar a aplicação Java, você precisa criar uma classe Java, pois neste momento ela ainda não contém nenhuma classe. Para isso, clique com o botão direito no pacote, selecione 'Novo' e, como mostra a Figura 4, clique em 'Classe Java...'. Em seguida, você precisa especificar um nome para a classe Java e, quando terminar, clique em 'Criar'.

criar nova classe java
Figura 4 - Criar nova classe Java

Passo 5 - Substituir o código Java desta página

Neste ponto, você tem a aplicação Java que precisa, mas ela não contém o código correto. Para corrigir isso, você precisa substituir o código original pelo código de exemplo desta página. Então, vá até o código de exemplo e copie-o para a área de transferência usando o atalho de teclado Ctrl+C. Em seguida, vá para a classe Java criada e, primeiro, exclua o código que está lá. Depois, pressione Ctrl+V para colar o código de exemplo na classe Java, como você pode ver na Figura 5.

substituir código java
Figura 5 - Substituir o código Java do site

Passo 6 - Enviar algumas mensagens de teste

Antes de executar a aplicação Java de exemplo, você precisa ter algumas mensagens recebidas que podem ser coletadas pela aplicação. O SMS Gateway oferece a oportunidade de simular mensagens recebidas para que você possa testar sua solução. Para isso, basta abrir o SMS Gateway e selecionar a conexão HTTP Server. Se você não tiver uma conexão HTTP Server, consulte como criar uma conexão HTTP Server. Aqui, abra o formulário HTML desta conexão e, como na Figura 6, envie algumas mensagens de teste.

simular mensagens recebidas
Figura 6 - Simular algumas mensagens SMS recebidas

Passo 7 - Executar a aplicação Java

O último passo deste guia é executar a aplicação Java. Esta é uma operação simples; tudo o que você precisa fazer é clicar no botão 'Executar' no Apache NetBeans, como na Figura 7. Esta ação executa o código Java de exemplo, que imprime a requisição HTTP enviada para o SMS Gateway e, em seguida, também imprime a resposta do SMS Gateway, que contém todas as mensagens recebidas.

executar código java
Figura 7 - Executar o código Java no NetBeans para receber SMS

Para resumir

Este guia que você acabou de ler fornece informações sobre como receber mensagens SMS do SMS Gateway usando uma aplicação Java. Usando nossa API de SMS Java, você pode aproveitar os recursos da linguagem Java e usá-la para controlar o SMS Gateway. A API Java combinada com o Ozeki SMS Gateway criará um poderoso sistema de envio de SMS capaz de enviar até 1000 SMS por segundo.

Se você quiser conhecer mais insights úteis sobre as vantagens de outras soluções de API semelhantes, visite nossa página sobre Python para gerenciar tráfego de SMS.

Se você precisa encaminhar e-mail para SMS e ainda não o fez, Baixe o Ozeki SMS Gateway agora e crie essa configuração!