Cómo darle memoria a tu bot de WhatsApp con IA (sin construir la infraestructura) A developer has built a REST API that gives WhatsApp bots persistent memory without requiring developers to build their own infrastructure. The API handles message storage, context formatting for LLMs like OpenAI and Anthropic, automatic token truncation, and conversation summarization. Developers can integrate it with just a few HTTP requests, eliminating the need to design database tables or manage token budgets. Si alguna vez hiciste un bot de WhatsApp con IA, te topaste con esto: WhatsApp no recuerda nada . Cada mensaje que llega es un evento aislado. Si el cliente escribe "y el rojo, ¿lo tenés?", tu modelo no tiene idea de qué "rojo" habla, porque no sabe qué se dijo dos mensajes antes. Para resolverlo, todos terminamos construyendo la misma plomería: Es trabajo repetitivo que no tiene nada que ver con la lógica de tu agente. En este artículo te muestro el problema en detalle y cómo evitarlo con una API de memoria. Un primer intento típico en Python se ve así: Pseudo-código del enfoque manual historial = db.query "SELECT role, content FROM mensajes WHERE phone = %s ORDER BY created at", phone mensajes = {"role": m.role, "content": m.content} for m in historial mensajes.insert 0, {"role": "system", "content": "Sos el asistente de una pizzería..."} respuesta = openai.chat.completions.create model="gpt-4o", messages=mensajes Funciona... hasta que: system de los messages .Cada una de esas cosas es una tarde de trabajo. Multiplicado por cada bot que hacés. La idea es delegar toda esa capa a una API REST. Guardás los mensajes con un POST y pedís el contexto ya armado con un GET . Veamos un bot completo de pizzería: python import httpx, openai MEMORY API = "https://whatsapp-memory-api.onrender.com" HEADERS = {"Authorization": "Bearer wma live xxxx"} def manejar mensaje phone: str, texto cliente: str - str: 1. Guardar el mensaje entrante httpx.post f"{MEMORY API}/sessions/{phone}/messages", headers=HEADERS, json={"role": "user", "content": texto cliente} 2. Pedir el contexto YA formateado para OpenAI ctx = httpx.get f"{MEMORY API}/sessions/{phone}/context", headers=HEADERS, params={"format": "openai"} .json 3. Llamar al LLM con el historial inyectado respuesta = openai.chat.completions.create model="gpt-4o", messages= {"role": "system", "content": "Sos el asistente de una pizzería..."}, ctx "context" , <-- historial listo para usar , .choices 0 .message.content 4. Guardar la respuesta del bot httpx.post f"{MEMORY API}/sessions/{phone}/messages", headers=HEADERS, json={"role": "assistant", "content": respuesta} return respuesta Eso es todo. No hay tablas que diseñar, no hay manejo de tokens, no hay reformateo. La API se encarga: trunca por presupuesto de tokens y, cuando la charla supera cierto tamaño, genera un resumen automático de lo viejo y lo antepone como contexto. Vos seguís pidiendo /context y siempre recibís algo que entra en el prompt. Cambiás un parámetro: ctx = httpx.get f"{MEMORY API}/sessions/{phone}/context", headers=HEADERS, params={"format": "anthropic"} .json ahora ctx tiene "system" y "messages" separados, como espera Anthropic Cada sesión tiene un store de metadata: httpx.patch f"{MEMORY API}/sessions/{phone}/metadata", headers=HEADERS, json={"nombre": "Juan", "ultimo pedido": "ORD-1234"} La API que usé en los ejemplos está en vivo y tiene docs interactivas: 👉 https://whatsapp-memory-api.onrender.com/docs https://whatsapp-memory-api.onrender.com/docs Creás una key con un POST /keys y ya podés empezar. Si estás construyendo bots de WhatsApp, me encantaría saber qué le falta. ¿Hacés bots de WhatsApp? Contame en los comentarios cómo manejás hoy la memoria — me interesa ver qué enfoques usa cada uno.