Validación Automática de Comprobantes de Pago por WhatsApp con Agentes de IA y N8N

En negocios digitales, e-commerce y empresas de servicios que aceptan transferencias bancarias directas y billeteras digitales (como Yape, Plin, BCP, BBVA o Interbank), la validación manual de comprobantes de pago genera demoras críticas en el despacho de pedidos y sobrecarga al equipo de soporte. Además, el riesgo de recibir capturas de pantalla falsificadas o reutilizadas (comprobantes reciclados) genera pérdidas económicas. En esta guía técnica explicamos cómo implementar un flujo de validación automática con Agentes de IA Multimodales (Vision AI), N8N self-hosted y base de datos relacional.

Flujo de Trabajo de Validación con IA Multimodal#
A diferencia de los OCRs tradicionales basados en reglas rígidas que fallan ante cambios de tipografía, compresiones de imagen de WhatsApp o ligeras rotaciones, los modelos multimodales de IA interpretan el contexto visual completo del comprobante:
[Cliente envía imagen por WhatsApp]
│
▼
[Evolution API / Baileys Gateway]
│ (Webhook con imagen en Base64 o URL)
▼
[N8N Workflow]
│
├── 1. Descarga y normalización de imagen
│
├── 2. Análisis Visual con Gemini 1.5 Flash / Vision AI
│ ├── Extracción: Monto, Número de Operación, Fecha/Hora, Banco/Billetera
│ └── Detección de edición o distorsión digital
│
├── 3. Validación Antifraude en PostgreSQL / Supabase
│ ├── ¿El número de operación ya existe en la BD? (Prevención de duplicados)
│ └── ¿El monto coincide con la orden pendiente del cliente?
│
┌────────┴────────┐
│ │
▼ (Válido) ▼ (Sospechoso o Duplicado)
[Aprobar Pedido] [Notificar a Supervisor]
- Actualizar ERP - Alerta en Slack/Telegram
- Enviar Boleta - Notificar al cliente
Prompt Estructurado para el Agente Multimodal de Visión#
Para garantizar que el modelo de IA devuelva un JSON estricto y sin texto conversacional superfluo, configuramos el prompt de extracción con formato JSON Schema:
Actúa como un auditor bancario experto en análisis forense y extracción de datos de comprobantes de pago en Perú y Latinoamérica.
Analiza detenidamente la imagen adjunta correspondiente a una transferencia bancaria o billetera digital (Yape, Plin, BCP, BBVA, Interbank, Scotiabank, Banco de la Nación).
Debes extraer y retornar EXCLUSIVAMENTE el siguiente objeto JSON:
{
"is_valid_receipt": boolean, // true si es un comprobante auténtico legible
"bank_or_wallet": string, // "YAPE" | "PLIN" | "BCP" | "BBVA" | "INTERBANK" | "SCOTIABANK" | "OTRO",
"operation_number": string, // Número de operación o referencia exacto sin espacios
"amount": number, // Monto numérico con decimales (ejemplo: 150.50)
"currency": string, // "PEN" | "USD",
"transaction_date": string, // Formato "YYYY-MM-DD",
"transaction_time": string, // Formato "HH:MM:SS" (24 horas),
"sender_name": string, // Nombre del emisor si está visible
"recipient_name": string, // Nombre del receptor o negocio
"confidence_score": number, // De 0.0 a 1.0 según la nitidez
"fraud_flags": string[] // Lista de anomalías detectadas (ej: "fuente_adulterada", "pixelado_en_monto")
}
Implementación del Nodo de Validación en N8N (Code Node TypeScript)#
Una vez que el modelo multimodal procesa la imagen, el flujo de N8N ejecuta la validación lógica y de negocio en un nodo de código:
// N8N Code Node: Validación Antifraude y Cruce de Orden
const receipt = items[0].json.ai_extracted_data;
const customerOrder = items[0].json.pending_order;
// 1. Validar si la IA detectó inconsistencias de autenticidad
if (!receipt.is_valid_receipt || receipt.confidence_score < 0.85) {
return [{
json: {
status: "REJECTED",
reason: "La imagen no parece ser un comprobante válido o la calidad es insuficiente.",
requires_human_review: true,
}
}];
}
if (receipt.fraud_flags && receipt.fraud_flags.length > 0) {
return [{
json: {
status: "FLAGGED_FRAUD",
reason: `Posible alteración detectada: ${receipt.fraud_flags.join(", ")}`,
requires_human_review: true,
}
}];
}
// 2. Validar coincidencia de monto
const expectedAmount = Number(customerOrder.total_amount);
const paidAmount = Number(receipt.amount);
if (Math.abs(paidAmount - expectedAmount) > 0.05) {
return [{
json: {
status: "AMOUNT_MISMATCH",
reason: `El monto pagado (${paidAmount}) no coincide con el total de la orden (${expectedAmount}).`,
requires_human_review: true,
}
}];
}
// 3. Validar vigencia temporal (comprobante emitido hoy)
const todayStr = new Date().toISOString().split("T")[0];
if (receipt.transaction_date !== todayStr) {
return [{
json: {
status: "OUTDATED_RECEIPT",
reason: "El comprobante no corresponde a la fecha actual.",
requires_human_review: true,
}
}];
}
// Si supera todas las reglas, se autoriza la aprobación
return [{
json: {
status: "APPROVED",
operation_number: receipt.operation_number,
paid_amount: paidAmount,
bank: receipt.bank_or_wallet,
requires_human_review: false,
}
}];
Prevención de Duplicados con Bloqueo Transaccional en Base de Datos#
Para neutralizar el ataque de comprobantes reciclados, registramos el número de operación con un índice único en PostgreSQL:
-- Tabla para trazabilidad y auditoría de comprobantes
CREATE TABLE payment_validations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
order_id VARCHAR(50) NOT NULL,
customer_phone VARCHAR(20) NOT NULL,
bank_or_wallet VARCHAR(30) NOT NULL,
operation_number VARCHAR(100) NOT NULL,
amount NUMERIC(10, 2) NOT NULL,
currency VARCHAR(5) DEFAULT 'PEN',
receipt_image_url TEXT NOT NULL,
validated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
CONSTRAINT uq_bank_operation UNIQUE (bank_or_wallet, operation_number)
);
Si un usuario intenta enviar el mismo comprobante para dos compras diferentes, la base de datos rechaza la inserción por violación de la restricción de unicidad (UNIQUE CONSTRAINT), alertando inmediatamente al sistema.
Respuesta Instantánea al Cliente por WhatsApp#
Tras la validación exitosa (que toma entre 2 y 4 segundos en total), el bot de WhatsApp responde con un mensaje confirmatorio y el enlace de seguimiento o comprobante electrónico:
✅ *¡Pago verificado con éxito!*
Hemos confirmado tu transferencia por *S/ 150.00* mediante *Yape* (Op. 894321).
Tu pedido *#4092* ha pasado a preparación de inmediato.
📦 Puedes seguir el despacho de tu orden en tiempo real aquí:
https://empresa.com/pedidos/4092
Conclusión#
Automatizar la validación de comprobantes de pago por WhatsApp mediante Agentes de IA y N8N no solo reduce a cero los tiempos de espera de los clientes, sino que además blinda a la empresa contra fraudes y duplicidades operativas.
¿Quieres automatizar la atención, cobranzas y validación de pagos en los canales de WhatsApp de tu negocio? Conoce nuestros servicios de Automatización con IA y N8N o agenda una llamada de consultoría.
¿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.


