
Partager:
Mark était nominalement responsable des bibliothèques clients de Nexmo (bien qu'il n'écrive que les bibliothèques Python et Java). Développeur Java à l'origine, il développe Python depuis 18 ans et s'essaie de plus en plus à Go et Rust. Il aime repousser les limites des langages de programmation et enseigner ces techniques à d'autres programmeurs. Il porte un chapeau de viking, mais n'est pas un viking, et il est Judy2k sur Twitter pour des raisons dont il ne parlera pas.
Comment recevoir des SMS avec Java
Dans le dernier tutorielnous avons mis en place une application web Java qui peut envoyer des messages SMS à l'aide de l'API SMS de Vonage. Ce tutoriel s'appuie sur cette application, en ajoutant un point de terminaison qui sera appelé par Vonage lorsque quelqu'un enverra un message SMS à votre numéro Vonage.
Comment cela fonctionne-t-il ?
Lorsque Vonage reçoit un message SMS sur un numéro Vonage, il recherche le point de terminaison webhook (URL) associé à ce numéro et appelle cette URL avec un gros bloc de JSON décrivant le message qui vient d'être reçu.
Receiving an SMS message diagram
Ce que nous allons faire dans ce tutoriel est d'écrire un Servlet qui peut gérer le message SMS entrant. Le problème est que si nous développons sur notre machine locale, il est probable que nous soyons isolés de l'Internet par un pare-feu, de sorte que les serveurs de Vonage ne peuvent pas nous atteindre ! Une façon de contourner ce problème serait de déployer continuellement sur un serveur web public, mais c'est une véritable plaie. Heureusement, il existe un excellent outil appelé Ngrok qui peut nous aider à résoudre ce problème.
Développer des Webhooks avec Ngrok
Lorsque vous lancez Ngrok, il crée un nouveau sous-domaine ngrok.io, puis il achemine toutes les requêtes vers ce nom de domaine vers un service web fonctionnant sur votre machine. Pratique !
Il faut donc installer Ngrok (j'attends ici). Une fois que c'est fait, lancez ngrok dans votre terminal :
Jetty utilise le port 8080 par défaut, nous allons donc l'utiliser pour nous faciliter la vie. Vous pouvez voir sur la capture d'écran que Ngrok m'a alloué l'URL aléatoire http://8b771613.ngrok.ioqui est maintenant tunnelisée vers localhost:8080, où j'exécuterai Jetty dans un instant.
Ngrok output
Laissez Ngrok fonctionner dans une fenêtre de terminal (il continuera à fonctionner jusqu'à ce que vous l'arrêtiez), et nous voulons laisser l'URL et le tunnel fonctionner pendant un certain temps. Ce que nous aimerions faire maintenant, c'est configurer Vonage pour qu'il pointe vers notre URL Ngrok, mais il ne le fera pas à moins que l'URL ne renvoie des messages 200. Nous devons donc commencer par écrire un petit servlet stub.
Une servlet pour recevoir le message SMS
Dans `src/main/java/getstarted/InboundSMSServlet.java', collez ce qui suit :
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);
}
}
}Tout ce que fait le Servlet est d'imprimer les paramètres reçus sur la console - utile pour le débogage ! Configurez maintenant votre web.xml avec les éléments suivants :
<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>Notez que j'ai reconfiguré le mappage send-sms pour que le motif de l'url soit maintenant /send au lieu de l'affectation de caractères génériques qu'il y avait auparavant. Maintenant, si vous exécutez gradle appRunJetty devrait démarrer et vous êtes prêt à configurer votre crochet web Vonage.
Configurer Vonage pour appeler votre Webhook
Connectez-vous à votre Account Vonage et allez à Vos Numbers. Trouvez le numéro que vous voulez configurer, cliquez sur " Modifier " et entrez l'URL de ngrok avec /YOUR_PROJECT_NAME/inbound à la fin.
Maintenant, si vous envoyez un message texte au numéro, vous devriez voir quelques lignes s'imprimer sur votre console :
Received: GET
messageId: 0B0000004A2D09D9
to: 447520615146
text: Hello Nexmo!
msisdn: 447720123123
type: text
keyword: HELLO
message-timestamp: 2017-04-27 14:41:32 Et c'est tout !
Vous pouvez désormais recevoir des SMS ! Pour l'instant, tout ce que nous faisons, c'est de les imprimer dans la console. Il est souvent utile de les stocker dans une base de données, mais vous pouvez maintenant en faire ce que vous voulez : construire un bot Slack pour les poster sur votre canal Slack ; les faire passer par Google Translate et ensuite transférer les messages sur votre téléphone ; les transférer sur Twitter ? Les possibilités sont infinies !
Liens vers la documentation
Les liens de documentation suivants vous seront utiles pour travailler avec les messages SMS :
Partager:
Mark était nominalement responsable des bibliothèques clients de Nexmo (bien qu'il n'écrive que les bibliothèques Python et Java). Développeur Java à l'origine, il développe Python depuis 18 ans et s'essaie de plus en plus à Go et Rust. Il aime repousser les limites des langages de programmation et enseigner ces techniques à d'autres programmeurs. Il porte un chapeau de viking, mais n'est pas un viking, et il est Judy2k sur Twitter pour des raisons dont il ne parlera pas.