Registra i messaggi WhatsApp su Google Sheets e invia da un foglio
Punta la destinazione del webhook del numero a un workflow n8n il cui nodo Google Sheets aggiunge una riga per messaggio: mittente, nome, testo, ID del messaggio e orario. Per inviare da un foglio, una funzione Apps Script può scorrere le righe e chiamare la Cloud API con UrlFetchApp, usando l'ID del numero di telefono e il token del numero. Il team continua a rispondere dall'app WhatsApp Business.
Richieste di scrittura dell'API di Google Sheets consentite al minuto per utente per progetto; 300 per progetto.
Chiamate URL Fetch di Apps Script per un account Google personale; gli account Workspace ne hanno 100.000.
Durata massima di una singola esecuzione di Apps Script prima che venga interrotta.
Come diventa una riga ogni messaggio WhatsApp?
Meta invia ogni messaggio del numero alla destinazione del webhook che hai impostato, qui un nodo Webhook di n8n che risponde anche alla verifica di Meta. Il nodo successivo è Google Sheets con l'operazione Append Row, che mappa i campi del payload nelle colonne: il numero del mittente, il nome del profilo, il testo, l'ID del messaggio WhatsApp, il timestamp e l'ID del numero di telefono che ha ricevuto il messaggio.
Se vuoi che i nuovi tentativi siano innocui, usa Append or Update Row con chiave sull'ID del messaggio invece di un semplice append. Meta recapita di nuovo un messaggio quando ritiene che la consegna sia fallita, e con la chiave sull'ID la seconda consegna diventa un aggiornamento della stessa riga.
Su un numero Coexistence, le risposte scritte nell'app WhatsApp Business arrivano allo stesso webhook come eventi smb_message_echoes. Registrali con una colonna di direzione e il foglio contiene entrambi i lati della conversazione.
Dove pesa la quota di Sheets?
Sulle scritture per utente. L'API di Sheets consente 300 richieste di scrittura al minuto per progetto e 60 al minuto per utente per progetto, e una credenziale n8n è un solo utente. Un workflow che aggiunge una riga per messaggio regge quindi circa un messaggio al secondo, in modo continuativo.
Per la maggior parte dei numeri di un negozio è più che sufficiente. Smette di esserlo dopo un template inviato a tutti, quando poche centinaia di clienti rispondono nel giro di pochi minuti. L'API risponde allora con l'errore 429 e, senza nuovi tentativi, alcune righe vanno perse.
Due rimedi, ognuno dei quali basta. Attiva i nuovi tentativi con un'attesa sul nodo Google Sheets, in linea con il consiglio di Google stessa di rallentare in modo esponenziale. Oppure raggruppa: fai raccogliere a n8n i messaggi per trenta secondi e aggiungili con un'unica richiesta, così molte scritture diventano una.
Come si inviano i template da un foglio?
Con Apps Script, dal menu Estensioni del foglio. Una funzione legge le righe non ancora inviate, chiama l'endpoint messages della Cloud API con UrlFetchApp per ciascuna e scrive nella riga l'ID del messaggio restituito e l'orario. Un trigger a tempo può eseguirla ogni pochi minuti, oppure puoi lanciarla a mano da un menu personalizzato.
Conserva il token di accesso nelle proprietà dello script e non nel codice, così chi può vedere lo script non lo vede.
Tieni presenti le quote. Un account Google personale ha 20.000 chiamate URL Fetch al giorno e un account Workspace 100.000, e ogni esecuzione si ferma dopo sei minuti. Elabora le righe a blocchi e segna ciascuna come inviata prima di passare alla successiva, così un'esecuzione interrotta riprende da dove era arrivata invece di inviare due volte.
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());
}
}Errori comuni
- Aggiungere righe senza una chiave sull'ID del messaggio. I nuovi tentativi di Meta scrivono allora lo stesso messaggio in due righe.
- Scrivere una riga per messaggio con una sola credenziale durante un picco di risposte. Il limite di 60 scritture al minuto per utente restituisce 429 e le righe si perdono.
- Inviare testo libero dal foglio a persone che non scrivono da 24 ore. Fuori da quella finestra consegna solo un template approvato.
Collega il numero su easycoexistence.com, punta la destinazione del suo webhook al workflow n8n e copia nello script l'ID del numero di telefono e il token. Da US$ 9 per numero al mese, fino a US$ 1 man mano che aggiungi numeri, con i primi 3 giorni di prova gratuita.
Domande frequenti
Posso usare Make o Zapier al posto di n8n?
Sì. Un webhook personalizzato di Make o un catch hook di Zapier riceve il messaggio e il loro passaggio Google Sheets aggiunge la riga.
Con quale account Google scrive n8n?
Con quello che ha autorizzato la credenziale Google di n8n. Quell'account deve avere accesso in modifica al foglio, e la sua quota di scrittura per utente è quella che il workflow consuma.
La colonna del telefono ha il formato corretto?
Salva i numeri come testo semplice, cifre con prefisso internazionale e senza il segno più, ovvero la forma in cui li invia Meta. Altrimenti Sheets li tratta come numeri, elimina il più iniziale e può riformattare i valori lunghi.
EasyCoexistence conserva una copia dei messaggi?
No. Meta consegna ogni webhook al tuo URL n8n, e il foglio è l'unica copia.
Continua a leggere
Pronto per iniziare?
Configura WhatsApp Coexistence in pochi minuti, non in mesi. L'app continua a funzionare sul telefono.
Inizia la prova gratuitaVerificato il