Miguel Alonzo Barrios
Caso de estudio · Automatización con IA

NEXIO Clínicas: un agente de IA que atiende el WhatsApp de una clínica

Responde con la información de la clínica, agenda y reagenda citas reales, y pasa la conversación a una persona cuando hace falta. Una plataforma multi-clínica con panel, CRM y agenda, construida de extremo a extremo.

Next.js 16 Supabase Claude (Anthropic) WhatsApp Google Calendar

Hecho por una persona, con Claude Code como herramienta de trabajo. Español nativo, portugués fluido. Desde Curitiba, Brasil, disponible para trabajo remoto.

El problema

Una clínica pequeña recibe consultas por WhatsApp todo el día: precios, horarios, citas, cambios. Las atiende recepción o el propio profesional, entre otras tareas. Fuera de horario, nadie responde.

La hipótesis de producto es que esa demora cuesta pacientes. No tengo una métrica propia que lo pruebe todavía; es la premisa sobre la que se construyó el sistema.

Respuestas que tardan

El WhatsApp de la clínica depende de una persona disponible.

Agenda manual

Cada cita se coordina con idas y vueltas de mensajes.

Sin seguimiento

Los contactos viven en el chat y no en un registro ordenado.

La solución

Una plataforma donde cada clínica configura su propio agente y lo conecta a su WhatsApp. El agente responde con lo que la clínica le enseñó, consulta y escribe en la agenda, y registra cada contacto en un CRM con un pipeline tipo Kanban.

Agente configurable

  • Nombre, personalidad y tono por clínica.
  • Base de conocimiento desde documentos, sitio web y preguntas frecuentes.
  • Reglas fijas de seguridad en el prompt interno, no editables por el cliente.

Agenda real

  • El agente usa herramientas: verificar disponibilidad, agendar, listar, cancelar y reagendar.
  • Sincronización con Google Calendar por OAuth.

CRM y atención humana

  • Pacientes, pipeline configurable por rubro y panel de conversaciones.
  • Cola de atención con traspaso a una persona.

Plataforma multi-clínica

  • Organizaciones con roles y aislamiento por clínica.
  • Panel de administración de la plataforma y planes con límites.

Cómo funciona

Flujo de un mensaje entrante, tal como está implementado en el código.

  1. Llega el mensaje de WhatsAppPor Evolution API (QR) o por la API oficial WhatsApp Cloud. La ruta oficial verifica la firma x-hub-signature-256.
  2. Se identifica la clínica y se guarda la conversaciónBúsqueda de la clínica por la instancia (Evolution) o por el phone_number_id (Cloud API), y registro de conversación y mensaje en Postgres.
  3. Reglas deterministas antes de la IADetección de opt-out y de disparadores de traspaso a humano (por ejemplo, reclamo, tema sensible o pedido de hablar con una persona).
  4. Se arma el prompt interno y se llama al modeloReglas fijas más la información de la clínica. Si el mensaje es un audio, antes se transcribe con Whisper.
  5. El modelo usa herramientas de agendaCiclo de tool-use con tope de 4 vueltas: consulta disponibilidad, agenda, cancela o reagenda.
  6. Se envía la respuesta y se registran eventosSe guarda la salida, se actualiza el CRM y se notifica al dueño o a la cola de atención cuando corresponde.

Procesamiento durable

Un dispatcher interno, protegido con un secreto y programado con pg_cron, procesa lotes de eventos de conversación con un sistema de lease para evitar trabajo duplicado.

Recordatorios de citas

Un endpoint interno envía recordatorios de las citas de "mañana" en horario de Brasilia, también programado por cron y protegido con un secreto comparado en tiempo constante.

Capacidades de IA y automatización

Tool-use con Claude

Cinco herramientas de agenda: verificar_disponibilidade, agendar_consulta, listar_consultas_paciente, cancelar_consulta, reagendar_consulta.

Traspaso a humano

Siete disparadores: pedido de persona, reclamo, tema sensible, falla de herramienta, intención no cubierta, intentos repetidos y decisión del propio agente mediante un marcador explícito.

Audio

Los mensajes de voz se transcriben con Whisper (OpenAI) antes de pasar al agente.

Protecciones

  • Rate limit atómico en base de datos.
  • Opt-out del paciente y anonimización (LGPD).
  • Auditoría de acceso de soporte.

Conocimiento

Extracción de texto de documentos PDF y del sitio web de la clínica para alimentar la base de conocimiento del agente.

Idiomas de la interfaz

Español y portugués.

Arquitectura y stack técnico

Todo lo listado está en el código o en los archivos de configuración del repositorio.

Next.js 16.2 (App Router)React 19.2TypeScript 5 Tailwind CSS 4shadcn/uiFramer Motion Supabase: Postgres, Auth, RLS@supabase/ssr Anthropic API (modelo configurado: claude-sonnet-5)OpenAI Whisper Evolution API (WhatsApp por QR)WhatsApp Cloud API v23.0 (Embedded Signup) Google Calendar API (OAuth)pg_cron Despliegue en Netlify (@netlify/plugin-nextjs)

Datos

42 migraciones SQL. Aislamiento por organización con Row Level Security, roles organization_admin, supervisor, operator, viewer y un administrador de plataforma aparte.

Servidor

Rutas API en Next.js para webhooks, agente, agenda, conocimiento y tareas internas. Sin ORM: consultas directas a Postgrest.

Planes

Catálogo único de planes y funciones (Essencial, Profissional, Completo) con un solo punto de verdad para bloquear funciones por plan.

Cómo uso Claude Code para entregar soluciones

Claude Code es mi herramienta de trabajo, no mi criterio. Yo defino qué se construye, por qué y qué significa "terminado". Esto es lo que hago con él, con ejemplos que se pueden ver en este repositorio:

Análisis de repositorios

Antes de tocar código, auditar lo que existe. El archivo docs/nexio-architecture-baseline.md clasifica cada módulo como completo, simulado o ausente, con los riesgos encontrados.

Planificación de funcionalidades

Decidir el orden de trabajo y justificarlo por dependencias. Quedó escrito en docs/nexio-mvp-decisions.md.

Creación y refactorización

Escribir y cambiar código por bloques pequeños. Hago una copia de respaldo de cada archivo que modifico, y esos respaldos se ven en el repositorio.

Debugging

Reproducir antes de corregir. Ejemplo: en una prueba de casos de pacientes encontré que "falta de ar" o "estou grávida" no activaban el traspaso a humano; se corrigió y quedó con prueba.

Pruebas

15 archivos de prueba: aislamiento entre clínicas, roles, agenda sin doble reserva, cola, auditoría, seguridad, webhooks y proveedores. La mayoría corre contra una base de datos real, sin mocks de base.

Documentación

Informe de QA que registra lo que NO se pudo probar, y una guía operativa de privacidad (LGPD) que separa controles implementados de pendientes.

Integraciones y despliegues

Revisar webhooks, firmas, variables de entorno y rutas internas antes de publicar. Las claves van en variables de entorno, nunca en el código.

Mi criterio

Elijo qué entra al producto, qué se descarta, cómo se comunica al cliente y cuándo algo no está listo. La IA acelera el trabajo; la responsabilidad del resultado es mía.

Capturas o demo

Vista conceptual. El repositorio no incluye capturas del producto en uso, y no usé datos reales de clínicas. Lo siguiente son maquetas ilustrativas del flujo, no capturas de pantalla del producto.
VISTA CONCEPTUAL · Conversación con el agente
Clínica (ejemplo)asistente
Hola, ¿tienen horario para una evaluación esta semana?
¡Claro! Tengo jueves a las 15:30 o viernes a las 10:00. ¿Cuál prefieres?
Jueves 15:30.
Listo, quedó agendado para el jueves a las 15:30.
La cita aparece en la agenda y en el CRM
VISTA CONCEPTUAL · Pipeline de pacientes

Nuevo

Paciente APrimer contacto
Paciente BPregunta precio

Agendado

Paciente CJueves 15:30

Confirmado

Paciente DViernes 10:00

Convertido

Paciente ECerrado

Las etapas reales del código incluyen: Novo, Em atendimento, Interessado, Agendado, Confirmado, Compareceu, Não compareceu, Convertido, Perdido y Precisa seguimento.

Estado actual del producto

No hay métricas comerciales que pueda publicar con honestidad. Lo que sí es verificable:

QuéEstado
Build de producción del frontendCompila y genera todas las rutas verificado el 2026-10-20
Pruebas unitarias de traspaso a humano17 de 17 pasan verificado el 2026-10-20
Suite completa contra base de datosEl informe de QA registra 44 de 44 al 2026-08-04 según el repositorio. Hoy no la re-ejecuté porque apunta al Supabase del proyecto.
Calidad conversacional del agenteNo evaluada con conversaciones reales en el informe de QA pendiente
Pruebas de cargaNo ejecutadas; no hay entorno de staging separado pendiente
Cobro automático de suscripcionesNo activo en desarrollo
DespliegueDocumentado en app.nexioia.com. Sin cifras públicas de uso ni de clientes.

Próximos pasos

  • Evaluar la calidad conversacional del agente con un conjunto de casos y un presupuesto de API definido.
  • Montar un entorno de staging separado para correr pruebas de carga sin tocar datos reales.
  • Activar el cobro automático y cerrar el flujo de contrato.
  • Medir con una clínica piloto: tiempo de respuesta, citas agendadas y traspasos a humano.
  • Revisar paginación y deuda de lint registradas en la auditoría inicial.

Contacto

Busco puestos remotos en AI Automation, AI Integration o Product Engineering en LATAM. Construyo automatizaciones, CRM, embudos, agentes de IA y aplicaciones web para negocios.

WhatsApp: +55 41 99855-5409 · Curitiba, Brasil (UTC-3)