InloggenGratis proefperiode starten
Meta Tech Provider

WhatsApp-berichten loggen in Airtable en versturen vanuit een base

De inkomende webhook-trigger van Airtable accepteert alleen POST-verzoeken. Daardoor kan hij het verificatie-GET-verzoek van Meta niet beantwoorden en kan hij zelf geen webhook-bestemming van een nummer zijn. Richt de bestemming op een n8n-workflow die elk bericht aan een tabel toevoegt. Verzenden werkt vanuit Airtable zelf: een Run a script-automatisering kan de Cloud API aanroepen met fetch, met het token van het nummer als secret.

POST only

De trigger When webhook received van Airtable accepteert geen andere methode, dus hij kan geen verificatie-GET beantwoorden.

5 per second

Verzoeklimiet van de inkomende webhook-trigger van Airtable, met een payload-limiet van 100 KB.

50 fetches

Verzoeken die één Run a script-actie van Airtable kan doen, elk met een time-out na 30 seconden.

Waarom kan Airtable geen WhatsApp-webhooks rechtstreeks ontvangen?

Omdat Meta een bestemming controleert voordat er iets wordt afgeleverd. Meta stuurt een GET-verzoek met een challenge-waarde en verwacht dezelfde waarde terug als body van het antwoord. De trigger When webhook received van Airtable accepteert alleen POST-verzoeken en antwoordt met zijn eigen vaste JSON, dus de controle kan niet slagen en Meta begint nooit met afleveren.

De oplossing is één stap ertussen. Een n8n Webhook-node handelt de verificatie af en ontvangt elk bericht, en de Airtable-node van n8n voegt een rij toe: afzender, profielnaam, tekst, bericht-ID, tijdstempel en de ID van het ontvangende telefoonnummer. Dezelfde opzet werkt in Make of Zapier.

Die tussenstap heeft nog een voordeel. De webhook-trigger van Airtable staat vijf verzoeken per seconde toe, en een workflowtool kan een piek in een wachtrij zetten die anders zou worden geweigerd.

Hoe verstuur je een WhatsApp-template vanuit een Airtable-base?

Met een automatisering waarvan de actie Run a script is. De trigger kan een record zijn dat een view binnenkomt, een veld dat verandert of een klik op een knop. Het script leest het telefoonveld en de andere velden van het record via input.config() en roept het endpoint messages van de Cloud API aan met fetch. Airtable-automatiseringsscripts draaien server-side, dus er is geen browserbeperking in de weg.

Sla het token op als secret in de scripteditor in plaats van in de code. Airtable maskeert secrets in de console-uitvoer en laat alleen mensen met toegang tot alle secrets van een script het bewerken.

Gebruik een template voor alles wat de klant de afgelopen 24 uur niet zelf heeft aangestoten, want vrije tekst wordt alleen binnen dat venster afgeleverd. Het script kan het teruggegeven bericht-ID terugschrijven naar het record, waardoor de verzending aan de rij gekoppeld is.

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

Hoe moet de berichtentabel eruitzien?

Eén rij per bericht, met het bericht-ID van WhatsApp als primair veld. Meta probeert een aflevering opnieuw als die mislukt lijkt, en een workflow die het ID opzoekt voordat hij toevoegt, schrijft nooit hetzelfde bericht twee keer.

Houd een veld direction bij met de waarden inbound en outbound. Op een Coexistence-nummer komen antwoorden die het team in de WhatsApp Business-app typt binnen op dezelfde webhook als smb_message_echoes-events. Als je die als outbound-rijen logt, krijgt de base het hele gesprek in plaats van één kant ervan.

Koppel elk bericht aan een tabel Contacts met als sleutel het telefoonnummer met alleen cijfers, de vorm die Meta stuurt. Een rollup toont dan het laatste inkomende tijdstip per contact, en dat ene veld heeft een automatisering nodig om te kiezen tussen vrije tekst en een template.

Veelgemaakte fouten

  • Een Airtable-webhook-URL instellen als bestemming van het nummer. Die accepteert alleen POST, het verificatie-GET-verzoek van Meta mislukt en er wordt nooit iets afgeleverd.
  • Het token in de scripttekst plakken. Sla het op als scriptsecret, zodat het niet in de code en de logs belandt.
  • Vrije tekst sturen vanuit een recordautomatisering naar iemand die de afgelopen 24 uur niet heeft geschreven. Alleen een goedgekeurd template wordt afgeleverd.
Dit doen met EasyCoexistence

Verbind het nummer op easycoexistence.com, richt de webhook-bestemming op de n8n-workflow die naar Airtable schrijft en lees de ID van het telefoonnummer en het token af in het dashboard. Vanaf US$ 9 per nummer per maand, dalend tot US$ 1 naarmate je nummers toevoegt, met de eerste 3 dagen gratis.

Veelgestelde vragen

Zit Run a script in het gratis abonnement van Airtable?

Airtable vermeldt de actie bij alle abonnementstypen, met wisselende beperkingen, en geeft aan dat hij niet beschikbaar is tijdens een proefperiode van een Team-abonnement.

Kan ik n8n overslaan en Make of Zapier gebruiken?

Ja. Alle drie kunnen de webhook ontvangen, de verificatie beantwoorden en de rij toevoegen. Airtable zelf is het enige onderdeel dat de bestemming niet kan zijn.

Kan een Airtable-knop een WhatsApp-bericht versturen?

Ja. Gebruik de trigger When a button is clicked met een Run a script-actie die de Cloud API aanroept, en de gegevens van de rij vullen het template.

Slaat EasyCoexistence de berichten op?

Nee. Meta levert elke webhook af op je n8n-URL, en de enige kopie is die je workflow naar Airtable schrijft.

Lees verder

Klaar om te beginnen?

Stel WhatsApp Coexistence in enkele minuten in, niet maanden. De app blijft op je telefoon werken.

Start je gratis proefperiode

Geverifieerd op

WhatsApp en Airtable op de Cloud API