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.
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.
- 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. - 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. - 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).
- 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.
- El modelo usa herramientas de agendaCiclo de tool-use con tope de 4 vueltas: consulta disponibilidad, agenda, cancela o reagenda.
- 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.
@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
Nuevo
Agendado
Confirmado
Convertido
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 frontend | Compila y genera todas las rutas verificado el 2026-10-20 |
| Pruebas unitarias de traspaso a humano | 17 de 17 pasan verificado el 2026-10-20 |
| Suite completa contra base de datos | El 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 agente | No evaluada con conversaciones reales en el informe de QA pendiente |
| Pruebas de carga | No ejecutadas; no hay entorno de staging separado pendiente |
| Cobro automático de suscripciones | No activo en desarrollo |
| Despliegue | Documentado 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)