Volver al Blog
AutomatizaciónIASoftware

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

Brayan Developer
5 min de lectura
Automatización de Facturación y Recordatorios de Cobro por WhatsApp con N8N y Google Sheets
Aprende a construir un sistema automatizado de cobranzas y alertas de vencimiento por WhatsApp conectando Google Sheets, N8N y Evolution API sin costes mensuales de SaaS.

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.

Portada

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.

Etiquetas
N8NGoogle SheetsWhatsAppAutomatizaciónCobranzasCRM
Compartir:XLinkedInWhatsApp

¿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.

Hablemos