
Compartilhar:
Mark era o responsável nominal pelas bibliotecas de clientes da Nexmo (embora ele só desenvolva as bibliotecas em Python e Java). Ele começou como desenvolvedor Java, já trabalha com Python há 18 anos e vem se aventurando cada vez mais com Go e Rust. Ele gosta de levar as linguagens de programação ao limite e, depois, ensinar essas técnicas a outros programadores. Ele tem um chapéu de viking, mas não é um viking, e no Twitter usa o nome Judy2k por motivos que prefere não revelar.
Como receber mensagens SMS com Java
No último tutorial, configuramos um aplicativo web em Java capaz de enviar mensagens SMS usando a SMS API da Vonage. Este tutorial dá continuidade a isso, adicionando um endpoint que será chamado pela Vonage quando alguém enviar uma mensagem SMS para o seu número da Vonage.
Como isso funciona?
Quando a Vonage recebe uma mensagem SMS em um número da Vonage, ela localiza o endpoint do webhook (URL) associado a esse número e acessa essa URL com um grande bloco de JSON que descreve a mensagem que acabou de ser recebida.
Receiving an SMS message diagram
O que vamos fazer neste tutorial é escrever um Servlet capaz de processar as mensagens SMS recebidas. O problema é que, enquanto estivermos desenvolvendo em nossa máquina local, provavelmente estaremos isolados da internet por um firewall, de modo que os servidores da Vonage não conseguem nos acessar! Uma maneira de contornar isso seria fazer implantações contínuas em um servidor web público, mas isso é um verdadeiro incômodo. Felizmente, existe uma excelente ferramenta chamada Ngrok que pode nos ajudar com esse problema.
Desenvolvendo Webhooks com o Ngrok
Quando você executa o Ngrok, ele cria um novo subdomínio do ngrok.io e, em seguida, redireciona todas as solicitações feitas a esse domínio para um serviço web em execução na sua máquina. Muito prático!
Então, vá em frente instale o Ngrok (eu espero aqui). Depois de fazer isso, execute o ngrok no seu terminal:
O Jetty usa a 8080 porta por padrão, então vamos usá-la para facilitar as coisas. Você pode ver na captura de tela que o Ngrok me atribuiu a URL aleatória http://8b771613.ngrok.io, que agora está redirecionando para localhost:8080, onde vou executar o Jetty daqui a pouco.
Ngrok output
Deixe o Ngrok em execução em uma janela de terminal (ele continuará funcionando normalmente até que você o desligue), e queremos manter a URL e o túnel ativos por um tempo. O que gostaríamos de fazer agora é configurar o Vonage para apontar para a nossa URL do Ngrok, mas isso só será possível se a URL estiver retornando respostas 200. Portanto, precisamos primeiro escrever um pequeno servlet de teste.
Um Servlet para receber a mensagem SMS
No arquivo `src/main/java/getstarted/InboundSMSServlet.java`, cole o seguinte:
package getstarted;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Collections;
public class InboundSMSServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,
java.io.IOException {
System.out.println("Received: " + req.getMethod());
for (String param : Collections.list(req.getParameterNames())) {
String value = req.getParameter(param);
System.out.println(param + ": " + value);
}
}
}Tudo o que o Servlet faz é exibir os parâmetros recebidos no console — o que é útil para depuração! Agora configure seu web.xml da seguinte forma:
<servlet>
<servlet-name>inbound-sms</servlet-name>
<servlet-class>getstarted.InboundSMSServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>send-sms</servlet-name>
<url-pattern>/send</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>inbound-sms</servlet-name>
<url-pattern>/inbound</url-pattern>
</servlet-mapping>Observe que reconfigurei o send-sms mapeamento para que o padrão de URL agora seja /send em vez do mapeamento com curinga que havia antes. Agora, se você executar gradle appRun, o Jetty deve iniciar e você estará pronto para configurar seu webhook da Vonage.
Configure o Vonage para ligar para o seu webhook
Faça login no seu Account da Vonage e acesse Seus Numbers. Encontre o número que deseja configurar, clique em “Editar” e, em seguida, insira a URL do ngrok com /YOUR_PROJECT_NAME/inbound no final.
Agora, se você enviar uma mensagem de texto para esse número, deverá ver algumas linhas exibidas no seu console:
Received: GET
messageId: 0B0000004A2D09D9
to: 447520615146
text: Hello Nexmo!
msisdn: 447720123123
type: text
keyword: HELLO
message-timestamp: 2017-04-27 14:41:32 E é isso aí!
Então, agora você pode receber mensagens SMS! No momento, tudo o que estamos fazendo é exibi-las no console. Muitas vezes, é útil armazená-las em algum tipo de banco de dados, mas agora você pode fazer o que quiser com elas: criar um bot no Slack para publicá-las no seu canal; passar pelo Google Tradutor e depois encaminhar as mensagens para o seu celular; encaminhá-las para o Twitter? As possibilidades são infinitas!
Links para a documentação
Os links para a documentação a seguir serão úteis para trabalhar com mensagens SMS:
Compartilhar:
Mark era o responsável nominal pelas bibliotecas de clientes da Nexmo (embora ele só desenvolva as bibliotecas em Python e Java). Ele começou como desenvolvedor Java, já trabalha com Python há 18 anos e vem se aventurando cada vez mais com Go e Rust. Ele gosta de levar as linguagens de programação ao limite e, depois, ensinar essas técnicas a outros programadores. Ele tem um chapéu de viking, mas não é um viking, e no Twitter usa o nome Judy2k por motivos que prefere não revelar.