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.









