https://d226lax1qjow5r.cloudfront.net/blog/blogposts/send-sms-messages-with-cloud-functions-for-firebase-gen-2/sms-cloud-functions-firebase-gen2.png

Senden von SMS-Nachrichten mit Cloud-Funktionen für Firebase Gen 2

Zuletzt aktualisiert am March 19, 2024

Lesedauer: 10 Minuten

Übersicht

Wir haben ein Tutorial über Wie man SMS mit Firebase-Funktionen sendet und empfängtDieser Blogbeitrag behandelt denselben Anwendungsfall. Wir werden jedoch eine HTTP-Funktion der zweiten Generation erstellen und bereitstellen, indem wir die Google Cloud-Konsole und die Vonage-Nachrichten-API anstelle der SMS-API.

Einrichtung

Sie benötigen einige Dinge, um loszulegen:

Firebase-Einrichtung

Erstellen Sie ein Firebase-Projekt in der Firebase-Konsole.

Geben Sie Ihrem Projekt einen Namen, der eine Projekt-ID erzeugt, die Sie später über das Terminal/ die Eingabeaufforderung auswählen.

project creationproject creation

Wenn Sie Google Analytics verwenden, werde ich dieses Projekt nicht durchführen.

Google AnalyticsGoogle Analytics

Wait for project creationWait for project creation

Hinweis: Denken Sie daran, den Abrechnungstarif zu wählen, da Sie sonst eine Fehlermeldung wie "Fehler" erhalten könnten: Ihr Projekt <project_name> muss im Blaze-Tarif (Pay-as-you-go) sein, um diesen Befehl auszuführen. Die erforderliche API artifactregistry.googleapis.com kann nicht aktiviert werden, bevor das Upgrade abgeschlossen ist."

Installieren Sie die Firebase CLI über die Eingabeaufforderung/den Terminal:

npm install -g firebase-tools

Melden Sie sich an und initialisieren Sie Ihr Projekt über die Eingabeaufforderung/ das Terminal:

firebase login firebase init

Sie werden aufgefordert, verschiedene Optionen auszuwählen, wie unten dargestellt.

? Welche Firebase-Funktionen möchten Sie für dieses Verzeichnis einrichten? Drücken Sie die Leertaste, um die Funktionen auszuwählen, und dann die Eingabetaste, um Ihre Auswahl zu bestätigen. Realtime-Datenbank: Konfigurieren Sie eine Sicherheitsregeldatei für Realtime Database und (optional) stellen Sie eine Standardinstanz bereit, Functions: Konfigurieren Sie ein Verzeichnis für Cloud-Funktionen und dessen Dateien

? Bitte wählen Sie eine Option: Ein bestehendes Projekt verwenden ? Wählen Sie ein Standard-Firebase-Projekt für dieses Verzeichnis: vonage-sms-project (vonage-sms-project) (Wählen Sie hier den Namen des Projekts, das Sie erstellt haben. In meinem Fall ist es vonage-sms-project (vonage-sms-project)

? Es scheint, dass Sie die Echtzeitdatenbank in Ihrem Projekt noch nicht initialisiert haben. Möchten Sie sie einrichten? (J/N) Wählen Sie Y

? Bitte wählen Sie den Standort für Ihre Standard-Echtzeitdatenbank-Instanz:

us-zentral1

❯ europa-west1

asien-südost1

In meinem Fall liegt Europa-West1 am nächsten bei mir; wählen Sie die für Sie sinnvollste aus.

? Welche Datei sollte für die Sicherheitsregeln der Echtzeit-Datenbank verwendet werden? (database.rules.json)

? In welcher Sprache würden Sie gerne Cloud-Funktionen schreiben? (Pfeiltasten verwenden)

❯ JavaScript (Wählen Sie JavaScript)

TypScript

Python

? Möchten Sie ESLint verwenden, um wahrscheinliche Fehler zu finden und den Stil durchzusetzen? (j/N)

? Möchten Sie jetzt Abhängigkeiten mit npm installieren? (J/N) Wählen SieJa. Und warten Sie, bis die Abhängigkeiten installiert sind.

Dadurch werden die erforderlichen Ordner und Dateien für den Start eingerichtet.

Aktivieren Sie Google Cloud APIs

Über die Google Cloud-Konsole, aktivieren Sie die APIs Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, Logging und Pub/Sub.

Erste Funktion: InboundSMS

Ich zeige Ihnen, wie Sie die Funktion über die IDE/den Code-Editor erstellen und bereitstellen können. Alternativ können Sie auch Funktionen über das Google Cloud Functions Dashboard erstellen.

Öffnen Sie functions/index.js, löschen Sie den gesamten Code, den Sie sehen können, und fügen Sie den folgenden Code hinzu, um eingehende SMS-Nachrichten zu erfassen und in der Firebase Realtime-Datenbank zu protokollieren.

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);
});

Stellen Sie die Funktion aus dem Funktionsordner bereit.

firebase deploy --only functions

Nachdem die Funktion bereitgestellt wurde, erhalten Sie eine HTTP-URL, die Sie in der nächsten Sitzung zu unserem Webhook im Vonage-Setup hinzufügen müssen. Sie sollte in etwa wie folgt aussehen https://us-central1-vonage-project.cloudfunctions.net/inboundSMSoder https://inboundsms-njjebckulq-uc.a.run.app.

Hinweis: Merken Sie sich das, denn wir werden es bald brauchen. Falls Sie es sich nicht gemerkt haben, können Sie auf der Google Cloud Functions Übersichtsseiteund klicken Sie auf die Funktion inboundSMS. Die URL finden Sie ganz oben auf der Seite.

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

Vonage-Einrichtung

Vonage API-Konto

Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.

In diesem Lernprogramm wird auch eine virtuelle Telefonnummer verwendet. Um eine zu erwerben, gehen Sie zu Rufnummern > Rufnummern kaufen und suchen Sie nach einer Nummer, die Ihren Anforderungen entspricht.

Setzen Sie im Vonage Dashboard die Webhook-URL für Ihre Nummer auf die Funktionsendpunkt-URL aus der Bereitstellung. Sie sollte in etwa wie folgt aussehen https://us-central1-vonage-project.cloudfunctions.net/inboundSMS oder https://inboundsms-njjebckulq-uc.a.run.app.

Inbound SMS URL added to inbound and statusMessage capabilities webhook

Installieren Sie das Vonage Server SDK für Node.js (@vonage/server-sdk).

npm install @vonage/server-sdk

Als nächstes fügen Sie dotenv zur Liste der Abhängigkeiten hinzu.

npm install dotenv --save

Fügen Sie eine Datei namens .env mit Ihren Vonage-Anmeldedaten hinzu, die Sie im Vonage Dashboardzu finden sind, und fügen Sie die folgenden Umgebungsvariablen hinzu:

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=

Fügen Sie Vonage zu Ihrer functions/index.js Datei hinzu.

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
});

Vergewissern Sie sich, dass mit dieser Anwendung eine Telefonnummer verknüpft ist.

Senden Sie eine SMS an die virtuelle Telefonnummer, die Sie erworben und mit dieser Anwendung verknüpft haben.

Wenn Sie Ihre Firebase Realtime-Datenbank auf dem Dashboard aufrufen, können Sie sehen, dass der msgq Knoten mit der Nachricht aktualisiert wurde, die Sie von Ihrem Telefon aus gesendet haben.

Zweite Funktion: SendSMS

Fügen Sie die Sendefunktion hinzu, die es uns ermöglicht, die SMS-Nachricht über die Vonage-Nachrichten-API die in der Firebase Realtime-Datenbank protokolliert werden soll.

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));
});

Stellen Sie die Funktionen erneut aus dem Funktionsordner bereit.

firebase deploy --only functions

Senden Sie eine SMS an die virtuelle Telefonnummer, die Sie erworben und mit dieser Anwendung verknüpft haben.

Wenn Sie Ihre Firebase Realtime-Datenbank auf dem Dashboard aufrufen, können Sie sehen, dass der msgq Knoten mit der Nachricht aktualisiert wurde, die Sie von Ihrem Telefon aus gesendet haben.

Wenn eine neue Nachricht zu /msgqhinzugefügt wird, wird diese Funktion ausgelöst. Sie verwendet die Vonage Messages API, um dem Benutzer zu antworten. Die gesendeten und übermittelten Nachrichten werden in unserer Firebase Realtime-Datenbank protokolliert.

Hinweis: Wenn Sie die Fehlermeldung "Error: secretOrPrivateKey must be an asymmetric key when using ES256" erhalten, stellen Sie sicher, dass Ihr privater Schlüssel gültig und korrekt ist und korrekt importiert wird.

Testen Sie es aus

Testen Sie die Anwendung, indem Sie eine SMS-Nachricht an die mit der Vonage-Anwendung verknüpfte Nummer senden. Sie werden sehen, dass die Nachricht der Firebase Realtime-Datenbank hinzugefügt wird.

Realtime database containing three nodes under msgqFirebase Real Time Database

Schlussfolgerung

Jetzt können Sie mit Firebase Cloud Functions Gen 2 und der Vonage Messages API SMS-Nachrichten senden und empfangen! Sie haben nun alle Schritte für dieses Tutorial abgeschlossen. Sie können den vollständigen Code auf GitHub sehen.

Haben Sie Fragen zu diesem Blogbeitrag? Treten Sie unserem Vonage Community Slack oder senden Sie uns eine Nachricht auf X.

Share:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda CavallaroAdvokat für Entwickler