Schnellstart-Tutorial

Dieses Tutorial beschreibt alle notwendigen Schritte zum Erstellen deines ersten Messenger-Erlebnisses. Wähle zunächst eine der Optionen unter Starterprojekte aus, um den erforderlichen Code abzurufen. Befolge dann die Schritte unter Erste Schritte, um loszulegen.

Du möchtest einfach nur den fertigen Code sehen? Kein Problem! Du kannst ihn auf GitHub kopieren.

Inhalt

Starterprojekt

Bevor du mit dieser Kurzanleitung loslegen kannst, solltest du eine der folgenden Aktionen durchführen, um den erforderlichen Startcode zu erhalten. Der Startcode stellt einen einfachen Webhook bereit, den wir als Grundlage für das Messenger-Erlebnis verwenden.

Option 1: Selbst erstellen

Unser Webhook-Einrichtungsleitfaden zeigt dir die erforderlichen Schritte, um deinen ersten Webhook zu erstellen, den du für alle in dieser Kurzanleitung beschriebenen Schritte verwenden kannst.

Eigenen Webhook erstellen

Option 2: Von GitHub herunterladen

Lade unseren Webhook-Startcode von GitHub herunter und implementiere ihn auf einem Server deiner Wahl.

Code herunterladen

Option 3: Auf Glitch remixen

Wenn du keinen Server hast, auf dem du deinen Webhook bereitstellen kannst, erstelle einen Remix unseres Webhook-Starterprojekts auf Glitch. So erhältst du eine öffentliche HTTPS-URL für deinen Webhook.

Um deinen eigenen Webhook auf Glitch zu erstellen, gehe wie folgt vor:

  1. Öffne dein Webhook-Starterprojekt auf Glitch: Auf Glitch remixen
  2. Klicke auf den Button „Remix Your Own“. Hierdurch wird eine Kopie des Projekts für dich erstellt.
  3. Klicke in der linken oberen Ecke auf das Dropdown-Menü und kopiere die öffentliche URL unterhalb der Projektbeschreibung. Dies wird die Basis-URL für deinen Webhook sein.
  4. Befolge die Anweisungen im Leitfaden zur App-Einrichtung, um deinen Webhook mit deiner Facebook-App zu verknüpfen. Deine Webhook-URL ist die Glitch-URL mit dem Anhang /webhook:
    https://

Los geht’s

Bevor du dein erstes Messenger-Erlebnis erstellen kannst, richte zunächst die Anmeldedaten für deine App ein.

1.
Richte deine Facebook-App ein

Sofern nicht bereits erledigt, befolge die Anweisungen im Leitfaden zur App-Einrichtung, um deine Facebook-App für die Nutzung der Messenger-Plattform einzurichten.

Die App befindet sich im Entwicklungsmodus.

Bis deine App eingereicht und für die öffentliche Verwendung im Messenger genehmigt wurde, erlauben Seitenschlüssel deiner Seite nur die Interaktion mit Facebook-Konten, die für deine App über die Rolle eines Administrators, Entwicklers oder Testers verfügen.

Um anderen Facebook-Konten diese Berechtigungen zuzuweisen, öffne den Tab „Rollen“ in den App-Einstellungen.

2.
Generiere einen Seiten-Zugriffsschlüssel

Alle Anfragen an die Messenger Platform APIs werden durch einen Seitenzugriffsschlüssel authentifiziert, der im access_token-Parameter des Abfrage-Strings enthalten ist.

Wenn du das nicht schon beim Einrichten deiner Facebook-App gemacht hast, erstelle einen Seiten-Zugriffsschlüssel mit folgenden Schritten:

  1. Öffne die Messenger-Einstellungen deiner App und nutze das Dropdown-Menü „Seite“ im Abschnitt „Schlüsselgenerierung“, um die Facebook-Seite auszuwählen, für die du einen Schlüssel erstellen möchtest. Hierdurch wird ein Zugriffsschlüssel im Feld „Seiten-Zugriffsschlüssel“ angezeigt.
  2. Klicke auf das Feld „Seiten-Zugriffsschlüssel“, um den Schlüssel in die Zwischenablage zu kopieren.

Der erstellte Schlüssel wird NICHT in dieser Nutzeroberfläche gespeichert. Jedes Mal, wenn du eine Seite aus dem Dropdown-Menü auswählst, wird ein neuer Schlüssel erstellt. Wenn ein neuer Schlüssel erstellt wird, funktionieren zuvor erstellte Schlüssel weiterhin.
3.
Speichere deinen Seitenschlüssel als Umgebungsvariable

Wir empfehlen dir, vertrauliche Informationen wie deinen Seiten-Zugriffsschlüssel zu schützen, indem du sie nicht in deinen Webhook hartcodierst.

Füge dazu Folgendes zu deinen Umgebungsvariablen hinzu. Dabei ist <PAGE_ACCESS_TOKEN> der gerade generierte Zugriffsschlüssel und <VERIFY_TOKEN> ist ein zufälliger String, den du zur Verifizierung deines Webhooks einstellst:

PAGE_ACCESS_TOKEN="

Umgebungsvariablen in Glitch

Wenn du Glitch verwendest, lege die Umgebungsvariablen in der bereitgestellten .env-Datei fest, damit sie nicht für andere Glitch-Nutzer*innen sichtbar sind.

4.
Füge deinen Seiten- und Bestätigungsschlüssel zu deinem Webhook hinzu

Jetzt musst du nur noch deinen Seiten-Zugriffsschlüssel und Bestätigungsschlüssel oben in deiner app.js-Datei einfügen, damit du sie in deiner Webhook-Logik verwenden kannst:

const PAGE_ACCESS_TOKEN = process.env.PAGE_ACCESS_TOKEN;
const VERIFY_TOKEN = process.env.VERIFY_TOKEN;

Einrichtung abgeschlossen

Erstelle dein erstes Messenger-Erlebnis

Erlebnis erstellen

In diesem Tutorial erstellen wir ein einfaches Messenger-Erlebnis, das Folgendes tut:

Parsen der Nachricht und der seitenspezifischen ID des Absenders aus einem eingehenden Webhook-Event.

Verarbeiten der Webhook-Events messages und messaging_postbacks.

Senden von Nachrichten über die Send API.

Beantworten von SMS-Nachrichten mit einer SMS.

Beantworten von Bildanhängen mit einer generischen Vorlage, die das empfangene Bild verwendet.

Bedingte Beantwortung einer Postback-Payload.


1.
Erstelle Stubs für Handler-Funktionen

Zunächst erstellen wir Stubs für drei Funktionen, die die eingehenden Webhook-Event-Arten verarbeiten, die unterstützt werden sollen, sowie Antworten über die Send API. Hierzu hängen wir Folgendes an die app.js-Datei an:

// Handles messages events
function handleMessage(sender_psid, received_message) {

}

// Handles messaging_postbacks events
function handlePostback(sender_psid, received_postback) {

}

// Sends response messages via the Send API
function callSendAPI(sender_psid, response) {
  
}
2.
Rufe die seitenspezifische ID des*der Absender*in ab

Um Nachrichten von Personen im Messenger zu beantworten, müssen wir zuerst wissen, wer die Absender*innen sind. In Messenger erreichst du das, indem du die seitenspezifische ID (PSID) des*der Absender*in aus dem eingehenden Webhook-Event abrufst.

Was ist eine PSID?


Einer Person wird für jede Facebook-Seite, mit der sie eine Unterhaltung beginnt, eine individuelle seitenspezifische ID (PSID) zugewiesen. Anhand dieser PSID wird der Absender einer Nachricht identifiziert.

Wenn du eine der Optionen im Abschnitt Starterprojekt weiter oben abgeschlossen hast, solltest du über einen einfachen /webhook-Endpunkt verfügen, der POST-Anfragen akzeptiert und den Hauptteil von empfangenen Webhook-Events protokolliert (sieht wie folgt aus):

app.post('/webhook', (req, res) => {  

  // Parse the request body from the POST
  let body = req.body;

  // Check the webhook event is from a Page subscription
  if (body.object === 'page') {

    // Iterate over each entry - there may be multiple if batched
    body.entry.forEach(function(entry) {

      // Get the webhook event. entry.messaging is an array, but 
      // will only ever contain one event, so we get index 0
      let webhook_event = entry.messaging[0];
      console.log(webhook_event);
      
    });

    // Return a '200 OK' response to all events
    res.status(200).send('EVENT_RECEIVED');

  } else {
    // Return a '404 Not Found' if event is not from a page subscription
    res.sendStatus(404);
  }

});

Um die PSID des Absenders abzurufen, aktualisiere den body.entry.forEach-Block mit dem folgenden Code, um die PSID aus der sender.id-Eigenschaft des Events zu extrahieren:

body.entry.forEach(function(entry) {

  // Gets the body of the webhook event
  let webhook_event = entry.messaging[0];
  console.log(webhook_event);

  // Get the sender PSID
  let sender_psid = webhook_event.sender.id;
  console.log('Sender PSID: ' + sender_psid);

});

Teste das Setup.


Öffne den Messenger und sende eine Nachricht an die Facebook-Seite, die mit deinem Messenger-Erlebnis verknüpft ist. Du erhältst keine Antwort im Messenger, solltest aber eine Nachricht mit deiner PSID in der Konsole sehen, wo dein Webhook ausgeführt wird:
Sender PSID: 1254938275682919
3.
Parse die Webhook-Event-Art

Unser Messenger-Erlebnis soll zwei Arten von Webhook-Events verarbeiten: messages und messaging_postback. Der Name der Event-Art ist nicht im Event-Hauptteil enthalten. Wir können ihn aber durch eine Prüfung auf bestimmte Objekteigenschaften ermitteln.

Was sind Webhook-Events?


Die Messenger-Plattform versendet Webhook-Events, um dich über Handlungen im Messenger zu informieren. Events werden im JSON-Format als POST-Anfragen an deinen Webhook gesendet. Weitere Informationen findest du unter Webhook-Events.

Aktualisiere hierzu du den body.entry.forEach-Block deines Webhooks mit einer Bedingung, die prüft, ob das empfangene Event eine message- oder postback-Eigenschaft enthält. Außerdem fügen wir Aufrufe zu den handleMessage()- und handlePostback()-Funktionen hinzu, für die wir zuvor Stubs erstellt haben:

body.entry.forEach(function(entry) {

  // Gets the body of the webhook event
  let webhook_event = entry.messaging[0];
  console.log(webhook_event);


  // Get the sender PSID
  let sender_psid = webhook_event.sender.id;
  console.log('Sender PSID: ' + sender_psid);

  // Check if the event is a message or postback and
  // pass the event to the appropriate handler function
  if (webhook_event.message) {
    handleMessage(sender_psid, webhook_event.message);        
  } else if (webhook_event.postback) {
    handlePostback(sender_psid, webhook_event.postback);
  }
  
});
4.
Verarbeite Textnachrichten

Jetzt, da die eingehenden Nachrichten an die jeweilige Handler-Funktion weitergeleitet werden, aktualisierst du handleMessage(), damit einfache Textnachrichten verarbeitet und beantwortet werden. Aktualisiere dazu den Code, um die Nachrichten-Payload der Antwort zu definieren, und übergib diese Payload dann an callSendAPI(). Definiere ein JSON-Objekt mit einer "text"-Eigenschaft, um eine einfache Textnachricht als Antwort zu senden:

function handleMessage(sender_psid, received_message) {

  let response;

  // Check if the message contains text
  if (received_message.text) {    

    // Create the payload for a basic text message
    response = {
      "text": `You sent the message: "${received_message.text}". Now send me an image!`
    }
  }  
  
  // Sends the response message
  callSendAPI(sender_psid, response);    
}
5.
Sende eine Nachricht mit der Send API

Jetzt ist es an der Zeit, deine erste Nachricht mit der Send API der Messenger-Plattform zu senden.

In handleMessage() rufst du callSendAPI() auf. Dieses muss jetzt aktualisiert werden, um den vollständigen Anfragehauptteil zu erstellen und an die Messenger-Plattform zu senden. Eine Anfrage an die Send API hat zwei Eigenschaften:

  • recipient: Legt den Empfänger der Nachricht fest. In diesem Fall wird die Person anhand ihrer PSID identifiziert.
  • message: Legt Details zur Nachricht fest, die gesendet werden soll. Hier legen wir das auf das Nachrichtenobjekt fest, das du aus der handleMessage()-Funktion übergeben hast.

Um den Anfragehauptteil zu erstellen, aktualisiere den Stub für callSendAPI() auf Folgendes:

function callSendAPI(sender_psid, response) {
  // Construct the message body
  let request_body = {
    "recipient": {
      "id": sender_psid
    },
    "message": response
  }
}

Jetzt musst du nur noch deine Nachricht senden, indem du eine POST-Anfrage an die Send API unter https://graph.facebook.com/v2.6/me/messages sendest.

Beachte, dass du deinen PAGE_ACCESS_TOKEN im access_token-Parameter des URL-Abfrage-Strings anhängen musst.

Stellen von HTTP-Anfragen

In dieser Schnellstartanleitung verwenden wir das Node.js-Anfragemodul zum Übermitteln von HTTP-Anfragen zurück an die Messenger-Plattform. Du kannst aber jeden beliebigen HTTP-Client verwenden.

Um das Anfragemodul zu installieren, führe über die Befehlszeile npm install request --save aus und importiere es dann, indem du Folgendes über app.js hinzufügst:

const request = require('request');
function callSendAPI(sender_psid, response) {
  // Construct the message body
  let request_body = {
    "recipient": {
      "id": sender_psid
    },
    "message": response
  }

  // Send the HTTP request to the Messenger Platform
  request({
    "uri": "https://graph.facebook.com/v2.6/me/messages",
    "qs": { "access_token": process.env.PAGE_ACCESS_TOKEN },
    "method": "POST",
    "json": request_body
  }, (err, res, body) => {
    if (!err) {
      console.log('message sent!')
    } else {
      console.error("Unable to send message:" + err);
    }
  }); 
}

Teste das Setup.

Sende im Messenger eine weitere Textnachricht an deine Facebook-Seite. Du solltest eine automatische Antwort von deinem Messenger-Erlebnis erhalten, die deine Nachricht wiederholt und dich auffordert, ein Bild zu senden.
6.
Verarbeite Anhänge

Da wir den Nachrichtenempfänger in unserer Antwort dazu aufgefordert haben, ein Bild zu senden, müssen wir als Nächstes unseren Code ändern, damit wir Anhänge verarbeiten können. Gesendete Anhänge werden automatisch von der Messenger-Plattform gespeichert und über eine URL in der payload.url-Eigenschaft von jedem Index im attachments-Array verfügbar gemacht. Wir extrahieren das also auch aus dem Event.

Welche Anhangsarten werden unterstützt?


Dein Messenger-Erlebnis kann die meisten Medientypen senden und empfangen, darunter Bilder, Audio, Video und Dateien. Medien werden angezeigt und können sogar in der Unterhaltung wiedergegeben werden, sodass du Rich-Media-Erlebnisse erstellen kannst.

Um zu ermitteln, ob es sich bei der Nachricht um einen Anhang handelt, aktualisiere die Bedingung in deiner handleMessage()-Funktion, um die received_message auf eine attachments-Eigenschaft zu prüfen, und extrahiere dann die URL dafür. Bei einem echten Bot würden wir das Array wiederholen, um zu prüfen, ob es mehrere Anhänge gibt. Für diesen Schnellstart rufen wir aber nur den ersten Anhang ab.

function handleMessage(sender_psid, received_message) {

  let response;

  // Checks if the message contains text
  if (received_message.text) {
    
    // Creates the payload for a basic text message, which
    // will be added to the body of our request to the Send API
    response = {
      "text": `You sent the message: "${received_message.text}". Now send me an attachment!`
    }

  } else if (received_message.attachments) {
  
    // Gets the URL of the message attachment
    let attachment_url = received_message.attachments[0].payload.url;
  
  } 
  
  // Sends the response message
  callSendAPI(sender_psid, response);    
}
7.
Sende eine strukturierte Nachricht

Als Nächstes senden wir eine Nachricht mit der generischen Vorlage als Antwort auf das Bild. Die generische Vorlage ist die am häufigsten verwendete Art von strukturierten Nachrichten. Damit kannst du ein Bild, Text und Buttons in einer Nachricht senden.

Gibt es noch weitere Nachrichtenvorlagen?


Ja. Die Messenger-Plattform bietet eine Reihe nützlicher Nachrichtenvorlagen, von denen jede eine andere gängige Nachrichtenstruktur unterstützt, darunter Listen, Zahlungsbelege, Buttons und mehr. Alle Details dazu findest du unter Vorlagen.

Nachrichtenvorlagen werden in der attachment-Eigenschaft der Nachricht definiert, die type- und payload-Eigenschaften enthält. In der payload legen wir die Details zu unserer generischen Vorlage in den folgenden Eigenschaften fest:

  • template_type: Legt die Art der verwendeten Vorlage für die Nachricht fest. Wir verwenden hier die generische Vorlage. Der Wert lautet also „generic“.
  • elements: Legt die benutzerdefinierten Eigenschaften der Vorlage fest. Für die generische Vorlage geben wir einen Titel, einen Untertitel, ein Bild und zwei Postback-Buttons an.

Für die strukturierte Nachricht verwenden wir die attachment_url, die uns als image_url gesendet wurde, in unserer Vorlage und fügen einige Postback-Buttons hinzu, damit der Nachrichtenempfänger antworten kann. Um die Nachrichten-Payload zu erstellen und die generische Vorlage zu senden, legen wir für handleMessage() Folgendes fest:

function handleMessage(sender_psid, received_message) {
  let response;
  
  // Checks if the message contains text
  if (received_message.text) {    
    // Create the payload for a basic text message, which
    // will be added to the body of our request to the Send API
    response = {
      "text": `You sent the message: "${received_message.text}". Now send me an attachment!`
    }
  } else if (received_message.attachments) {
    // Get the URL of the message attachment
    let attachment_url = received_message.attachments[0].payload.url;
    response = {
      "attachment": {
        "type": "template",
        "payload": {
          "template_type": "generic",
          "elements": [{
            "title": "Is this the right picture?",
            "subtitle": "Tap a button to answer.",
            "image_url": attachment_url,
            "buttons": [
              {
                "type": "postback",
                "title": "Yes!",
                "payload": "yes",
              },
              {
                "type": "postback",
                "title": "No!",
                "payload": "no",
              }
            ],
          }]
        }
      }
    }
  } 
  
  // Send the response message
  callSendAPI(sender_psid, response);    
}

Teste das Setup.

Sende im Messenger ein Bild an deine Facebook-Seite. Dein Messenger-Erlebnis sollte mit einer generischen Vorlage antworten.
8.
Verarbeite Postbacks

Als letzten Schritt verarbeiten wir das messaging_postbacks-Webhook-Event, das gesendet wird, wenn der*die Nachrichtenempfänger*in auf einen der Postback-Buttons in der generischen Vorlage tippt.

Was kann ich mit Postbacks machen?


Der Postback-Button sendet ein messaging_postbacks-Webhook-Event an deinen Webhook, das einen benutzerdefinierten String mit bis zu 1.000 Zeichen in der payload-Eigenschaft enthält. So kannst du einfach verschiedene Postback-Payloads implementieren, die du parsen und auf die du mit bestimmten Handlungen reagieren kannst.

Da unsere generische Vorlage dem*der Nachrichtenempfänger*in die Auswahl zwischen zwei Postback-Buttons bietet, antworten wir basierend auf dem Wert der payload-Eigenschaft des Postback-Events. Stelle dazu deinen handlePostback()-Stub auf Folgendes ein:

function handlePostback(sender_psid, received_postback) {
  let response;
  
  // Get the payload for the postback
  let payload = received_postback.payload;

  // Set the response based on the postback payload
  if (payload === 'yes') {
    response = { "text": "Thanks!" }
  } else if (payload === 'no') {
    response = { "text": "Oops, try sending another image." }
  }
  // Send the message to acknowledge the postback
  callSendAPI(sender_psid, response);
}

Teste das Setup.

Tippe im Messenger auf die einzelnen Postback-Buttons in der generischen Vorlage. Du solltest für jeden Button eine andere Antwort erhalten.
9.
Wenn alles geklappt hat, ist dein erstes Messenger-Erlebnis jetzt fertig.

Unterstützung für Entwickler*innen