Anatomía de un bot
Entrada, interpretación, estado, decisión y respuesta: las cinco piezas de cualquier bot.
Todo bot, desde un menú de tres opciones hasta un asistente con IA, sigue el mismo ciclo: recibe un mensaje, lo interpreta, consulta el estado de la conversación, decide qué hacer y responde.
Las cinco piezas
- Entrada: el webhook del canal entrega texto, botón pulsado o medio.
- Interpretación: convierte la entrada en una intención (
agendar,cancelar). - Estado: dónde está el usuario dentro del flujo.
- Decisión: la regla que, dada intención y estado, elige la siguiente acción.
- Respuesta: el mensaje que se envía, adaptado al canal.
function handle(msg, session) {
const intent = interpret(msg.text); // interpretación
const next = decide(session.step, intent); // decisión
session.step = next.step; // estado
return next.reply; // respuesta
}Mensajes duplicados
Los canales reintentan webhooks. Si procesas dos veces el mismo mensaje, el bot avanzará dos pasos. Guarda el id de cada mensaje entrante y descarta los repetidos antes de tocar el estado.
Un bot es, antes que nada, un programa que recibe eventos y responde. Todo lo demás —intenciones, entidades, modelos de lenguaje— son técnicas para decidir qué responder. Separar el transporte (recibir y enviar mensajes) de la lógica conversacional es la decisión de arquitectura más rentable que puedes tomar.
Con esa separación, el mismo cerebro puede atender SMS, chat web y canales IP, y puedes probarlo sin red, como en los playgrounds de esta serie. El transporte se encarga de firmas, reintentos y formatos; la lógica solo ve texto y contexto.
Las cuatro capas
- Transporte: webhooks entrantes, envío saliente, verificación de firmas.
- Sesión: identifica al usuario y carga su estado conversacional.
- Lógica: decide la respuesta según estado e intención.
- Respuesta: adapta el contenido al canal (botones o texto plano).
Cuando un bot falla en producción, casi siempre es en la capa de sesión: estado perdido entre instancias, mensajes que llegan en paralelo o un usuario que escribe desde otro canal. Dedícale el mismo cuidado que a la lógica.