Comment recevoir des SMS dans Slack (en utilisant Twilio Functions)

Envoi d'un SMS à Slack via Twilio Functions

L’une des grandes caractéristiques de Slack est qu’il s’intègre à peu près à tous les produits SaaS existants. J'adore associer des notifications à Slack pour pratiquement tout, mais une intégration particulièrement absente que j'ai constatée est la réception de SMS. Il existe quelques exemples d’envoi de SMS via des commandes slash, mais je n’en ai trouvé aucun qui se passe dans l’autre sens.

Pourquoi?

Pourquoi voudriez-vous recevoir des SMS en Slack? Je l’ai voulu pour plusieurs raisons:

  • Lorsque vous utilisez une application qui utilise SMS comme l'un de ses canaux de notification, il peut être utile de connecter quelques numéros afin que votre équipe d'assurance qualité puisse valider que les SMS sont correctement envoyés par l'application sans utiliser de téléphones physiques.
  • Malheureusement, il existe quelques fournisseurs SaaS qui proposent 2FA, mais uniquement par SMS et ils ne permettent pas aux utilisateurs d’avoir des connexions différentes pour accéder au même compte de facturation. Les équipes doivent non seulement partager un mot de passe, mais sont également obligées de désactiver 2FA ou de partager un appareil. En configurant un pont SMS-Slack, vous pouvez l’utiliser comme numéro 2FA. (Il y a beaucoup de problèmes de sécurité ici, mais cela peut parfois être une solution utile.)
  • Un produit SaaS ou un système existant auquel vous êtes abonné n’est pas encore intégré à Slack, mais envoie des notifications par SMS et vous souhaitez les recevoir dans Slack.

Entrer des fonctions sans serveur

Ce problème semblait être une application parfaite pour les fonctions sans serveur - configurer une fonction sans serveur pour recevoir un SMS via un Webhook, puis formater et transférer le message dans Slack.

Je l’ai maintenant fait avec Twilio et Plivo en tant que services SMS et AWS Lambda et Google Functions pour les fonctions sans serveur. J'avais prévu d'écrire d'abord comment utiliser Twilio avec Google Functions, puis j'ai découvert Twilio Functions, annoncé plus tôt cette année. En fin de compte, il s’agit d’une solution parfaite à ce problème car elle évite les sauts de réseau et évite la nécessité d’écrire du code pour vérifier les requêtes Webhook depuis lors.

Mise en place du pont SMS

Tout d’abord, vous aurez besoin de:

  1. Une équipe Slack et un canal sur lequel vous souhaitez recevoir des SMS
  2. Un compte Twilio et un numéro où vous recevrez le SMS

Les deux ont des plans d'essai gratuits (mais ni l'un ni l'autre ne semble avoir de programme de parrainage, je n'ai donc aucun lien particulier pour vous…).

Configuration de mou

Dans Slack, configurez une «Intégration personnalisée» (un Webhook entrant). Sélectionnez le canal sur lequel vous souhaitez recevoir le SMS (ou envoyez-le directement à votre utilisateur lors du test et modifiez-le ultérieurement). Assurez-vous de copier le lien vers le Webhook.

Configuration Twilio

  1. Accédez à la page de configuration des fonctions Twilio, ajoutez une variable d’environnement SLACK_WEBHOOK_PATH et collez le lien de votre compte Web entrant ci-dessus, à l’exception de la suppression de tout ce qui précède / services dans l’URL. (En d'autres termes, il suffit de coller le chemin.)
  2. Créez une nouvelle fonction Twilio ici. Il suffit de choisir le modèle «vierge».
  3. Copiez ce qui suit dans la fonction:

Enregistrez cette fonction (j’ai nommé le mien «Relay SMS to Slack»), puis passez à la configuration de l’un de vos numéros entrants. Dans la section «Messagerie», configurez Twilio pour appeler votre fonction lorsque vous recevez un SMS entrant, comme suit:

Configuration des SMS entrants pour accéder à votre fonction

Vous devriez maintenant pouvoir envoyer un SMS et le recevoir dans Slack! Son style est le suivant:

Comment la fonction ci-dessus formate les messages SMS envoyés à Slack

J'ai personnalisé l'avatar pour le Webhook et défini le nom sur SMS, mais vous pouvez configurer le vôtre comme bon vous semble!

Réflexions sur l'intégration

Cette application convient parfaitement à Twilio Functions. J'ai donc été ravie de les découvrir au cours de ce processus. Certains des avantages de Twilio Functions que j'ai trouvés sont:

  • Ils gèrent automatiquement votre demande d’authentification (si vous le souhaitez).
  • Prix ​​assez raisonnable.
  • Mise à jour et déploiement très rapides.
  • Ils ont fourni un moyen de gérer très bien les secrets de vos fonctions via leur configuration - aucun secret dans les scripts! (J'ai été surpris que cela ne soit pas aussi facile dans Google Cloud Functions, par exemple).

Cependant, ils avaient aussi des inconvénients:

  • On dirait que la seule façon de créer une fonction est via leur éditeur. Bien sûr, vous pouvez copier et coller, mais cela signifie que vous ne pouvez avoir qu'un seul “fichier” et que vous ne pouvez compter que sur les bibliothèques intégrées Node.JS (et bien sûr sur Twilio). J'ai donc dû utiliser le module https intégré ci-dessus au lieu de quelque chose de plus sophistiqué comme request ou fetch et je me méfierais de lui envoyer des fonctions plus importantes.
  • Cela signifie également que la gestion du code, la gestion des versions et le déploiement ne sont pas vraiment automatisables pour le moment.
  • Encore un autre fournisseur auquel vous devez envoyer le code.
  • Seul Node.JS est supporté pour le moment (bien que ce soit mon environnement préféré, alors…)

Tout bien considéré, toutefois, j'ai préféré utiliser les fonctions Twilio pour ce cas d'utilisation! Si quelqu'un est intéressé (ou peut-être même si vous ne l'êtes pas), je prévois également de publier comment j'ai accompli la même chose avec Google Cloud Functions. La gestion du déploiement et la gestion des secrets deviennent des points de comparaison fascinants.

Si vous avez aimé cet article et pensez qu'il pourrait aider d'autres personnes, appuyez sur le bouton afin que les autres utilisateurs puissent le trouver plus facilement. J'écris de temps en temps sur des sujets comme celui-ci, alors suivez-moi aussi si vous souhaitez en lire plus.