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.
Liczba żądań zapisu do Google Sheets API dozwolona na minutę na użytkownika na projekt; 300 na projekt.
Wywołania URL Fetch w Apps Script dla zwykłego konta Google; konta Workspace dostają 100 000.
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.
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.
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óbnyZweryfikowano w