Cómo crear un agente de IA en WhatsApp para tu negocio (Cloud API + Claude + RAG, 2026) — Cesar Ayala
← Todos los artículos

Cómo crear un agente de IA en WhatsApp para tu negocio (Cloud API + Claude + RAG, 2026)

Crea un agente de WhatsApp para una tarea específica: atención, pedidos o citas. Recibe mensajes con el webhook de la Cloud API, fundamenta cada respuesta en tus datos con RAG para que Claude no invente precios, responde dentro de la ventana de 24 horas y pasa a un humano si baja la confianza. Eso es justo lo que Meta hoy permite.

Por qué Meta acaba de prohibir los chatbots en WhatsApp (y por qué es buena noticia)

En octubre de 2025, WhatsApp cambió los términos de su Business Platform para prohibir los chatbots de propósito general, con fecha efectiva del 15 de enero de 2026. Si construyes para PyMEs en México, esta es la noticia más importante del año, y casi nadie la está leyendo bien.

Lo que está prohibido es muy concreto: que los proveedores de modelos de IA distribuyan sus asistentes de propósito general dentro de WhatsApp. Piensa en ChatGPT de OpenAI, Perplexity, Luzia, Poke. Esos “chatbots que sirven para todo” quedan fuera.

Lo que está permitido —y que Meta fomenta explícitamente— son los bots de IA hechos para tareas de negocio específicas y estructuradas: atención al cliente, consultar el estatus de un pedido y agendar citas. La razón que dio Meta es de carga: los bots generalistas generaban un volumen enorme de mensajes y carga del sistema sin producir ingresos para la plataforma.

Sobre los tiempos: los nuevos usuarios de la API que se registraron el 15 de octubre de 2025 o después quedaron sujetos de inmediato; las cuentas existentes tuvieron hasta el 15 de enero de 2026 para cumplir.

Y la parte honesta, porque te la vas a encontrar: la aplicación de la política está en disputa. El Conselho Administrativo de Defesa Econômica (CADE), la autoridad de competencia de Brasil, ordenó a Meta suspender la política el 13 de enero de 2026. Meta terminó exentando a Italia (tras la AGCM) y luego a Brasil. Así que sí, el enforcement es un tema vivo.

Mi lectura como builder (esto es opinión, pero la sostengo): un agente de negocio específico y fundamentado en tus datos es exactamente la categoría permitida. Esta política no te bloquea, te valida. Es luz verde para construir bien. Y en México, donde WhatsApp es el canal de negocio, esa luz verde vale oro.

La política de Meta de un vistazo (al 2026)

ProhibidoAsistentes de propósito general (ChatGPT, Perplexity, Luzia, Poke)
Permitido y fomentadoAgentes para tareas específicas: atención, pedidos, citas
FechasNuevos usuarios desde 15-oct-2025; cuentas existentes hasta 15-ene-2026
MatizCADE (Brasil) suspendió la política el 13-ene-2026; Meta exentó Italia y Brasil
WhatsApp Business Platform, efectiva 15 de enero de 2026. Enforcement en disputa.

Qué vamos a construir: un agente fundamentado para atención, pedidos y citas

La regla número uno: acota el alcance a uno o dos trabajos concretos. Por ejemplo, responder preguntas frecuentes + consultar el estatus de un pedido + agendar una cita. El alcance estrecho es lo que lo mantiene compatible con la política y, de paso, lo que lo hace confiable. Un agente que intenta hacer todo termina inventando y violando los términos al mismo tiempo.

Son cuatro piezas:

  1. El webhook de la WhatsApp Cloud API para recibir y enviar mensajes.
  2. Una base de conocimiento RAG con los datos de tu negocio.
  3. Claude fundamentado únicamente en el contexto recuperado.
  4. Un handoff a humano (pase a una persona) activado por confianza.

El flujo en tiempo de ejecución es: mensaje del usuario → webhook de la Cloud API → RAG recupera el contexto del negocio → respuesta de Claude fundamentada → chequeo de confianza → enviar dentro de la ventana de 24 horas O pasar a un humano.

Por default, todo arranca en español para México y LATAM: el system prompt y la base de conocimiento están en español, y el agente responde en el idioma del cliente. El stack de los ejemplos: Node.js para el webhook, pgvector para la recuperación, y la Anthropic Messages API para Claude. Si vienes de la base, esto se apoya en mi chatbot de IA sin alucinaciones, que es justo la disciplina que hace que esto funcione.

Paso 1: Conecta el webhook de la WhatsApp Cloud API (verificar + recibir)

La Cloud API es la API oficial de Meta, gratis para empezar (no necesitas un BSP de terceros) y está construida sobre la Graph API. Usa la versión actual de la Graph API —al 2026, por ejemplo v25.0— y revisa el changelog de Meta porque cambia seguido, así siempre usas la más reciente.

La verificación del webhook funciona así: Meta envía un GET con hub.mode, hub.verify_token y hub.challenge. Tu servidor checa que hub.verify_token sea igual a tu token configurado y, si coincide, responde con el valor de hub.challenge (HTTP 200). Si no, regresa 403.

Para recibir mensajes, Meta hace un POST a tu webhook. El mensaje entrante vive en entry[].changes[].value.messages[], y value.metadata.phone_number_id te dice qué número lo recibió.

Lo crítico: responde 200 al webhook rápido y procesa el mensaje de forma asíncrona, para que Meta no reintente y te duplique mensajes.

import express from "express";
const app = express();
app.use(express.json());

const VERIFY_TOKEN = process.env.VERIFY_TOKEN;

// Verificación: Meta envía un GET con hub.challenge
app.get("/webhook", (req, res) => {
  const mode = req.query["hub.mode"];
  const token = req.query["hub.verify_token"];
  const challenge = req.query["hub.challenge"];
  if (mode === "subscribe" && token === VERIFY_TOKEN) {
    return res.status(200).send(challenge);
  }
  return res.sendStatus(403);
});

// Recepción: 200 inmediato, luego procesa async
app.post("/webhook", (req, res) => {
  res.sendStatus(200); // responde primero para evitar reintentos
  const value = req.body.entry?.[0]?.changes?.[0]?.value;
  const msg = value?.messages?.[0];
  if (!msg) return; // statuses u otros eventos
  queueProcessing({
    from: msg.from,
    text: msg.text?.body,
    phoneNumberId: value.metadata.phone_number_id,
  });
});

Paso 2: La ventana de 24 horas, tu única restricción dura

Esta es la regla que moldea todo el diseño, así que vale la pena tenerla exacta.

Un mensaje entrante del usuario abre una ventana de atención al cliente de 24 horas, durante la cual puedes enviar mensajes de formato libre. Eso es ideal para un agente conversacional de IA: respondes lo que quieras, sin plantillas. Y cada nuevo mensaje entrante reinicia el temporizador de 24 horas.

Fuera de esa ventana, solo puedes enviar Message Templates pre-aprobados (categorías: Authentication, Utility, Marketing).

La implicación de diseño es directa: tu agente brilla dentro de la ventana, así que responde pronto. Usa plantillas únicamente para reabrir una conversación, por ejemplo un recordatorio de cita.

Sobre costos: en julio de 2025, WhatsApp pasó a facturación por mensaje. Confirma las tarifas vigentes en el dashboard de Meta, porque el precio es sensible al tiempo (2026). Si quieres armar las cuentas para chat de alto volumen, lo desgloso en cuánto cuesta integrar IA en tu app.

El flujo del agente en tiempo de ejecución

Mensaje del usuarioLlega por WhatsApp y abre la ventana de 24h
Webhook de la Cloud APIRecibe, responde 200 y encola async
RAG recupera contextoTop-k chunks de tus datos en pgvector
Claude responde fundamentadoSolo desde el contexto recuperado
Chequeo de confianza¿Hay respuesta en el contexto?
Enviar o pasar a humanoFree-form dentro de 24h O handoff
De un mensaje de WhatsApp a una respuesta fundamentada, con bifurcación de handoff.

Paso 3: Fundamenta cada respuesta con RAG para que nunca invente un precio

Aquí es donde se gana o se pierde la confianza. Indexa el conocimiento de tu negocio —FAQ, catálogo, precios, horarios, políticas— en un vector store como pgvector: genera embeddings de cada chunk y guárdalos ahí. Para cada mensaje entrante, recuperas los top-k chunks más relevantes y le pasas a Claude únicamente ese contexto.

Las reglas de fundamentación van en el system prompt. La regla de oro, textual:

Responde estrictamente desde el contexto proporcionado. Si la respuesta no está ahí, no adivines: di que conectarás a un humano.

Esa sola regla es la que evita que el bot invente un precio o una política y la que lo mantiene específico a la tarea (compatible). La confianza y el cumplimiento salen de la misma disciplina. Por eso elijo RAG y no fine-tuning para aterrizar un agente de negocio; lo explico en RAG vs fine-tuning.

import anthropic, psycopg2

client = anthropic.Anthropic()
conn = psycopg2.connect("dbname=kb")
cur = conn.cursor()

def responder(mensaje, embed):
    # embed = vector del mensaje (lo generas antes de llamar aquí)
    # Recupera top-k chunks relevantes desde pgvector
    cur.execute(
        "SELECT contenido FROM kb ORDER BY embedding <=> %s::vector LIMIT 5",
        (embed,),
    )
    contexto = "\n---\n".join(r[0] for r in cur.fetchall())

    system = (
        "Eres el agente de atención de la tienda. "
        "Responde SOLO desde este contexto. Si la respuesta no está, "
        "no inventes: di que conectarás a un humano.\n\n"
        f"CONTEXTO:\n{contexto}"
    )
    resp = client.messages.create(
        model="claude-haiku-4-5",  # alto volumen y costo-eficiente
        max_tokens=500,
        system=system,
        messages=[{"role": "user", "content": mensaje}],
    )
    return resp.content[0].text

Sobre el modelo: usa Claude Haiku 4.5 para chat de alto volumen, donde el costo importa, y Sonnet 4.6 cuando el razonamiento sea más duro. Y para acciones reales —buscar un pedido, checar disponibilidad, crear una cita— usa tool use / function calling, no texto suelto. Si quieres conectar el agente directo a tus sistemas y herramientas, ahí entra conectar tu agente de IA a tus datos con MCP.

Paso 4: Responde a través de la Cloud API (dentro de la ventana)

Con la respuesta lista, la envías con un POST a https://graph.facebook.com/<version>/{phone-number-id}/messages. Para que tu código no envejezca, mete la versión en una variable de entorno en lugar de quemarla.

El body para un texto simple:

GRAPH_VERSION="v25.0"  # confirma la versión actual en el changelog de Meta
curl -X POST "https://graph.facebook.com/$GRAPH_VERSION/$PHONE_NUMBER_ID/messages" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "messaging_product": "whatsapp",
    "to": "5215512345678",
    "type": "text",
    "text": { "body": "Tu pedido va en camino, llega hoy." }
  }'

O desde Node, en el mismo proceso async que ya tenías:

const GRAPH_VERSION = process.env.GRAPH_VERSION; // p.ej. "v25.0"
await fetch(
  `https://graph.facebook.com/${GRAPH_VERSION}/${phoneNumberId}/messages`,
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.ACCESS_TOKEN}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      messaging_product: "whatsapp",
      to,
      type: "text",
      text: { body: respuesta },
    }),
  },
);

El detalle que cierra el círculo: como respondiste dentro de la ventana de 24 horas, este envío de texto de formato libre no necesita aprobación de plantilla. Por eso responder pronto no es solo buena UX, es lo que te deja conversar libre y barato.

Paso 5: Pasa a un humano cuando baja la confianza

El handoff es la válvula de seguridad, y no es opcional. Escala cuando: el agente tiene baja confianza, la petición está fuera de alcance, el usuario está frustrado, o el usuario pide explícitamente hablar con una persona.

El mecanismo: notifica a un agente humano, pausa el bot para esa conversación, y entrega el transcript y el contexto para que el humano tenga continuidad y no haga repetir todo al cliente.

Lo bonito es que RAG hace esto natural: si la recuperación no devuelve nada relevante, el agente dice que conectará a un humano en vez de adivinar. El camino de “no hay respuesta” es el disparador del handoff. No tienes que programar un detector de confianza aparte; tu regla del system prompt ya lo hace.

Mi opinión, etiquetada como tal: el handoff es lo que gana la confianza del cliente y lo que mantiene al agente firmemente en el carril permitido, el de tareas específicas. Un bot que sabe cuándo callarse y pasar la bola es más valioso que uno que pretende saberlo todo.

Constrúyelo de principio a fin

  1. 1. Cloud API + webhookVerifica con hub.challenge y recibe en value.messages[]
  2. 2. Base de conocimiento RAGGenera embeddings de FAQ, catálogo y precios en pgvector
  3. 3. Respuesta fundamentada con ClaudeSystem prompt estricto; solo desde el contexto
  4. 4. Handoff por confianzaPausa el bot y entrega el transcript al humano
Cuatro pasos ordenados para un agente de WhatsApp compatible y confiable.

Preguntas frecuentes

¿Mi agente de negocio queda prohibido por la política del 15 de enero de 2026? No. La prohibición apunta a los asistentes de propósito general. Un agente para una tarea específica —atención, pedidos, citas— está explícitamente permitido y fomentado.

¿Qué pasó en Brasil? La autoridad de competencia (CADE) ordenó a Meta suspender la política el 13 de enero de 2026, y Meta terminó exentando a Italia y luego a Brasil. El enforcement está en disputa, pero construir específico a la tarea te deja seguro en cualquier escenario.

¿Necesito un BSP de paga como Twilio o 360dialog? No. La Cloud API es gratis para empezar y puedes construir directo sobre ella. Un BSP es una comodidad opcional, no un requisito.

¿Cuánto cuesta mandar mensajes? WhatsApp usa facturación por mensaje (desde julio de 2025), más los tokens de tu API de Claude. Confirma las tarifas vigentes de WhatsApp en el dashboard de Meta, porque cambian.

¿Qué modelo de Claude uso? Claude Haiku 4.5 para alto volumen y eficiencia de costo; Sonnet 4.6 para razonamiento más duro.

¿Cómo evito que invente precios? Fundamentación con RAG más la regla estricta del system prompt: responde solo desde el contexto recuperado y, si no está, pasa a un humano.

¿De verdad puede agendar citas o consultar pedidos? Sí. Conéctalos como funciones de tool use de Claude contra tus sistemas.

Chatbot generalista vs agente específico fundamentado

Chatbot de propósito general

  • Prohibido por Meta desde el 15-ene-2026
  • Intenta responder cualquier cosa
  • Inventa precios y políticas
  • Sin trazabilidad de la fuente

Agente específico fundamentado

  • Permitido y fomentado por Meta
  • Acotado a atención, pedidos, citas
  • Responde solo desde el contexto recuperado
  • Pasa a un humano si no sabe
La misma disciplina que te hace compatible te hace confiable.

Lanza el agente compatible en el que tus clientes confiarán

El hilo conductor es uno solo: un agente de WhatsApp acotado y fundamentado con RAG es a la vez confiable (no inventa precios) y compatible (específico a la tarea). La misma disciplina te compra las dos cosas.

Para las PyMEs de México y LATAM esto es de altísimo valor ahora mismo: WhatsApp es el canal de negocio dominante y el patrón que cumple con la política ya está clarísimo.

Mi recomendación de builder: empieza con un solo trabajo —FAQ + estatus de pedido—, fundaméntalo bien, agrégale el handoff, y de ahí expande. Y antes de salir a producción, confirma siempre la versión actual de la Graph API y las tarifas vigentes de WhatsApp. Si quieres más guías para llevar agentes a producción, están en agentes de IA.

Fuentes: TechCrunch sobre el cambio de términos · Política de WhatsApp Business · Brasil ordena suspender la política (TechCrunch) · Changelog de la WhatsApp Business Platform