
Teilen Sie:
Ich bin ein JavaScript-Entwickler und ein Developer Educator bei Vonage. Im Laufe der Jahre habe ich mich für Templates, Node.js, progressive Web-Apps und Offline-First-Strategien begeistert, aber was ich immer geliebt habe, ist eine nützliche, gut dokumentierte API. Mein Ziel ist es, Ihre Erfahrung mit unseren APIs so gut wie möglich zu gestalten.
Wie man mit WhatsApp und Node.js automatisierte Bestellungen zulässt
Lesedauer: 5 Minuten
Automatisierte Bestellungen sind ein guter Anfang, um Ihren Kunden die Möglichkeit zu bieten, mit Ihrem Unternehmen über WhatsApp. Wenn Sie eine relativ kurze Liste von Produkten haben, ist es durchaus möglich, eine Bestellung durch Nachrichten hin und her zu schicken. Auf diese Weise können die Kunden ihre Bestellung aufgeben, während sie in der Schlange stehen. Und da Ihr System WhatsApp verwendet, können Sie den Bestellvorgang jederzeit um Dinge wie Medien- oder Standortdaten ergänzen, die bei SMS uneinheitlich erscheinen könnten.
Um es auszuprobieren, können Sie einen Node.js-Service erstellen, indem Sie WhatsApp-Sandkasten von Vonage. In diesem Beispiel nehmen wir an, dass Sie eine Apotheke sind. Ihre Kunden können Ihnen eine Nachricht senden, um eine Liste ihrer Rezepte zu erhalten, die zum Nachfüllen verfügbar sind, und dann ihre Auswahl per SMS senden, um sie zu bestellen.
Voraussetzungen
Ein Vorteil der Messages API Sandbox von Vonage ist, dass Sie keinen eigenen WhatsApp Business Account benötigen, um dies zu testen. Wenn Sie Node installiert haben und einen Vonage Entwickler Account haben, können Sie mit ein wenig Installieren, Kopieren und Einfügen loslegen. Das brauchen Sie:
Node und npm
Express und die Body-Parser-Middleware
Ein Gerät mit WhatsApp, das in der [Messages API Sandbox] auf der Whitelist steht
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.
Wenn Sie noch weniger Schritte benötigen, können Sie das Beispiel auf Glitch nachbauen.
Erstellen einer Node-Anwendung
Um zu beginnen, erstellen Sie ein neues Verzeichnis für Ihre Anwendung und führen Sie npm init zum Erstellen einer package.json. Installieren Sie die Pakete, die Sie verwenden werden, mit npm install express body-parser node@beta -s. Erstellen Sie dann eine server.js Datei und fangen Sie an zu programmieren!
Der Server für dieses Beispiel sieht aus wie ein einfacher Express.js-Server, der body-parserund lauscht auf Port 3000. Sie können Endpunkte für Ihre Webhooks und eine Hilfsfunktion einrichten, die wir weiter unten besprechen werden. Abgesehen davon braucht Ihr Server nicht viel:
// init server
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(express.static('public'));
app.use(bodyParser.json());
// create a Nexmo client
// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {});
// this endpoint receives information about events in the app
app.post('/event', function(req, res) {});
function addOrder(customer, order) {}
app.listen(3000); Einige Testdaten hinzufügen
Um Ihre Anwendung zum Laufen zu bringen, benötigen Sie Ihre API-Zugangsdaten, um einen Nexmo-Client zu erstellen, der sich mit der API von Vonage verbindet, und Sie benötigen einige Testdaten.
Der Nexmo-Client wird mit Ihrem API-Schlüssel und Geheimnis, einer Anwendungs-ID und dem privaten Schlüssel der Anwendung initialisiert. Sie finden den API-Schlüssel und das Geheimnis auf der Seite Erste Schritte Seite in Ihrem Dashboard. Sie können eine Ihrer bestehenden Applications aus dem Dashboard unter Ihre Applications Seite des Dashboards verwenden oder dort eine neue erstellen. Der private Schlüssel, den Sie dem Nexmo-Client zur Verfügung stellen, kann entweder der Schlüssel selbst oder der Pfad zu einer Datei sein, die ihn enthält.
In diesem Fall fügen Sie dem Nexmo-Client eine wichtige Option hinzu, indem Sie die Option apiHost für die Sandbox. Dadurch können Sie Nachrichten an die Sandbox-Testnummer senden, anstatt Ihr eigenes WhatsApp-Geschäftskonto angeben zu müssen:
// create a Nexmo client
const Nexmo = require('nexmo');
const nexmo = new Nexmo({
apiKey: '12ab3456',
apiSecret: '12345abcdeFGH',
applicationId: '12a34b5c-6789-0d12-34e5-6fa789bcde0f',
privateKey: __dirname + '/private.key'
}, {
apiHost: 'messages-sandbox.nexmo.com'
});Sie brauchen keine besonders ausgefeilten Testdaten, um das System zur Bestellung von Rezepten nachzustellen. Selbst das einfachste reale System würde zweifellos irgendeine Art von Datenspeicher verwenden, aber Sie können ein paar Arrays fest programmieren, die relationale Daten imitieren. Erstellen Sie ein Array mit Ihren WhatsApp-Nummern auf der Whitelist und eines mit einigen Medikamenten. Eine dritte prescriptions Matrix kann sie miteinander verknüpfen, wobei Array-Indizes als IDs verwendet werden. Schließlich können Sie ein leeres Array für eingehende Bestellungen belassen:
var customers = ['441234567890', '15121234567'];
var medications = ['paracetamol','infant paracetamol','ibuprofen','throat lozenges'];
var prescriptions = [[1,2],[0,1,3]];
var orders = []; Auf Nachrichten achten
In der Messages API Sandbox haben Sie die Möglichkeit, einige Webhooks einzurichten. Sie benötigen die Eingehend Webhook, damit Ihre Kunden Ihnen Nachrichten senden können. Wenn Sie dies noch nicht getan haben, fügen Sie einen Endpunkt in der Form https://[YOUR-SERVER]/answer. Für dieses Beispiel ist das nicht unbedingt erforderlich, aber Sie können auch einen Status Endpunkt hinzufügen, der wie folgt aussieht https://[YOUR-SERVER]/event.
Eingehende Nachrichten
Der /answer Endpunkt, den Sie bereits in Ihrem Server erstellt haben, empfängt Anfragen, die die Nummer, die die Nachricht gesendet hat, und den Nachrichtentext enthalten. Deklarieren Sie einige Variablen, um diese zu speichern, ebenso wie den mit der Nummer verbundenen Kundenindex. Außerdem benötigen Sie eine Variable für Ihren Antworttext.
Bevor Sie eine Logik ausführen, überprüfen Sie, ob die Person, die Ihnen eine Nachricht sendet, tatsächlich Ihr Kunde ist. Ist dies der Fall, können Sie feststellen, ob die Nachricht die ID eines der Medikamente enthält, für die sie ein Rezept hat. Liegt keine Bestellung vor, können Sie ihm eine Liste der verfügbaren Medikamente schicken. Andernfalls können Sie die Bestellung zu Ihrem System hinzufügen.
Mit dem eingestellten Antworttext können Sie eine WhatsApp-Nachricht über den Nexmo-Client versenden. Sie müssen das Original from_number als die Nummer, an die sie gesendet werden soll, die Sandbox-Nummer als die Nummer, von der sie kommt, und einen Inhalt vom Typ text mit Ihrer generierten Antwort.
Bestätigen Sie schließlich den Erhalt der Nachricht und beenden Sie Ihre Antwort:
// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {
var from_number = req.body.from.number;
var customer = customers.indexOf(from_number);
var message = req.body.message.content.text;
var reply;
if (customer > -1) {
// check to see if this is an order
var order = parseInt(message);
if (isNaN(order)) {
// if not, list available prescriptions
reply = 'Available prescriptions:\n' +
prescriptions[customer].map(p => medications[p] + ' (press ' + p + ')');
} else {
reply = addOrder(customer, order);
}
nexmo.channel.send({
type: 'whatsapp',
number: from_number
}, {
type: 'whatsapp',
number: '14151234567'
}, {
content: {
type: 'text',
text: reply
}
}, console.log);
}
res.status(204).end();
});
Status-Meldungen
Der /event Endpunkt hat in diesem Beispiel keine Funktion, aber Sie können ihn hinzufügen, falls Sie ihn später benötigen. Im Moment ist alles, was er tun muss, das Zurücksenden eines 2xx Status zu senden und die Antwort zu beenden:
// this endpoint receives information about events in the app
app.post('/event', function(req, res) {
res.status(204).end();
}); Aufträge hinzufügen
Da Sie Arrays von Testdaten verwenden, ist das Hinzufügen einer Bestellung ziemlich schnell. In dieser Anwendung gibt es nur eine minimale Fehlerprüfung und es wird einfach angenommen, dass alles funktioniert. Daher ist Ihre addOrder Funktion ist also kurz, würde aber bei einem echten Datenspeicher länger dauern.
Zunächst prüfen Sie, ob der Kunde die Bestellung aufgeben darf. Ist dies nicht der Fall, senden Sie ihm eine Benachrichtigung über den Fehler. Ist dies der Fall, können Sie die Bestellung zu Ihrem orders Array hinzufügen und eine Bestellnummer generieren, die lediglich die Anzahl der Bestellungen angibt. In diesem schnörkellosen Beispiel erscheint die Bestellung einfach in der Konsole, damit Ihre Apotheke sie vorbereiten kann. Die Funktion gibt eine Nachricht für den Kunden zurück, die ihn darüber informiert, dass die Bestellung vorbereitet wird:
function addOrder(customer, order) {
if (prescriptions[customer].indexOf(order) > -1) {
orders.push({customer: customer, medication: order});
var orderNum = orders.length;
console.log('New order received: order #' + orderNum + ', ' + medications[order]);
return 'Thank you, you can pick up ' + medications[order] + ' in one hour. ' +
'Reference order number ' + orderNum + '.';
} else {
return 'You don\'t have a prescription matching that number. Please try again.';
}
}
Nächste Schritte
Nun können Sie Ihre Anwendung testen, indem Sie den Server in Node starten mit node server.js. Wenn Sie der Sandbox-Nummer eine WhatsApp-Nachricht schicken, sollten Sie als Antwort eine Liste Ihrer Rezepte erhalten. Wenn Sie erneut mit einer der IDs antworten, die Ihnen als Option angeboten werden, sollten Sie eine Bestätigung erhalten.
Achten Sie beim Testen darauf, dass auch die Konsole geöffnet ist. Dort wird Ihre Bestellungsbenachrichtigung für die Apotheke erscheinen.
Jetzt, wo Sie ein Basissystem haben, können Sie es natürlich gegen echte Daten und Logik austauschen. Sie können auch über den reinen Text hinausgehen und Medien, Standortinformationen oder andere Daten, die für Ihr Unternehmen relevant sein könnten, senden. Sobald Sie gesehen haben, dass es funktioniert, können Sie sich für ein WhatsApp-Geschäftsprofil beantragen und Ihr Bestellsystem live auf WhatsApp an Ihre Kunden weitergeben.
Teilen Sie:
Ich bin ein JavaScript-Entwickler und ein Developer Educator bei Vonage. Im Laufe der Jahre habe ich mich für Templates, Node.js, progressive Web-Apps und Offline-First-Strategien begeistert, aber was ich immer geliebt habe, ist eine nützliche, gut dokumentierte API. Mein Ziel ist es, Ihre Erfahrung mit unseren APIs so gut wie möglich zu gestalten.
