Iniciar sessãoIniciar teste gratuito
Meta Tech Provider

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.

POST only

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.

5 per second

Limite de pedidos do trigger de webhook de entrada do Airtable, com um limite de 100 KB de payload.

50 fetches

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.

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 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.
Fazer isto com a EasyCoexistence

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 gratuito

Verificado em

WhatsApp e Airtable na Cloud API