https://s3.amazonaws.com/a.storyblok.com/f/270183/61175/afaa4f909d/sms-cloud-functions-firebase-gen2.png

Envoyer des SMS avec les fonctions cloud pour Firebase Gen 2

Publié le March 19, 2024

Temps de lecture : 11 minutes

Vue d'ensemble

Nous avons un tutoriel sur Comment envoyer et recevoir des SMS avec Firebase Functions; cet article de blog aborde le même cas d'utilisation. Cependant, nous allons créer et déployer une fonction HTTP de deuxième génération en utilisant la console Google Cloud et l'API Vonage Messages API de Vonage au lieu de l SMS API.

Mise en place

Vous aurez besoin de quelques éléments pour commencer :

Configuration de Firebase

Créer un projet Firebase dans la console Firebase.

Donnez à votre projet un nom qui générera un identifiant de projet que vous choisirez plus tard à partir du terminal/de l'invite de commande.

project creationproject creation

Si vous utilisez Google Analytics, je ne réaliserai pas ce projet.

Google AnalyticsGoogle Analytics

Wait for project creationWait for project creation

Remarque : N'oubliez pas de choisir le plan de facturation à l'utilisation ; sinon, vous risquez d'obtenir une erreur similaire à "Error : Votre projet <nom_du_projet> doit être sur le plan Blaze (pay-as-you-go) pour compléter cette commande. L'API requise artifactregistry.googleapis.com ne peut pas être activée tant que la mise à niveau n'est pas terminée."

Installez le CLI Firebase à partir de l'invite de commande/du terminal :

npm install -g firebase-tools

Connectez-vous et initialisez votre projet à partir de l'invite de commande/du terminal :

firebase login firebase init

Vous serez invité à sélectionner diverses options, comme indiqué ci-dessous.

? Quelles fonctionnalités Firebase souhaitez-vous configurer pour ce répertoire ? Appuyez sur Espace pour sélectionner les fonctionnalités, puis sur Entrée pour confirmer vos choix. Base de données en temps réel : Configurez un fichier de règles de sécurité pour la base de données en temps réel et (optionnellement) fournissez une instance par défaut : Configurez un répertoire Cloud Functions et ses fichiers.

? Veuillez sélectionner une option : Utiliser un projet existant ? Sélectionnez un projet Firebase par défaut pour ce répertoire : vonage-sms-project (vonage-sms-project) (Sélectionnez ici le nom du projet que vous avez créé. Dans mon cas, il s'agit de vonage-sms-project (vonage-sms-project)

? Il semble que vous n'ayez pas encore initialisé la base de données en temps réel dans votre projet. Voulez-vous l'initialiser ? (O/n) Choisissez O

? Veuillez choisir l'emplacement de votre instance de base de données en temps réel par défaut :

us-central1

❯ europe-west1

asie-sud-est1

Dans mon cas, Europe-west1 est le plus proche de moi ; choisissez celui qui vous semble le plus logique.

? Quel fichier doit être utilisé pour les règles de sécurité de la base de données en temps réel ? (database.rules.json)

? Quel langage souhaiteriez-vous utiliser pour écrire des fonctions cloud ? (Utilisez les touches fléchées)

❯ JavaScript (Choisir JavaScript)

TypeScript

Python

? Voulez-vous utiliser ESLint pour détecter les bogues probables et appliquer le style ? (y/N)

? Voulez-vous installer les dépendances avec npm maintenant ? (O/n) ChoisissezOui. Et attendez que les dépendances soient installées.

Les dossiers et les fichiers nécessaires à la mise en œuvre du projet sont ainsi configurés.

Activer les API de Google Cloud

À partir de la Google Cloud Console, activez les API Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, Logging et Pub/Sub..

Première fonction : InboundSMS

Je vous montrerai comment créer et déployer la fonction à partir de l'IDE/éditeur de code. Vous pouvez également créer des fonctions à partir du tableau de bord Google Cloud Functions.

Ouvrir functions/index.jssupprimez tout le code que vous pouvez voir et ajoutez le code suivant pour capturer les SMS entrants et les enregistrer dans la base de données Firebase Realtime.

const { onRequest } = require("firebase-functions/v2/https");

const admin = require("firebase-admin");

admin.initializeApp();

exports.inboundSMS = onRequest(async (request, response) => {
  params = request.body;
  await admin.database().ref("/msgq").push(params);
  response.sendStatus(200);
});

Déployer la fonction à partir du dossier des fonctions.

firebase deploy --only functions

Une fois la fonction déployée, vous recevrez une URL HTTP à ajouter à notre webhook dans l'installation de Vonage lors de la prochaine session. Elle devrait ressembler à quelque chose comme https://us-central1-vonage-project.cloudfunctions.net/inboundSMSou https://inboundsms-njjebckulq-uc.a.run.app.

Note : Notez-le car nous en aurons bientôt besoin. Au cas où vous ne l'auriez pas noté, vous pouvez consulter la page Google Cloud Functions Overview pagecliquez sur la fonction inboundSMS, et vous trouverez l'URL juste en haut.

You can find the URL right at the top.function URL

Configuration de Vonage

À partir du tableau de bord de Vonage, définissez l'URL du webhook pour votre numéro à l'URL du point de terminaison de la fonction à partir du déploiement. Elle devrait ressembler à quelque chose comme https://us-central1-vonage-project.cloudfunctions.net/inboundSMS ou https://inboundsms-njjebckulq-uc.a.run.app.

Inbound SMS URL added to inbound and statusMessage capabilities webhook

Installer le Vonage Server SDK pour Node.js (@vonage/server-sdk).

npm install @vonage/server-sdk

Ensuite, ajoutez dotenv à la liste des dépendances.

npm install dotenv --save

Ajoutez un fichier nommé .env avec vos informations d'identification Vonage, qui peuvent être trouvées dans le tableau de bord Vonageet ajoutez les variables d'environnement suivantes :

Vonage Dashboard, red arrows showing where to find the API Key and the API Secret.Vonage Dashboard: API Key and API Secret

VONAGE_API_KEY= VONAGE_API_SECRET= VONAGE_APPLICATION_ID= VONAGE_PRIVATE_KEY=

Ajoutez Vonage à votre fichier functions/index.js fichier.

const { Vonage } = require("@vonage/server-sdk");

const vonage = new Vonage({
  apiKey: VONAGE_API_KEY,
  apiSecret: VONAGE_API_SECRET,
  applicationId: VONAGE_APPLICATION_ID,
  privateKey: VONAGE_PRIVATE_KEY
});

Assurez-vous qu'un numéro de téléphone est associé à cette application.

Envoyez un SMS au numéro de téléphone virtuel que vous avez acheté et lié à cette application.

Si vous consultez votre base de données Firebase Realtime sur le tableau de bord, vous pouvez voir que le nœud msgq a été mis à jour avec le message que vous avez envoyé depuis votre téléphone.

Deuxième fonction : Envoyer un SMS

Ajoutez la fonction send qui nous permettra d'envoyer le SMS à l'aide de l'API Messages de Vonage qui sera enregistré dans la base de données Firebase Realtime.

const { SMS } = require("@vonage/messages");

const { onValueCreated } = require("firebase-functions/v2/database"); 

exports.sendSMS = onValueCreated("/msgq/{pushId}", async (message) => {
  const { from, text } = message.data.val();

  vonage.messages
    .send(
      new SMS({
        text: text,
        to: from,
        from: "Vonage APIs",
      })
    )
    .then((resp) => console.log(resp))
    .catch((err) => console.error(err));
});

Déployez à nouveau les fonctions à partir du dossier des fonctions.

firebase deploy --only functions

Envoyez un SMS au numéro de téléphone virtuel que vous avez acheté et lié à cette application.

Si vous consultez votre base de données Firebase Realtime sur le tableau de bord, vous pouvez voir que le nœud msgq a été mis à jour avec le message que vous avez envoyé depuis votre téléphone.

Lorsqu'un nouveau message est ajouté à /msgqcette fonction sera déclenchée. Elle utilisera l'API Messages de Vonage pour répondre à l'utilisateur. Les messages envoyés et soumis seront enregistrés dans notre base de données Firebase Realtime.

Note : Si vous obtenez un message d'erreur "Error : secretOrPrivateKey must be an asymmetric key when using ES256", assurez-vous que votre clé privée est valide et correcte et qu'elle est importée correctement.

Testez-le

Une fois qu'elle est déployée, testez-la en envoyant un SMS au numéro lié à l'application Vonage, et vous verrez le message ajouté à la base de données Firebase Realtime.

Realtime database containing three nodes under msgqFirebase Real Time Database

Conclusion

Vous pouvez désormais envoyer et recevoir des SMS à l'aide de Firebase Cloud Functions Gen 2 et de l'API Messages de Vonage ! Vous avez maintenant terminé toutes les étapes de ce tutoriel. Vous pouvez voir le code complet sur GitHub.

Vous avez des questions sur cet article de blog ? Rejoignez notre Communauté Vonage Slack ou envoyez-nous un message sur X.

Partager:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda CavallaroDéfenseur des développeurs