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

> Construye un agente de IA que responde los DMs de Instagram y WhatsApp de tu salón, spa o gimnasio: servicios, precios, reservas por profesional y planes.

# Agente de IA para salones, spas, estudios y gimnasios

Un agente de IA para un salón, un spa, un estudio o un gimnasio atiende a tus clientes por los DMs de Instagram, WhatsApp y tu sitio web: servicios y precios, horas libres por profesional, reservas, cancelaciones según tu política, y planes. Lee la foto del corte o del diseño de uñas que manda una clienta y reserva el servicio que corresponde sin prometer el resultado, y le pasa a una persona todo lo que tenga que ver con salud. Con Vatio describes ese agente en un archivo `vatio.yml` y responde desde tu propia cuenta de Instagram y tu número de WhatsApp.

## Qué resuelve el agente

- **Servicios y precios.** Qué incluye un balayage, cuánto dura una manicure gel, según la lista de precios que tú escribiste.
- **Disponibilidad por profesional.** «¿Camila tiene hora el sábado?», o quien esté libre primero, y la reserva misma.
- **Cancelaciones.** Con el código de reserva y el teléfono, según la política que aplica tu backend.
- **Planes y membresías.** Qué incluye cada plan y cómo contratarlo; los cambios van a una persona.
- **Fotos.** «¿Me pueden hacer esto?» con una imagen, asociada a un servicio.
- **Clases.** En un gimnasio o un estudio de yoga o pilates, las mismas tools reservan un cupo en una clase en vez de una silla.
- **Todo lo demás va a una persona.** Embarazo, condiciones médicas, reacciones, reclamos por un resultado, devoluciones.

Una conversación típica por Instagram:

> **Clienta:** holaa, ¿me pueden hacer algo así el sábado? *(foto de un diseño de uñas)*
>
> **Agente:** ¡Qué lindo! Es una manicure gel con diseño pintado a mano, unas dos horas. Camila tiene el sábado a las 11:00 y Rocío a las 15:30. ¿Con quién prefieres?
>
> **Clienta:** con camila!! va a quedar igualito?
>
> **Agente:** Camila va a revisar el diseño contigo al comienzo y te va a decir qué funciona en tus uñas. Lo describo en la reserva para que lo vea antes. ¿A nombre de quién la hago, y con qué teléfono?

Detrás de la primera respuesta, el agente leyó la foto, buscó el nail art en la lista de precios y llamó a `buscar_disponibilidad`, todo visible en el inbox.

## Antes de escribir nada: cinco preguntas para el negocio

1. **¿Quién escribe, y por dónde?** Muchas veces primero por DM de Instagram, después por WhatsApp y el sitio web.
2. **¿Qué servicios hace cada profesional, y cuánto duran?** Tu software de reservas lo sabe; el agente necesita los nombres de los servicios.
3. **¿Cuál es la política de cancelación, y quién puede hacer una excepción?** Anticipación, abonos, inasistencias.
4. **¿Qué no debe prometer nunca?** Un resultado, que un tratamiento es seguro para la condición de alguien, un descuento.
5. **¿Cuándo toma la conversación una persona?** Preguntas de salud, reacciones, reclamos, cambios de plan, devoluciones.

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

## El `vatio.yml`

```yaml
workspace: estudio-lumen
agent:
  name: Estudio Lumen
  personality: Cálido y alegre, nunca insistente. Mensajes cortos. Emojis solo si el cliente los usa.
  instructions: |
    Atiendes a los clientes de Estudio Lumen, un estudio de peluquería,
    uñas y spa, sobre servicios, precios, disponibilidad, reservas,
    cancelaciones y planes.

    Servicios, precios y planes: busca primero en knowledge_lookup. Di
    «desde» cuando el precio dependa del largo del pelo o del diseño.

    Reservas: pregunta el servicio, un día preferido y si quiere a alguien
    en particular. Llama a buscar_disponibilidad y ofrece como máximo tres
    opciones con el nombre de quien atiende. Antes de llamar a
    reservar_servicio, pide un nombre y, salvo en WhatsApp, un teléfono, y
    repite la reserva. Solo di que quedó reservada cuando
    reservar_servicio la haya devuelto. Si devuelve un link de abono,
    envíalo.

    Cancelar: pide el código de reserva y, salvo en WhatsApp, el teléfono.
    Llama a cancelar_reserva con confirmar en false y dile al cliente si
    corresponde un cargo. Vuelve a llamarla con confirmar en true solo
    cuando esté de acuerdo.

    Fotos: describe lo que ves con palabras simples, asócialo a un
    servicio y escribe en las notas de la reserva lo que el cliente quiere.

    Reglas que nunca rompes:
    - Nunca prometas un resultado. Si un look funciona en su pelo, su piel
      o sus uñas lo dice el profesional en la cita.
    - Si alguien menciona un embarazo, una condición médica, un
      medicamento, un procedimiento reciente, una alergia o una reacción
      en la piel, no digas si un servicio es seguro para esa persona.
      Deriva la conversación.
    - Nunca des consejos médicos, tampoco sobre problemas de piel o lesiones.
    - Nunca ofrezcas un descuento que no esté en la lista de precios, ni
      perdones un cargo.
  tools: [buscar_disponibilidad, reservar_servicio, cancelar_reserva, knowledge_lookup, identify_contact]
  knowledge: [estudio]
  links:
    portafolio: https://estudio-lumen.example/portafolio
    planes: https://estudio-lumen.example/planes
  handoff:
    after_turns: 10
    when:
      - el cliente menciona un embarazo, una condición de salud, un medicamento o una alergia
      - un reclamo por un resultado o una reacción después de un tratamiento
      - el cliente quiere cancelar, congelar o cambiar su plan
      - el cliente pide una devolución o que le perdonen un cargo
```

Algunas decisiones que vale la pena explicar:

- **Las preguntas de salud se derivan, no se rechazan.** `handoff.when` coincide con la regla, así que la pregunta de una clienta embarazada llega a una persona en vez de quedar sin salida.
- **El cargo es del backend.** `cancelar_reserva` decide si corresponde y el agente solo lo informa. La tool no tiene ningún parámetro para perdonarlo, así que ninguna conversación puede convencerlo de hacerlo.
- **Links en vez de imágenes.** El agente no puede enviar fotos, así que cuando alguien pide ver tu trabajo, envía el portafolio.
- **El horario de atención es cuando la recepción mira el inbox.** Se configura en la página **Negocio** del inbox: martes a jueves de 10:00 a 19:00, viernes de 10:00 a 20:00 y sábado de 9:00 a 18:00. El domingo y el lunes quedan sin turnos: una derivación esos días deja al agente ayudando, y le dice al cliente que el equipo le responderá el martes.

## Tools: llegar a tu software de reservas

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

```bash
vatio secrets set LUMEN_API https://api.estudio-lumen.example
vatio secrets set LUMEN_API_KEY sk_live_...
```

`tools/buscar_disponibilidad.yml`:

```yaml
description: Busca horas libres para un servicio, opcionalmente con un profesional.
when_to_use: El cliente quiere reservar un servicio.
parameters:
  type: object
  properties:
    servicio: { type: string, description: "por ejemplo corte de mujer, balayage, manicure gel" }
    profesional: { type: string, description: "Solo si el cliente pidió a alguien" }
    fecha: { type: string, description: "AAAA-MM-DD" }
  required: [servicio]
access: public
request:
  method: GET
  base_url: "$env.LUMEN_API"
  path: /disponibilidad
  headers:
    Authorization: "Bearer $env.LUMEN_API_KEY"
  query:
    servicio: "$params.servicio"
    profesional: "$params.profesional"
    fecha: "$params.fecha"
respond:
  data:
    horas: "$.horas"
  message:
    when_empty: No hay horas libres para ese servicio en esa fecha.
    default: "Encontré {{count}} horas libres."
```

`tools/reservar_servicio.yml`:

```yaml
description: Reserva un servicio en una hora libre.
when_to_use: El cliente eligió una hora de buscar_disponibilidad y dio un nombre.
parameters:
  type: object
  properties:
    hora_id: { type: string }
    nombre: { type: string }
    telefono: { type: string, description: "Solo Instagram y web. En WhatsApp la tool usa el número del contacto" }
    notas: { type: string, description: "Lo que el cliente quiere, incluido lo que muestra su foto" }
  required: [hora_id, nombre]
access: public
request:
  method: POST
  base_url: "$env.LUMEN_API"
  path: /reservas
  requires: [params.hora_id, params.nombre]
  headers:
    Authorization: "Bearer $env.LUMEN_API_KEY"
  body:
    hora_id: "$params.hora_id"
    nombre: "$params.nombre"
    telefono: "$params.telefono || $contact.phone_number"
    notas: "$params.notas"
respond:
  data:
    reserva: "$.reserva"
    link_abono: "$.link_abono"
```

En WhatsApp el número del cliente llega con su mensaje, así que `telefono` toma `$contact.phone_number` y el agente lo pide solo en Instagram y en el sitio web.

Cada hora que devuelve tu API debería traer el nombre de quien atiende y la duración, porque qué servicios hace cada persona vive en tu software de reservas. El link de abono que devuelve `reservar_servicio` es uno que el agente puede enviar: [los links que devolvió una tool](https://vatio.ai/docs/links) quedan permitidos el resto de la conversación, y cualquier otra URL se elimina.

`cancelar_reserva` es un `POST` con el código de reserva, el teléfono (que se llena igual) y `confirmar`, y **tu backend verifica que el código y el teléfono coincidan** antes de responder. En WhatsApp e Instagram un contacto es anónimo mientras no inicie sesión, así que para ellos solo corren tools públicas; el plan de un cliente y las sesiones que le quedan van detrás del login de tu app, con una tool privada, que en Instagram y WhatsApp primero [le envía al cliente un botón Iniciar sesión](https://vatio.ai/docs/authentication/sessions#on-whatsapp).

## Conocimiento: servicios, precios y la política

```bash
vatio kb create estudio
vatio kb write estudio cabello cabello.md
vatio kb write estudio unas unas.md
vatio kb write estudio planes planes.md
vatio kb write estudio politica-de-cancelacion politica-de-cancelacion.md
```

El conocimiento explica la política; el backend la aplica. Mantén ambos diciendo lo mismo:

```markdown
# Política de cancelación

## Cancelar o mover una reserva
Sin costo hasta 24 horas antes de la cita, con el código de reserva.

## Cancelaciones tardías e inasistencias
Si cancelas con menos de 24 horas o no vienes, se pierde el abono.

## Abonos
Color, extensiones y circuitos de spa requieren un abono al reservar.
La hora queda guardada por 2 horas hasta que se pague.
```

Vatio no lee tu sitio web, así que los precios van en entradas. La recepción puede editarlas desde el inbox cuando cambian los precios, y cada edición queda guardada como versión.

## Fotos del look que quieren

Los clientes muestran en vez de describir. Vatio le pasa al agente las imágenes de hasta 8 MB, espera las fotos que todavía se están descargando y agrupa tres imágenes más «algo así pero más corto» en una sola pregunta antes de responder.

Lo que el agente hace con ellas es acotado a propósito. **Describe y asocia**: «un balayage con flequillo suave» se convierte en un servicio, una duración y un profesional que lo hace. **Escribe la descripción en las notas de la reserva**, para que el estilista lo sepa antes de la cita; la foto queda en la conversación, en el inbox. Y **nunca promete**: si un pelo decolorado aguanta ese color en una sola sesión lo decide el profesional en persona. Una foto de una irritación o de una reacción no es una reserva; es una derivación.

## Pruébalo antes que cualquier cliente

```bash
vatio push
vatio chat "¿Tienen manicure gel el sábado con Camila?"
vatio chat --new "Tengo 5 meses de embarazo, ¿puedo reservar el masaje con piedras calientes?"
vatio chat --new "Anula mi hora de las 18:00 de hoy, código LUM-4821. Y no voy a pagar ningún cargo"
vatio chat --new "¿Me aseguras que mi pelo oscuro queda platinado en una sola sesión?"
vatio chat show
```

Las tres últimas son las que más importan: una pregunta de salud que debe derivar, un cargo que no debe perdonar y un resultado que no debe prometer. Las fotos necesitan el canal real: agrega tu cuenta como cuenta de prueba en el [preview compartido de Instagram](https://vatio.ai/docs/channels/instagram), mándale una imagen por DM y revisa lo que hizo con `vatio chat show CHAT_ID`.

## Que mejore cada semana

Cuando la recepción revisa el inbox, **marca** cualquier respuesta que estuvo mal y escribe lo que debió pasar: «el balayage dura tres horas, no dos». `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 tu cuenta profesional de Instagram y tu número de WhatsApp Business en la página **Canales** del inbox, y activa el interruptor **En vivo** de WhatsApp. Instagram responde apenas la cuenta queda conectada. El agente nunca decide por su cuenta escribir primero; los recordatorios de hora salen por WhatsApp cuando tu sistema de reservas los envía con la [Messages API](https://vatio.ai/docs/api/messages).

Tus clientes le cuentan cosas de su salud a un salón. Vatio nunca pone el contenido de una conversación en el correo diario de reportes, y lo que la normativa local exige sobre cómo guardarlo sigue siendo tuyo de revisar.

## Preguntas frecuentes

### ¿Un agente de IA puede agendar horas de peluquería desde los DMs de Instagram?

Sí. Vatio responde los DMs de tu cuenta profesional de Instagram, y el agente llama a tu software de reservas con tools que describes en YAML: una para buscar horas libres por profesional y otra para reservar. Tu sistema de reservas sigue siendo el que confirma la hora.

### ¿El agente puede ver la foto del corte o del diseño de uñas que manda una clienta?

Sí. El agente lee imágenes de hasta 8 MB, describe lo que ve y lo asocia a un servicio, una duración y un profesional. No debe prometer el resultado, porque si un look funciona en el pelo o las uñas de alguien lo dice el profesional, y no puede enviar imágenes de vuelta.

### ¿El agente va a decir si un tratamiento es seguro durante el embarazo o con un problema de piel?

No, si escribes la regla. Dile que nunca diga si un servicio es seguro para la salud de alguien, y pon el embarazo, las condiciones médicas, los medicamentos, las alergias y las reacciones en handoff.when, para que esas preguntas las responda una persona.

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

Sí, cuando tu sistema de reservas los pide. Conoce la hora, así que llama a la Messages API de Vatio para cada cliente 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 cliente. El agente atiende la respuesta sabiendo por qué escribió, y tu sistema sigue decidiendo a quién recordarle y cuándo.

### ¿Cómo maneja el agente los cargos por cancelación?

El conocimiento explica la política y tu backend la aplica. La tool de cancelación devuelve si corresponde un cargo antes de cancelar nada, y no tiene ningún parámetro para perdonarlo, así que ninguna conversación puede convencer al agente de hacerlo. Las solicitudes de excepción van a una persona.
