
Wie man eine WhatsApp-Nachricht mit Node.js versendet (Tutorial)
Lesedauer: 5 Minuten
Einführung
In diesem Tutorial lernen Sie, wie Sie eine Anwendung erstellen, die Nachrichten mit Hilfe der Vonage® Messages API sendet und empfängt. Nachrichten-API, dem Vonage Node SDK, und der WhatsApp-Sandkasten. Der Code des GitHub-Repositorys für dieses Projekt befindet sich hier.
Voraussetzungen
Um mit dem Versenden von WhatsApp-Nachrichten mit Node.js zu beginnen, benötigen Sie die folgenden Voraussetzungen:
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.
Optional - WhatsApp Business-Konto für zusätzliche Features und Funktionen
Erstellen einer Vonage-Anwendung
Die folgenden Schritte zeigen Ihnen, wie Sie eine neue Vonage-Anwendung über das Dashboard erstellen können. Alternativ können Sie auch die CLI verwenden, um eine Anwendung zu erstellen.
Eine neue Anwendung erstellen
Gehen Sie zu Ihre Anwendungen im Vonage Dashboard und klicken Sie auf , um eine neue Anwendung zu erstellen.
Berechtigungsnachweise generieren
Erstellen Sie ein öffentliches/privates Schlüsselpaar für die API-Authentifizierung. Klicken Sie auf "Öffentlichen und privaten Schlüssel generieren", um den privaten Schlüssel zu erhalten. Die Datei wird an den Ort heruntergeladen, den Sie in Ihrem Browser für heruntergeladene Dateien festgelegt haben. Stellen Sie sicher, dass Sie diese Datei dem Projektordner hinzufügen.
Nachrichten-API-Fähigkeit
Starten Sie eine ngrok Tunelling-Instanz
Wenn Sie ngrok noch nicht benutzt haben, können Sie hier beginnen. Ich habe die Schritte zum Ausführen einer Instanz unterhalb des Bildes hinzugefügt.
Führen Sie den folgenden Befehl aus, um eine ngrok-Tunneling-Instanz zu starten.
ngrok http 8000
Ausgabe
ngrok (Ctrl+C to quit)
👋 Goodbye tunnels, hello Agent Endpoints: https://ngrok.com/r/aep
Session Status online
Account plan name
Version 3.19.1
Region Europe (eu)
Latency 31ms
Web Interface http://127.0.0.1:4040
Forwarding https://xyz.ngrok.app -> http://localhost:8000
Connections ttl opn rt1 rt5 p50 p90
14 0 0.03 0.03 6.10 7.79
Webhooks konfigurieren
Zurück im Vonage API Dashboard, unter Ihren Apps, schalten Sie die Option Nachrichten und legen Sie die öffentliche URL Ihres Servers von ngrok als Endpunkt für eingehende Nachrichten und Ereignisse fest. Sie sollte wie folgt aussehen: https://xyz.ngrok.com/inbound für eingehende Nachrichten und https://xyz.ngrok.com/status für Status. Wenn Sie mehr über Webhooks erfahren möchten, finden Sie in unserer Vonage-Dokumentation.
Messages capability
Einrichten der Vonage Messages API WhatsApp Sandbox
Wir verwenden dieWhatsApp-Sandkastenfür dieses Tutorial, die eine Testumgebung darstellt. Sie können ein WhatsApp-Geschäftskonto verwenden, sobald Sie bereit sind, Ihre Anwendung in Produktion zu geben. Neben WhatsApp können Sie diese Anwendung auch in Kanäle wie Viber, Facebook Messenger und Instagram integrieren - mit ein paar Zeilen Code und Anpassungen bei der Einrichtung.
Erstellen einer WhatsApp-Sandbox für die Nachrichten-API
Navigieren Sie zur Vonage-Nachrichten-API-Sandbox-Seite und richten Sie Ihre Messages API WhatsApp Sandbox ein.
WebHooks hinzufügen
Fügen Sie die von Ngrok generierte URL zu Ihrer Anwendung und der Nachrichten-API-Sandboxan, fügen Sie /webhooks/inbound-message
und /webhooks/message-status
, an und klicken Sie auf "Webhooks speichern".
Webhooks
Umgebungsvariablen
Wir müssen eine .env file
erstellen und die benötigten Umgebungsvariablen hinzufügen. Einige dieser Variablen haben wir bereits erstellt, aber ich werde erklären, wo sie zu finden sind.
# Vonage API keys
VONAGE_APPLICATION_ID=
VONAGE_PRIVATE_KEY=
VONAGE_WHATSAPP_NUMBER=
VONAGE_API_SIGNATURE_SECRET=
# Server port (optional; default is 8000)
PORT=8000
Die VONAGE_WHATSAPP_NUMBER
befindet sich auf der Nachrichten-Sandbox-Seite. Es handelt sich um die Nummer, an die Sie eine WhatsApp-Nachricht senden werden. Für Sandbox-Tests lautet die Nummer 14157386102.
Die VONAGE_APPLICATION_ID
befindet sich in der Anwendung, die Sie erstellt haben.
Application id
Die VONAGE_PRIVATE_KEY
ist der Pfad zu der Datei private.key
Datei, die beim Erstellen Ihrer Anwendung erzeugt wurde.
VONAGE_API_SIGNATURE_SECRET
ist das zum Signieren der Anfrage verwendete Geheimnis, das dem Signaturgeheimnis entspricht, das mit dem in den JWT-Ansprüchen enthaltenen api_key verbunden ist. Sie können Ihr Signaturgeheimnis in den Dashboard-Einstellungen.
> HINWEIS: Verwenden Sie bei der Eingabe einer Telefonnummer kein führendes + oder 00, sondern beginnen Sie mit der Landesvorwahl, z. B.16600700000
Der Port ist derjenige, auf dem unser Express-Server laufen wird. Ich habe ihn auf 8000 gesetzt, aber Sie können ihn gerne ändern.
Installieren Sie die Abhängigkeiten
Wir verwenden das Vonage Server SDK, Vonage Messages SDK für Node.js, Vonage JWT SDK für Node.js, Express, und Dotenv. Installieren Sie sie mit diesem Befehl:
npm install @vonage/server-sdk @vonage/messages @vonage/jwt express dotenv
Implementierung der Codelogik
Erstellen Sie eine server.js
Datei.
Fordern Sie die Pakete, die wir für dieses Projekt verwenden werden, an und initialisieren Sie sie.
// src/server.js
require("dotenv").config();
const express = require("express");
const { Vonage } = require("@vonage/server-sdk");
const { WhatsAppText } = require("@vonage/messages");
const { verifySignature } = require("@vonage/jwt");
const app = express();
app.use(express.json());
Initialisieren Sie einen neuen Vonage-Client; die aus process.env gelesenen Werte sind die Umgebungsvariablen, die Sie zuvor zu Ihrem .env file
.
Die apiHost
ist die URL der Sandbox-Umgebung für den Messaging-Dienst von Vonage.
const vonage = new Vonage(
{
applicationId: process.env.VONAGE_APPLICATION_ID,
privateKey: process.env.VONAGE_PRIVATE_KEY,
},
{
apiHost: "https://messages-sandbox.nexmo.com",
}
);
Wir haben eine JWT-Verifizierungsfunktion, um zu überprüfen, ob die eingehende Nachricht von Vonage stammt. Sie können mehr erfahren über Verifizierung der Anfrage.
const verifyJWT = (req) => {
// Verify if the incoming message came from Vonage
const jwtToken = req.headers.authorization.split(" ")[1];
if(!verifySignature(jwtToken, process.env.VONAGE_API_SIGNATURE_SECRET)) {
console.error("Unauthorized request");
throw new Error('Not a messages API request');
}
console.log('JWT verified');
}
Die Unterhaltung wird durch das Senden einer WhatsApp-Nachricht durch den Benutzer eingeleitet. Lassen Sie uns eine Funktion erstellen, die eine WhatsApp-Nachricht mit dem Text "Nachricht erhalten" an den Benutzer zurückschickt.
// Function to send a message via Vonage
const sendMessage = async (to_number) => {
const text = "Message received."; // The reply message
try {
const { messageUUID } = await vonage.messages.send(
new WhatsAppText({
from: process.env.VONAGE_WHATSAPP_NUMBER,
to: to_number,
text: text,
})
);
console.log(`Message sent with messageUUID: ${messageUUID}`);
} catch (error) {
console.error(
"Error sending message:",
error.response ? error.response.body : error.message
);
}
};
Erstellen Sie einen /inbound
Endpunkt zur Verarbeitung der eingehenden Nachricht, der als Webhook im Vonage-Dashboard hinzugefügt wurde. Es wird protokolliert, wenn eine Nachricht empfangen und an den in der Sandbox zugelassenen Benutzer zurückgeschickt wird: "Nachricht erhalten".
app.post("/inbound", async (req, res) => {
const { from: requesterNumber } = req.body;
console.log(`Received message from ${requesterNumber}`);
try {
// Send the "Message received" reply
await sendMessage(requesterNumber);
res.status(200).send(); // Acknowledge the received message
} catch (error) {
console.error("Error handling incoming message:", error);
res.status(500).send("An error occurred while processing the message.");
}
});
Erstellen Sie einen /status
Endpunkt, der die Anfragedaten protokolliert, prüft, ob der Benutzer mit einem JWT autorisiert ist, und dann mit einer Erfolgsmeldung antwortet.
app.post('/status', (req, res) => {
console.log(req.body);
verifyJWT(req);
console.log('Received status update');
res.status(200).send();
});
Der Server lauscht auf dem angegebenen Port.
// Start the server
const PORT = process.env.PORT || 8000;
app.listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`);
});
Testen Sie Ihren Code
Danach können Sie testen, ob Sie eine Nachricht von Ihrer WhatsApp-Sandbox an Ihre zugelassene WhatsApp-Nummer senden können. Führen Sie in dem Verzeichnis, in dem die Datei gespeichert ist, einen Befehl aus:
> $ node src/server.js
Server is listening on port 8000
Received message from <Number>
JWT verified
Message sent with messageUUID: e295613c-a2fc-40f4-a9ae-fa16f5c685cf
Jetzt sollte die Antwort auf die Testnachricht in WhatsApp auf Ihrem zugelassenen Gerät erscheinen. Jetzt können Sie verschiedene Arten von Nachrichten testen und mehr über folgende Themen erfahren WhatsApp-Konzepte.
Schlussfolgerung
WhatsApp wird weltweit stark genutzt; ich habe den Play Store auf meinem Android-Telefon überprüft, und es ist eine der am häufigsten heruntergeladenen Apps im Vereinigten Königreich. Als ich im Urlaub in meinem Heimatland Brasilien war, fiel mir auf, wie sehr es sich zwischen Geschäften verbreitete; ich konnte Açaí kaufen, den Kundendienst kontaktieren, überprüfen, ob Geschäfte geöffnet waren, und mit Freunden und Familie sprechen. Die Möglichkeiten, über WhatsApp Nachrichten zu senden und zu empfangen, sind endlos.
Haben Sie Fragen oder Anmerkungen? Treten Sie unserer florierenden Entwickler-Community auf Slackoder folgen Sie uns auf X (früher Twitter), oder abonnieren Sie unseren Entwickler-Newsletter. Bleiben Sie mit uns in Verbindung, teilen Sie Ihre Fortschritte mit uns und halten Sie sich über die neuesten Nachrichten, Tipps und Veranstaltungen für Entwickler auf dem Laufenden!