https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-send-a-facebook-messenger-message-with-node-js/Blog_Facebook-Messenger_Node-js_1200x600.png

Wie man eine Facebook Messenger-Nachricht mit Node.js sendet

Zuletzt aktualisiert am November 19, 2020

Lesedauer: 2 Minuten

Mit Facebook Messenger können Personen, die mit Ihrer Organisation auf Facebook verbunden sind, auf nützliche automatisierte Dienste zugreifen. Sie können Bestellungen entgegennehmen, Updates bereitstellen oder Fragen beantworten. Wenn diese Art der Kommunikation neu für Sie ist oder Sie sich bisher ausschließlich auf Facebook für Ihre Webpräsenz verlassen haben, sollten Sie es zunächst mit der Vonage Messages API Sandbox.

Voraussetzungen

In diesem Beispiel werden Sie einen Schnelldienst einrichten, der auf Messenger-Nachrichten mit einer Empfehlung für ein Mittagessen antwortet. Messenger ist insofern etwas ungewöhnlich, als dass Ihr Kunde das Gespräch mit Ihnen beginnen muss, bevor Sie ihm eine Nachricht senden können. Wir können also nicht einfach eine Nachricht senden, sondern müssen erst auf eine empfangene Nachricht warten. Dazu benötigen wir zusätzlich zu den allgemeinen Voraussetzungen für die Verwendung der Sandbox einen Node-Server:

Um Nachrichten zu empfangen, muss Ihr Server öffentlich zugänglich sein. Sie können dies auf Ihrem Entwicklungsrechner mit ngroktun, oder Glitch verwenden, wie ich es mit dem Beispielcode.

Einen Server erstellen

Erstellen Sie eine neue server.js Datei in Ihrem Arbeitsverzeichnis. Ihr Server wird den meisten minimalen Express-Servern sehr ähnlich sein. Sie benötigen das Paket und erhalten eine Instanz, und benötigen auch body-parser und axios. Dann konfigurieren Sie die Middleware und lauschen am Ende auf Port 3000.

Der Zweck des Servers besteht darin, Endpunkte für Ihre Webhooks bereitzustellen. Auch diese können Sie hinzufügen: einen für eingehende Nachrichten und einen für Statusmeldungen. Im Moment können sie nur mit einer Bestätigung antworten, dass die Anfrage ihr Ziel erreicht hat:

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const axios = require('axios');

app.use(bodyParser.json());

// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {
  res.status(204).end();
});

// this endpoint receives information about events in the app
app.post('/event', function(req, res) {
  res.status(204).end();
});

app.listen(3000);

Anmerkung: Vergessen Sie nicht, Ihre Webhook-Endpunkte in Ihrem Dashboard festzulegen. Sie können beides in der Messages API Sandbox. Für dieses Beispiel sollten es POST-Anfragen sein, die wie folgt aussehen https://YOUR-SERVER/answer und https://YOUR-SERVER/event.

Einige Daten hinzufügen

Um Nachrichten zu senden, benötigen Sie Ihre API-Anmeldeinformationen und die Sandbox-Messenger-ID, von der aus die Nachricht gesendet werden soll. Sie können all diese Werte über den cURL-Befehl auf der Sandkasten-Seite. Da Sie Vorschläge für das Mittagessen senden werden, können Sie auch ein Array mit zehn Mittagessen für Testdaten erstellen.

Sie sehen die Messenger-ID Ihres Endbenutzers erst, wenn er Ihnen eine Nachricht geschickt hat. Sobald Ihr /answer Endpunkt eine Anfrage erhält, können Sie die from_id aus dem Anforderungskörper entnehmen. Diese können Sie speichern und als "An"-ID in Ihrer Nachricht verwenden:

var user = '12ab3456';
var password = '123AbcdefghIJklM';
var my_id = '123456789012345';

var lunches = ['bbq','teriyaki','salad','a bagel','curry','dumplings','tacos','a sub','bibimbap','pizza'];

// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {
  var from_id = req.body.from.id;
  
  res.status(204).end();
});

Eingehende Nachrichten beantworten

Jetzt haben Sie alle Voraussetzungen, um eine Antwort an Ihren Benutzer zu erstellen. Für dieses einmalige Beispiel können Sie einfach axios verwenden, um die Anfrage zu stellen. Sie geben ihm die Sandbox-URL, ein Datenobjekt sowie Ihren API-Schlüssel und Ihr Passwort. Das Datenobjekt enthält die Sandbox-ID, von der aus die Nachricht gesendet werden soll, die gespeicherte Benutzer-ID, an die sie gesendet werden soll, und einen Text mit einem zufälligen Vorschlag für ein Mittagessen.

Nachdem Sie die Anfrage abgeschickt haben, können Sie auf eine Antwort oder eventuelle Fehler warten. Im Idealfall sehen Sie dort nichts außer der Bestätigung dessen, was Sie gesendet haben:

// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {
  var from_id = req.body.from.id;
  
  axios.post('https://messages-sandbox.nexmo.com/v0.1/messages',{
    "from": { "type": 'messenger', "id": my_id },
    "to": { "type": 'messenger', "id": from_id },
    "message": {
      "content": {
        "type": 'text',
        "text": 'You should have ' + 
          lunches[Math.floor(Math.random() * 10)] + ' for lunch.'
      }
    }
  },{
    auth: {
      username: user,
      password: password
    }
  })
  .then(function (response) {
    console.log('Status: ' + response.status);
    console.log(response.data);
  })
  .catch(function (error) {
    console.error(error);
  });
  
  res.status(204).end();
});

Probieren Sie es aus

Starten Sie Ihren Server mit node server.js falls er noch nicht läuft. Senden Sie von Ihrem Messenger-Client, der auf der Whitelist steht, eine Nachricht an den Vonage Sandbox Account. (Der Inhalt spielt keine Rolle.) Sie sollten eine Nachricht zurückerhalten und die Bestätigungen in Ihrer Konsole sehen.

Getting lunch suggestions via Facebook MessengerMessenger Sandbox

Nachdem Sie nun gesehen haben, wie Kommunikation mit Messenger funktioniert, können Sie damit beginnen, sie in Ihre realen Anwendungen zu integrieren. Sie können die Vonage Messages API Sandbox für die Entwicklung mit dem Vonage Node.js SDK. Wenn Sie bereit sind, können Sie Ihre eigene Facebook-Seite verbinden und live gehen!

Betrachten und remixen Sie das Beispiel auf Glitch um den gesamten Code zusammen zu sehen.

Teilen Sie:

https://a.storyblok.com/f/270183/250x250/f231d97f1b/garann-means.png
Garann MeansEntwickler Pädagoge

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.