Automatización de Facturación y Recordatorios de Cobro por WhatsApp con N8N y Google Sheets

La gestión de cuentas por cobrar y el seguimiento manual de facturas vencidas consumen horas valiosas y aumentan la tasa de morosidad empresarial. En esta guía paso a paso aprenderás a implementar un flujo automatizado con N8N (self-hosted), Google Sheets y WhatsApp API para despachar alertas de cobro preventivas y enlaces de pago automáticos.

El reto de la gestión manual de cobranzas en PyMEs#
En la mayoría de empresas de servicios, agencias y comercios B2B, el control de facturas pendientes se realiza en hojas de cálculo compartidas. Sin embargo, cuando el volumen de clientes supera las decenas de cuentas activas, surgen problemas críticos:
- Falta de recordatorios preventivos: Los clientes reciben avisos cuando la factura ya está vencida, en lugar de recibir notificaciones de cortesía 3 días antes.
- Sobrecarga del equipo administrativo: Empleados dedicando tiempo a redactar y enviar mensajes repetitivos uno a uno.
- Coste elevado de herramientas SaaS: Plataformas de cobranza tradicionales cobran comisiones o suscripciones mensuales en dólares de más de $150/mes.
Con una arquitectura open-source basada en N8N alojado en un VPS propio y Google Sheets como base de datos operacional, podemos orquestar una solución 100% personalizada con coste de infraestructura mínimo.
Arquitectura del Flujo Automatizado#
El sistema opera mediante un cronjob diario que evalúa los vencimientos y despacha mensajes personalizados en función del estado de cada factura:
+-------------------------------------------------------------------+
| CRON TRIGGER (Todos los días a las 09:00 AM) |
+-------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------+
| Nodo Google Sheets: Leer filas con estado = "PENDIENTE" |
+-------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------+
| Nodo Code (JavaScript): Calcular días restantes para vencer |
| - Vence en 3 días (Aviso preventivo) |
| - Vence hoy (Recordatorio puntual con link de pago) |
| - Vencido hace 3+ días (Alerta de mora con intereses) |
+-------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------+
| Nodo Evolution API / WhatsApp: Enviar plantilla interactiva |
+-------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------+
| Nodo Google Sheets: Actualizar columna "Último Aviso Enviado" |
+-------------------------------------------------------------------+
1. Estructura de la Hoja de Google Sheets#
Para que el flujo funcione de manera predecible, definimos las siguientes columnas en nuestra pestaña CuentasPorCobrar:
| ID_Factura | Cliente | Telefono_WhatsApp | Monto_Total | Moneda | Fecha_Emision | Fecha_Vencimiento | Estado | Link_Pago | Ultimo_Aviso |
|---|---|---|---|---|---|---|---|---|---|
| FAC-1082 | Tech Solutions SAC | +51987654321 | 1250.00 | USD | 2026-08-15 | 2026-08-30 | PENDIENTE | https://pay.ejemplo.com/f/1082 |
|
| FAC-1083 | Corporación Andina | +51912345678 | 3400.00 | PEN | 2026-08-01 | 2026-08-16 | PENDIENTE | https://pay.ejemplo.com/f/1083 |
2026-08-25 |
2. Nodo de Código JavaScript en N8N (Lógica de Segmentación)#
En el flujo de N8N, agregamos un nodo de tipo Code (Run Once for All Items) que procesa las fechas y clasifica el tipo de notificación a emitir:
// N8N Code Node: Calcular días de diferencia y generar mensaje
const today = new Date();
today.setHours(0, 0, 0, 0);
const results = [];
for (const item of $input.all()) {
const row = item.json;
if (row.Estado !== 'PENDIENTE' || !row.Fecha_Vencimiento) {
continue;
}
const dueDate = new Date(row.Fecha_Vencimiento);
dueDate.setHours(0, 0, 0, 0);
const diffTime = dueDate.getTime() - today.getTime();
const diffDays = Math.round(diffTime / (1000 * 60 * 60 * 24));
let messageType = null;
let text = '';
if (diffDays === 3) {
messageType = 'PREVENTIVO';
text = `Hola *${row.Cliente}*, te saludamos cordialmente. Te recordamos que la factura *${row.ID_Factura}* por un monto de *${row.Moneda} ${row.Monto_Total}* vence el próximo *${row.Fecha_Vencimiento}*. Puedes efectuar tu abono directamente aquí: ${row.Link_Pago}`;
} else if (diffDays === 0) {
messageType = 'VENCE_HOY';
text = `Hola *${row.Cliente}*, te recordamos que el plazo de pago para la factura *${row.ID_Factura}* (*${row.Moneda} ${row.Monto_Total}*) vence el día de hoy. Por favor confírmanos tu comprobante de pago o abona en: ${row.Link_Pago}`;
} else if (diffDays === -3 || diffDays === -7) {
messageType = 'MORA';
text = `Estimado *${row.Cliente}*, tu factura *${row.ID_Factura}* presenta un retraso de ${Math.abs(diffDays)} días (venció el ${row.Fecha_Vencimiento}). Agradeceremos regularizar el abono pendiente de *${row.Moneda} ${row.Monto_Total}* a la brevedad en: ${row.Link_Pago}`;
}
if (messageType) {
results.push({
json: {
idFactura: row.ID_Factura,
cliente: row.Cliente,
telefono: row.Telefono_WhatsApp.replace(/\D/g, ''),
mensaje: text,
tipoAviso: messageType,
rowNumber: row.row_number, // Metadato de fila de Google Sheets
}
});
}
}
return results;
3. Despacho Vía Evolution API (WhatsApp Gateway)#
Conectamos el nodo HTTP Request de N8N apuntando a nuestra instancia de Evolution API para enviar los mensajes por WhatsApp:
- Method:
POST - URL:
https://evolution.tudominio.com/message/sendText/instancia-ventas - Headers:
apikey: TU_API_KEY_SECRETA - Body Parameters (JSON):
{
"number": "={{ $json.telefono }}",
"options": {
"delay": 1200,
"presence": "composing",
"linkPreview": true
},
"textMessage": {
"text": "={{ $json.mensaje }}"
}
}
4. Actualización en Google Sheets y Prevención de Spam#
Inmediatamente después del envío, el flujo actualiza la columna Ultimo_Aviso en Google Sheets con la fecha actual {{ $now.toFormat('yyyy-MM-dd') }}. De este modo, si el cronjob se ejecuta de nuevo en el mismo día, no duplicará mensajes al cliente.
Resultados y Beneficios Obtenidos#
- Reducción del 45% en facturas vencidas gracias a los avisos preventivos a 3 días.
- Ahorro de más de 20 horas mensuales del departamento administrativo.
- Control total de datos y privacidad: Al estar alojado en tu propia infraestructura con N8N y Google Workspace, la información confidencial de tus clientes no pasa por plataformas de terceros.
¿Te gustaría implementar un CRM personalizado o flujos de automatización de cobros y atención para tu negocio? Revisa nuestros servicios de automatización e IA o escríbenos por WhatsApp para una propuesta a medida.
¿Te gustaría profundizar en estos temas?
Aprende sobre desarrollo de software, apps a medida, automatizaciones con N8N, Next.js y Cloud con casos reales.


