TL;DR: El plan gratuito de Tally incluye webhooks nativos: úselos para enviar datos de formularios directamente a la REST API de Whapi.Cloud y entregar una notificación de WhatsApp en segundos tras cada envío. No se requiere cuenta de Zapier. Necesita un receptor desplegado (Node.js o cualquier servidor HTTP), un token de API de Whapi.Cloud y un número de WhatsApp conectado. La configuración tarda menos de 30 minutos. ¿Prefiere sin código? Salte a la sección de Zapier y Make, pero el precio por tarea se acumula rápidamente más allá del plan gratuito.
El webhook nativo gratuito de Tally es suficiente para entregar una notificación de WhatsApp en el momento en que se envía un formulario. Sin cuenta de Zapier, sin nivel de automatización de pago. Basta con una llamada REST directa a Whapi.Cloud. Esta guía explica la estructura exacta del payload que envía Tally, un receptor funcional en Node.js y el manejo de errores que evita que las notificaciones se pierdan silenciosamente bajo carga.
Qué Significa "Sin Middleware" en Esta Integración
Sin middleware significa que su receptor webhook llama directamente a Whapi.Cloud: los datos del formulario viajan en un solo salto HTTP desde Tally hasta WhatsApp, sin ninguna plataforma de terceros en el camino.
Una llamada REST directa también reduce la latencia de entrega: un envío de Tally generalmente llega como mensaje de WhatsApp en menos de dos segundos, frente al recorrido de 3 a 15 segundos que agrega una canalización de automatización de múltiples saltos.
La compensación es real pero pequeña: usted escribe un servidor HTTP mínimo o una función serverless, pero elimina la facturación por tarea y la dependencia externa. Tres pasos, un camino de datos: Tally dispara el webhook, su receptor llama a Whapi.Cloud, WhatsApp entrega el mensaje — sin intermediario de pago en ningún paso.
Lo Que Necesita Antes de Comenzar
Tres requisitos previos: una cuenta de Whapi.Cloud con un número de WhatsApp conectado, un endpoint HTTPS público para su receptor y un formulario Tally en cualquier plan.
-
Cuenta de Whapi.Cloud con un número conectado: Regístrese en panel.whapi.cloud/register, conecte un número de WhatsApp escaneando un código QR y copie su token de API desde el panel. El escaneo tarda unos dos minutos — a diferencia del proceso oficial de la API, no se requiere verificación empresarial de Meta.
-
Un endpoint HTTPS público: Tally requiere una URL accesible para enviar los payloads del webhook. Cualquier servidor cloud, VPS o función serverless funciona. Para pruebas locales, use ngrok o webhook.site para inspeccionar los payloads antes de desplegar.
-
Un formulario Tally: Cualquier formulario en cualquier plan de Tally; los webhooks están disponibles en el plan gratuito sin necesidad de actualización.
Cómo Tally Envía Datos del Formulario: Entendiendo el Payload del Webhook
Cuando se envía un formulario, Tally manda un único objeto JSON a su URL de webhook mediante HTTP POST. La parte crítica es data.fields: un array donde cada objeto contiene la etiqueta del campo, una clave única, el tipo de campo y el valor enviado.
Así es como se ve un payload típico del webhook de Tally para un formulario de contacto con tres campos:
{
"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"
}
]
}
}
La key de cada campo es un ID único específico del formulario (p. ej., question_mLpNx3) que cambia por formulario. Use el campo label para la búsqueda en su código receptor a menos que codifique claves específicas tras inspeccionar el payload de su propio formulario.
La búsqueda por etiqueta es más legible y sobrevive a las ediciones del formulario Tally. Las claves codificadas son ligeramente más rápidas pero se rompen si renombra un campo. Para un receptor de notificaciones de leads, la búsqueda por etiqueta es la opción predeterminada práctica.
Mapear Campos de Tally a un Mensaje de WhatsApp
El patrón más simple: itere data.fields, busque por label e interpole el value en una cadena de plantilla de mensaje. Los campos de selección múltiple y los de carga de archivos devuelven arrays — manéjelos por separado si su formulario incluye esos tipos. Mapear etiquetas de campos de Tally a variables de mensajes de WhatsApp es lo que permite alertas de leads personalizadas a escala: cada envío se convierte en una notificación con nombre en lugar de un ping genérico.
Paso a Paso: Conectar Formularios Tally a WhatsApp mediante Whapi.Cloud
La integración tiene dos partes: Whapi.Cloud gestiona la entrega de WhatsApp y Tally activa el envío de datos. Configure Whapi.Cloud primero para que la URL del webhook esté lista cuando abra la configuración de Tally.
El webhook de Tally está disponible en el plan gratuito — no se requiere actualización de pago para configurar una URL de webhook personalizada.
Paso 1: Conecte Su Número de WhatsApp a Whapi.Cloud
Inicie sesión en el panel de Whapi.Cloud, cree un nuevo canal y escanee el código QR con la cuenta de WhatsApp que enviará las notificaciones. Una vez conectado, copie el token de API que aparece en la página del canal. Este token va en el encabezado Authorization: Bearer de cada solicitud de API.
Guarde el token en una variable de entorno (WHAPI_TOKEN) en lugar de codificarlo directamente. El panel le permite regenerar el token en cualquier momento sin reconectar el número.
Paso 2: Despliegue Su Receptor Webhook
Despliegue el receptor Node.js de la sección de código más abajo en cualquier servidor o plataforma serverless con una URL HTTPS pública. El receptor debe aceptar solicitudes POST en la ruta configurada y devolver una respuesta 200 en pocos segundos — Tally considera cualquier respuesta no 2xx como un fallo de entrega. Para pruebas rápidas, apunte el webhook a webhook.site o use ngrok http 3000 para exponer un servidor local antes de desplegar.
Paso 3: Configure la URL del Webhook en Tally
Abra su formulario Tally, vaya a Integraciones → Webhooks y pegue la URL HTTPS de su receptor. Tally envía una solicitud POST a esta URL en cada envío del formulario. No es necesaria configuración de encabezado de autenticación en el lado de Tally — la seguridad vive en su receptor, que acepta solicitudes y llama a Whapi.Cloud con su token Bearer.
Si su receptor está detrás de un firewall o lista de IPs permitidas, tenga en cuenta que Tally no publica un rango de IP de salida estático. Use un endpoint público abierto o un proxy de ingreso dedicado para despliegues en producción.
Paso 4: Pruebe con un Envío Real
Haga clic en Enviar envío de prueba en el panel de Webhooks de Tally. Su receptor registrará el payload entrante. Confirme que data.fields contiene las etiquetas que espera su código, luego verifique que el mensaje de WhatsApp llegue al número de destino. Si el mensaje no llega, revise los logs del receptor para obtener el estado de respuesta de Whapi.Cloud antes de ajustar cualquier otra cosa.
Código del Receptor Webhook: Implementación en Node.js
El receptor siguiente hace exactamente un trabajo: extraer los campos relevantes del payload de Tally y enviar un mensaje de WhatsApp formateado mediante el endpoint /messages/text de Whapi.Cloud. Usa Node.js con Express, menos de 50 líneas, sin SDK requerido.
Antes de ejecutarlo, instale las dependencias: npm install express node-fetch. Node 18+ tiene fetch nativo integrado, por lo que puede omitir la importación de node-fetch si está en un runtime reciente.
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')
);
El encabezado Authorization: Bearer es la única autenticación que requiere Whapi.Cloud — sin instalación de SDK, sin flujo OAuth, sin biblioteca que configurar. La API acepta JSON simple y devuelve JSON simple.
El campo to acepta el número de teléfono del destinatario con código de país y sin signo más inicial (p. ej., 14155551234 para un número de EE. UU.). El formato de Chat ID de WhatsApp ([email protected]) también funciona. La API acepta ambos.
Para una prueba rápida con cURL antes de desplegar el receptor completo, envíe un mensaje manualmente para verificar que el token y el número son correctos:
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"}'
Una respuesta exitosa devuelve un objeto JSON con un campo message que contiene el ID del mensaje enviado. Si esta prueba funciona, la configuración de su token y número es correcta. Proceda a desplegar el receptor completo.
Manejo de Errores: Qué Pasa Cuando Falla la Solicitud a Whapi.Cloud
Una solicitud HTTP fallida a Whapi.Cloud no se reintenta automáticamente. Si su receptor envía un 200 a Tally antes de confirmar que la llamada a WhatsApp tuvo éxito, la notificación se pierde sin rastro en los logs de Tally.
Devuelva 200 a Tally solo después de que se complete la llamada a Whapi.Cloud — registre los fallos localmente y póngalos en cola para reintento en lugar de depender de que Tally reenvíe.
Los tres códigos de error que encontrará en la práctica y qué significan:
| Estado HTTP | Causa | Solución |
401 Unauthorized |
El token de API falta, está vencido o fue copiado incorrectamente | Regenere el token en el panel de Whapi.Cloud y actualice WHAPI_TOKEN |
400 Bad Request |
Payload malformado: generalmente un valor to faltante o formato de número incorrecto |
Registre req.body y verifique que el campo to contenga solo dígitos con código de país |
5xx Server Error |
Problema transitorio de red en Whapi.Cloud o WhatsApp | Implemente reintentos con backoff exponencial; la mayoría de los errores transitorios se resuelven en segundos |
Un escenario que sorprende a equipos con formularios de leads de alto volumen: enviar cientos de mensajes idénticos en rápida sucesión puede activar la detección de spam del lado del servidor de WhatsApp. Esto no es un límite de la API de Whapi.Cloud — los planes de producción de Whapi.Cloud no imponen límites de velocidad por mensaje. La limitación viene de la infraestructura de WhatsApp que monitorea picos de volumen. Para escenarios de ráfaga, agregue un breve retraso entre envíos o ponga en cola los envíos antes de procesarlos.
Alternativas Sin Código: Cuándo Usar Zapier, Make o n8n
Para equipos sin un servidor donde desplegar, Zapier, Make y n8n conectan Tally a WhatsApp sin código de backend, a costa de una facturación por tarea que crece con cada envío.
-
Zapier: La GUI más sencilla y la mayor biblioteca de conectores preconstruidos. El plan gratuito maneja 100 tareas/mes, suficiente solo para pruebas de muy bajo volumen. Los planes de pago cobran por zap (tarea), por lo que cada envío de formulario consume un crédito. Elija Zapier si el equipo no tiene capacidad técnica y el volumen se mantiene bajo unos cientos de envíos al mes.
-
Make (antes Integromat): Más potente que Zapier para flujos de múltiples pasos; el plan gratuito permite 1.000 operaciones/mes. El precio escala por operación. Buena opción intermedia para equipos no técnicos que necesitan lógica condicional sin escribir código.
-
n8n: Open-source y autoalojable. Flujos de trabajo ilimitados en instancias propias, sin facturación por operación. La opción correcta para equipos técnicos sensibles al costo que quieren flexibilidad sin cargos recurrentes por tarea. Vea la guía de integración de n8n de Whapi.Cloud para un tutorial paso a paso.
Los equipos no técnicos usan Zapier o Make; los desarrolladores usan el webhook nativo de Tally con una llamada REST directa a Whapi.Cloud. El factor decisivo no es la complejidad técnica — es qué tan predecible es su volumen de envíos y si la facturación por tarea se ajusta a su presupuesto.
Comparación de Costos: API Directa vs. Plataformas de Middleware
Zapier y Make cobran por tarea u operación: cada envío de formulario que activa una notificación de WhatsApp consume una unidad facturable. Whapi.Cloud cobra por número de WhatsApp conectado al mes, no por mensaje.
La tarifa mensual fija por número de Whapi.Cloud significa que 5.000 mensajes activados por formulario cuestan lo mismo que 50 — las plataformas de middleware facturan linealmente con cada envío.
| Método | Plan Gratuito | Modelo de Precios (Pago) | Código Requerido | Mejor Para |
| Zapier | 100 tareas/mes | Por tarea (zap); el costo crece con los envíos | No | Equipos no técnicos, bajo volumen |
| Make | 1.000 ops/mes | Por operación; el costo crece con los envíos | No | Flujos de múltiples pasos, preferencia sin código |
| n8n (autoalojado) | Ilimitado | Solo costos del servidor (infraestructura fija) | Parcial (basado en configuración) | Equipos técnicos, sensibles al costo |
| Whapi.Cloud (directo) | 5 conversaciones/mes (Sandbox) | Mensual fijo por número de WhatsApp (independiente del volumen) | Sí (~50 líneas) | Desarrolladores, costo predecible, alto volumen |
La diferencia en el modelo de precios importa más cuando el volumen de envíos es impredecible. Un lanzamiento de producto o una campaña viral puede disparar los envíos de formularios 10 veces de la noche a la mañana. Con el middleware de pago por tarea, ese pico multiplica su factura de automatización. Con la suscripción por número de Whapi.Cloud, el mismo pico no cuesta nada extra.
Empiece con el Sandbox gratuito de Whapi.Cloud para probar el flujo completo antes de conectar un número de WhatsApp de producción. El Sandbox es permanentemente gratuito sin límite de tiempo — úselo para verificar su código receptor, el mapeo de campos y el manejo de errores antes de salir en vivo. Consulte la documentación completa de la API de Whapi.Cloud para detalles de solicitud/respuesta en todos los endpoints.
Los webhooks de Tally funcionan con cualquier lenguaje o runtime capaz de HTTP. El ejemplo de Node.js aquí es un punto de partida; la misma lógica aplica a Python (con requests o httpx), Go, PHP o un Cloudflare Worker. Sin dependencia del lenguaje de WhatsApp significa que puede cambiar el lenguaje del receptor sin modificar ninguna configuración de Tally o Whapi.Cloud.









