#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
- ¿Quién escribe, y por dónde? Muchas veces primero por DM de Instagram, después por WhatsApp y el sitio web.
- ¿Qué servicios hace cada profesional, y cuánto duran? Tu software de reservas lo sabe; el agente necesita los nombres de los servicios.
- ¿Cuál es la política de cancelación, y quién puede hacer una excepción? Anticipación, abonos, inasistencias.
- ¿Qué no debe prometer nunca? Un resultado, que un tratamiento es seguro para la condición de alguien, un descuento.
- ¿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
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.whencoincide 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_reservadecide 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:
vatio secrets set LUMEN_API https://api.estudio-lumen.example
vatio secrets set LUMEN_API_KEY sk_live_...
tools/buscar_disponibilidad.yml:
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:
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 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.
#Conocimiento: servicios, precios y la política
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:
# 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
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, 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.
#Publicar
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.
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.
Actualizado: