Registre mensagens do WhatsApp no Google Sheets e envie a partir de uma planilha
Aponte o destino do webhook do número para um workflow do n8n cujo nó do Google Sheets adiciona uma linha por mensagem: remetente, nome, texto, id da mensagem e horário. Para enviar a partir da planilha, uma função do Apps Script pode percorrer as linhas e chamar a Cloud API com UrlFetchApp, usando o phone number id e o token do número. A equipe continua respondendo pelo app do WhatsApp Business.
Requisições de escrita da API do Google Sheets permitidas por minuto por usuário por projeto; 300 por projeto.
Chamadas de URL Fetch do Apps Script para uma conta Google pessoal; contas Workspace têm 100.000.
Tempo máximo que uma única execução do Apps Script pode rodar antes de ser interrompida.
Como cada mensagem do WhatsApp vira uma linha?
A Meta envia cada mensagem do número para o destino do webhook que você definiu, aqui um nó Webhook do n8n que também responde à requisição de verificação da Meta. O nó seguinte é o Google Sheets com a operação Append Row, que mapeia campos do payload para colunas: o número do remetente, o nome do perfil, o texto, o id da mensagem do WhatsApp, o horário e o phone number id que recebeu.
Use Append or Update Row com chave no id da mensagem, em vez de um append simples, se quiser que repetições sejam inofensivas. A Meta reenvia uma mensagem quando acha que uma entrega falhou, e a chave no id transforma a segunda entrega em uma atualização da mesma linha.
Em um número com Coexistência, as respostas digitadas no app do WhatsApp Business chegam ao mesmo webhook como eventos smb_message_echoes. Registre-as com uma coluna de direção e a planilha guarda os dois lados.
Onde a cota do Sheets pesa?
Nas escritas por usuário. A API do Sheets permite 300 requisições de escrita por minuto por projeto e 60 por minuto por usuário por projeto, e uma credencial do n8n é um usuário. Um workflow que adiciona uma linha por mensagem aguenta, portanto, cerca de uma mensagem por segundo, de forma contínua.
Isso é de sobra para a maioria dos números de loja. Deixa de ser depois de um template em massa, quando algumas centenas de clientes respondem em poucos minutos. A API então devolve 429 Too Many Requests e, sem repetições, linhas se perdem.
Há duas correções, e qualquer uma basta. Ative as repetições com espera no nó do Google Sheets, o que segue o conselho do próprio Google de recuar de forma exponencial. Ou agrupe: faça o n8n juntar as mensagens por trinta segundos e adicioná-las em uma única requisição, transformando várias escritas em uma.
Como enviar templates a partir de uma planilha?
Com o Apps Script, pelo menu Extensões da planilha. Uma função lê as linhas ainda não enviadas, chama o endpoint de mensagens da Cloud API com UrlFetchApp para cada uma e grava o id da mensagem retornado e o horário na linha. Um gatilho por tempo pode executá-la a cada poucos minutos, ou você pode rodá-la manualmente em um menu personalizado.
Guarde o token de acesso nas propriedades do script, e não no código, para que quem puder ver o script não veja o token.
Lembre-se das cotas. Uma conta Google pessoal tem 20.000 chamadas de URL Fetch por dia e uma conta Workspace 100.000, e cada execução é interrompida após seis minutos. Processe as linhas em blocos e marque cada uma como enviada antes de seguir, para que uma execução interrompida continue de onde parou em vez de enviar duas vezes.
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());
}
}Erros comuns
- Adicionar linhas sem chave no id da mensagem. As repetições da Meta então gravam a mesma mensagem em duas linhas.
- Gravar uma linha por mensagem por uma única credencial durante um pico de respostas. O limite de 60 escritas por minuto por usuário devolve 429 e linhas se perdem.
- Enviar texto livre da planilha para pessoas que não escreveram nas últimas 24 horas. Só um template aprovado é entregue fora dessa janela de atendimento.
Conecte o número em easycoexistence.com, aponte o destino do webhook para o workflow do n8n e copie o phone number id e o token para o script. A partir de US$ 9 por número conectado por mês, caindo até US$ 1 conforme você adiciona números, com os 3 primeiros dias grátis.
Perguntas frequentes
Posso usar Make ou Zapier em vez do n8n?
Sim. Um webhook personalizado do Make ou um catch hook do Zapier recebe a mensagem, e o passo do Google Sheets deles adiciona a linha.
Com qual conta Google o n8n escreve?
Com a que autorizou a credencial Google do n8n. Essa conta precisa de acesso de edição à planilha, e a cota de escrita por usuário dela é a que o workflow consome.
A coluna de telefone está formatada corretamente?
Guarde os números como texto simples, só dígitos com código do país e sem o sinal de mais, que é a forma como a Meta envia. Caso contrário, o Sheets os trata como números, o que remove o sinal de mais inicial e pode reformatar valores longos.
A EasyCoexistence guarda uma cópia das mensagens?
Não. A Meta entrega cada webhook para a sua URL do n8n, e a planilha é a única cópia.
Continue lendo
Pronto para começar?
Configure o WhatsApp Coexistence em minutos, não em meses. O aplicativo continua funcionando no celular.
Começar teste grátisVerificado em