AnmeldenKostenlose Testphase starten
Meta Tech Provider

WhatsApp-Nachrichten in Google Sheets protokollieren und aus einer Tabelle senden

Richten Sie das Webhook-Ziel der Nummer auf einen n8n-Workflow ein, dessen Google-Sheets-Node pro Nachricht eine Zeile anhängt: Absender, Name, Text, Nachrichten-ID und Uhrzeit. Zum Senden aus einer Tabelle kann eine Apps-Script-Funktion die Zeilen durchlaufen und die Cloud API mit UrlFetchApp aufrufen, mit der Telefonnummern-ID und dem Token der Nummer. Das Team antwortet weiterhin in der WhatsApp Business App.

60 / min

Zulässige Schreibanfragen der Google Sheets API pro Minute, pro Nutzer und Projekt; 300 pro Projekt.

20,000 / day

Apps-Script-URL-Fetch-Aufrufe für ein privates Google-Konto; Workspace-Konten erhalten 100.000.

6 min

Maximale Laufzeit einer einzelnen Apps-Script-Ausführung, bevor sie beendet wird.

Wie wird aus jeder WhatsApp-Nachricht eine Zeile?

Meta sendet jede Nachricht der Nummer per POST an das von Ihnen festgelegte Webhook-Ziel, hier ein n8n-Webhook-Node, der auch die Verifizierungsanfrage von Meta beantwortet. Der nächste Node ist Google Sheets mit der Operation Append Row. Er ordnet Felder aus der Payload den Spalten zu: Nummer des Absenders, Profilname, Text, WhatsApp-Nachrichten-ID, Zeitstempel und Telefonnummern-ID des Empfängers.

Nutzen Sie statt eines einfachen Anhängens besser Append or Update Row mit der Nachrichten-ID als Schlüssel, damit Wiederholungen unschädlich bleiben. Meta stellt eine Nachricht erneut zu, wenn die Zustellung vermeintlich fehlgeschlagen ist. Mit der ID als Schlüssel wird die zweite Zustellung zu einer Aktualisierung derselben Zeile.

Bei einer Coexistence-Nummer erreichen Antworten, die in der WhatsApp Business App getippt werden, denselben Webhook als smb_message_echoes-Ereignisse. Protokollieren Sie sie mit einer Spalte für die Richtung, und die Tabelle enthält beide Seiten.

Wo greift das Sheets-Kontingent?

Bei den Schreibzugriffen pro Nutzer. Die Sheets API erlaubt 300 Schreibanfragen pro Minute und Projekt sowie 60 pro Minute, pro Nutzer und Projekt, und eine n8n-Credential ist ein Nutzer. Ein Workflow, der pro Nachricht eine Zeile anhängt, schafft daher dauerhaft etwa eine Nachricht pro Sekunde.

Für die meisten Shop-Nummern reicht das locker. Es reicht nicht mehr nach einem Broadcast-Template, wenn einige hundert Kunden innerhalb weniger Minuten antworten. Die API antwortet dann mit 429 Too Many Requests, und ohne Wiederholungen gehen Zeilen verloren.

Zwei Lösungen, jede genügt für sich. Aktivieren Sie am Google-Sheets-Node Wiederholungen mit Wartezeit, was dem Rat von Google selbst entspricht, exponentiell zurückzufahren. Oder bündeln Sie: Lassen Sie n8n dreißig Sekunden lang Nachrichten sammeln und in einer einzigen Anfrage anhängen, sodass aus vielen Schreibzugriffen einer wird.

Wie senden Sie Templates aus einer Tabelle?

Mit Apps Script, über das Menü Erweiterungen der Tabelle. Eine Funktion liest die noch nicht gesendeten Zeilen, ruft für jede mit UrlFetchApp den Messages-Endpoint der Cloud API auf und schreibt die zurückgegebene Nachrichten-ID und die Uhrzeit in die Zeile. Ein zeitgesteuerter Trigger kann sie alle paar Minuten ausführen, oder Sie starten sie von Hand über ein eigenes Menü.

Speichern Sie das Token in den Skripteigenschaften statt im Code, damit es für jeden, der das Skript einsehen kann, verborgen bleibt.

Behalten Sie die Kontingente im Blick. Ein privates Google-Konto erhält 20.000 URL-Fetch-Aufrufe pro Tag, ein Workspace-Konto 100.000, und jede Ausführung endet nach sechs Minuten. Verarbeiten Sie die Zeilen in Blöcken und markieren Sie jede als gesendet, bevor Sie weitermachen. So setzt ein abgebrochener Lauf dort fort, wo er stand, statt doppelt zu senden.

Apps Script: send one approved template per unsent row
function sendPending() {
  const token = PropertiesService.getScriptProperties().getProperty("WHATSAPP_TOKEN");
  const sheet = SpreadsheetApp.getActive().getSheetByName("Send");
  const rows = sheet.getDataRange().getValues();
  for (let i = 1; i < rows.length; i++) {
    const [phone, name, sentAt] = rows[i];
    if (sentAt) continue;
    const res = UrlFetchApp.fetch("https://graph.facebook.com/v23.0/<PHONE_NUMBER_ID>/messages", {
      method: "post",
      contentType: "application/json",
      headers: { Authorization: "Bearer " + token },
      payload: JSON.stringify({
        messaging_product: "whatsapp", to: String(phone), type: "template",
        template: { name: "order_ready", language: { code: "en" },
          components: [{ type: "body", parameters: [{ type: "text", text: name }] }] },
      }),
    });
    sheet.getRange(i + 1, 3).setValue(new Date());
  }
}

Häufige Fehler

  • Anhängen ohne Schlüssel auf der Nachrichten-ID. Die Wiederholungen von Meta schreiben dieselbe Nachricht dann in zwei Zeilen.
  • Eine Zeile pro Nachricht über eine einzige Credential schreiben, während viele Antworten gleichzeitig eintreffen. Das Limit von 60 Schreibzugriffen pro Minute und Nutzer liefert 429, und Zeilen gehen verloren.
  • Freitext aus der Tabelle an Personen senden, die in den letzten 24 Stunden nicht geschrieben haben. Außerhalb dieses Fensters kommt nur ein genehmigtes Template an.
Mit EasyCoexistence

Verbinden Sie die Nummer auf easycoexistence.com, richten Sie ihr Webhook-Ziel auf den n8n-Workflow aus und kopieren Sie die Telefonnummern-ID und das Token in das Skript. Ab US$ 9 pro Nummer und Monat, mit jeder weiteren Nummer bis US$ 1, die ersten 3 Tage kostenlos.

Häufig gestellte Fragen

Kann ich Make oder Zapier statt n8n verwenden?

Ja. Ein benutzerdefinierter Make-Webhook oder ein Zapier-Catch-Hook empfängt die Nachricht, und der jeweilige Google-Sheets-Schritt fügt die Zeile hinzu.

Mit welchem Google-Konto schreibt n8n?

Mit dem Konto, das die n8n-Google-Credential autorisiert hat. Dieses Konto braucht Bearbeitungsrechte für die Tabelle, und sein Schreibkontingent pro Nutzer ist das, das der Workflow verbraucht.

Ist die Telefonspalte korrekt formatiert?

Speichern Sie Nummern als reinen Text: Ziffern mit Ländervorwahl und ohne Pluszeichen, so wie Meta sie sendet. Sonst behandelt Sheets sie als Zahlen, entfernt ein führendes Plus und kann lange Werte umformatieren.

Speichert EasyCoexistence eine Kopie der Nachrichten?

Nein. Meta stellt jeden Webhook an Ihre n8n-URL zu, und die Tabelle ist die einzige Kopie.

Weiterlesen

Bereit für den Start?

Richten Sie WhatsApp Coexistence in wenigen Minuten statt Monaten ein. Die App funktioniert weiterhin auf dem Telefon.

Kostenlose Testphase starten

Verifiziert am

WhatsApp und Google Sheets über die Cloud API