Zapisuj wiadomości WhatsApp w Airtable i wysyłaj je z bazy
Wyzwalacz przychodzącego webhooka w Airtable przyjmuje wyłącznie żądania POST, więc nie odpowie na weryfikacyjne żądanie GET od Meta i sam nie może być adresem docelowym webhooka numeru. Wskaż jako adres docelowy przepływ w n8n, który dopisuje każdą wiadomość do tabeli. Wysyłanie działa z wnętrza Airtable: automatyzacja z akcją Run a script może wywołać Cloud API przez fetch, a token numeru jest przechowywany jako sekret.
Wyzwalacz When webhook received w Airtable nie przyjmuje innych metod, więc nie odpowie na weryfikacyjne żądanie GET.
Limit żądań wyzwalacza przychodzącego webhooka w Airtable, z ograniczeniem payloadu do 100 KB.
Liczba żądań, które może wysłać jedna akcja Run a script w Airtable, a każde wygasa po 30 sekundach.
Dlaczego Airtable nie może odbierać webhooków WhatsApp bezpośrednio?
Ponieważ Meta sprawdza adres docelowy, zanim cokolwiek dostarczy. Wysyła żądanie GET z wartością challenge i oczekuje, że ta sama wartość wróci w treści odpowiedzi. Wyzwalacz When webhook received w Airtable przyjmuje tylko żądania POST i odpowiada własnym, stałym JSON-em, więc weryfikacja nie może się powieść, a Meta nigdy nie zacznie dostarczać wiadomości.
Rozwiązaniem jest jeden krok pośredni. Węzeł Webhook w n8n obsługuje weryfikację i odbiera każdą wiadomość, a węzeł Airtable w n8n dopisuje wiersz: nadawca, nazwa profilu, tekst, identyfikator wiadomości, znacznik czasu i identyfikator numeru telefonu, który wiadomość odebrał. Ten sam schemat działa na platformie Make lub w Zapierze.
Krok pośredni ma jeszcze jedną zaletę. Wyzwalacz webhooka w Airtable dopuszcza pięć żądań na sekundę, a narzędzie do przepływów potrafi ustawić w kolejce nagły napływ wiadomości, który inaczej zostałby odrzucony.
Jak wysłać szablon WhatsApp z bazy Airtable?
Za pomocą automatyzacji, której akcją jest Run a script. Wyzwalaczem może być pojawienie się rekordu w widoku, zmiana pola lub kliknięcie przycisku. Skrypt odczytuje numer telefonu i pola rekordu przez input.config() i wywołuje endpoint wiadomości w Cloud API za pomocą fetch. Skrypty automatyzacji w Airtable działają po stronie serwera, więc nie ma tu ograniczeń przeglądarki.
Token dostępu przechowuj jako sekret w edytorze skryptu, a nie w kodzie. Airtable ukrywa sekrety w danych wyjściowych konsoli i pozwala edytować skrypt tylko osobom mającym dostęp do wszystkich jego sekretów.
Szablonu użyj zawsze, gdy klient nie napisał w ciągu ostatnich 24 godzin, ponieważ dowolny tekst jest dostarczany tylko w tym oknie. Skrypt może zapisać zwrócony identyfikator wiadomości z powrotem w rekordzie, co wiąże wysyłkę z wierszem.
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());Jak powinna wyglądać tabela z wiadomościami?
Jeden wiersz na wiadomość, z identyfikatorem wiadomości WhatsApp jako polem głównym. Meta ponawia dostarczenia, które uzna za nieudane, a przepływ sprawdzający identyfikator przed dopisaniem nigdy nie zapisze tej samej wiadomości dwa razy.
Dodaj pole kierunku z wartościami inbound i outbound. W numerze Coexistence odpowiedzi wpisywane przez zespół w aplikacji WhatsApp Business trafiają na ten sam webhook jako zdarzenia smb_message_echoes, a zapisanie ich jako wierszy outbound daje bazie pełną rozmowę, a nie tylko jedną jej stronę.
Powiąż każdą wiadomość z tabelą Contacts, w której kluczem jest numer telefonu zapisany samymi cyframi, czyli w formie, w jakiej wysyła go Meta. Pole rollup pokaże wtedy czas ostatniej wiadomości przychodzącej od kontaktu, a to jedno pole wystarcza automatyzacji, by wybrać między dowolnym tekstem a szablonem.
Typowe błędy
- Ustawienie adresu URL webhooka z Airtable jako adresu docelowego numeru. Przyjmuje on tylko POST, weryfikacyjne żądanie GET od Meta kończy się błędem i nic nie jest dostarczane.
- Wklejenie tokenu dostępu do treści skryptu. Zapisz go jako sekret skryptu, aby nie trafił do kodu ani do logów.
- Wysyłanie dowolnego tekstu z automatyzacji rekordu do osoby, która nie napisała od 24 godzin. Dostarczany jest tylko zatwierdzony szablon.
Połącz numer na easycoexistence.com, wskaż adres docelowy jego webhooka na przepływ w n8n zapisujący dane do Airtable, a identyfikator numeru telefonu i token odczytaj w panelu. Od US$ 9 za numer miesięcznie, przy większej liczbie numerów spada do US$ 1, a pierwsze 3 dni są bezpłatne.
Najczęściej zadawane pytania
Czy Run a script jest dostępne w darmowym planie Airtable?
Airtable podaje tę akcję we wszystkich typach planów z różnymi ograniczeniami i zaznacza, że nie jest dostępna w okresie próbnym planu Team.
Czy mogę pominąć n8n i użyć Make lub Zapiera?
Tak. Każde z tych trzech narzędzi potrafi odebrać webhook, odpowiedzieć na weryfikację i dopisać wiersz. Jedynie sam Airtable nie może być adresem docelowym.
Czy przycisk w Airtable może wysłać wiadomość WhatsApp?
Tak. Użyj wyzwalacza When a button is clicked z akcją Run a script, która wywołuje Cloud API, a dane z wiersza uzupełnią szablon.
Czy EasyCoexistence przechowuje wiadomości?
Nie. Meta dostarcza każdy webhook na Twój adres URL w n8n, a jedyną kopią jest ta, którą Twój przepływ zapisuje w Airtable.
Czytaj dalej
Gotowy, aby zacząć?
Skonfiguruj WhatsApp Coexistence w kilka minut, nie miesięcy. Aplikacja nadal działa na telefonie.
Rozpocznij bezpłatny okres próbnyZweryfikowano w