Construir un asistente de IA para WhatsApp de principio a fin: lo que hace falta más allá de la demo
Una demo que responde un mensaje de WhatsApp con IA se hace en una tarde. Un asistente al que un negocio de hostelería le confíe sus huéspedes necesita más: responder solo lo que sabe, actuar en tus sistemas sin sorpresas, reconocer cuando no sabe algo y mejorar con las respuestas de tu equipo. Así construí StillAnswer, el asistente que funciona para una escuela de surf con hostel, y esto es lo que aprendí.
11 min de lectura
1. El problema real: las mismas preguntas, todo el día
En hostelería, la mayoría de mensajes son las mismas veinte preguntas: a qué hora es el check-in, si hay aparcamiento, si se puede añadir una clase, cuánto cuesta alquilar la tabla. El equipo las responde entre check-ins y clases de surf, a menudo tarde y a menudo en un idioma que habla a medias. Quien escribe por WhatsApp espera respuesta ya.
Así que el objetivo no es un chatbot que hable de todo. Es un asistente que responde las preguntas que tu equipo ya ha respondido bien, en el idioma del huésped, a cualquier hora, y pasa el resto a una persona sin hacer ruido. Ese enfoque decide todo el diseño que sigue.
2. El canal: un número de empresa a través de un proveedor
El asistente habla con los huéspedes a través de la WhatsApp Business Platform, a la que llegas mediante un proveedor como Twilio o Azure Communication Services. Dos reglas de la plataforma marcan todo el diseño. Cuando un huésped escribe, se abre una ventana de atención de 24 horas en la que puedes responder libremente. Fuera de esa ventana solo puedes enviar plantillas de mensaje aprobadas antes, por ejemplo un recordatorio de reserva.
Así que el asistente tiene que saber en qué modo está. Dentro de la ventana responde con texto libre; fuera, envía una plantilla o deja el seguimiento a tu equipo. Prepara las plantillas pronto: necesitan aprobación, y la aprobación lleva un tiempo que no quieres gastar en la semana del lanzamiento.
3. El webhook: comprobar, confirmar, agrupar
Cada mensaje llega como webhook. Lo primero es comprobar la firma del proveedor; con Twilio es la cabecera X-Twilio-Signature, un HMAC sobre la URL y los parámetros con tu auth token. Todo lo que no tenga una firma válida se descarta, porque si no, cualquiera que encuentre la URL puede hablar con tu agente y con tus herramientas.
Después, confirma rápido y haz el trabajo de forma asíncrona, y haz el procesamiento idempotente por id de mensaje, porque los proveedores reintentan. Una lección de producción: los huéspedes escriben a ráfagas. «Hola» – «somos 3» – «¿podemos ir el viernes?» llegan en segundos. Una pausa corta que agrupa esos mensajes en una sola pregunta da una respuesta mucho mejor que tres respuestas a tres fragmentos.
import twilio from "twilio";
export async function onMessage(req: Request) {
const params = Object.fromEntries(new URLSearchParams(await req.text()));
const valid = twilio.validateRequest(
process.env.TWILIO_AUTH_TOKEN!,
req.headers.get("x-twilio-signature") ?? "",
"https://assistant.example.com/webhook", // the exact public URL
params,
);
if (!valid) return new Response("forbidden", { status: 403 });
await queue.add({ id: params.MessageSid, from: params.From, text: params.Body }); // idempotent by id
return new Response("<Response/>", { headers: { "content-type": "text/xml" } });
}4. El agente: conocimiento aprobado, el idioma del huésped
El agente recibe tres cosas en su contexto: las normas de la casa (tono, lo que nunca puede decir, cuándo escalar), la base de conocimiento aprobada y la conversación reciente. Responde en el idioma en que escribe el huésped, y en un hostel eso pueden ser cinco idiomas antes de comer. Funciona con Gemini, ChatGPT o Claude; el modelo es un ajuste, no el producto.
La regla más importante es negativa: si la respuesta no está en el conocimiento aprobado, no improvisa. Una respuesta segura y equivocada sobre precios o disponibilidad cuesta más confianza que un breve «lo consulto con el equipo». Lo pruebo con un conjunto fijo de preguntas, incluidas algunas que el agente debe rechazar, cada vez que cambian el conocimiento o el modelo.
5. Herramientas: consultar, y cambiar solo con un sí
La diferencia entre un bot de preguntas frecuentes y un asistente es que el asistente puede actuar: consultar una reserva o un pedido, comprobar disponibilidad, registrar una solicitud de cambio. Lo hace con tus propias herramientas, definidas con function calling, cada una estrecha y con entradas claras.
Leer es libre; cambiar, no. Antes de cualquier cambio, el asistente repite en palabras sencillas lo que va a hacer y espera el sí del huésped, y la propia herramienta se niega a escribir sin esa confirmación. Los pagos y reembolsos se quedan en tus sistemas actuales y con tu equipo. Un asistente que puede mover dinero con un mensaje de chat es un riesgo, no una función.
6. Conocer sus límites: el camino de escalada
Cuando el asistente no sabe responder, el huésped nunca debe notar un callejón sin salida. Le dice que el equipo lo va a revisar y le contestará, y en ese mismo momento avisa a tu equipo por email y por WhatsApp con un enlace directo a la conversación. Quien lo coge ve todo el chat, no un fragmento reenviado.
Pon un reloj a cada escalada. Si nadie ha respondido pasado un tiempo, la alerta vuelve a salir o va a otra persona. El peor resultado no es que la IA no supiera algo; es que al huésped se le prometió una respuesta que nunca llegó.
7. El ciclo de aprendizaje: las respuestas del equipo se vuelven conocimiento
Cada escalada es un hueco en la base de conocimiento, así que no debería acabar con un solo huésped atendido. Cuando alguien del equipo responde, la pregunta se convierte en una sugerencia con su respuesta ya rellenada, y un clic la añade al conocimiento. En la escuela de surf, el conocimiento nuevo solo entra en vigor después de que un responsable lo apruebe, para que una respuesta escrita con prisa no se convierta en la verdad oficial.
Este ciclo es lo que hace que el asistente mejore cada semana sin que nadie escriba unas preguntas frecuentes. El equipo sigue haciendo lo que ya hace, responder a los huéspedes, y el asistente aprende de las respuestas que alguien ha validado.
8. La bandeja del equipo y la operación real
El equipo necesita un lugar para leer todos los chats, responder en persona y pausar la IA en una sola conversación, por ejemplo cuando un huésped está molesto o una reserva necesita un trato humano. Pausar por chat importa más que un interruptor general para todo el asistente.
Para operarlo hay dos formas. Con tus propias cuentas, aportas las claves del proveedor y de IA y yo te guío en la configuración. Todo incluido, pongo el número y hago toda la configuración, incluida la aprobación de WhatsApp Business y las plantillas. En ambos casos, guarda solo lo que la conversación necesita, fija un plazo de conservación y di a los huéspedes en el primer mensaje que hablan con un asistente de IA y cómo llegar a una persona.
Conclusión
Un buen asistente para WhatsApp responde solo lo que sabe, actúa solo con un sí, pasa el caso con todo el chat y aprende de las respuestas que aprueba tu equipo.
Proyectos reales relacionados
Pruébalo tú mismo
Fuentes y guías oficiales
- Twilio: WhatsApp Business Platform with Twilio
- Twilio: WhatsApp key concepts (customer service window, templates)
- Twilio: Send notifications with message templates
- Twilio: Webhooks security (X-Twilio-Signature)
- Azure Communication Services: Advanced Messaging for WhatsApp
- Gemini API: Function calling
- Claude: Tool use overview
- OpenAI: Function calling
Más artículos
- 3.025 pull requests en diez meses: un proceso de entrega con IA, desde dentro
- La Ley de IA de la UE para medianas empresas: qué te aplica y desde cuándo
- FinOps para el gasto en IA: tokens, caché, enrutado y presupuestos que aguantan
- Hacer visible una red de restaurantes en las respuestas de la IA: un proyecto GEO paso a paso
- Cómo está hecha esta web: estática donde se puede, en streaming donde hace falta
- Costes de Kubernetes en EKS y GKE: el mismo método, otras palancas
- Una landing zone para empresas medianas, en Terraform o Bicep: las piezas que importan
- El manual de migración de sistemas heredados: oleadas, ejecución en paralelo y recuentos y checksums idénticos
- Seguridad de MCP a fondo: dejar entrar a los asistentes de IA en tu producto sin abrir las puertas
- Monitorizar resultados de negocio: paneles en verde, caja vacía
- Agentes de IA por teléfono: la arquitectura y los tropiezos que ninguna demo enseña
- Pruebas de restauración: un backup que nunca has restaurado es solo una esperanza
- Respuestas de IA en streaming en Azure Static Web Apps: la cabecera que lo retenía todo
- Sistemas air-gapped: software crítico sin conexión a internet
- IA en producción en AWS: Amazon Bedrock y AgentCore en una configuración privada
- IA en producción con Microsoft Foundry: una configuración de referencia privada para agentes
- /goal, /loop o rutinas: deja de vigilar a tu agente de programación
- Los nuevos planes de Claude: Max, Ultra y lo que significan para los equipos
- OpenAI Codex a finales de 2026: goal mode, dots y cómo blindarlo
- ¿GitHub Copilot, Claude Code o Codex? Cómo elegiría para una empresa
- Fundamentos de GEO: cómo aparecer en las respuestas de la IA
- IA en producción en Google Cloud: de Vertex AI a Gemini Enterprise Agent Platform
- LLM locales en una red air-gapped: IA para tus datos más sensibles
- Quiero ejecutar un LLM local: ¿qué servidor compro?
- MiniMax M3: ¿un modelo puntero que puedes ejecutar tú mismo?
- Investigación de prompts a gran escala con un modelo abierto
- SEO y GEO juntos: una auditoría práctica en 6 pasos
- Dimensionar bien Kubernetes: el método que llevó un clúster de 7 a 4 nodos
- IA privada para datos sensibles: un LLM local que supera la revisión de seguridad
- Del prototipo con IA a producción: las ocho capas que añado, en este orden
