
Envoyer des SMS avec les fonctions cloud pour Firebase Gen 2
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 creation
Si vous utilisez Google Analytics, je ne réaliserai pas ce projet.
Google Analytics
Wait 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 :
Connectez-vous et initialisez votre projet à partir de l'invite de commande/du terminal :
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.
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.
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.
Message capabilities webhook
Installer le Vonage Server SDK pour Node.js (@vonage/server-sdk).
Ensuite, ajoutez dotenv à la liste des dépendances.
npm install dotenv --saveAjoutez 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: API Key and API Secret
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.
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.
Firebase 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.