AccediInizia la prova gratuita
Meta Tech Provider

Registra i messaggi WhatsApp in Airtable e invia da una base

Il trigger webhook in entrata di Airtable accetta solo richieste POST, quindi non può rispondere alla GET di verifica di Meta e non può essere la destinazione del webhook di un numero. Punta la destinazione su un workflow n8n che aggiunge ogni messaggio a una tabella. L'invio funziona da dentro Airtable: un'automazione Run a script può chiamare la Cloud API con fetch, usando il token del numero salvato come secret.

POST only

Il trigger When webhook received di Airtable non accetta altri metodi, quindi non può rispondere a una GET di verifica.

5 per second

Limite di richieste sul trigger webhook in entrata di Airtable, con un tetto di 100 KB per payload.

50 fetches

Richieste che una singola azione Run a script di Airtable può effettuare, ciascuna con timeout dopo 30 secondi.

Perché Airtable non può ricevere direttamente i webhook di WhatsApp?

Perché Meta controlla la destinazione prima di consegnare qualsiasi cosa. Invia una richiesta GET con un valore di challenge e si aspetta di riceverlo identico come corpo della risposta. Il trigger When webhook received di Airtable accetta solo richieste POST e risponde con un proprio JSON fisso, quindi la verifica non può riuscire e Meta non inizia mai la consegna.

La soluzione è un passaggio intermedio. Un nodo Webhook di n8n gestisce la verifica e riceve ogni messaggio, poi il nodo Airtable di n8n aggiunge una riga: mittente, nome del profilo, testo, id del messaggio, timestamp e phone number id del numero che ha ricevuto il messaggio. Lo stesso schema funziona con Make o Zapier.

Il passaggio intermedio ha anche un secondo vantaggio. Il trigger webhook di Airtable ammette cinque richieste al secondo, mentre uno strumento di workflow può mettere in coda un picco che altrimenti verrebbe rifiutato.

Come si invia un template di WhatsApp da una base Airtable?

Con un'automazione la cui azione è Run a script. Il trigger può essere un record che entra in una vista, un campo che cambia o un pulsante cliccato. Lo script legge il telefono e i campi del record tramite input.config() e chiama con fetch l'endpoint messages della Cloud API. Gli script delle automazioni di Airtable girano lato server, quindi non c'è nessuna restrizione del browser di mezzo.

Salva il token di accesso come secret nell'editor dello script, non nel codice. Airtable oscura i secret nell'output della console e permette di modificare lo script solo a chi ha accesso a tutti i suoi secret.

Usa un template per qualsiasi messaggio che il cliente non ha sollecitato nelle ultime 24 ore, perché il testo libero viene consegnato solo dentro quella finestra. Lo script può scrivere nel record l'id del messaggio restituito, che lega l'invio alla riga.

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

Come dovrebbe essere fatta la tabella dei messaggi?

Una riga per messaggio, con l'id del messaggio WhatsApp come campo primario. Meta ritenta le consegne che ritiene fallite, e un workflow che cerca l'id prima di aggiungere la riga non scrive mai due volte lo stesso messaggio.

Tieni un campo direzione con inbound e outbound. Su un numero Coexistence, le risposte che il team scrive nell'app WhatsApp Business arrivano allo stesso webhook come eventi smb_message_echoes, e registrarle come righe outbound dà alla base la conversazione completa, non solo un lato.

Collega ogni messaggio a una tabella Contacts con chiave il numero di telefono con sole cifre, che è la forma inviata da Meta. Un rollup mostra poi l'ultimo orario inbound per contatto, e quell'unico campo è ciò che serve a un'automazione per scegliere tra testo libero e template.

Errori comuni

  • Impostare l'URL di un webhook Airtable come destinazione del numero. Accetta solo POST, la GET di verifica di Meta fallisce e non viene mai consegnato nulla.
  • Incollare il token di accesso nel corpo dello script. Salvalo come secret dello script, così resta fuori dal codice e dai log.
  • Inviare testo libero da un'automazione su record a chi non scrive da più di 24 ore. Viene consegnato solo un template approvato.
Farlo con EasyCoexistence

Collega il numero su easycoexistence.com, punta la destinazione del suo webhook sul workflow n8n che scrive su Airtable e leggi il phone number id e il token dalla dashboard. Da US$ 9 per numero al mese, fino a US$ 1 man mano che aggiungi numeri, con i primi 3 giorni di prova gratuita.

Domande frequenti

Run a script è disponibile nel piano gratuito di Airtable?

Airtable indica l'azione su tutti i tipi di piano con limitazioni diverse e precisa che non è disponibile durante la prova di un piano Team.

Posso fare a meno di n8n e usare Make o Zapier?

Sì. Ognuno dei tre può ricevere il webhook, rispondere alla verifica e aggiungere la riga. L'unico pezzo che non può essere la destinazione è Airtable stesso.

Un pulsante di Airtable può inviare un messaggio WhatsApp?

Sì. Usa il trigger When a button is clicked con un'azione Run a script che chiama la Cloud API, e i dati della riga compilano il template.

EasyCoexistence conserva i messaggi?

No. Meta consegna ogni webhook al tuo URL n8n, e l'unica copia è quella che il tuo workflow scrive su Airtable.

Continua a leggere

Pronto per iniziare?

Configura WhatsApp Coexistence in pochi minuti, non in mesi. L'app continua a funzionare sul telefono.

Inizia la prova gratuita

Verificato il

WhatsApp e Airtable sulla Cloud API