DEV Community

JoeRodriguez
JoeRodriguez

Posted on

Bot de WhatsApp con GPT y memoria en ~40 líneas de Python

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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?"
Enter fullscreen mode Exit fullscreen mode

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")
Enter fullscreen mode Exit fullscreen mode
  • 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)