<!-- https://vatio.ai/es/guias/agente-ia-para-clinicas · Actualizado: 2026-10-11 -->

> Construye un agente de IA que agenda, mueve y anula horas y responde sobre convenios por WhatsApp, con reglas que le impiden diagnosticar.

# Agente de IA para clínicas y centros de salud

Un agente de IA para una clínica atiende a los pacientes por WhatsApp y en tu sitio web, busca una hora libre, agenda, mueve o anula la cita en tu sistema de agenda, y responde dudas sobre especialidades, convenios y preparación de exámenes. Nunca diagnostica, y todo lo clínico se lo pasa a una persona. Con Vatio describes ese agente en un archivo `vatio.yml` y responde desde tu propio número de WhatsApp.

Esta guía construye uno de punta a punta: las instrucciones, las tools que llegan a tu agenda, el conocimiento que lee y las reglas que lo mantienen seguro.

## Qué resuelve el agente

Casi todo lo que le llega por WhatsApp a la recepción de una clínica son las mismas conversaciones:

- **Agendar.** «¿Tienen algo con dermatología esta semana?». El agente pregunta lo necesario, busca horas libres y agenda la que el paciente elige.
- **Mover y anular.** El paciente da su código de reserva y el agente le ofrece otras horas o la anula.
- **Convenios y precios.** Con qué isapres o seguros trabajas, cuánto cuesta una consulta, si un procedimiento requiere orden previa.
- **Preparación.** Ayuno antes de un examen de sangre, qué traer, con cuánta anticipación llegar.
- **Sucursales y horarios.** Dónde queda, estacionamiento, horario de atención.
- **Todo lo demás va a una persona.** Síntomas, resultados, reclamos, cobros.

Una conversación típica, con lo que el agente hizo por dentro:

> **Paciente:** hola, tienen algo con dermatología esta semana?
>
> **Agente:** Sí. La Dra. Soto tiene el jueves a las 10:30 y el viernes a las 16:00. ¿Cuál te acomoda?
>
> **Paciente:** el jueves. es para mi hijo, tiene 8
>
> **Agente:** La Dra. Soto atiende niños desde los 5 años, así que no hay problema. Para agendar necesito su nombre completo y su RUT.

Detrás de la segunda respuesta hubo una llamada a `buscar_horas` y una búsqueda en el conocimiento sobre el rango de edad de la dermatóloga. Cada llamada a una tool queda visible en el inbox, junto a la respuesta que produjo.

## Antes de escribir nada: cinco preguntas para la clínica

El agente es tan bueno como lo que la clínica te cuente. Pregunta antes de escribir una línea:

1. **¿Quién escribe y para qué?** Normalmente agendar, convenios y preparación, en ese orden.
2. **¿Qué no debe decir nunca?** Diagnósticos, opiniones sobre resultados, medicamentos, promesas de cobertura que no puede verificar.
3. **¿Cuándo toma la conversación una persona?** Síntomas, reclamos, cobros, cualquiera que pida hablar con alguien.
4. **¿De qué sistemas lee?** La API del software de agenda, la lista de precios, los convenios.
5. **¿Qué cuenta como urgencia?** El agente necesita las palabras de la propia clínica y el número al que derivar.

Las respuestas se convierten en las instrucciones, las condiciones de `handoff`, las tools y el conocimiento, en ese orden.

## El `vatio.yml`

```yaml
workspace: clinica-andes
agent:
  name: Clínica Andes
  personality: Cálido, tranquilo y breve. Palabras simples, sin jerga médica.
  instructions: |
    Ayudas a los pacientes de Clínica Andes a agendar, mover y anular horas,
    y respondes dudas sobre especialidades, convenios, precios y preparación
    de exámenes.

    Agendar: pregunta la especialidad o el profesional y un día preferido.
    Llama a buscar_horas y ofrece como máximo tres opciones. Antes de llamar
    a agendar_hora, pide el nombre completo y el RUT del paciente y repítele
    la reserva. Solo di que la hora quedó agendada cuando agendar_hora la
    haya devuelto.

    Mover o anular: pide el código de reserva y el RUT, y llama a
    anular_hora. Para mover, anula solo después de agendar la nueva hora.

    Convenios, precios y preparación: busca primero en knowledge_lookup.
    Si no encuentras la respuesta, dilo y ofrece pasarle la pregunta al equipo.

    Reglas que nunca rompes:
    - Nunca diagnostiques, interpretes síntomas, resultados o imágenes, ni
      recomiendes medicamentos o dosis.
    - Si alguien describe dolor en el pecho, dificultad para respirar,
      sangrado abundante o pérdida de conciencia, dile que llame al 131 o
      vaya a la urgencia más cercana ahora. No agendes nada.
    - Nunca prometas que una isapre o seguro va a cubrir algo.
  tools: [buscar_horas, agendar_hora, anular_hora, knowledge_lookup, identify_contact]
  knowledge: [clinica]
  links:
    portal: https://clinica-andes.example/pacientes
  handoff:
    after_turns: 12
    when:
      - el paciente describe síntomas y pregunta qué significan
      - el paciente pregunta por un resultado de examen
      - un reclamo por la atención o por un cobro
      - el paciente pide una devolución
```

Algunas decisiones que vale la pena explicar:

- **Las reglas están escritas como reglas.** «Nunca diagnostiques» en su propia viñeta es mucho más confiable que una frase escondida en un párrafo sobre el tono.
- **«Solo di que quedó agendada cuando la tool la devolvió».** Esa línea elimina la falla más cara de un agente de agenda: confirmar una hora que no existe.
- **El horario de atención no es el horario del agente.** El agente responde a toda hora. El horario, que la clínica configura en la página **Negocio** del inbox (lunes a viernes de 8:00 a 20:00 y sábado de 9:00 a 13:00), decide qué pasa después de una derivación: dentro del horario se queda en silencio para que una persona tome la conversación; fuera de él sigue ayudando y le dice al paciente que el equipo responderá en la mañana. El agente también conoce ese horario, así que puede decirle al paciente cuándo atienden.
- **`after_turns: 12`** es el piso bajo el criterio del modelo. Pasados doce mensajes del paciente, la conversación va a una persona aunque el agente no lo haya pedido.

## Tools: llegar a tu agenda

Una tool es un request HTTP a tu backend, descrito en YAML. Guarda la dirección y la llave como secrets para que nunca queden en el repositorio:

```bash
vatio secrets set CLINICA_API https://api.clinica-andes.example
vatio secrets set CLINICA_API_KEY sk_live_...
```

`tools/buscar_horas.yml`:

```yaml
description: Busca horas libres.
when_to_use: El paciente quiere agendar o mover una hora.
parameters:
  type: object
  properties:
    especialidad: { type: string, description: "por ejemplo dermatología, pediatría" }
    desde: { type: string, description: "AAAA-MM-DD" }
  required: [especialidad]
access: public
request:
  method: GET
  base_url: "$env.CLINICA_API"
  path: /horas
  headers:
    Authorization: "Bearer $env.CLINICA_API_KEY"
  query:
    especialidad: "$params.especialidad"
    desde: "$params.desde"
respond:
  data:
    horas: "$.horas"
  message:
    when_empty: No hay horas libres para esa especialidad en las próximas dos semanas.
    default: "Encontré {{count}} horas libres."
```

`tools/agendar_hora.yml`:

```yaml
description: Agenda una hora libre para un paciente.
when_to_use: El paciente eligió una hora de buscar_horas y confirmó su nombre y RUT.
parameters:
  type: object
  properties:
    hora_id: { type: string }
    nombre: { type: string }
    rut: { type: string }
  required: [hora_id, nombre, rut]
access: public
request:
  method: POST
  base_url: "$env.CLINICA_API"
  path: /reservas
  requires: [params.hora_id, params.nombre, params.rut]
  headers:
    Authorization: "Bearer $env.CLINICA_API_KEY"
  body:
    hora_id: "$params.hora_id"
    nombre: "$params.nombre"
    rut: "$params.rut"
respond:
  data:
    reserva: "$.reserva"
```

`anular_hora` tiene la misma forma: un `POST` con el código de reserva y el RUT. **Tu backend verifica que ambos coincidan** antes de anular nada. Los parámetros de una tool los llena el modelo, así que la verificación de que una reserva le pertenece a quien la pide tiene que vivir en código, no en el prompt.

Devuelve un status HTTP real cuando algo falla, como un `409` cuando alguien acaba de tomar la hora. Vatio convierte cualquier respuesta que no sea 2xx en un error que el agente puede explicar, así que una carrera perdida se vuelve «esa hora se acaba de ocupar, el viernes a las 16:00 sigue libre» en vez de una confirmación falsa.

### Lo que queda detrás de un login

En WhatsApp e Instagram un contacto es anónimo hasta que inicia sesión, y para un contacto anónimo solo corren tools públicas. **Resultados, diagnósticos e historial médico van detrás de un login**, en una tool marcada `access: private` que lee solo los datos del paciente que tu backend firmó. En tu sitio o tu app, ese es el token que renderizas; en WhatsApp e Instagram, agrega `sign_in_url` a `auth:` y la tool primero le envía al paciente un botón **Iniciar sesión** hacia tu sitio, y Vatio le pide confirmar el número o la cuenta que se conecta antes de seguir con la conversación ([En WhatsApp e Instagram](https://vatio.ai/docs/authentication/sessions#on-whatsapp)). Sin eso, el agente puede enviar el link a tu portal de pacientes; para eso está `links.portal` arriba.

## Conocimiento: convenios, precios y preparación

Todo lo largo que el agente deba leer en vez de memorizar va en una base de conocimiento: una entrada en Markdown por tema, con secciones que puedan responder una pregunta por sí solas.

```bash
vatio kb create clinica
vatio kb write clinica convenios convenios.md
vatio kb write clinica preparacion-examenes preparacion-examenes.md
vatio kb write clinica especialidades especialidades.md
vatio kb write clinica sucursales sucursales.md
```

Una buena entrada es específica:

```markdown
# Preparación de exámenes

## Exámenes de sangre
Ayuno de 8 horas. Puedes tomar agua. Trae tu carnet y la orden médica.
La toma de muestras es de lunes a sábado de 7:30 a 10:30, sin hora previa.

## Ecografía abdominal
Ayuno de 6 horas y no fumar. Llega 15 minutos antes.
```

Vatio no lee tu sitio web. Si la respuesta está en una página, pon en una entrada lo que el agente necesita. Los supervisores pueden editar entradas desde el inbox cuando cambian los precios, y cada edición queda guardada como versión.

## Audios y fotos

Los pacientes mandan audios y fotos de órdenes médicas. Vatio transcribe el audio y le pasa al agente las imágenes y los PDF compatibles, así que un «aquí está mi orden» con una foto se convierte en la reserva del examen correcto. También agrupa los tres mensajes que alguien manda seguidos en una sola pregunta antes de responder. El agente lee la orden para saber qué agendar; no la interpreta, y eso es justamente lo que las reglas de arriba dejan explícito.

## Pruébalo antes que cualquier paciente

```bash
vatio push
vatio chat "Hola, ¿tienen algo con dermatología el jueves?"
vatio chat "Me duele el pecho y me cuesta respirar"
vatio chat --new "¿Qué significa un colesterol de 260?"
vatio chat show
```

Las tres últimas son las importantes: una urgencia que no debe intentar agendar, un resultado que no debe interpretar, y `chat show` para leer cada llamada a tools que hizo. Después agrega tu teléfono como número de prueba en la página **Probar** del inbox y habla con el agente en el número compartido de preview de WhatsApp. Para eso no necesitas una cuenta de Meta.

## Que mejore cada semana

Cuando la recepción usa el inbox, **marca** cualquier respuesta que estuvo mal y escribe lo que debió pasar. `vatio flags` convierte esas notas en un documento desde el cual tu coding agent puede corregir, cada flag se vuelve un caso de eval, y el flag queda marcado como resuelto cuando live lo pasa. Mira [Mejorar tu agente](/es/guias/mejorar-tu-agente-de-ia).

## Publicar

```bash
vatio publish
```

Después conecta el número de WhatsApp Business de la clínica desde **Canales** en el inbox y actívalo. Puedes seguir usando la app de WhatsApp Business en el teléfono: si alguien de recepción responde desde ahí, toma la conversación, y el agente se hace a un lado hasta que la liberen.

Las conversaciones con pacientes son datos de salud. Mantenlas lejos de donde no corresponden: Vatio nunca pone el contenido de una conversación en el correo diario de reportes, y tu backend debería aplicar la misma regla a sus propios logs. Todo workspace de Vatio se trata como si guardara datos sensibles: las conversaciones se guardan cifradas, solo van a modelos de IA sin retención de datos y el equipo de Vatio no puede leerlas salvo que le des acceso de soporte. En **Seguridad**, en el inbox, exige la verificación en dos pasos a todo tu equipo; así las sesiones también se cierran tras 12 horas sin uso. Lo que la normativa local exige a las comunicaciones de una clínica con sus pacientes sigue siendo tuyo de revisar.

## Preguntas frecuentes

### ¿Un agente de IA puede agendar horas médicas por WhatsApp?

Sí. El agente llama a tu sistema de agenda con tools que describes en YAML: una para buscar horas libres y otra para agendar. Vatio opera la conversación en WhatsApp; tu sistema sigue siendo el que confirma la reserva.

### ¿El agente va a dar consejos médicos?

Solo si se lo permites, y no deberías. Escribe la regla de forma explícita en sus instrucciones (nunca diagnosticar, interpretar síntomas o resultados, ni recomendar medicamentos) y pon las consultas por síntomas en handoff.when para que las tome una persona.

### ¿Los pacientes pueden ver sus resultados de exámenes con el agente?

Solo después de iniciar sesión. Leer los datos de un paciente requiere una tool privada y un visitante autenticado: en tu sitio web o tu app, tu backend firma un token que dice quién es, y en WhatsApp o Instagram, con un sign_in_url en vatio.yml, el agente primero le envía al paciente un botón Iniciar sesión hacia tu sitio. Un paciente que no ha iniciado sesión solo tiene tools públicas.

### ¿El agente envía recordatorios de hora?

Sí, cuando tu sistema de agenda los pide. Conoce la hora, así que llama a la Messages API de Vatio para cada paciente y la conversación se abre por WhatsApp: tu propio texto, un brief a partir del cual escribe el agente, o una plantilla aprobada si pasaron más de 24 horas desde el último mensaje del paciente. El agente atiende la respuesta sabiendo por qué escribió, y tu sistema sigue decidiendo a quién recordarle y cuándo.

### Mi software de agenda no tiene API. ¿Igual puedo hacerlo?

Una tool es un request HTTP, así que el agente necesita un endpoint al cual llamar. Si tu software no lo ofrece, el trabajo está en un servicio pequeño en tu backend que lea y escriba la agenda. El agente nunca entra a una pantalla.
