12 min de lectura
PorDiego Carrion·Co-founder, Duotach
Build in progressAgentes IAWhatsAppClaude

Agente IA de WhatsApp para e-commerce: cómo lo estamos construyendo

Un agente IA de WhatsApp es un asistente conversacional que usa un modelo de lenguaje para entender al cliente, consultar datos externos (stock, CRM, pedidos) con herramientas y decidir qué hacer, sin árbol de decisión rígido. Acá contamos el detalle de ingeniería de uno que estamos construyendo ahora mismo para una empresa de retail y e-commerce en Ecuador: la arquitectura real, las tres decisiones que más pesan y por qué las tomamos así.

Esto no es teoría: lo estamos construyendo

Este artículo es el detalle de ingeniería de un agente IA de WhatsApp que en Duotach estamos construyendo ahora mismo para una empresa de retail y e-commerce en Ecuador, sobre WhatsApp Business API. Contamos la arquitectura real y las decisiones de diseño que más pesan.

El proyecto está en progreso: todavía no tenemos números finales de ROI, y cuando el sistema esté estable en producción vamos a publicar los resultados. Mientras tanto, esto es lo que ya está decidido y construido. Lo que podemos mostrar hoy es el criterio: cómo se decide la arquitectura de un agente serio en lugar de un bot de demo.

Qué es un agente IA de WhatsApp (y por qué no es un chatbot)

La palabra "chatbot" se usa para dos cosas que técnicamente no se parecen. Un chatbot de árbol de decisión es un mapa de respuestas: el cliente escribe una palabra clave, el sistema matchea un disparador y devuelve una respuesta cargada de antemano. Es rápido y predecible, pero se rompe en cuanto el cliente sale del guión o hace una pregunta compuesta.

Un agente IA es otra cosa. Lee el historial completo, interpreta la intención, consulta sistemas externos cuando le hace falta y elige la acción sin un flujo rígido. La diferencia práctica para un gerente de operaciones: el chatbot responde preguntas sueltas, el agente conduce una conversación de punta a punta.

DimensiónChatbot de árbol de decisiónAgente IA con tool use
Entiende lenguaje naturalNo (palabras clave)Sí (LLM)
Maneja preguntas compuestasNo
Consulta datos externos en vivoLimitado, scripteadoSí, vía herramientas (tools)
Mantiene contexto de la conversaciónPobreCompleto
Decide cuándo escalar a un humanoRegla fijaDecisión contextual
Costo de mantenimiento al crecerAlto (más ramas)Estable (más herramientas)

El agente que estamos construyendo usa agentes IA con Claude Code y el SDK de Anthropic con tool use nativo. No es un wizard de "armá tu bot sin código": es un sistema de software con su loop de razonamiento, su base de conocimiento y su registro de auditoría.

El problema del cliente: retail y e-commerce en Ecuador

El cliente es una empresa de retail y e-commerce que opera en Ecuador, con planes de expandir a más países de la región. Su atención al cliente vive en WhatsApp: consultas de productos, estado de pedidos, envíos, postventa. Ya tienen un CRM maduro con pipelines de ventas y soporte que funcionan, y un equipo mayormente no técnico que responde desde ese CRM.

El objetivo no es reemplazar a ese equipo, sino sacarle de encima el volumen repetitivo (las mismas preguntas sobre envíos, horarios, disponibilidad) y dejar que las personas se concentren en los casos que de verdad necesitan un humano. Tres restricciones marcaron todo el diseño:

  • No tocar lo que ya funciona. Los pipelines del CRM están maduros. El agente se suma como una capa, no reordena el flujo de trabajo existente.
  • El equipo lo tiene que poder operar sin nosotros. En el mes 12, sin Duotach en el medio, el cliente tiene que poder editar respuestas, ajustar reglas y entender qué pasó en cada conversación.
  • Multi-país desde el diseño. Lo que se construye para un país tiene que escalar a otros, con contenido y tono distintos por mercado.

Las tres decisiones de arquitectura que importan

Cuando una decisión es load-bearing (sostiene el resto del sistema durante meses), en Duotach la pasamos por un análisis formal de alternativas antes de comprometernos. Estas son las tres que definieron el agente.

1. Orquestación: todo-n8n vs todo-SDK vs híbrido

La pregunta central: ¿el loop del agente (recibir el mensaje, buscar en la base de conocimiento, llamar al LLM, ejecutar herramientas, responder) vive en n8n, vive en código, o se reparte? Evaluamos tres caminos. Esta tabla es el corazón de la decisión:

EnfoqueProsContras
Todo en n8n
workflows visuales
Máxima velocidad de delivery si el equipo ya sabe n8n. Visibilidad de cada ejecución en la UI. Refuerza el patrón estándar.El tool use multi-turn se vuelve "Function-node-spaghetti" arriba de 3-4 herramientas. Difícil de testear y versionar. Techo de mantenibilidad con lógica compleja.
Todo en código
servicio con Anthropic SDK
Tool use nativo y legible. Testeable, tipado, versionable como código. Cualquier dev backend lo entiende.Más curva para deploy, health checks y observabilidad. Sin UI de debug nativa. Rompe el patrón estándar de un equipo n8n-first.
Híbrido ✓
n8n + servicio Node
n8n hace el plumbing; el código hace el razonamiento. Cada herramienta donde brilla. El más reversible.Dos componentes que monitorear en lugar de uno. Requiere documentar la división con claridad.

Elegimos el híbrido. n8n maneja el plumbing: recibe el webhook de WhatsApp y responde rápido (el Salesbot del CRM tiene un timeout duro de 2 segundos que mitigamos con una respuesta asíncrona), agrupa los mensajes que el cliente manda sueltos, busca el contacto en el CRM y, después de cada turno, ejecuta los efectos sobre el CRM. El loop de agente vive en un servicio Node con TypeScript que usa @anthropic-ai/sdk.

La regla que organiza todo es simple: el servicio decide qué pasa, n8n hace que pase. El tool use multi-turn necesita encadenar llamadas al modelo en un solo lugar, así que vive en el código. El cambio en el CRM (reasignar responsable, crear lead) lo ejecuta n8n después, lo que deja un punto de control natural para una eventual aprobación humana. Y es la opción más reversible: si el servicio diera problemas, el loop puede volver a n8n; si n8n molesta para el plumbing, se migra al servicio.

2. Knowledge base: Postgres + pgvector como única fuente de verdad

El agente necesita una base de conocimiento (KB): políticas de envío, FAQs, info de productos, runbooks de soporte. Esa KB tiene que servir a dos amos: ser editable por un equipo no técnico, y ser consultable por el agente con baja latencia en cada conversación. Evaluamos Notion como fuente primaria, un vault de Obsidian en Git, y cargar todo el KB en el contexto de Claude sin búsqueda semántica.

Terminamos en lo más simple: Postgres en la nube del cliente como única fuente de verdad, con la extensión pgvector para retrieval semántico. Los documentos viven como filas en Postgres; al guardarlos se generan los embeddings (con text-embedding-3-small, 1536 dimensiones); el agente hace una búsqueda híbrida (semántica con pgvector + por palabra clave con tsvector) filtrada por país.

¿Por qué no un vector DB separado (Pinecone, Qdrant)? A esta escala, pgvector responde por debajo de 100 ms sin agregar otro proveedor ni otro pipeline de sincronización. ¿Por qué no Notion como primario? Violaría el principio de que todo vive en la infra del cliente y obligaría a mantener un job de sincronización frágil. ¿Por qué no cargar todo en el contexto? Arriba de cierto volumen, el costo se dispara y se pierde el registro de qué documentos vio el modelo. Un solo store, un solo write path, un solo read path. Sin sincronización entre sistemas.

3. Todo en la infra del cliente desde el día 1

Este no es un detalle técnico, es un principio rector: todo activo material (código, base de datos, secretos, logs, repositorios) vive en la infraestructura del cliente desde el primer commit. n8n corre como contenedor en una EC2 del cliente. El servicio Node corre en la misma EC2. La base de datos es un Postgres RDS del cliente. Los repositorios están en la organización de GitHub del cliente; Duotach es contributor, no owner.

¿Por qué importa tanto que se ponga primero? Porque elimina la caja negra. No hay un servidor de Duotach del que el cliente dependa para siempre. Si mañana quieren operar el sistema con otro proveedor, ya tienen todo: el código, los datos y la documentación de las decisiones. Es ownership real, no una promesa de marketing. Y condiciona las otras dos decisiones: descartamos Notion como fuente primaria y los frameworks con UIs de debug SaaS justamente porque sacarían activos fuera de la infra del cliente.

El stack elegido y por qué

El sistema se piensa por capas. Cada una tiene una responsabilidad clara y le habla solo a la de al lado.

CapaTecnologíaQué hace
CanalWazzup + WhatsApp Business APIConecta el número de WhatsApp y entrega los mensajes al CRM.
CRM e inboxKommo + SalesbotDonde viven contactos y pipelines, y desde donde responden los humanos. Dispara el webhook al recibir un mensaje.
Orquestaciónn8n (Docker en EC2 del cliente)Plumbing: intake del webhook, buffering, lookup de contacto, ejecución de side effects, cron jobs.
Loop de agenteNode TypeScript + @anthropic-ai/sdkRazonamiento: retrieval del KB, llamada al LLM, tool use multi-turn, audit log. No expuesto a internet.
DatosPostgres RDS + pgvector + pg_trgmFuente de verdad: documentos, FAQs, prompts, reglas de routing, audit log y embeddings.
AdminWebapp Next.jsDonde el equipo del cliente edita el KB, los prompts y las reglas, y revisa el historial de conversaciones.

Sobre el modelo: usamos Claude con un mix optimizado por costo. Sonnet 4.5 como modelo principal para razonamiento y conversación; Haiku 4.5 para clasificación y FAQs simples. El SDK base de Anthropic da tool use nativo, prompt caching y streaming sin meter el harness completo de Claude Code en producción, que para un agente conversacional sería over-tooling.

Las herramientas (tools) que el agente puede invocar en esta primera fase:

  • search_knowledge_base — busca en el KB filtrado por país cuando necesita info que no entró en el contexto inicial.
  • lookup_contact_kommo — trae el historial reciente y los datos del contacto desde el CRM.
  • handoff_to_human — marca la conversación para derivar a un humano, con motivo, urgencia e intención para el routing.

En el roadmap suman lookup_order_status (estado de pedido), create_lead_kommo (crear lead ante intención de compra clara) y escalate_with_context (handoff con resumen estructurado). Si te interesa el patrón general detrás de esto, lo desarrollamos en nuestra guía de agentes IA con Claude Code.

Cómo se resuelve una conversación, paso a paso

El flujo conceptual de un turno, de punta a punta:

Cliente (WhatsApp)
   ↓
Wazzup → Kommo (Salesbot dispara webhook)
   ↓  widget_request (ack < 100 ms, timeout 2s mitigado async)
n8n: intake + buffering por chat_id + lookup de contacto
   ↓  POST /turn { chat_id, country, messages, contact_id }
Servicio Node (loop de agente):
   1. Embed de la consulta
   2. Retrieval híbrido (pgvector + tsvector) por país
   3. Carga del system prompt activo del país
   4. Llamada a Claude con tools
   5. Loop multi-turn mientras pida herramientas
   6. Escritura del audit_log
   ↓  { response_text, side_effects }
n8n: responde al cliente + ejecuta side effects en el CRM
   ↓
Cliente recibe la respuesta en WhatsApp

Ejemplo: pregunta simple

El cliente escribe "¿hacen envíos a Quito?". n8n acka en menos de 100 ms, espera unos segundos por si llegan más mensajes, busca el contacto e infiere el país. El servicio embebe la consulta, recupera los documentos de envíos, carga el prompt del país y llama a Claude. Claude responde directo, sin herramientas. El servicio escribe el turno en el audit log y devuelve el texto. Latencia total alrededor de 8 segundos, dentro del presupuesto.

Ejemplo: tool use + handoff

El cliente escribe "tengo un problema con mi cuenta hace dos días y nadie responde". Claude pide lookup_contact_kommo, ve el historial sin respuesta y decide escalar con handoff_to_human, urgencia alta. El servicio consulta las reglas de routing, genera una respuesta empática y devuelve a n8n la intención de reasignar el responsable. n8n manda el mensaje y reasigna el ticket en el CRM.

Cada turno queda registrado: qué documentos se recuperaron, qué herramientas se llamaron, qué prompt se usó, cuántos tokens y cuánta latencia. Ese audit log por turno, guardado en Postgres y visible desde el admin, es mejor trazabilidad que la UI de un workflow para la pregunta que de verdad importa: "¿por qué el agente respondió esto?". Es queryable, exportable y no se rota a los pocos días.

Qué viene después

Seamos honestos sobre el estado: el sistema está en construcción. Ya está decidido y en marcha la arquitectura híbrida, el KB en Postgres + pgvector, el servicio de loop de agente con sus primeras herramientas y el principio de infra del cliente.

Lo que viene por fases: el panel de administración completo para que el equipo opere sin nosotros, prompt caching para bajar costos, nuevas herramientas (estado de pedido, creación de leads), métricas operativas y la expansión multi-país.

Cuando el agente esté estable en producción y tengamos datos reales (volumen resuelto sin humano, tiempos de respuesta, CSAT), vamos a publicar el caso de éxito completo con números. Por ahora, lo que podemos mostrar es el criterio. Si querés ver el resto de lo que construimos, está en nuestros casos de éxito. Y si todavía no estás en este nivel pero querés empezar por la base, escribimos una guía para automatizar WhatsApp Business con n8n.

Construyamos el tuyo

Si tu operación vive en WhatsApp y el volumen ya le pesa al equipo, un agente IA bien construido (no un bot de árbol de decisión) puede absorber lo repetitivo y dejar a las personas en lo que importa. Lo construimos con la arquitectura que ves acá: portable, auditable y operada por tu equipo. Cotizamos por scope.

Preguntas Frecuentes

¿Qué diferencia hay entre un agente IA de WhatsApp y un chatbot?+
Un chatbot sigue un árbol de decisión con palabras clave y respuestas cargadas de antemano: se rompe si el cliente sale del guión. Un agente IA usa un LLM para entender lenguaje natural, consultar datos externos con herramientas y decidir la acción sin flujo rígido. El chatbot responde preguntas, el agente conduce la conversación completa.
¿Qué stack usan para construir el agente IA de WhatsApp?+
WhatsApp Business API vía Wazzup como canal, Kommo como CRM, n8n para el plumbing, un servicio Node con TypeScript y el SDK de Anthropic (Claude) para el loop de agente, y Postgres con pgvector como base de conocimiento. Un panel de administración en Next.js permite al equipo del cliente operar todo sin tocar código.
¿Por qué un híbrido n8n + código en vez de hacer todo en n8n?+
Porque el tool use multi-turn se vuelve inmanejable en workflows visuales arriba de tres o cuatro herramientas. Aislar el razonamiento del agente en código TypeScript lo hace legible, testeable y versionable, mientras n8n sigue haciendo bien lo que mejor hace: el plumbing visual de integraciones. Además es la opción más reversible.
¿Por qué Postgres con pgvector y no un vector DB dedicado?+
A la escala de un KB de e-commerce, pgvector responde por debajo de 100 ms sin agregar otro proveedor ni un pipeline de sincronización separado. Mantiene una sola fuente de verdad en la infraestructura del cliente, simplifica el mantenimiento y reduce los modos de falla frente a tener dos sistemas que sincronizar.
¿Los datos del agente quedan en servidores de Duotach?+
No. El principio del proyecto es que todo (código, base de datos, secretos, logs, repositorios) vive en la infraestructura del cliente desde el primer día. Duotach construye, transfiere y acompaña, pero no hay caja negra ni dependencia técnica de servidores nuestros. El cliente tiene ownership real desde el inicio.
¿Cuánto cuesta construir un agente IA de WhatsApp como este?+
Cotizamos por scope, no por hora. El precio depende del volumen de conversaciones, la cantidad de integraciones (CRM, e-commerce, pedidos), el número de herramientas del agente y si es mono o multi-país. Las licencias de los modelos y la infraestructura cloud se pagan aparte y quedan a nombre del cliente. Pasanos el contexto de tu operación y te armamos una propuesta concreta.