
Partager:
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.
Comment envoyer et recevoir des SMS avec Node.js et Azure Functions
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
Un compte Un Account Azure
Node.js installé sur votre machine
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 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 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 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 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 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 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 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 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:
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.
