Запись сообщений WhatsApp в Airtable и отправка из базы
Входящий вебхук-триггер Airtable принимает только POST-запросы, поэтому он не может ответить на проверочный GET от Meta и не годится как адрес вебхука для номера. Направьте вебхук номера на рабочий процесс n8n, который добавляет каждое сообщение в таблицу. Отправка работает прямо из Airtable: автоматизация Run a script может вызывать Cloud API через fetch, а токен номера хранится как секрет.
Триггер When webhook received в Airtable не принимает других методов, поэтому не может ответить на проверочный GET.
Ограничение частоты запросов для входящего вебхука Airtable, размер тела запроса не более 100 КБ.
Столько запросов может выполнить одно действие 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 сообщения обратно в запись, и отправка окажется привязана к строке.
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.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 за несколько минут, а не месяцев. Приложение продолжит работать на телефоне.
Начать бесплатный пробный периодПроверено по состоянию на