ВойтиНачать бесплатный пробный период
Meta Tech Provider

Запись сообщений WhatsApp в Airtable и отправка из базы

Входящий вебхук-триггер Airtable принимает только POST-запросы, поэтому он не может ответить на проверочный GET от Meta и не годится как адрес вебхука для номера. Направьте вебхук номера на рабочий процесс n8n, который добавляет каждое сообщение в таблицу. Отправка работает прямо из Airtable: автоматизация Run a script может вызывать Cloud API через fetch, а токен номера хранится как секрет.

POST only

Триггер When webhook received в Airtable не принимает других методов, поэтому не может ответить на проверочный GET.

5 per second

Ограничение частоты запросов для входящего вебхука Airtable, размер тела запроса не более 100 КБ.

50 fetches

Столько запросов может выполнить одно действие Run a script в Airtable, каждый с тайм-аутом 30 секунд.

Почему Airtable не может напрямую получать вебхуки WhatsApp?

Потому что Meta проверяет адрес, прежде чем что-либо доставлять. Она отправляет GET-запрос со значением challenge и ждёт, что это же значение вернётся в теле ответа. Триггер When webhook received в Airtable принимает только POST-запросы и отвечает собственным фиксированным JSON, поэтому проверка не проходит, и Meta не начинает доставку.

Решение: добавить один промежуточный шаг. Узел Webhook в n8n проходит проверку и принимает каждое сообщение, а узел Airtable в n8n добавляет строку: отправитель, имя профиля, текст, id сообщения, время и phone number id принимающего номера. Та же схема работает в Make или Zapier.

У промежуточного шага есть и второе преимущество. Вебхук-триггер Airtable допускает пять запросов в секунду, а инструмент автоматизации может поставить в очередь всплеск, который иначе был бы отклонён.

Как отправить шаблон WhatsApp из базы Airtable?

С помощью автоматизации, в которой действие называется Run a script. Триггером может быть попадание записи в представление, изменение поля или нажатие кнопки. Скрипт читает телефон и поля записи через input.config() и вызывает эндпоинт messages в Cloud API через fetch. Скрипты автоматизаций Airtable выполняются на сервере, поэтому ограничений браузера нет.

Храните токен доступа как секрет в редакторе скриптов, а не в коде. Airtable скрывает секреты в выводе консоли и позволяет редактировать скрипт только тем, у кого есть доступ ко всем его секретам.

Используйте шаблон для всего, что клиент не запрашивал в последние 24 часа: свободный текст доставляется только внутри этого окна. Скрипт может записать возвращённый id сообщения обратно в запись, и отправка окажется привязана к строке.

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

Как должна выглядеть таблица сообщений?

Одна строка на сообщение, а id сообщения WhatsApp служит основным полем. Meta повторяет доставки, которые считает неудавшимися, и рабочий процесс, который перед добавлением ищет этот id, никогда не запишет одно и то же сообщение дважды.

Заведите поле направления со значениями inbound и outbound. На номере с Coexistence ответы, которые команда пишет в приложении WhatsApp Business, приходят на тот же вебхук как события smb_message_echoes. Если записывать их как строки outbound, в базе будет вся переписка, а не только одна её сторона.

Свяжите каждое сообщение с таблицей Contacts, где ключом служит номер телефона только из цифр: именно в таком виде его присылает Meta. Тогда поле rollup покажет время последнего входящего сообщения по каждому контакту, и именно это поле нужно автоматизации, чтобы выбрать между свободным текстом и шаблоном.

Распространённые ошибки

  • Указать URL вебхука Airtable как адрес для номера. Он принимает только POST, проверочный GET от Meta не проходит, и ничего не доставляется.
  • Вставить токен доступа прямо в тело скрипта. Храните его как секрет скрипта, чтобы он не попадал ни в код, ни в логи.
  • Отправлять свободный текст из автоматизации записи тому, кто не писал больше 24 часов. Доставляется только одобренный шаблон.
Настройка с EasyCoexistence

Подключите номер на easycoexistence.com, направьте его вебхук на рабочий процесс n8n, который пишет в Airtable, а phone number id и токен возьмите в панели управления. От US$ 9 за подключённый номер в месяц, до US$ 1 по мере добавления номеров, первые 3 дня бесплатно.

Часто задаваемые вопросы

Доступно ли Run a script в бесплатном тарифе Airtable?

Airtable указывает это действие для всех типов тарифов с разными ограничениями и отмечает, что в пробном периоде тарифа Team оно недоступно.

Можно ли обойтись без n8n и взять Make или Zapier?

Да. Любой из трёх инструментов может принять вебхук, пройти проверку и добавить строку. Не может быть адресом назначения только сам Airtable.

Может ли кнопка в Airtable отправить сообщение WhatsApp?

Да. Используйте триггер When a button is clicked с действием Run a script, которое вызывает Cloud API, а данные строки подставьте в шаблон.

Хранит ли EasyCoexistence сообщения?

Нет. Meta доставляет каждый вебхук на ваш URL в n8n, и единственная копия остаётся там, куда её записывает ваш рабочий процесс: в Airtable.

Читайте дальше

Готовы начать?

Настройте WhatsApp Coexistence за несколько минут, а не месяцев. Приложение продолжит работать на телефоне.

Начать бесплатный пробный период

Проверено по состоянию на

WhatsApp и Airtable через Cloud API