https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-send-receive-sms-messages-with-node-js-azure-functions-dr/E_SMS-Messages_Azure_1200x600-1.jpg

Comment envoyer et recevoir des SMS avec Node.js et Azure Functions

Publié le November 11, 2020

Temps de lecture : 5 minutes

Ce billet de blog fait partie des Histoires de nuages appliqués Applied Cloud Stories.

Les Webhooks sont de plus en plus populaires dans le monde des API, et Vonage les utilise pour un grand nombre de ses API. Je finis donc par en écrire un certain nombre. Comme je suis un fan de Node.js, j'avais l'habitude de faire la plupart d'entre eux avec Express. C'était compliqué d'installer un serveur web et de le déployer quelque part, alors j'ai commencé à chercher des alternatives. Serverless est apparu dans mes recherches comme l'une des bonnes alternatives, alors j'ai pensé utiliser Azure Functions et Node.js pour envoyer et recevoir des SMS.

Pour les SMS, je vais utiliser l'API SMS de Vonage. SMS APIde Vonage, qui vous permet d'envoyer et de recevoir un grand nombre de SMS partout dans le monde. Une fois que vous avez obtenu votre numéro de téléphone virtuel, vous pouvez utiliser l'API pour gérer les messages sortants ("envoi") et les messages entrants ("réception").

Dans cet article, vous apprendrez à envoyer et à recevoir des SMS avec Node.js et une application Azure Functions App.

Le code de ce tutoriel se trouve sur GitHub.

Conditions préalables

Avant de commencer, assurez-vous d'avoir

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

Mise en place d'une application Azure Functions

Il y a plusieurs façons de mettre en place une application Azure Functions. J'ai choisi de le faire à partir du portail Azure.

Create Azure Functions AppCreate Azure Functions App

Je l'ai nommé send-receive-smsj'ai créé une nouvelle ressource et j'ai choisi Node.js comme moteur d'exécution. J'ai choisi les valeurs par défaut en termes de déploiement, de région et de plans.

Une fois le déploiement terminé (en général environ 2 minutes), vous pouvez aller dans la ressource nouvellement créée et créer votre première fonction. Un assistant vous aide tout au long du processus, et j'ai sélectionné VS Code comme environnement de développement et "Direct publish" comme méthode de déploiement. Cela m'a donné une série d'instructions sur la façon de configurer VS Code pour Azure.

Create Azure Function quickstartCreate Azure Function quickstart

Une fois la configuration terminée, j'ai créé ma première fonction, un HTTP Trigger. Je l'ai appelée inboundmais vous pouvez utiliser le nom que vous voulez. Pour le mécanisme de sécurité, vous avez quelques options qui contrôlent le niveau d'autorisation de la fonction : "Function" nécessite une clé API basée sur la fonction, "Admin" nécessite votre clé API principale d'Azure, et "Anonymous" ne nécessite pas de clé API. J'ai choisi "Anonymous" comme mécanisme de sécurité. Cela a créé un nouveau fichier avec un modèle par défaut.

Create Azure Function templateCreate Azure Function template

Réception d'un SMS

Créer une fonction Webhook

J'ai remplacé le contenu de la fonction pour qu'il corresponde à celui de l'application. Recevoir un extrait de code SMS que nous utilisons sur notre portail de développement. Il combine le corps et les paramètres de requête d'une demande et les enregistre dans la console. Il s'agit d'un simple Webhook que vous pouvez utiliser pour recevoir des SMS sur la plateforme Vonage.

module.exports = async function(context, req) {
    const params = Object.assign(req.query, req.body);

    if (params.text) {
      context.log("SMS received", params);
    }

    context.res = {};
  };

Fonction de déploiement

Comme Vonage doit pouvoir accéder à une URL publique, j'ai déployé ma fonction avec Azure. Vous pouvez le faire dans VS Code. Une fois le déploiement terminé, vous obtiendrez une URL en direct pour votre fonction, par exemple, la mienne est https://send-receive-sms.azurewebsites.net/api/inbound.

Deploy Azure FunctionDeploy Azure Function

Définir l'URL entrant

Pour recevoir un SMS sur la plateforme Vonage, vous devez posséder un numéro Vonage. Si vous n'en avez pas, vous pouvez en acheter un dans le tableau de bord Vonage:

Buy Vonage Phone NumberBuy Vonage Phone Number

Lorsqu'un numéro de téléphone Vonage reçoit un SMS, Vonage transmet ce message à un Webhook que vous avez spécifié dans le tableau de bord de Numbers. Nous utiliserons notre Azure Function comme Webhook de réception. Pour configurer l'URL du crochet Web, cliquez sur la petite icône en forme d'engrenage située à côté de vos numéros de téléphone dans le tableau de bord Nexmo et remplissez le champ "Inbound Webhook URL" avec l'URL que vous avez obtenu après avoir déployé la fonction Azure (la mienne était https://send-receive-sms.azurewebsites.net/api/inbound).

Set Inbound Webhook URL on the Vonage DashboardSet Inbound Webhook URL on the Vonage Dashboard

Vous pouvez tester son fonctionnement en envoyant un SMS depuis votre téléphone vers votre numéro de téléphone Vonage, et il apparaîtra dans les journaux de la fonction Azure.

Envoi d'un message SMS

J'ai pensé qu'il serait intéressant que la fonction fasse un peu plus que d'enregistrer les SMS, donc je vais faire en sorte qu'elle réponde également aux SMS, en changeant le message de texte en emojis.

Je vais utiliser le SDK Node.js de Vonage pour envoyer le message SMS, vous devrez donc l'installer dans la fonction Azure. Le dossier de premier niveau de votre fonction contient un fichier package.json qui est installé à chaque déploiement. Donc, si vous naviguez vers ce dossier dans le Terminal et que vous utilisez npm install nexmocela vous donnera accès au SDK Vonage dans la fonction Azure.

J'ai également mis à jour la fonction pour initialiser le SDK de Vonage, convertir le message SMS en emojis, puis l'envoyer sous forme de SMS à l'expéditeur d'origine.

module.exports = async function(context, req) {
  const Nexmo = require("nexmo");

  const nexmo = new Nexmo({
    apiKey: process.env["NEXMO_API_KEY"],
    apiSecret: process.env["NEXMO_API_SECRET"]
  });

  const params = Object.assign(req.query, req.body);

  if (params.text) {
    var response = [];

    // transform inbound SMS into emojis
    for (let i = 0; i < params.text.length; i++) {
      const emoji = String.fromCodePoint(127715 + params.text.charCodeAt(i));
      response.push(emoji);
    }

    // send SMS back with emojis
    nexmo.message.sendSms(
      params.to,
      params.msisdn,
      response.join(""),
      {
        type: "unicode"
      },
      (err, responseData) => {
        if (err) {
          context.log(err);
        } else {
          if (responseData.messages[0]["status"] === "0") {
            context.log("Message sent successfully.");
          } else {
            context.log(
              `Message failed with error: ${responseData.messages[0]["error-text"]}`
            );
          }
        }
      }
    );
  }

  context.res = {};
};

Vous remarquerez que mon code initialise le SDK de Vonage avec process.env["NEXMO_API_KEY"] et process.env["NEXMO_API_SECRET"]. L'Azure Function App dispose des paramètres de l'Application et j'ai ajouté mes codes NEXMO_API_KEY et NEXMO_API_SECRET qui sont mises à jour à chaque déploiement à partir de ma machine locale. Vous pouvez faire de même ou remplacer ces valeurs par votre clé d'API et votre secret. Vous pouvez les trouver sur la page "Getting Started" dans le tableau de bord Vonage.

Add Application Settings in AzureAdd Application Settings in Azure

La méthode SDK d'envoi d'un SMS, nexmo.message.sendSms()prend comme paramètres l'identifiant de l'expéditeur, le numéro de téléphone du destinataire, le message texte et les options. J'ai ajouté {type: "unicode"} dans les options car j'envoie des emojis. Elle accepte également un rappel qui est appelé lorsque la requête API est terminée.

Les données de réponse contiennent un tableau pour tous les messages qui ont été envoyés, avec des informations sur leur état. Dans la plupart des cas, il n'y a qu'un seul élément dans ce tableau, mais si le SMS compte plus de 160 caractères, il est divisé en plusieurs parties, et le tableau contient alors des données sur chaque partie envoyée. Si le statut du message est 0, le SMS a été envoyé avec succès, sinon, les données d'erreur pour le message se trouvent dans la propriété error-text du message.

Parce que mon texte contient un emoji, je définis le type unicode dans l'objet options, sinon, cet emoji sera envoyé sur le réseau en tant que ?.

Essayez-le

Envoyez maintenant un SMS de votre téléphone à votre numéro Vonage. Vous devriez recevoir en retour un SMS convertissant vos caractères de texte en emojis. Si vous envoyez Hello World! dans le SMS, vous devriez recevoir 🌷🍈🍛🍗🌃🍐🍈🌃🍗🍈🍑🍇🍈🍕🌑.

Received SMS message with VonageReceived SMS message with Vonage

J'espère que cela a fonctionné et que vous venez d'apprendre à envoyer et à recevoir des SMS avec les API de Vonage, Azure Functions et Node.js.

Partager:

https://a.storyblok.com/f/270183/384x384/dabe7c5397/laka.png
Alex LakatosAnciens de Vonage

Alex Lakatos est un défenseur des développeurs JavaScript pour Nexmo. Pendant son temps libre, il est bénévole chez Mozilla en tant que Tech Speaker et Reps Mentor. Développeur JavaScript travaillant sur le web ouvert, il en repousse les limites tous les jours. Lorsqu'il ne programme pas à Londres, il aime parcourir le monde, il est donc probable que vous le croisiez dans un salon d'aéroport.