Automatización

Captador de Leads
Multicanal con IA

Cómo un chatbot con IA captura leads desde WhatsApp, web y chat interno — extrae datos, genera cotizaciones y hace followup automático. Caso real en producción.

3 canales → 1 pipeline → cotización automática → followup en 3 etapas

Contexto

El Problema: 3 Canales, 0 Estructura

Una empresa de arriendo de equipamiento pesado (excavadoras, camiones tolva, cama baja) recibe consultas por WhatsApp Business, un chat web y operadores internos. Cada canal tiene su propio formato de mensaje, distinto nivel de información del cliente, y ninguno se conecta con el otro.

El resultado: leads que se pierden entre canales, cotizaciones que tardan horas en generarse manualmente, y seguimientos que dependen de la memoria del operador. Un lead que escribe a las 22:00 no recibe respuesta hasta las 09:00 del día siguiente — si es que alguien lo ve.

47h

Tiempo promedio de respuesta en PYMEs

~50%

Leads perdidos si no respondes en 5 min

0

Followups sistemáticos antes del sistema

Método

Arquitectura: 3 Workflows Orquestados

El sistema se compone de 3 workflows en n8n que se invocan entre sí, una base de datos relacional y una Knowledge Base configurable.

Componente Tecnología Función
Orquestación n8n 3 workflows: Multichannel (A), Quotes (B), Followups (D)
IA Conversacional OpenAI API Dual: AI1 (conversación) + AI2 (extracción de entidades)
Base de Datos MySQL Leads, messages, events, jobs, knowledge base
WhatsApp Meta Graph API Webhook entrante + envío de respuestas
Cotizaciones PHP + PDF API que resuelve precios desde KB y genera PDF
Admin PHP + Tailwind Panel self-service: leads, KB, precios, usuarios

Flujo de un Lead (de punta a punta)

1

Webhook recibe

WhatsApp, web o chat interno → Input Envelope normaliza el payload

2

Resolve Lead

Busca por phone/session_id. Si no existe, crea nuevo con status TEMP

3

AI1 — Conversación

Genera respuesta natural con contexto de últimos 12 mensajes

4

AI2 — Extracción

Nombre, empresa, teléfono, servicio, fecha, cantidad → structured data

5

¿Datos mínimos?

Switch: si min_ok=true → genera cotización. Si no → sigue conversando

6

Quote → PDF

Resuelve precios desde KB, genera PDF, envía al canal de origen

Evidencia

Los Patrones que Hacen la Diferencia

IA Dual: Conversar ≠ Extraer

La mayoría de chatbots usan un solo prompt para todo. Este sistema separa dos funciones cognitivas en dos llamadas independientes a la API:

AI1 — Conversación

Genera la respuesta natural

Recibe los últimos 12 mensajes del lead + contexto de la KB. Produce una respuesta empática y útil. Si faltan datos, pregunta. Si hay ambigüedad, aclara.

AI2 — Extracción

Extrae entidades estructuradas

Del mismo mensaje extrae: nombre, empresa, email, teléfono, servicio, fecha, cantidad, distancia. Output JSON. Calcula min_ok cuando los campos mínimos están completos.

¿Por qué separar?

Un solo prompt que conversa Y extrae tiende a "contaminar" ambas salidas. Al separar, la conversación es más natural y la extracción más precisa. El costo de una llamada extra a la API es marginal vs. la calidad del dato.

Policy-as-Data: Reglas de Negocio en la BD

Las reglas de negocio no están hardcodeadas en el prompt ni en el código. Viven en una tabla knowledge con 4 tipos de entidad:

Equipment

Catálogo de equipos con tarifa UF/hora y keywords de búsqueda

Policy

Reglas de negocio: "martillo requiere excavadora", "RESPEL es servicio integral"

PricingRule

Reglas especiales de precio: movilización, descuentos por volumen

Config

Variables administrativas: valor UF, costo combustible/km, tarifa operador

Ejemplo: Política de equipos dependientes
"knowledge_id": "POL-ACC-001",
"entity_type": "Policy",
"canonical_name": "Accesorios requieren equipo base",
"rule": "Martillo y cizalla son ACCESORIOS que se instalan
en una excavadora. NO funcionan solos. Si el cliente
pide solo martillo, SIEMPRE preguntar si tiene
excavadora propia o si necesita arrendar una."

Ventaja clave

El operador del negocio actualiza precios y políticas desde un panel admin — sin tocar código, sin redeploy, sin llamar al desarrollador. Los cambios se aplican en la próxima conversación.

Followup con Job Queue: 3 Etapas, 72h

Cuando un lead recibe cotización pero no responde, el sistema activa una cadena de seguimiento automático con stored procedures:

Etapa 1

Recordatorio

72h sin respuesta → email con resumen de cotización

Etapa 2

Seguimiento

+72h → segundo contacto con datos del lead

Etapa 3

Cierre

+72h → último intento antes de marcar como frío

Job Queue con Stored Procedures
-- Cada 10 min: buscar jobs pendientes
SELECT * FROM v_jobs_pending
WHERE job_type = 'FOLLOWUP_CLIENT'
  AND due_at <= NOW();

-- Reservar job (evita doble ejecución)
CALL sp_claim_job(job_id, 'n8n');

-- Después de enviar email exitosamente
CALL sp_complete_job(job_id, 'DONE');
CALL sp_create_next_followup(lead_id);
-- ^ Crea etapa siguiente con due_at +72h

Resultado

Qué Cambia con el Sistema

Antes vs. después de implementar el captador multicanal.

Antes Después

Tiempo de primera respuesta

~47h <30s
Antes Después

Canales integrados

Silos 3 → 1
Antes Después

Cotización

Manual Auto PDF
Antes Después

Seguimiento

Memoria 3 etapas

Lifecycle del Lead

TEMP IN_PROGRESS READY_FOR_QUOTE PREQUOTE_SENT WON | LOST

Riesgos

Limitaciones y Trade-offs

No todo se resolvió en v1. Estos son los trade-offs conocidos.

Cotización única por lead

V1 genera una sola cotización. Si el cliente pide cambios, el bot no puede modificar el PDF ya generado. Solución en roadmap: formato editable + regeneración.

Cálculo de distancia

La movilización (cama baja) depende de distancia, pero la lógica de cálculo km es básica. Sin integración con API de mapas aún.

Loops conversacionales

Cuando la IA no encuentra un dato en el contexto, puede entrar en loop repitiendo la misma pregunta. Mitigado con límite de reintentos.

Costo de API dual

Dos llamadas a OpenAI por mensaje. En volumen alto, el costo escala. Trade-off: precisión de extracción vs. costo por interacción.

Implementación

Panel Admin: Self-Service

El operador del negocio gestiona sin tocar código.

Leads

Ver leads capturados, conversaciones completas, historial de eventos y status del pipeline.

Cotizaciones

PDFs generados, números de cotización (COT-YYYYMMDD-NNNN), modificación post-generación.

Knowledge Base

CRUD de equipos, políticas y reglas de precio. Filtro por tipo de entidad. Activar/desactivar items.

Configuración

Valor UF, costo combustible/km, tarifa operador/día, tarifa cama baja, mínimo horas arriendo.

Usuarios

Gestión de acceso al panel. Roles y permisos por módulo.

Métricas

Leads por canal, tasa de cotización, tasa de conversión, tiempo promedio de respuesta.

admin_config — Variables editables
uf_value          39000     # Valor UF en CLP
fuel_cost_per_km  733       # Costo combustible CLP/km
operator_daily    83636     # Tarifa diaria operador CLP
cama_baja_daily   300000    # Tarifa diaria cama baja CLP
min_rental_hours  180       # Mínimo horas arriendo pesado

¿Necesitas un sistema de captura como este?

Analizamos tus canales de entrada, diseñamos el pipeline y lo dejamos operando con IA, followup automático y panel de gestión.