Zaloguj sięRozpocznij bezpłatny okres próbny
Meta Tech Provider

Zapisuj wiadomości WhatsApp w Google Sheets i wysyłaj z arkusza

Ustaw adres docelowy webhooka numeru na przepływ n8n, w którym węzeł Google Sheets dopisuje wiersz dla każdej wiadomości: nadawca, imię, tekst, identyfikator wiadomości i czas. Aby wysyłać z arkusza, funkcja Apps Script może przejść po wierszach i wywołać Cloud API przez UrlFetchApp, używając identyfikatora numeru telefonu (phone number id) i tokenu. Zespół nadal odpowiada z aplikacji WhatsApp Business.

60 / min

Liczba żądań zapisu do Google Sheets API dozwolona na minutę na użytkownika na projekt; 300 na projekt.

20,000 / day

Wywołania URL Fetch w Apps Script dla zwykłego konta Google; konta Workspace dostają 100 000.

6 min

Najdłuższy czas, przez jaki pojedyncze wykonanie Apps Script może działać, zanim zostanie zatrzymane.

Jak każda wiadomość WhatsApp trafia do wiersza?

Meta wysyła każdą wiadomość z numeru na adres docelowy webhooka, który ustawisz. Tutaj jest to węzeł Webhook w n8n, który odpowiada też na żądanie weryfikacji od Meta. Kolejny węzeł to Google Sheets z operacją Append Row, mapujący pola z payloadu na kolumny: numer nadawcy, nazwę profilu, tekst, identyfikator wiadomości WhatsApp, znacznik czasu i identyfikator numeru telefonu odbiorcy.

Jeśli chcesz, by ponowne dostarczenia były nieszkodliwe, użyj Append or Update Row z kluczem w postaci identyfikatora wiadomości zamiast zwykłego dopisywania. Meta dostarcza wiadomość ponownie, gdy uzna, że dostarczenie się nie udało, a klucz na identyfikatorze zamienia drugie dostarczenie w aktualizację tego samego wiersza.

Na numerze Coexistence odpowiedzi wpisane w aplikacji WhatsApp Business trafiają do tego samego webhooka jako zdarzenia smb_message_echoes. Zapisz je z kolumną kierunku, a arkusz będzie zawierał obie strony rozmowy.

Gdzie przeszkadza limit Sheets?

Przy zapisach na użytkownika. Google Sheets API pozwala na 300 żądań zapisu na minutę na projekt i 60 na minutę na użytkownika na projekt, a poświadczenie n8n to jeden użytkownik. Przepływ dopisujący jeden wiersz na wiadomość może więc obsłużyć około jednej wiadomości na sekundę w sposób ciągły.

Dla większości numerów sklepowych to aż nadto. Przestaje wystarczać po wysyłce szablonu do wielu odbiorców, gdy kilkaset osób odpowiada w ciągu kilku minut. API odpowiada wtedy kodem 429 Too Many Requests i bez ponowień wiersze giną.

Są dwa rozwiązania, każde wystarczy. Włącz ponowienia z oczekiwaniem w węźle Google Sheets, co zgadza się z zaleceniem samego Google, by wycofywać się wykładniczo. Albo grupuj: niech n8n zbiera wiadomości przez trzydzieści sekund i dopisuje je jednym żądaniem, co zamienia wiele zapisów w jeden.

Jak wysyłać szablony z arkusza?

Za pomocą Apps Script, z menu Rozszerzenia w arkuszu. Funkcja odczytuje wiersze, które nie zostały jeszcze wysłane, dla każdego wywołuje endpoint wiadomości Cloud API przez UrlFetchApp i zapisuje w wierszu zwrócony identyfikator wiadomości oraz czas. Wyzwalacz czasowy może uruchamiać ją co kilka minut, a możesz też odpalać ją ręcznie z własnego menu.

Token dostępu przechowuj we właściwościach skryptu, a nie w kodzie, żeby osoby mające wgląd w skrypt go nie widziały.

Pamiętaj o limitach. Zwykłe konto Google ma 20 000 wywołań URL Fetch dziennie, a konto Workspace 100 000, a każde wykonanie kończy się po sześciu minutach. Przetwarzaj wiersze porcjami i oznaczaj każdy jako wysłany, zanim przejdziesz dalej, żeby przerwane uruchomienie wznowiło pracę od miejsca zatrzymania, zamiast wysyłać dwa razy.

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());
  }
}

Typowe błędy

  • Dopisywanie bez klucza na identyfikatorze wiadomości. Ponowienia Meta zapisują wtedy tę samą wiadomość w dwóch wierszach.
  • Zapisywanie jednego wiersza na wiadomość przez jedno poświadczenie podczas fali odpowiedzi. Limit 60 zapisów na minutę na użytkownika zwraca 429 i wiersze przepadają.
  • Wysyłanie z arkusza dowolnego tekstu do osób, które nie pisały od 24 godzin. Poza tym oknem dociera tylko zatwierdzony szablon.
Z EasyCoexistence zrobisz to

Połącz numer na easycoexistence.com, ustaw adres docelowy jego webhooka na przepływ n8n i skopiuj identyfikator numeru telefonu oraz token do skryptu. Od US$ 9 za numer miesięcznie, spadając do US$ 1 wraz z dodawaniem kolejnych numerów, z pierwszymi 3 dniami bezpłatnie.

Najczęściej zadawane pytania

Czy mogę użyć Make lub Zapiera zamiast n8n?

Tak. Własny webhook w Make lub catch hook w Zapierze odbiera wiadomość, a ich krok Google Sheets dodaje wiersz.

Jako które konto Google zapisuje n8n?

Jako to, które autoryzowało poświadczenie Google w n8n. To konto potrzebuje uprawnień do edycji arkusza, a jego limit zapisów na użytkownika jest tym, który zużywa przepływ.

Czy kolumna z numerem telefonu jest poprawnie sformatowana?

Zapisuj numery jako zwykły tekst: cyfry z numerem kierunkowym kraju, bez znaku plus, czyli w postaci, w jakiej wysyła je Meta. W przeciwnym razie Sheets traktuje je jak liczby, co usuwa początkowy plus i może zmienić format długich wartości.

Czy EasyCoexistence przechowuje kopię wiadomości?

Nie. Meta dostarcza każdy webhook na Twój adres URL n8n, a arkusz jest jedyną kopią.

Czytaj dalej

Gotowy, aby zacząć?

Skonfiguruj WhatsApp Coexistence w kilka minut, nie miesięcy. Aplikacja nadal działa na telefonie.

Rozpocznij bezpłatny okres próbny

Zweryfikowano w

WhatsApp i Google Sheets w Cloud API