EntrarComeçar teste grátis
Meta Tech Provider

Registre mensagens do WhatsApp no Airtable e envie a partir de uma base

O gatilho de webhook de entrada do Airtable aceita apenas requisições POST, então não consegue responder ao GET de verificação da Meta e não pode ser o destino do webhook de um número. Aponte o destino para um workflow do n8n que adiciona cada mensagem a uma tabela. O envio funciona de dentro do Airtable: uma automação Run a script pode chamar a Cloud API com fetch e o token do número guardado como secret.

POST only

O gatilho When webhook received do Airtable não aceita outro método, então não pode responder a um GET de verificação.

5 per second

Limite de requisições por segundo do gatilho de webhook de entrada do Airtable, com teto de 100 KB por payload.

50 fetches

Requisições que uma ação Run a script do Airtable pode fazer, cada uma com timeout de 30 segundos.

Por que o Airtable não consegue receber webhooks do WhatsApp diretamente?

Porque a Meta verifica o destino antes de entregar qualquer coisa. Ela envia uma requisição GET com um valor de desafio e espera receber o mesmo valor no corpo da resposta. O gatilho When webhook received do Airtable só aceita requisições POST e responde com um JSON fixo próprio, então a verificação não passa e a Meta nunca começa a entregar.

A solução é um passo intermediário. Um nó Webhook do n8n cuida da verificação e recebe cada mensagem, e o nó Airtable do n8n adiciona uma linha: remetente, nome do perfil, texto, id da mensagem, horário e o phone number id que recebeu. O mesmo formato funciona no Make ou no Zapier.

O passo intermediário traz um segundo benefício. O gatilho de webhook do Airtable permite cinco requisições por segundo, e uma ferramenta de workflow consegue enfileirar um pico que, de outra forma, seria recusado.

Como enviar um template de WhatsApp a partir de uma base do Airtable?

Com uma automação cuja ação é Run a script. O gatilho pode ser um registro entrando em uma view, um campo mudando ou um botão sendo clicado. O script lê o telefone e os campos do registro por input.config() e chama o endpoint de mensagens da Cloud API com fetch. Os scripts de automação do Airtable rodam no servidor, então não há restrição de navegador no caminho.

Guarde o token de acesso como secret no editor de scripts, e não no código. O Airtable oculta os secrets na saída do console e só deixa editar o script quem tem acesso a todos os secrets dele.

Use um template para qualquer contato que o cliente não tenha iniciado nas últimas 24 horas, já que texto livre só é entregue dentro dessa janela de atendimento. O script pode gravar de volta no registro o id da mensagem retornado, o que liga o envio à linha.

Run a script action: send an approved template
const { phone, name } = input.config();
const token = input.secret("WHATSAPP_TOKEN");
const res = await fetch(
  "https://graph.facebook.com/v23.0/<PHONE_NUMBER_ID>/messages",
  {
    method: "POST",
    headers: { Authorization: "Bearer " + token, "Content-Type": "application/json" },
    body: JSON.stringify({
      messaging_product: "whatsapp",
      to: phone,
      type: "template",
      template: {
        name: "order_ready",
        language: { code: "en" },
        components: [{ type: "body", parameters: [{ type: "text", text: name }] }],
      },
    }),
  },
);
output.set("result", await res.json());

Como deve ser a tabela de mensagens?

Uma linha por mensagem, com o id da mensagem do WhatsApp como campo primário. A Meta repete as entregas que considera falhas, e um workflow que consulta o id antes de adicionar nunca grava a mesma mensagem duas vezes.

Mantenha um campo de direção com inbound e outbound. Em um número Coexistência, as respostas que a equipe digita no app do WhatsApp Business chegam ao mesmo webhook como eventos smb_message_echoes, e registrá-las como linhas outbound dá à base a conversa completa, e não só um lado dela.

Ligue cada mensagem a uma tabela Contacts com chave no telefone só com dígitos, que é a forma que a Meta envia. Um rollup mostra então o horário da última mensagem inbound de cada contato, e esse único campo é o que uma automação precisa para decidir entre texto livre e template.

Erros comuns

  • Definir a URL de um webhook do Airtable como destino do número. Ele aceita só POST, o GET de verificação da Meta falha e nada é entregue.
  • Colar o token de acesso no corpo do script. Guarde-o como secret do script para que fique fora do código e dos logs.
  • Enviar texto livre de uma automação de registro para quem não escreveu nas últimas 24 horas. Só um template aprovado é entregue.
Fazendo isso com o EasyCoexistence

Conecte o número em easycoexistence.com, aponte o destino do webhook para o workflow do n8n que grava no Airtable e leia o phone number id e o token no painel. A partir de US$ 9 por número conectado por mês, caindo para US$ 1 conforme você adiciona números, com os primeiros 3 dias grátis.

Perguntas frequentes

O Run a script está disponível no plano gratuito do Airtable?

O Airtable lista a ação em todos os tipos de plano, com limitações variadas, e informa que ela não está disponível no trial do plano Team.

Posso dispensar o n8n e usar Make ou Zapier?

Sim. Qualquer um dos três pode receber o webhook, responder à verificação e adicionar a linha. O Airtable é a única peça que não pode ser o destino.

Um botão do Airtable pode enviar uma mensagem de WhatsApp?

Sim. Use o gatilho When a button is clicked com uma ação Run a script que chama a Cloud API, e os dados da linha preenchem o template.

A EasyCoexistence armazena as mensagens?

Não. A Meta entrega cada webhook na URL do seu n8n, e a única cópia é a que o seu workflow grava no Airtable.

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átis

Verificado em

WhatsApp e Airtable na Cloud API