Asistente multi-agente para WhatsApp con LangGraph

3 de octubre de 2025 • 7 min de lectura

Inicio / Blog / Asistente multi-agente para WhatsApp con LangGraph

Sobre el autor

Author

Gonzalo Gomez

Especialista en IA y Automatización

Diseño sistemas de comunicación impulsados por IA. Mi trabajo se centra en agentes de voz, chatbots de WhatsApp, asistentes de IA y automatización de flujos, construidos principalmente sobre Twilio, n8n y LLM modernos como OpenAI y Claude. En los últimos 7 años he entregado más de 30 proyectos de automatización que manejan más de 250 000 interacciones mensuales.

Suscríbete a mi newsletter

Si te gusta el contenido que hago, puedes suscribirte y recibir información valiosa por correo. No se envía spam, solo novedades sobre publicaciones interesantes o contenido especializado del que hablo.

Asistente multi-agente para WhatsApp con LangGraph | Cómo armar un asistente de WhatsApp con varios agentes de IA usando LangGraph y Python: interpreter, executor, supervisor y el webhook con FastAPI.

Introducción

En esta guía te muestro cómo crear un asistente multi-agente para WhatsApp con Python y LangGraph.


La idea es tener varios agentes de IA trabajando juntos: uno que entiende la intención del usuario, otro que ejecuta la acción, y un supervisor que coordina a los dos.

 

Si ya armaste bots de WhatsApp con Twilio, este es el paso siguiente. En lugar de un solo bot basado en un prompt, vas a tener varios agentes especializados que razonan, delegan y completan tareas juntos.

 

¿Por qué asistentes multi-agente?

Casi todos los chatbots de WhatsApp siguen un patrón simple:

  • Reciben un mensaje
  • Se lo mandan a un LLM
  • Devuelven la respuesta

 

Ese enfoque funciona, pero es limitado. Los problemas aparecen rápido cuando:

  • Querés que el bot llame APIs (calendario, CRM, base de datos)
  • Necesitás razonamiento estructurado entre varios pasos
  • Querés separar tareas y reusarlas en distintos contextos

 

LangGraph resuelve eso: te deja definir workflows con estado entre varios agentes de IA, parecido a un diagrama de flujo pero definido en código.

 

Qué vamos a construir

Vamos a crear una arquitectura multi-agente simple que se adapta a distintos casos de uso.

 

Agentes de ejemplo:

  • Interpreter: entiende qué quiere el usuario
  • Executor: ejecuta la acción
  • Supervisor: coordina a los dos

 

Una vez que entendés la estructura, la reusás para:

  • Sistemas de reservas o agendamiento
  • Soporte al cliente por WhatsApp
  • Asistentes de ventas conectados a CRMs
  • Automatizaciones internas o consultas de datos

 

Requisitos

 

Vas a necesitar:

  • Python 3.10 o superior
  • Un sandbox de WhatsApp en Twilio
  • Una API key de OpenAI
  • Los siguientes paquetes:

 

pip install langgraph langchain-openai fastapi python-dotenv

 

Creá un archivo .env:

 

OPENAI_API_KEY=sk-your-key 
MODEL_NAME=gpt-4o-mini

 

Armar los agentes

Arrancamos creando dos agentes: uno que interpreta el mensaje del usuario y otro que ejecuta la acción correspondiente.

 

# interpreter_agent.py
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
import os

class IntentOutput(BaseModel):
    intent: str = Field(description="The user’s intent, e.g., check_status, create_booking, cancel")
    parameters: dict = Field(description="Extracted entities or parameters from the user message")

SYSTEM_PROMPT = """
You are the Interpreter Agent.
Your job is to read a WhatsApp message, detect the user’s intent, and extract structured parameters.

Example:
User: "Can you book a table for two tomorrow at 8pm?"
Response (as JSON):
{
  "intent": "create_booking",
  "parameters": {"people": 2, "time": "2025-07-10T20:00:00"}
}
"""

llm = ChatOpenAI(model=os.getenv("MODEL_NAME", "gpt-4o-mini"), use_responses_api=True)

interpreter_agent = create_react_agent(
    name="interpreter_agent",
    model=llm,
    tools=[],
    prompt=SYSTEM_PROMPT
)

 

# executor_agent.py
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
import os

SYSTEM_PROMPT = """
You are the Executor Agent.
You receive an intent and parameters from the Interpreter.
Your job is to perform the action (or simulate it) and return a WhatsApp-friendly message.

If intent == "create_booking", pretend to create a booking.
If intent == "check_status", pretend to look up an order or reservation.
If intent == "cancel", confirm the cancellation.

Always return a short, user-friendly message, e.g.:
"Your table for two tomorrow at 8pm has been booked ✅"
"""

llm = ChatOpenAI(model=os.getenv("MODEL_NAME", "gpt-4o-mini"), use_responses_api=True)

executor_agent = create_react_agent(
    name="executor_agent",
    model=llm,
    tools=[],
    prompt=SYSTEM_PROMPT
)

 

El supervisor

Esta es la parte que coordina todo.
Define la lógica que decide qué agente corre después y cómo fluye la información entre ellos.

 

from typing import Literal, TypedDict, Annotated
from langgraph.graph import StateGraph, START, END
from langchain_core.messages import HumanMessage, AIMessage, BaseMessage
import operator
from interpreter_agent import interpreter_agent
from executor_agent import executor_agent

class AssistantState(TypedDict):
    messages: Annotated[list[BaseMessage], operator.add]
    user_prompt: str
    intent: str | None
    parameters: dict | None
    result: str | None
    next_agent: Literal["interpreter", "executor", "finish"] | None

def route_to_next(state: AssistantState) -> Literal["interpreter", "executor", "finish"]:
    if not state.get("intent"):
        return "interpreter"
    elif not state.get("result"):
        return "executor"
    else:
        return "finish"

def call_interpreter(state: AssistantState) -> dict:
    result = interpreter_agent.invoke({
        "messages": [HumanMessage(content=state["user_prompt"])]
    })
    intent = None
    parameters = {}

    text = result["messages"][-1].content if "messages" in result else ""
    if "intent" in text:
        import json
        try:
            parsed = json.loads(text)
            intent = parsed.get("intent")
            parameters = parsed.get("parameters", {})
        except:
            pass

    return {
        "intent": intent,
        "parameters": parameters,
        "messages": [AIMessage(content=f"Detected intent: {intent}", name="interpreter")]
    }

def call_executor(state: AssistantState) -> dict:
    prompt = f"Intent: {state['intent']}\nParameters: {state['parameters']}"
    result = executor_agent.invoke({"messages": [HumanMessage(content=prompt)]})
    text = result["messages"][-1].content if "messages" in result else ""
    return {"result": text, "messages": [AIMessage(content=text, name="executor")]}

def create_assistant():
    workflow = StateGraph(AssistantState)
    workflow.add_node("interpreter", call_interpreter)
    workflow.add_node("executor", call_executor)
    workflow.add_edge(START, "interpreter")
    workflow.add_conditional_edges("interpreter", route_to_next, {"executor": "executor"})
    workflow.add_conditional_edges("executor", route_to_next, {"finish": END})
    return workflow.compile()

assistant_team = create_assistant()

 

Exponerlo por WhatsApp

Podés usar FastAPI y el webhook de WhatsApp de Twilio para manejar los mensajes.

 

from fastapi import FastAPI, Form
from fastapi.responses import PlainTextResponse
from langchain_core.messages import HumanMessage
from supervisor import assistant_team

app = FastAPI()

@app.post("/twilio/whatsapp")
async def whatsapp_webhook(From: str = Form(...), Body: str = Form("")):
    state = {"messages": [HumanMessage(content=Body)], "user_prompt": Body}
    result = assistant_team.invoke(state)
    reply = result.get("result") or "I couldn’t process that yet."
    twiml = f"""
<Response>
  <Message>{reply}</Message>
</Response>
"""
    return PlainTextResponse(twiml, media_type="application/xml")

 

Cómo funciona

  1. El usuario manda un mensaje de WhatsApp.
  2. Twilio lo reenvía a tu webhook.
  3. El Supervisor corre primero el Interpreter para detectar la intención.
  4. Después llama al Executor, que ejecuta la acción.
  5. El resultado final vuelve a WhatsApp.

 

Pensalo como dos agentes teniendo una conversación corta: uno entiende qué hay que hacer, el otro lo ejecuta.

 

Flujo de ejemplo

Usuario: "¿Podés chequear el estado de mi pedido?"
Interpreter: { "intent": "check_status" }
Executor: "Tu pedido se está preparando 🚚"

Usuario: "Cancelá mi reunión de las 5pm"
Interpreter: { "intent": "cancel", "parameters": {"time": "17:00"} }
Executor: "La reunión de las 5pm fue cancelada ✅"

 

Por qué este patrón importa

Los sistemas multi-agente te dejan escalar más allá de los bots de palabras clave.
Reusás agentes, los conectás a APIs y les das responsabilidades específicas.
Eso significa menos complejidad de prompt, más confiabilidad e integraciones más limpias.

 

Este enfoque encaja perfecto en:

  • Salud: agendamiento de turnos y recordatorios
  • Inmobiliarias: mostrar disponibilidad y agendar visitas
  • E-commerce: consultas de pedidos y devoluciones
  • Servicios profesionales: agendar o reprogramar reuniones

 

Con este armado bajás el trabajo manual, respondés más rápido y mejorás la experiencia del cliente,  todo dentro de WhatsApp.

 

Para cerrar

LangGraph simplifica construir workflows multi-agente estructurados.
Combinado con la API de WhatsApp de Twilio, pasás de un chatbot estático a un asistente que entiende, actúa y colabora.

Empezá con dos agentes y un workflow. Cuando funcione, extendelo a todo tu flujo de comunicación, desde la calificación de leads hasta el seguimiento post-venta.

 

¿Te sirvió el post? ¡Suscribite al newsletter de abajo para más!

3225
Twilio,  Python
Publicado el 3 de octubre de 2025

Descubre cuánto te está costando tu sistema de comunicaciones.

Obtén la auditoría de comunicaciones

Posts relacionados

Por qué un bootcamp de programación ya no te alcanza

11 de abril de 2024
Seamos honestos: la mayoría de la gente que arranca en IT elige el camino de la programación, y muchos entran por un bootcamp. Es una... Leer más

Agente que reconoce productos y cotiza por WhatsApp

23 de junio de 2026
Un agente que reconoce productos y cotiza en tiempo real por WhatsApp y MessengerEl sistema funciona así: un cliente manda una foto de un motherboard... Leer más

Cómo integrar WhatsApp con Twilio: guía paso a paso

22 de septiembre de 2025
IntroducciónSi querés sumar mensajería de WhatsApp a tu app o a tu flujo de negocio, sin pelearte con la WhatsApp Business API, Twilio lo hace... Leer más

Twilio Flex: empezá simple y escalá tu contact center

22 de abril de 2025
Introducción Por querer dar una atención al cliente impecable, muchas empresas caen en la trampa de sobreconstruir la infraestructura de su contact center. Invierten fuerte al... Leer más