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.
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.
Limite de requisições por segundo do gatilho de webhook de entrada do Airtable, com teto de 100 KB por payload.
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.
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.
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átisVerificado em