https://d226lax1qjow5r.cloudfront.net/blog/blogposts/forward-nexmo-sms-to-slack-using-express-and-node-dr/E_SMS-to-Slack_1200x600.jpg

Transférer les SMS Nexmo vers Slack en utilisant Express et Node

Publié le May 18, 2021

Temps de lecture : 9 minutes

Introduction

Les numéros virtuels de Nexmo vous permettent d'envoyer ou de recevoir des messages texte et des appels téléphoniques, ce qui peut constituer un moyen de communiquer efficacement avec vos utilisateurs ou vos clients.

Dans ce tutoriel utilisant Node et Express, nous allons voir comment nous pouvons notifier automatiquement un canal Slack à chaque fois qu'un numéro virtuel de Nexmo reçoit un message texte. La notification contiendra le contenu du message reçu. Cela peut être très utile car cela signifie que nous serons toujours notifiés lorsque nous recevons un message texte, et le canal Slack peut fonctionner comme un endroit central pour le suivi des messages textes entrants.

Conditions préalables

  • Node.js

  • ngrok qui vous permet d'exposer votre serveur web local à l'internet. Pour en savoir plus sur la façon de configurer votre environnement local avec ngrok, vous pouvez consulter la documentation ici.

  • Slack

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.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

Installer les dépendances de Node

À la racine du répertoire de votre projet, exécutez la commande suivante pour créer un fichier package.json pour créer un fichier

npm init

Vous serez invité à répondre à une série de questions ; la valeur par défaut convient parfaitement pour ce tutoriel. Pour installer toutes les dépendances de notre projet, exécutez la commande suivante :

npm install express body-parser slack-notify
  • express est un framework d'application web Node.

  • analyseur de corps est un intergiciel express pour l'analyse des corps de requête entrants.

  • slack-notify est un wrapper Node autour de l'API Slack Webhook API qui permet d'envoyer facilement des notifications à Slack depuis votre application.

Ensuite, exécutez la commande suivante pour créer un fichier index.js à la racine du répertoire de votre projet :

touch index.js

Ajoutez le code suivant au fichier que nous venons de créer :

const express = require('express');
const app = express();
const bodyParser = require('body-parser')
const port = 3000;

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({extended: true}));

app.listen(port, () => {
    console.log(`Listening on ${port}`);
})

Cela crée une application express avec un serveur web qui écoute sur le port 3000. Nous avons également demandé à l'application d'utiliser l'analyseur JSON du paquetage body-parser que nous avons installé plus tôt et nous avons défini l'option urlencoded à true. Ajoutons une commande pour lancer ce serveur.

Dans le fichier package.json ajoutez le code suivant à la section scripts le code suivant :

"scripts": {
    "start": "node index.js"
  },

Nous pouvons maintenant lancer l'application en utilisant la commande suivante

npm run start

Créer des Webhooks entrants sur Slack

Pour pouvoir envoyer des messages à Slack, nous devons créer une URL webhook entrante. Pour commencer, rendez-vous sur le site de Slack et créez une application si vous n'en avez pas déjà une.

Creating a Slack App

Choisissez un nom pour votre application et associez-la à l'espace de travail auquel vous souhaitez envoyer des notifications. Une fois l'application créée, un écran similaire à celui ci-dessous s'affiche :

Build an App for Slack

Sélectionnez l'onglet des webhooks entrants et cliquez sur le bouton Activate incoming webhooks pour l'activer. Cliquez ensuite sur le bouton Add New Webhook to Workspace pour l'activer. Sélectionnez le canal sur lequel vous souhaitez envoyer des notifications, puis cliquez sur allow pour autoriser l'application. Vous serez redirigé vers la page des paramètres avec une nouvelle URL Webhook créée pour vous.

Defining the Webhook URL

Notez l'URL du Webhook car nous en aurons besoin prochainement.

Créer un Webhook pour les messages entrants

Nous devons définir un route dans notre application où Nexmo fera une demande de POST à chaque fois que notre numéro virtuel recevra un message texte. Cette route sera responsable du déclenchement des notifications Slack. Avant de créer la routenous devons créer require le paquet slack-notify que nous avons installé plus tôt.

Ajoutez le code suivant au fichier index.js sous la section require section :

const webhookUrl = 'https://hooks.slack.com/services/xxxx/xxx';
const slack = require('slack-notify')(webhookUrl)

Remplacez webhookUrl par l'URL du Webhook que Slack a généré pour vous dans la section précédente.

Console output showing the webhook response

Lorsque nous recevons un message entrant, Nexmo envoie une charge utile qui ressemble à la capture d'écran ci-dessus. La clé text contient le contenu du message reçu.

Ajoutons maintenant l'itinéraire. Editez le fichier index.js avec le code suivant :

app.post("/webhooks/inbound-message", (req, res) => {
    const { text } = req.body
    slack.alert({
        text: 'New SMS message',
        fields: {
            'Message' : text
        }
    });
    res.status(200).end();
})

La clé text du corps de la requête contiendra le contenu du message reçu. En utilisant la déstructuration, nous attribuons la clé text à une constante text et déclenchons à notre tour l'envoi de la notification à Slack à l'aide de la méthode alert() à l'aide de la méthode Vous pouvez trouver les différentes méthodes slack-notify supportées ici.

La structure finale du fichier index.js devrait ressembler à ceci :

const express = require('express');
const app = express();
const bodyParser = require('body-parser')
const port = 3000;
const webhookUrl = 'https://hooks.slack.com/services/xxxx/xxx';
const slack = require('slack-notify')(webhookUrl)

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({extended: true}));

app.post("/webhooks/inbound-message", (req, res) => {
    const { text } = req.body
    slack.alert({
        text: 'New SMS message',
        fields: {
            'Message' : text
        }
    });
    res.status(200).end();
})

app.listen(port, () => {
    console.log(`Listening on ${port}`);
})

Mise en place de ngrok

Pour rendre notre application publiquement accessible sur le web, nous devons configurer ngrok. Vous pouvez apprendre à configurer ngrok ici. Comme notre application fonctionne actuellement sur le port 3000, tout ce que nous avons à faire est d'exécuter la commande suivante :

ngrok http 3000

Vous devriez voir apparaître un écran similaire à celui ci-dessous :

Screenshot showing example of Ngrok running

Copiez la première URL de transfert, car nous l'utiliserons bientôt dans notre Account Nexmo.

Ajouter l'URL entrante du Webhook à Nexmo

Sous la section Numbers de votre tableau de bord Numbers, cliquez sur l'icône en forme d'engrenage du numéro pour lequel vous souhaitez recevoir des notifications Slack. Si vous n'avez pas de numéros virtuels, vous devrez en acheter un.

Screenshot showing the Nexmo dashboard with a list of your numbers

Une fenêtre modale similaire à celle ci-dessous s'affiche :

Screenshot showing how to configure your Webhook URLS

Configurez l'URL du Webhook entrant avec l'URL ngrok que nous avons notée précédemment. (http://1e389185.ngrok.io/webhooks/inbound-message)

Essais

Pour tester que notre application fonctionne comme prévu, redémarrez votre serveur node et envoyez un message de votre téléphone à votre numéro Nexmo.

Screenshot showing an example text message received

Vérifiez votre canal Slack, et vous devriez voir la notification.

Screenshot showing Slack bot receiving the SMS

Conclusion

Dans ce tutoriel, nous avons vu comment recevoir des notifications Slack en utilisant Nexmo. Ce tutoriel peut servir d'excellent guide de départ pour construire des applications avec Nexmo et Slack. Vous pouvez trouver le repo de ce tutoriel ici.

Partager:

https://a.storyblok.com/f/270183/250x250/d288ec8a73/dotun.png
Dotun Jolaoso

Software Developer who loves building awesome tools and products. I currently work with Laravel, PHP and Vue.