Un ERP solo es una pieza. La automatización empieza cuando ese ERP conversa con WhatsApp (donde está tu cliente), con un agente IA (que cualifica, vende y atiende) y con tu CRM (donde trackeas el ciclo de venta). Esta guía te muestra exactamente cómo se conectan estas piezas en producción, con código de muestra y los patrones que hemos probado en proyectos reales mexicanos.
Si manejas Aspel, Contpaqi, Bind, Odoo o cualquier otro ERP — y quieres que tu equipo y tus clientes operen en WhatsApp en lugar de aprender otro software — esta es la arquitectura que funciona.
La arquitectura de referencia
Antes de meternos en código, esta es la pila técnica que usamos en 9 de cada 10 proyectos:
- ERP: el que ya tengas. Aspel, Contpaqi, Bind, Odoo, SAP B1.
- Middleware: n8n (open source, auto-hosteado) o Make (alojado). Aquí orquestamos toda la lógica.
- WhatsApp: WhatsApp Business Cloud API (oficial Meta) vía Twilio o directo.
- Agente IA: OpenAI GPT-4o, Anthropic Claude o un modelo local con Ollama.
- CRM: HubSpot (más popular en México), Pipedrive, Salesforce o Zoho.
- Capa de identidad: un PostgreSQL pequeño para guardar mapeo de teléfonos ↔ clientes ↔ tickets activos.
Paso 1: autenticación con cada API
Cada API tiene su forma. Estas son las cuatro que más vas a tocar:
OAuth 2.0 (Microsoft Dynamics, HubSpot, Pipedrive)
Tienes que registrar una app en el panel del proveedor, conseguir client_id + client_secret y manejar refresh_tokens. En n8n hay módulos pre-construidos. En código propio (Python/Node) el flujo es estándar OAuth.
Bearer token (Bind ERP, Holded, Defontana)
Generas un API key desde el admin del ERP y lo pegas en el header Authorization: Bearer XXX. Lo más simple. Cuidado con rotación: cuando rotes el token, recuerda actualizar todos los workflows que lo usan.
SDK COM o conexión directa SQL (Aspel, Contpaqi)
El proceso aquí es: levanta un servidor Windows con el SDK del ERP, expones una API REST tuya encima (FastAPI o ASP.NET Core), y desde n8n llamas a esa API tuya. Es trabajo extra de una semana pero te ahorra repetir SDK calls en cada integración.
WhatsApp Business Cloud API
Necesitas: un número Business verificado, token permanente desde Meta for Developers, y un webhook expuesto a internet (puede ser Cloudflare Tunnel, ngrok en dev, o tu servidor con dominio HTTPS). El webhook recibe POST cada vez que llega un mensaje.
Paso 2: el flujo "nuevo pedido" (ERP ← WhatsApp ← agente IA)
Este es el caso de uso más rentable. Un cliente escribe a tu número de WhatsApp y termina con un pedido cargado en el ERP, sin que un humano toque nada. La secuencia:
- Llega mensaje a WhatsApp Cloud API. Meta envía POST al webhook que tienes en n8n/Make.
- n8n recibe, busca el número en tu Postgres. Si es cliente conocido, recupera contexto (últimos pedidos, condiciones). Si es nuevo, lo registra.
- n8n manda el mensaje + contexto al modelo IA (GPT-4o o Claude). Le pasas un system prompt con tu catálogo, tu política de descuentos y las reglas de cierre.
- El modelo responde con un objeto JSON estructurado:
{intent: "pedido", productos: [...], cantidad, descuento_solicitado, debe_escalar: false}. - n8n valida JSON contra schema. Si
debe_escalares true, ruta al humano. - Si no, n8n consulta stock al ERP vía API. Si hay stock, crea pedido en el ERP, genera CFDI si aplica, marca el pedido en HubSpot.
- n8n responde al cliente por WhatsApp con confirmación y link de pago / aviso de envío.
Código de muestra: paso 4 con OpenAI structured outputs
import openai
system_prompt = """Eres el agente de ventas de [NEGOCIO].
Catálogo: [lista de productos].
Política de descuento: máximo 5% sin escalar.
Si el cliente pide algo fuera del catálogo, escalar a humano.
Responde siempre en JSON con schema {intent, productos, cantidad, descuento_solicitado, debe_escalar, mensaje_respuesta}.
"""
response = openai.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": mensaje_cliente}
],
response_format={"type": "json_schema", "json_schema": ...}
)
Paso 3: el flujo "estado de pedido" (cliente pregunta → ERP responde)
Otro caso muy rentable. El cliente pregunta "¿dónde está mi pedido?" y la IA contesta sin mover a un humano.
- Mensaje llega a WhatsApp.
- n8n identifica intent = "consultar pedido".
- n8n llama al ERP:
GET /api/pedidos?cliente_id=X&estatus=activo. - El agente IA recibe la lista, decide qué decir según contexto (si hay retraso, ofrecer disculpa; si está en ruta, dar tracking).
- Responde por WhatsApp.
Ratio de resolución sin humano en proyectos reales México: 70-85% según el catálogo de respuestas.
Paso 4: sincronizar el CRM con el ERP
Si el cliente cierra una venta por WhatsApp, no quieres tener datos a medias entre ERP y CRM. Usa este patrón:
- ERP es la fuente de verdad para: productos, precios, stock, facturas, contabilidad.
- CRM es la fuente de verdad para: deals (oportunidades), actividades, etapas del funnel, contactos.
- El bridge es bidireccional: cuando se gana un deal en CRM, se crea pedido en ERP. Cuando se factura en ERP, se actualiza el deal en CRM.
Implementación práctica: usa webhooks en ambos lados (HubSpot tiene "deal stage changed", Bind tiene "factura emitida") y un middleware (n8n) que orquesta. La regla de oro: nunca dejes que un sistema haga commit sin que el middleware lo sepa.
Paso 5: manejo de errores que evita ruptura en producción
Tres patrones que aprendimos a las malas:
Idempotencia
Cada llamada al ERP debe poder repetirse sin crear duplicados. La forma más simple: incluye un external_id con el ID del mensaje de WhatsApp + timestamp. Antes de crear cualquier registro en ERP, verifica que ese external_id no existe ya.
Retry con backoff exponencial
Si la API del ERP devuelve 500 o timeout, no la machaques. Reintenta a 1s, 2s, 4s, 8s, 16s. Si después de 5 intentos sigue fallando, log + alerta + mensaje al cliente "estamos validando, te confirmo en breve".
Dead letter queue
Cualquier mensaje que no se haya podido procesar después de retry va a una cola separada para que un humano lo revise. No debe haber jamás un mensaje "perdido".
Costos reales del stack en México 2026
- n8n (self-hosted en VPS Hetzner CX11): 5 USD/mes.
- WhatsApp Business API: 0,006-0,028 USD por conversación según país y categoría.
- GPT-4o: ~0.005 USD por mensaje promedio (200 tokens).
- Postgres (Supabase free tier): 0 USD si manejas menos de 500MB.
- HubSpot Starter: 20 USD/mes/usuario.
- Total para PYME con 1000 conversaciones/mes: aprox. 80-120 USD/mes en infraestructura.
Comparar contra el costo de un agente humano de atención al cliente full-time (15-25 mil pesos al mes en México). El ROI es evidente desde el primer mes para volúmenes desde 500 conversaciones mensuales.
Qué hacer si tu ERP no tiene API decente
Si tu cliente está en Aspel o Contpaqi y la API es limitada, el patrón que funciona es:
- Levantar un servidor Windows con el SDK del ERP instalado.
- Construir una API REST propia (FastAPI o ASP.NET Core) con los endpoints que necesitas:
POST /pedidos,GET /clientes/{id}, etc. - Conectar esa API tuya con n8n exactamente como conectarías un ERP con API moderna.
- Ya tienes un wrapper reutilizable para futuras integraciones.
Costo del wrapper: 4-6 semanas de un desarrollador senior. Lo recuperas en la primera integración que evita repetir SDK calls.
Próximo paso
Si quieres que veamos juntos cómo conectar tu ERP con WhatsApp + IA, en Uniamos hacemos diagnóstico gratis de 30 minutos: nos dices qué ERP usas, qué casos quieres resolver y te enviamos la arquitectura recomendada con estimación de costo y plazo. Sin compromiso.