Iniciar sessãoIniciar teste gratuito
Meta Tech Provider

Registar mensagens WhatsApp no Google Sheets e enviar a partir de uma folha

Aponte o destino do webhook do número para um workflow n8n cujo nó Google Sheets acrescenta uma linha por mensagem: remetente, nome, texto, id da mensagem e hora. Para enviar a partir de uma folha, uma função 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 equipa continua a responder a partir da app WhatsApp Business.

60 / min

Pedidos de escrita da API Google Sheets permitidos por minuto por utilizador por projeto; 300 por projeto.

20,000 / day

Chamadas URL Fetch do Apps Script numa conta Google de consumidor; as contas Workspace têm 100 000.

6 min

Tempo máximo que uma única execução do Apps Script pode durar antes de ser interrompida.

Como se transforma cada mensagem WhatsApp numa linha?

A Meta envia cada mensagem do número para o destino do webhook que definir, aqui um nó Webhook do n8n que também responde ao pedido 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 de perfil, o texto, o id da mensagem WhatsApp, a data e hora e o phone number id de receção.

Use Append or Update Row com chave no id da mensagem, em vez de um simples acrescento, se quiser que as repetições sejam inofensivas. A Meta volta a entregar uma mensagem quando considera que a entrega falhou, e a chave no id transforma a segunda entrega numa atualização da mesma linha.

Num número Coexistence, as respostas escritas na app WhatsApp Business chegam ao mesmo webhook como eventos smb_message_echoes. Registe-as com uma coluna de direção e a folha fica com os dois lados da conversa.

Onde é que a quota do Sheets se faz sentir?

Nas escritas por utilizador. A API Sheets permite 300 pedidos de escrita por minuto por projeto e 60 por minuto por utilizador por projeto, e uma credencial n8n corresponde a um utilizador. Um workflow que acrescenta uma linha por mensagem consegue assim cerca de uma mensagem por segundo, de forma sustentada.

Isso chega para a maioria dos números de lojas. Deixa de chegar depois de um template de difusão, quando algumas centenas de clientes respondem em poucos minutos. A API responde então 429 Too Many Requests e, sem repetições, perdem-se linhas.

Há duas soluções, e qualquer uma basta. Ative as repetições com espera no nó Google Sheets, o que corresponde ao conselho da própria Google de abrandar de forma exponencial. Ou agrupe: faça o n8n recolher mensagens durante trinta segundos e acrescente-as num só pedido, o que converte muitas escritas numa.

Como se enviam templates a partir de uma folha?

Com Apps Script, a partir do menu Extensões da folha. Uma função lê as linhas ainda não enviadas, chama o endpoint de mensagens da Cloud API com UrlFetchApp para cada uma e escreve na linha o id da mensagem devolvido e a hora. Um acionador temporal pode executá-la de poucos em poucos minutos, ou pode executá-la manualmente a partir de 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 o veja.

Tenha as quotas presentes. Uma conta Google de consumidor tem 20 000 chamadas URL Fetch por dia e uma conta Workspace 100 000, e cada execução pára ao fim de seis minutos. Processe as linhas por blocos e marque cada uma como enviada antes de avançar, para que uma execução interrompida retome onde ficou em vez de enviar duas vezes.

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

Erros comuns

  • Acrescentar sem chave no id da mensagem. As repetições da Meta escrevem então a mesma mensagem em duas linhas.
  • Escrever uma linha por mensagem através de uma única credencial durante um pico de respostas. O limite de 60 escritas por minuto por utilizador devolve 429 e perdem-se linhas.
  • Enviar texto livre a partir da folha a pessoas que não escreveram nas últimas 24 horas. Fora dessa janela, só um template aprovado é entregue.
Fazer isto com a EasyCoexistence

Ligue o número em easycoexistence.com, aponte o destino do webhook para o workflow n8n e copie o phone number id e o token para o script. A partir de US$ 9 por número ligado por mês, descendo até US$ 1 à medida que adiciona números, com os primeiros 3 dias grátis.

Perguntas frequentes

Posso usar o Make ou o Zapier em vez do n8n?

Sim. Um webhook personalizado do Make ou um catch hook do Zapier recebe a mensagem e o respetivo passo Google Sheets acrescenta a linha.

Com que conta Google escreve o n8n?

Com a que autorizou a credencial Google do n8n. Essa conta precisa de acesso de edição à folha, e a sua quota de escrita por utilizador é a que o workflow consome.

A coluna do telefone está formatada corretamente?

Guarde os números como texto simples, com os dígitos e o indicativo do país e sem o sinal de mais, que é a forma como a Meta os envia. Caso contrário, o Sheets trata-os como números, o que elimina 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 ao seu URL do n8n, e a folha é a única cópia.

Continue a ler

Pronto para começar?

Configure a Coexistência do WhatsApp em minutos, não em meses. A aplicação continua a funcionar no telemóvel.

Começar período experimental gratuito

Verificado em

WhatsApp e Google Sheets na Cloud API