TL;DR: Бесплатный план Tally включает нативные webhook — используйте их для прямой отправки данных формы в REST API Whapi.Cloud и доставки уведомления WhatsApp в течение нескольких секунд после каждой отправки. Аккаунт Zapier не нужен. Вам потребуются: развёрнутый приёмник (Node.js или любой HTTP-сервер), API-токен Whapi.Cloud и подключённый номер WhatsApp. Настройка занимает менее 30 минут. Предпочитаете no-code? Переходите к разделу про Zapier и Make — но цена за задачу быстро накапливается после бесплатного уровня.
Бесплатный нативный webhook Tally достаточен для доставки уведомления WhatsApp в момент отправки формы. Никаких аккаунтов Zapier, никаких платных уровней автоматизации. Достаточно одного прямого REST-вызова к Whapi.Cloud. В этом руководстве описана точная структура payload, который отправляет Tally, работающий приёмник на Node.js и обработка ошибок, которая предотвращает незаметную потерю уведомлений под нагрузкой.
Что Означает «Без Middleware» в Этой Интеграции
Без middleware — ваш webhook-приёмник напрямую вызывает Whapi.Cloud: данные формы проходят один HTTP-переход от Tally до WhatsApp без каких-либо сторонних платформ посередине.
Прямой REST-вызов также снижает задержку доставки: отправка через Tally обычно приходит как сообщение WhatsApp менее чем за две секунды, по сравнению с обходом в 3–15 секунд, который добавляет многоэтапный конвейер автоматизации.
Компромисс реальный, но небольшой: вы пишете минимальный HTTP-сервер или serverless-функцию, но избавляетесь от поштучной оплаты и внешней зависимости. Три шага, один путь данных: Tally запускает webhook, ваш приёмник вызывает Whapi.Cloud, WhatsApp доставляет сообщение — без платного посредника на каком-либо этапе.
Что Нужно Перед Началом
Три предварительных условия: аккаунт Whapi.Cloud с подключённым номером WhatsApp, публичный HTTPS-endpoint для вашего приёмника и форма Tally на любом плане.
-
Аккаунт Whapi.Cloud с подключённым номером: Зарегистрируйтесь на panel.whapi.cloud/register, подключите номер WhatsApp, отсканировав QR-код, и скопируйте API-токен из панели управления. Сканирование занимает около двух минут — в отличие от официального API, верификация бизнеса в Meta не требуется.
-
Публичный HTTPS-endpoint: Tally требует доступный URL для отправки payload webhook. Подходит любой облачный сервер, VPS или serverless-функция. Для локального тестирования используйте ngrok или webhook.site для проверки payload перед развёртыванием.
-
Форма Tally: Любая форма на любом плане Tally; webhook доступны на бесплатном плане без необходимости перехода на платный.
Как Tally Отправляет Данные Формы: Структура Webhook Payload
При отправке формы Tally посылает единственный JSON-объект на URL вашего webhook через HTTP POST. Ключевая часть — data.fields: массив, где каждый объект содержит метку поля, уникальный ключ, тип поля и отправленное значение.
Вот как выглядит типичный webhook payload Tally для контактной формы с тремя полями:
{
"eventId": "3c679025-76b0-4a17-a4e5-f54ac2c5d7e0",
"eventType": "FORM_RESPONSE",
"createdAt": "2026-05-04T08:30:00.000Z",
"data": {
"responseId": "mApVL4",
"submissionId": "mApVL4",
"formId": "wkaBcd",
"formName": "Contact Form",
"createdAt": "2026-05-04T08:30:00.000Z",
"fields": [
{
"key": "question_mLpNx3",
"label": "Full Name",
"type": "INPUT_TEXT",
"value": "Jane Smith"
},
{
"key": "question_Bq7kL2",
"label": "Email",
"type": "INPUT_EMAIL",
"value": "[email protected]"
},
{
"key": "question_Kp2mQ9",
"label": "Phone",
"type": "INPUT_PHONE_NUMBER",
"value": "+1 415 555 1234"
}
]
}
}
key каждого поля — уникальный идентификатор, специфичный для конкретной формы (например, question_mLpNx3), который меняется от формы к форме. Используйте поле label для поиска в коде приёмника, если только вы не закодировали конкретные ключи после проверки payload вашей формы.
Поиск по метке более читаем и выживает при редактировании формы Tally. Жёстко заданные ключи чуть быстрее, но ломаются при переименовании поля. Для приёмника уведомлений о лидах поиск по метке — практический выбор по умолчанию.
Маппинг Полей Tally в Сообщение WhatsApp
Простейший паттерн: итерируйте data.fields, ищите по label и подставляйте value в строку шаблона сообщения. Поля с множественным выбором и поля загрузки файлов возвращают массивы — обработайте их отдельно, если форма содержит такие типы. Маппинг меток полей Tally к переменным сообщений WhatsApp позволяет создавать персонализированные уведомления о лидах в масштабе: каждая отправка становится именованным уведомлением, а не обезличенным пингом.
Пошагово: Подключение Форм Tally к WhatsApp через Whapi.Cloud
В интеграции две части: Whapi.Cloud обеспечивает доставку WhatsApp, а Tally инициирует отправку данных. Сначала настройте Whapi.Cloud, чтобы URL webhook был готов, когда вы откроете настройки Tally.
Webhook Tally доступен на бесплатном плане — для настройки пользовательского URL webhook платный переход не требуется.
Шаг 1: Подключите Номер WhatsApp к Whapi.Cloud
Войдите в панель Whapi.Cloud, создайте новый канал и отсканируйте QR-код аккаунтом WhatsApp, который будет отправлять уведомления. После подключения скопируйте API-токен, отображаемый на странице канала. Этот токен передаётся в заголовке Authorization: Bearer каждого API-запроса.
Сохраните токен в переменной окружения (WHAPI_TOKEN), а не прописывайте его в коде. Панель управления позволяет регенерировать токен в любой момент без переподключения номера.
Шаг 2: Разверните Webhook-приёмник
Разверните приёмник Node.js из раздела с кодом ниже на любом сервере или serverless-платформе с публичным HTTPS-URL. Приёмник должен принимать POST-запросы по настроенному пути и возвращать ответ 200 в течение нескольких секунд — Tally считает любой ответ не-2xx неудачей доставки. Для быстрого тестирования направьте webhook на webhook.site или используйте ngrok http 3000, чтобы открыть локальный сервер до развёртывания.
Шаг 3: Настройте URL Webhook в Tally
Откройте форму Tally, перейдите в Интеграции → Webhook и вставьте HTTPS-URL вашего приёмника. Tally отправляет POST-запрос на этот URL при каждой отправке формы. Настройка заголовка аутентификации на стороне Tally не требуется — безопасность обеспечивает ваш приёмник, принимающий запросы и вызывающий Whapi.Cloud с токеном Bearer.
Если ваш приёмник находится за файрволом или белым списком IP-адресов, учтите, что Tally не публикует статический диапазон исходящих IP. Используйте открытый публичный endpoint или выделенный входящий прокси для продакшн-развёртываний.
Шаг 4: Протестируйте с Реальной Отправкой
Нажмите Отправить тестовую форму в панели Webhook Tally. Ваш приёмник запишет входящий payload. Убедитесь, что data.fields содержит метки, которые ожидает ваш код, затем проверьте, что сообщение WhatsApp приходит на целевой номер. Если сообщение не приходит, проверьте логи приёмника для статуса ответа Whapi.Cloud, прежде чем что-либо менять.
Код Webhook-приёмника: Реализация на Node.js
Приёмник ниже делает ровно одну вещь: извлекает нужные поля из payload Tally и отправляет отформатированное сообщение WhatsApp через endpoint /messages/text Whapi.Cloud. Использует Node.js с Express, менее 50 строк кода, SDK не нужен.
Перед запуском установите зависимости: npm install express node-fetch. В Node 18+ встроен нативный fetch, поэтому импорт node-fetch можно пропустить на современных runtime.
const express = require('express');
const fetch = require('node-fetch'); // omit if Node 18+ (native fetch available)
const app = express();
app.use(express.json());
const WHAPI_TOKEN = process.env.WHAPI_TOKEN; // Whapi.Cloud API token from dashboard
const NOTIFY_PHONE = process.env.NOTIFY_PHONE; // Recipient number, e.g. 14155551234
// Find a submitted value by field label inside Tally's fields array
function getField(fields, label) {
const found = fields.find(f => f.label === label);
return found ? String(found.value ?? '') : 'N/A';
}
app.post('/webhook', async (req, res) => {
const fields = req.body?.data?.fields ?? [];
const name = getField(fields, 'Full Name');
const email = getField(fields, 'Email');
const phone = getField(fields, 'Phone');
// Compose the WhatsApp notification body
const messageBody = `New Tally submission:\n\nName: ${name}\nEmail: ${email}\nPhone: ${phone}`;
let whapiStatus = 'sent';
try {
const response = await fetch('https://gate.whapi.cloud/messages/text', {
method: 'POST',
headers: {
'Authorization': `Bearer ${WHAPI_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: NOTIFY_PHONE, // phone number with country code, no leading +
body: messageBody
})
});
if (!response.ok) {
const err = await response.json().catch(() => ({}));
console.error('[whapi] error', response.status, err);
whapiStatus = 'failed';
// Still return 200 to Tally; Whapi errors do not benefit from Tally retrying
}
} catch (networkErr) {
console.error('[whapi] network error', networkErr.message);
whapiStatus = 'failed';
}
res.json({ received: true, whatsapp: whapiStatus });
});
app.listen(process.env.PORT || 3000, () =>
console.log('Webhook receiver listening')
);
Заголовок Authorization: Bearer — единственная аутентификация, которую требует Whapi.Cloud: никакой установки SDK, никакого OAuth-потока, никакой библиотеки для настройки. API принимает обычный JSON и возвращает обычный JSON.
Поле to принимает номер телефона получателя с кодом страны без ведущего знака плюс (например, 14155551234 для номера США). Формат Chat ID WhatsApp ([email protected]) также работает. API принимает оба варианта.
Для быстрого теста через cURL перед развёртыванием полного приёмника отправьте сообщение вручную, чтобы убедиться в правильности токена и номера:
curl -X POST https://gate.whapi.cloud/messages/text \
-H "Authorization: Bearer YOUR_WHAPI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"to": "14155551234", "body": "Test from Tally webhook setup"}'
Успешный ответ возвращает JSON-объект с полем message, содержащим ID отправленного сообщения. Если этот тест работает, конфигурация токена и номера верна. Переходите к развёртыванию полного приёмника.
Обработка Ошибок: Что Происходит при Неудачном Запросе к Whapi.Cloud
Неудачный HTTP-запрос к Whapi.Cloud не повторяется автоматически. Если ваш приёмник отправляет 200 в Tally до подтверждения успеха вызова WhatsApp, уведомление теряется без следа в логах Tally.
Отправляйте 200 в Tally только после завершения вызова Whapi.Cloud — логируйте ошибки локально и ставьте их в очередь для повтора, а не рассчитывайте на то, что Tally повторит отправку.
Три кода ошибок, с которыми вы столкнётесь на практике, и что они означают:
| HTTP-статус | Причина | Решение |
401 Unauthorized |
API-токен отсутствует, истёк или был скопирован неверно | Регенерируйте токен в панели Whapi.Cloud и обновите WHAPI_TOKEN |
400 Bad Request |
Некорректный payload: обычно отсутствующее значение to или неверный формат номера |
Залогируйте req.body и убедитесь, что поле to содержит только цифры с кодом страны |
5xx Server Error |
Временная проблема сети Whapi.Cloud или WhatsApp | Реализуйте повторы с экспоненциальным backoff; большинство временных ошибок разрешается за секунды |
Сценарий, который застаёт врасплох команды с высокообъёмными лид-формами: отправка сотен одинаковых сообщений в быстрой последовательности может активировать серверное обнаружение спама WhatsApp. Это не ограничение API Whapi.Cloud — продакшн-планы Whapi.Cloud не устанавливают лимитов скорости на сообщение. Ограничение приходит от инфраструктуры WhatsApp, которая мониторит пики объёма. Для пиковых сценариев добавьте небольшую задержку между отправками или ставьте отправки в очередь перед обработкой.
No-Code Альтернативы: Когда Использовать Zapier, Make или n8n
Для команд без сервера для развёртывания Zapier, Make и n8n подключают Tally к WhatsApp без backend-кода — ценой поштучной оплаты, которая растёт с каждой отправкой.
-
Zapier: Самый простой GUI, наибольшая библиотека готовых коннекторов. Бесплатный план поддерживает 100 задач/месяц, достаточных только для очень низкого объёма тестирования. Платные тарифы взимают плату за zap (задачу), поэтому каждая отправка формы потребляет один кредит. Выбирайте Zapier, если команда не имеет технических возможностей, а объём не превышает нескольких сотен отправок в месяц.
-
Make (бывший Integromat): Мощнее Zapier для многошаговых потоков; бесплатный план позволяет 1 000 операций/месяц. Цена масштабируется за операцию. Хороший компромисс для нетехнических команд, которым нужна условная логика без написания кода.
-
n8n: Open-source и self-hosted. Неограниченные workflow на self-hosted инстансах, без поштучной оплаты. Правильный выбор для технических команд, чувствительных к стоимости, которым нужна гибкость автоматизации без регулярных комиссий за задачи. Смотрите руководство по интеграции n8n Whapi.Cloud для пошагового подключения.
Нетехнические команды используют Zapier или Make; разработчики используют нативный webhook Tally с прямым REST-вызовом Whapi.Cloud. Решающий фактор — не техническая сложность, а предсказуемость объёма отправок и соответствие поштучной оплаты вашему бюджету.
Сравнение Стоимости: Прямой API vs. Платформы Middleware
Zapier и Make взимают плату за задачу или операцию: каждая отправка формы, инициирующая уведомление WhatsApp, потребляет одну тарифицируемую единицу. Whapi.Cloud взимает плату за подключённый номер WhatsApp в месяц, а не за сообщение.
Фиксированная ежемесячная ставка Whapi.Cloud за номер означает, что 5 000 сообщений, инициированных формой, стоят столько же, сколько 50 — платформы middleware выставляют счёт линейно с каждой отправкой.
| Метод | Бесплатный план | Модель оплаты (платный) | Нужен код | Лучше для |
| Zapier | 100 задач/месяц | За задачу (zap); стоимость растёт с отправками | Нет | Нетехнических команд, малого объёма |
| Make | 1 000 операций/месяц | За операцию; стоимость растёт с отправками | Нет | Многошаговых потоков, no-code предпочтений |
| n8n (self-hosted) | Неограниченно | Только расходы на сервер (фиксированная инфраструктура) | Частично (на основе конфигурации) | Технических команд, чувствительных к стоимости |
| Whapi.Cloud (прямой) | 5 диалогов/месяц (Sandbox) | Фиксированная ежемесячная плата за номер WhatsApp (независимо от объёма) | Да (~50 строк) | Разработчиков, предсказуемых затрат, высокого объёма |
Разница в модели ценообразования важнее всего, когда объём отправок непредсказуем. Запуск продукта или вирусная кампания могут увеличить отправки форм в 10 раз за ночь. При поштучном middleware этот пик умножает ваш счёт за автоматизацию. С подпиской по номеру Whapi.Cloud тот же пик не стоит ничего дополнительно.
Начните с бесплатного Sandbox Whapi.Cloud для тестирования полного потока перед подключением продакшн-номера WhatsApp. Sandbox бессрочно бесплатен без временного ограничения — используйте его для проверки кода приёмника, маппинга полей и обработки ошибок перед запуском. Смотрите полную документацию API Whapi.Cloud для деталей запроса/ответа по всем endpoint.
Webhook Tally работают с любым языком или runtime, поддерживающим HTTP. Пример на Node.js здесь — отправная точка; та же логика применима к Python (с requests или httpx), Go, PHP или Cloudflare Worker. Отсутствие привязки к языку со стороны WhatsApp означает, что вы можете сменить язык приёмника без изменения конфигурации Tally или Whapi.Cloud.









