Bot de WhatsApp con GPT y memoria en ~40 líneas de Python
Uno de los problemas más molestos al armar un bot de WhatsApp con IA es la memoria: WhatsApp no recuerda nada entre mensajes, así que el modelo no tiene contexto de lo que se habló antes. En este tutorial armamos un bot que sí recuerda, sin construir ninguna base de datos, usando una API de memoria y su SDK.
Qué vamos a usar
- OpenAI para generar las respuestas.
- WhatsApp Memory API para guardar el historial y devolverlo ya formateado para el LLM. Tiene un SDK de Python que hace todo el trabajo pesado.
pip install openai whatsapp-memory
El bot completo
import openai
from whatsapp_memory import WhatsAppMemory
wa = WhatsAppMemory("wma_live_xxxx") # tu API key
openai.api_key = "sk-..."
SYSTEM = "Sos el asistente de una pizzería. Sé breve y amable."
def responder(phone: str, texto_cliente: str) -> str:
# 1. Guardar el mensaje entrante
wa.add_message(phone, "user", texto_cliente)
# 2. Traer el contexto ya formateado para OpenAI
ctx = wa.get_context(phone, format="openai")
# 3. Llamar al modelo con el historial completo
respuesta = openai.chat.completions.create(
model="gpt-4o",
messages=[{"role": "system", "content": SYSTEM}, *ctx["context"]],
).choices[0].message.content
# 4. Guardar la respuesta del bot
wa.add_message(phone, "assistant", respuesta)
return respuesta
Eso es todo. Cada vez que llega un mensaje, llamás a responder(phone, texto) y el bot recuerda toda la conversación de ese número.
Probémoslo
phone = "+5491112345678"
print(responder(phone, "Hola, quiero una pizza"))
# -> "¡Hola! ¿De qué te gustaría? Tenemos margarita, napolitana..."
print(responder(phone, "la margarita, grande"))
# -> "¡Buenísimo! Una margarita grande. ¿Para retirar o envío?"
Notá que en el segundo mensaje el bot sabe que hablamos de la margarita, sin que nosotros le pasemos el historial a mano. Eso lo resuelve get_context, que además trunca por tokens y resume las conversaciones largas automáticamente.
¿Qué más trae?
- Metadata por sesión: guardá el nombre del cliente, su último pedido, etc.
wa.update_metadata(phone, nombre="Juan", ultimo_pedido="ORD-1234")
-
Formato Anthropic:
wa.get_context(phone, format="anthropic"). - Webhooks firmados y API keys con límites de uso.
Conectar con WhatsApp real
La función responder() es agnóstica de cómo recibís los mensajes. Conectala a tu webhook de la WhatsApp Business API (o Twilio, 360dialog, Builderbot, etc.): cuando llega un mensaje, llamás a responder() y enviás lo que devuelve.
Probalo
La API y sus docs interactivas están acá: https://whatsapp-memory-api.onrender.com/docs
Creás una key con un POST /keys y ya podés empezar. Si armás algo con esto, me encantaría saber qué.
¿Hacés bots de WhatsApp? ¿Cómo venías resolviendo la memoria hasta ahora? Contame en los comentarios.
Top comments (0)