Registar mensagens do WhatsApp no Airtable e enviar a partir de uma base
O trigger de webhook de entrada do Airtable só aceita pedidos POST, por isso 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 n8n que acrescenta cada mensagem a uma tabela. O envio faz-se a partir do próprio Airtable: uma automação Run a script pode chamar a Cloud API com fetch e o token do número guardado como segredo.
O trigger When webhook received do Airtable não aceita outro método, por isso não consegue responder a um GET de verificação.
Limite de pedidos do trigger de webhook de entrada do Airtable, com um limite de 100 KB de payload.
Pedidos que uma ação Run a script do Airtable pode fazer, cada um com um limite de 30 segundos.
Porque é que o Airtable não consegue receber webhooks do WhatsApp diretamente?
Porque a Meta verifica um destino antes de entregar seja o que for. Envia um pedido GET com um valor de desafio e espera receber esse mesmo valor no corpo da resposta. O trigger When webhook received do Airtable só aceita pedidos POST e responde com o seu próprio JSON fixo, pelo que a verificação não passa e a Meta nunca começa a entregar.
A solução é um passo intermédio. Um nó Webhook do n8n trata da verificação e recebe cada mensagem, e o nó Airtable do n8n acrescenta uma linha: remetente, nome de perfil, texto, id da mensagem, data e hora e o phone number id que recebeu a mensagem. A mesma estrutura funciona no Make ou no Zapier.
O passo intermédio tem uma segunda vantagem. O trigger de webhook do Airtable admite cinco pedidos por segundo, e uma ferramenta de workflows consegue pôr em fila um pico que, de outro modo, seria recusado.
Como se envia um template do WhatsApp a partir de uma base do Airtable?
Com uma automação cuja ação seja Run a script. O trigger pode ser um registo a entrar numa vista, um campo a mudar ou um botão a ser clicado. O script lê o telemóvel e os campos do registo através de input.config() e chama o endpoint de mensagens da Cloud API com fetch. Os scripts de automação do Airtable correm no servidor, por isso não há restrições de navegador pelo caminho.
Guarde o token de acesso como segredo no editor de scripts, e não no código. O Airtable oculta os segredos na saída da consola e só permite a edição a quem tenha acesso a todos os segredos de um script.
Use um template para tudo o que o cliente não tenha originado nas últimas 24 horas, já que o texto livre só é entregue dentro dessa janela. O script pode gravar no registo o id da mensagem devolvido, o que associa 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 principal. A Meta repete as entregas que considera falhadas, e um workflow que procura o id antes de acrescentar nunca grava a mesma mensagem duas vezes.
Mantenha um campo de direção com inbound e outbound. Num número Coexistence, as respostas que a equipa escreve na app do WhatsApp Business chegam ao mesmo webhook como eventos smb_message_echoes, e registá-las como linhas outbound dá à base a conversa completa, e não apenas um dos lados.
Associe cada mensagem a uma tabela Contactos, com chave no número de telemóvel só com dígitos, que é o formato que a Meta envia. Um rollup mostra então a hora da última mensagem recebida de cada contacto, e esse único campo é o que uma automação precisa para decidir entre texto livre e template.
Erros comuns
- Definir um URL de webhook do Airtable como destino do número. Só aceita POST, o GET de verificação da Meta falha e nada é entregue.
- Colar o token de acesso no corpo do script. Guarde-o como segredo do script para que fique fora do código e dos registos.
- Enviar texto livre a partir de uma automação de registos a alguém que não escreve há mais de 24 horas. Só um template aprovado é entregue.
Ligue o número em easycoexistence.com, aponte o destino do webhook para o workflow n8n que escreve no Airtable e leia o phone number id e o token no painel. A partir de US$ 9 por número ligado por mês, descendo para US$ 1 à medida que adiciona números, com os primeiros 3 dias grátis.
Perguntas frequentes
A ação Run a script está disponível no plano gratuito do Airtable?
O Airtable indica a ação em todos os tipos de plano, com limitações variáveis, e refere que não está disponível numa avaliação do plano Team.
Posso dispensar o n8n e usar o Make ou o Zapier?
Sim. Qualquer um dos três pode receber o webhook, responder à verificação e acrescentar 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 trigger When a button is clicked com uma ação Run a script que chame a Cloud API, e os dados da linha preenchem o template.
A EasyCoexistence guarda as mensagens?
Não. A Meta entrega cada webhook ao seu URL do n8n, e a única cópia é a que o seu workflow grava no Airtable.
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 gratuitoVerificado em