Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/KevinhosUTP/Automatizacion-Lurwis/llms.txt

Use this file to discover all available pages before exploring further.

Requisitos Previos

Antes de comenzar, asegúrate de tener acceso a:

n8n Instalado

Instancia de n8n en self-hosted o n8n Cloud (recomendado: v1.0+)

PostgreSQL

Base de datos PostgreSQL 14+ con extensión pgcrypto habilitada

MongoDB

Cluster de MongoDB (puede ser MongoDB Atlas gratuito)

Redis

Instancia de Redis 6+ (puede ser Upstash Redis gratuito)
También necesitarás una cuenta de WhatsApp Business API (Meta) y una API Key de Google Gemini (disponible en AI Studio).

Paso 1: Configurar Base de Datos PostgreSQL

Crear la Base de Datos

Conecta a tu servidor PostgreSQL y ejecuta:
CREATE DATABASE picanteria_lurwis;
\c picanteria_lurwis;

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pgcrypto";

Crear Tablas del Menú

Ejecuta el siguiente schema para crear las tablas necesarias:
-- Tabla de Categorías
CREATE TABLE categorias (
  id SERIAL PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL,
  activo BOOLEAN DEFAULT true,
  created_at TIMESTAMP DEFAULT NOW()
);

-- Tabla de Platos
CREATE TABLE platos (
  id SERIAL PRIMARY KEY,
  nombre VARCHAR(200) NOT NULL,
  descripcion TEXT,
  categoria_id INTEGER REFERENCES categorias(id),
  activo BOOLEAN DEFAULT true,
  created_at TIMESTAMP DEFAULT NOW()
);

-- Tabla de Precios por Tamaño
CREATE TABLE plato_precios (
  id SERIAL PRIMARY KEY,
  plato_id INTEGER REFERENCES platos(id),
  tamanio VARCHAR(50) NOT NULL, -- 'Personal', 'Familiar', 'Único'
  precio DECIMAL(10,2) NOT NULL,
  activo BOOLEAN DEFAULT true,
  created_at TIMESTAMP DEFAULT NOW()
);

-- Tabla de Pedidos
CREATE TABLE pedidos_picanteria (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  telefono VARCHAR(20) NOT NULL,
  cliente_nombre VARCHAR(200),
  detalle_pedido JSONB NOT NULL,
  total_final DECIMAL(10,2) NOT NULL,
  metodo_pago VARCHAR(50), -- 'Yape', 'Plin', 'Efectivo', 'Tarjeta'
  tipo_servicio VARCHAR(50), -- 'Delivery', 'Recojo'
  direccion TEXT,
  estado_pedido VARCHAR(50) DEFAULT 'confirmado', -- 'confirmado', 'en_preparacion', 'entregado', 'cancelado'
  created_at TIMESTAMP DEFAULT NOW(),
  updated_at TIMESTAMP DEFAULT NOW()
);

CREATE INDEX idx_pedidos_telefono ON pedidos_picanteria(telefono);
CREATE INDEX idx_pedidos_estado ON pedidos_picanteria(estado_pedido);

Insertar Datos de Ejemplo

Para probar el sistema, inserta algunas categorías y platos:
-- Insertar Categorías
INSERT INTO categorias (nombre) VALUES 
  ('Ceviches'),
  ('Chicharrones'),
  ('Sudados'),
  ('Jaleas'),
  ('Bebidas');

-- Insertar Platos
INSERT INTO platos (nombre, descripcion, categoria_id) VALUES 
  ('Ceviche de Pescado', 'Ceviche fresco de pescado con leche de tigre', 1),
  ('Ceviche Mixto', 'Pescado, calamar, pulpo y langostinos', 1),
  ('Chicharrón de Calamar', 'Calamar frito crujiente con yucas y salsa criolla', 2),
  ('Parihuela', 'Sopa de mariscos con pescado y langostinos', 3),
  ('Inca Kola 1.5L', 'Bebida nacional del Perú', 5);

-- Insertar Precios
INSERT INTO plato_precios (plato_id, tamanio, precio) VALUES 
  (1, 'Personal', 25.00),
  (1, 'Familiar', 65.00),
  (2, 'Personal', 35.00),
  (2, 'Familiar', 85.00),
  (3, 'Personal', 30.00),
  (3, 'Familiar', 70.00),
  (4, 'Único', 28.00),
  (5, 'Único', 8.00);
Asegúrate de adaptar el menú con los platos reales de tu restaurante. El sistema usa las columnas activo para controlar qué platos están disponibles sin borrar datos.

Paso 2: Configurar MongoDB

Crear Base de Datos y Colecciones

Si usas MongoDB Atlas, crea un cluster gratuito y obtén tu connection string. El sistema creará automáticamente las colecciones cuando los agentes ejecuten por primera vez:
  • historial_clasificador
  • historial_detector
  • historial_pedidos
  • historial_eventos
  • historial_reservas
  • historial_general
No necesitas crear las colecciones manualmente. n8n las generará automáticamente usando el nodo memoryMongoDbChat de LangChain.

Connection String

Tu connection string debe tener este formato:
mongodb+srv://username:password@cluster.mongodb.net/picanteria_db?retryWrites=true&w=majority

Paso 3: Configurar Redis

Opción A: Redis Local

Si usas Docker:
docker run -d --name redis-lurwis -p 6379:6379 redis:7-alpine

Opción B: Upstash Redis (Recomendado)

  1. Crea una cuenta gratuita en Upstash
  2. Crea una base de datos Redis
  3. Copia el endpoint y token de conexión
Redis se usa como buffer temporal con TTL de 30 segundos. Si el servidor de Redis cae, solo perderás los mensajes en tránsito (no los pedidos ya confirmados).

Paso 4: Importar Workflows en n8n

Agregar Credenciales

Antes de importar, configura estas credenciales en n8n:
1

PostgreSQL

Settings → Credentials → New → Postgres
  • Host: tu-servidor.com
  • Database: picanteria_lurwis
  • User: tu_usuario
  • Password: tu_password
  • Port: 5432
  • SSL: Enabled (si tu servidor lo requiere)
Nombra la credencial: “Postgres Lurwis db”
2

MongoDB

Settings → Credentials → New → MongoDB
  • Connection String: mongodb+srv://...
Nombra la credencial: “Memoria chats Lurwis”
3

Redis

Settings → Credentials → New → Redis
  • Host: tu-redis.com
  • Port: 6379
  • Password: tu_password (si aplica)
Nombra la credencial: “Buffer Lurwis”
4

Google Gemini

Settings → Credentials → New → Google PaLM APINombra la credencial: “Modelo Lurwis”
5

WhatsApp API

Settings → Credentials → New → WhatsApp
  • Access Token: Token de Meta Business
  • Phone Number ID: ID del número de WhatsApp Business
Nombra la credencial: “WhatsApp account”

Importar los Workflows

  1. Descarga los archivos JSON de los workflows desde source/workflows/:
    • Picantería Lurwis _ Receptor.json
    • Picantería Lurwis _ Procesador.json
  2. En n8n, ve a Workflows → Import from File
  3. Importa primero el Receptor, luego el Procesador
  4. Para cada workflow:
    • Abre el editor
    • Verifica que todas las credenciales estén conectadas (no deben aparecer en rojo)
    • Haz clic en Save para guardar
Si ves errores de “credential not found”, verifica que los nombres de las credenciales coincidan exactamente con los mencionados arriba.

Paso 5: Configurar Webhook de Meta

Obtener URL del Webhook

  1. Abre el workflow Picantería Lurwis | Receptor en n8n
  2. Haz clic en el nodo Webhook (el primero del flujo)
  3. Copia la Production URL (debe verse como: https://tu-n8n.com/webhook/meta-verify)

Configurar en Meta Business

  1. Ve a Meta for Developers
  2. Selecciona tu app de WhatsApp Business
  3. Ve a WhatsApp → Configuration → Webhook
  4. Pega la URL del webhook
  5. En Verify Token, escribe: meta-verify (debe coincidir con el token en el nodo IF del workflow)
  6. Suscríbete a los eventos: messages

Probar Verificación

Meta enviará una petición GET para verificar. Si todo está correcto:
  • El workflow Receptor responderá con el hub.challenge
  • Verás un ✅ verde en la consola de Meta
Si la verificación falla, revisa que:
  • El workflow Receptor esté activado (toggle en ON)
  • El verify token sea exactamente meta-verify
  • Tu servidor n8n sea accesible públicamente (no localhost)

Paso 6: Activar y Probar

Activar los Workflows

1

Activar Receptor

En el workflow Receptor, haz clic en el toggle superior para activarlo (debe ponerse azul)
2

Activar Procesador

En el workflow Procesador, activa el Schedule Trigger (se ejecutará cada 10 segundos automáticamente)

Realizar Prueba Real

  1. Envía un mensaje al número de WhatsApp Business:
    Hola
    
  2. Deberías recibir respuesta del agente clasificador preguntando qué necesitas
  3. Prueba un flujo completo de pedido:
    Quiero hacer un pedido
    
  4. Sigue las instrucciones del bot:
    • Elige categoría
    • Selecciona plato y tamaño
    • Proporciona nombre, dirección, método de pago
    • Confirma diciendo “confirmo”
  5. Verifica en PostgreSQL que el pedido se guardó:
    SELECT * FROM pedidos_picanteria ORDER BY created_at DESC LIMIT 1;
    

Ver Ejecuciones en n8n

Ve a Executions en cada workflow para ver el log detallado:
  • Receptor: Debe mostrar el webhook recibido y el guardado en Redis
  • Procesador: Debe mostrar la clasificación, interacción con el agente y guardado en PostgreSQL
Si algo falla, revisa los nodos con error haciendo clic en ellos. Los mensajes de error te indicarán si es un problema de credenciales, query SQL o conexión con la IA.

Solución de Problemas Comunes

  • Verifica que el workflow Receptor esté activado
  • Confirma que la URL del webhook en Meta sea la correcta
  • Revisa que tu servidor n8n sea accesible públicamente (usa ngrok si estás en desarrollo local)
  • Comprueba los logs de ejecución en n8n para ver si llega algo
  • Verifica que el Procesador esté activado con Schedule Trigger
  • Revisa Redis con redis-cli y ejecuta KEYS ts_* para ver si hay usuarios en buffer
  • Comprueba que las credenciales de Google Gemini estén correctas
  • Revisa las execuciones del Procesador para ver dónde falla
  • Verifica que las tablas existan con el schema correcto
  • Comprueba que la credencial de PostgreSQL tenga permisos de INSERT/UPDATE
  • Revisa el nodo de código JavaScript que formatea el JSON del pedido
  • Verifica que el campo detalle_pedido sea de tipo JSONB en la tabla
  • Asegúrate de que los prompts de sistema incluyan la regla de “NO ALUCINAR”
  • Verifica que las herramientas SQL (consultar_categorias, consultar_platos, verificar_plato) funcionen correctamente
  • Prueba ejecutar manualmente las queries SQL para confirmar que devuelvan datos

Próximos Pasos

Arquitectura Detallada

Entiende cómo fluyen los datos entre componentes y el rol de cada agente

Workflows Individuales

Explora en profundidad cada nodo del Receptor y Procesador

Build docs developers (and LLMs) love