En producción · Medellín, julio 2026

Una agenda que atiende sola
y sabe cuándo llamar a una persona.

Sistema de agendamiento conversacional por WhatsApp para un estudio de transmisión en Medellín. Registra usuarios, valida disponibilidad, reserva, pide aprobación humana y entrega el control a una persona cuando hace falta. Lo diseñé, lo construí y lo opero yo.

Estado
En operación real
Canal
WhatsApp Cloud API
Disponibilidad
24/7, sin turnos
Autor
Amaury Moreno, desarrollador full-stack

El problema
real

Un estudio de transmisión se alquila por horas. La coordinación vivía en mensajes sueltos: alguien preguntaba si había cupo, otro respondía de memoria, y el horario se confirmaba dos veces o no se confirmaba nunca.

Los síntomas eran siempre los mismos: dos personas citadas a la misma hora, horarios apartados que nadie usó y un equipo respondiendo lo mismo a las once de la noche. Ninguno es un problema de software. Todos son un problema de que la información estaba en la cabeza de tres personas.

La decisión de diseño: el asistente no reemplaza al equipo, le quita lo repetitivo. Todo lo que compromete un recurso real —un horario, un cupo— lo sigue aprobando una persona, con un toque.

Eso definió el resto del sistema. Automatizar la conversación es fácil; lo difícil es que nunca se pierda un mensaje, que dos administradores no se pisen al decidir, y que cuando la máquina no sepa algo, alguien se entere.

El sistema, por dentro

Una conversación de un lado.
Control total del otro.

A la izquierda, lo que ve quien escribe. A la derecha, lo que ve el equipo en el mismo instante. Interfaz reproducida con datos ficticios: las conversaciones reales no salen de ahí.

ES
Estudio · Asistente
en línea
Hola, quiero apartar el estudio para mañana en la noche 10:42 p. m.
¡Hola! Para separarte el estudio primero tienes que estar en la agenda. ¿Me pasas tu usuario de TikTok y tu nombre completo? 10:42 p. m.
0:06
Transcrito: «soy @carolive_ y me llamo Carolina Ospina»
10:43 p. m.
Listo, Carolina. Le paso tu registro al equipo — ellos lo aprueban y te aviso por acá. Solo cuando quedes aprobada puedes separar el estudio. 10:43 p. m.
8 minutos después · el equipo aprobó el registro
Quedaste en la agenda. Tu código de acceso es SW-4KQ2 — guárdalo, te sirve si algún día escribes desde otro número. 10:51 p. m.
perfecto, mañana de 10 de la noche a 1 de la mañana 10:52 p. m.
Te confirmo: martes 28 de julio, de 22:00 a 01:00 de la madrugada del miércoles 29. Está libre. ¿Lo pido así? 10:52 p. m.
sí 10:53 p. m.
Enviado. Queda apartado mientras el equipo decide, así nadie más lo puede pedir. Te aviso apenas lo aprueben. 10:53 p. m.
Solicitud entrante Por aprobar
Creadora@carolive_
Horariomar 28 jul · 22:00 → 01:00
Cruza medianocheSí · se trata como una sola reserva
Aprobar Rechazar
Conversación · @carolive_ BotPersona

Cualquiera del equipo puede tomar el control del chat y escribir a mano. El asistente se calla en esa conversación y la retoma solo si nadie contesta.

Si una persona toma el chat y se olvida de devolverlo, el bot lo retoma a las 24 horas y avisa. Ninguna conversación se queda muda.
Registro de actividad Automático
10:53 Solicitud creada · horario bloqueado para el resto
10:53 Aviso enviado a los 3 administradores
11:07 Aprobada · el resto recibe “ya está resuelto”
19:00 Recordatorio automático 3 h antes de la transmisión
Entrega verificada 4 / 4
Confirmación de reservaEntregada
Aviso a administradoresEntregado
Recordatorio previoEntregado

Cada mensaje que sale del sistema se comprueba contra la respuesta de Meta. Si uno no salió, se reintenta por otra vía en lugar de darse por enviado.

Lo difícil

Las decisiones que sostienen
el sistema en producción

Un demo funciona el día que lo muestras. Esto lleva meses recibiendo mensajes reales, y eso obliga a resolver los casos que nadie ve en una presentación.

El bot nunca es dueño de la conversación.
Es un turno que se le puede quitar.

Casi todos los asistentes fallan igual: cuando la persona necesita hablar con alguien de verdad, no hay salida. Aquí el control del chat es un interruptor, y el equipo lo tiene siempre a la mano.

1Cualquiera del equipo toma el chat desde el panel y escribe a mano. El asistente se calla en esa conversación, al instante.
2Aunque esté callado sigue guardando todo: los mensajes, los audios y sus transcripciones quedan en el mismo hilo.
3Si esa persona se olvida de devolverlo, el bot retoma a las 24 horas y avisa. Ninguna conversación se queda muda sin que nadie se entere.
4Y al revés: cuando el bot no sabe algo, no improvisa. Lo registra, pregunta y devuelve la respuesta a quien la esperaba.

La doble reserva es imposible, no improbable

No se valida “preguntando antes si está libre” — dos personas pueden preguntar en el mismo segundo. El solape lo rechaza la base de datos como regla, así que ni una carrera entre dos mensajes simultáneos puede crearlo.

Reservas que cruzan la medianoche se guardan partidas, pero se aprueban, se cancelan y se muestran como una sola.

Tres personas deciden, ninguna se pisa

Los administradores aprueban desde su propio WhatsApp, con un botón. Si dos responden a la vez, gana el primero y al segundo se le dice quién resolvió y cuándo, en lugar de sobrescribir una decisión en silencio.

La decisión se resuelve de forma atómica en la base, no en el código que corre en paralelo.

Ningún aviso se pierde en silencio

WhatsApp solo permite escribir libremente durante 24 horas después del último mensaje del usuario; fuera de esa ventana hace falta una plantilla aprobada por Meta. El sistema comprueba que cada envío haya salido de verdad y, si no salió, reacciona.

Un aviso que “se mandó” pero no llegó es peor que no mandarlo: nadie lo sabe.

Cuando no sabe, pregunta y aprende

Si alguien pregunta algo que el asistente no puede responder, lo registra y le consulta al equipo por WhatsApp. La respuesta queda incorporada y además se la envía a quien había preguntado, cerrando el círculo sin que nadie más intervenga.

Solo aprende de administradores, con tope diario, y cada aprendizaje se puede apagar. Nada se incorpora sin que una persona lo apruebe.

Escucha notas de voz

La mayoría de la gente no escribe, habla. Las notas de voz se transcriben y siguen el flujo normal; si el audio no se entiende, lo dice y pide que lo repitan, en vez de quedarse mudo.

El equipo también ve el audio original y su transcripción en el panel.

Se vigila a sí mismo

Cada quince minutos revisa su propio estado: recuerda a quien tiene transmisión, insiste al equipo con lo que lleva horas sin decidirse, y libera los horarios de solicitudes que ya vencieron —porque un pendiente olvidado bloquea el estudio para todos.

Los tiempos se ajustan sin volver a desplegar nada.

Recorrido

De un mensaje suelto
a un horario confirmado

01

Escribe

Texto o nota de voz, a cualquier hora. Sin apps, sin formularios, sin instalar nada.

02

Se identifica

El sistema reconoce a quien ya está registrado por su número. Al resto lo registra y lo deja en cola.

03

Propone

Consulta la disponibilidad real, repite el horario completo y pide confirmación antes de tocar nada.

04

Una persona decide

El equipo aprueba o rechaza desde su WhatsApp. El horario queda bloqueado mientras tanto.

05

Acompaña

Confirma, recuerda antes de la transmisión y libera el cupo si se cancela.

Dónde más encaja

El estudio fue el caso.
El patrón es más grande.

Debajo de esto no hay un bot de agenda: hay un recurso limitado, una conversación que decide quién lo usa y una persona que tiene la última palabra. Ese patrón se repite en casi cualquier negocio que vive de citas.

Clínicas y consultorios
Agendar, reprogramar y recordar citas sin que nadie conteste el celular. El recordatorio previo es lo que baja las inasistencias, que es plata que ya estaba perdida.
Espacios que se alquilan por horas
Estudios, canchas, salas de ensayo, coworkings. Disponibilidad real en la conversación y aprobación humana antes de comprometer el espacio.
Atención fuera de horario
La mayoría de los mensajes llegan cuando el negocio está cerrado. Un asistente que responde a las once de la noche captura al cliente que a las nueve de la mañana ya le escribió a otro.
Filtrado y seguimiento de interesados
Hacer las preguntas que hace un vendedor, ordenar la información y pasarle a una persona solo lo que vale su tiempo, con el contexto ya listo.
Operación en dos idiomas
Atender en español e inglés sin contratar a nadie más. Ya lo tengo funcionando para pacientes que escriben desde Estados Unidos.

Construido con

Stack

Sin frameworks de agentes ni intermediarios. Integración directa contra las APIs oficiales, lógica de negocio en la base de datos y despliegue en el borde.

PostgreSQL Supabase

Modelo de datos, reglas de integridad y la lógica que no puede fallar. Restricciones de exclusión, operaciones atómicas y tareas programadas.

Edge Functions Deno · TypeScript

El webhook que recibe cada mensaje, orquesta las herramientas del modelo y responde. Verificación de firma en cada petición.

WhatsApp Cloud API Meta

Canal oficial. Plantillas aprobadas, mensajes con botones interactivos, multimedia y manejo de la ventana de servicio.

OpenAI GPT-4o · Whisper

Comprensión de la conversación con llamada a herramientas propias, y transcripción de notas de voz en español.

Row Level Security Postgres

Acceso cerrado por defecto. El cliente público no lee ni una fila; todo pasa por funciones con permisos revocados explícitamente.

Vercel Edge Network

Sitio y panel de administración desplegados con dominio propio, HTTPS y despliegues atómicos.

pg_cron · pg_net Postgres

El sistema se ejecuta a sí mismo desde la base: recordatorios, avisos y verificación de entregas, sin servidor adicional.

Telegram Bot API Respaldo

Segundo canal de alertas internas, sin ventanas de servicio ni plantillas: lo que no puede dejar de llegar, llega por aquí.

HTML · CSS · JS Vanilla

Panel e interfaces sin framework. Menos peso, menos dependencias y control total de la interacción.

Amaury Moreno · Medellín

Construyo sistemas que funcionan
cuando nadie los está mirando.

Este no es el primero. También desarrollo y opero los sistemas de una clínica dental de Medellín que recibe pacientes internacionales: su sitio, su posicionamiento en Google y un asistente que atiende en español e inglés, transcribe notas de voz y agenda valoraciones.

Estudio Ingeniería de Sistemas, pero lo que sé lo aprendí construyendo cosas que alguien tenía que usar al día siguiente. El código de una versión abierta de este agente está en GitHub. Estoy abierto a oportunidades laborales y a proyectos donde haga falta alguien que se haga cargo de un problema de punta a punta: entenderlo, diseñarlo, construirlo y sostenerlo en producción.