#Agente de IA para hoteles y turismo
Un agente de IA para un hotel atiende a los huéspedes por WhatsApp, Instagram y tu sitio web, consulta disponibilidad y tarifas en tu motor de reservas, envía el link para reservar la habitación que el huésped eligió, encuentra una reserva existente y responde dudas sobre el check-in, los servicios y el destino, en el idioma en que le escriben. Las reservas de grupos, los reclamos y las devoluciones van a una persona. Con Vatio describes ese agente en un archivo vatio.yml y responde desde tu propio número de WhatsApp y tu cuenta de Instagram.
Esta guía construye uno de punta a punta para un hotel pequeño junto a un lago: las instrucciones, las tools que llegan a tu motor de reservas, el conocimiento que lee y las reglas que le impiden inventar una tarifa.
#Qué resuelve el agente
Casi todo lo que responde un equipo de reservas por chat son las mismas conversaciones:
- Disponibilidad y tarifas. El agente pregunta fechas y huéspedes, consulta tu motor de reservas y ofrece lo que está libre, con la tarifa que devolvió.
- Reservar. Envía el link de reserva de la habitación que el huésped eligió, con las fechas ya puestas. El pago se hace en tu página de reservas.
- Reservas existentes. Con el código de confirmación y el apellido, le lee la reserva al huésped.
- La estadía. Horarios de check-in y check-out, desayuno, estacionamiento, mascotas, llegadas tarde.
- El destino. Cómo llegar desde el aeropuerto, qué hay cerca, qué ropa traer.
- Todo lo demás va a una persona. Grupos, eventos, reclamos, devoluciones, excepciones a la política de anulación.
Una conversación típica, con lo que el agente hizo por dentro:
Huésped: hola, tienen habitación doble del 14 al 17 de marzo? somos 2
Agente: Sí. Para esas tres noches hay una Doble Vista al Lago a $129.000 la noche y una Doble Jardín a $98.000, las dos con desayuno. ¿Cuál prefieres?
Huésped: vista al lago. se puede salir más tarde? el vuelo es a las 6
Agente: El late check-out hasta las 14:00 no tiene costo y se pide en recepción, que lo confirma ese mismo día. Después puedes dejar el equipaje en recepción. Aquí está el link para reservar la Doble Vista al Lago del 14 al 17 de marzo: https://lago-gris.example/reservar?hab=dvl&in=2027-03-14&out=2027-03-17
Detrás de la primera respuesta hubo una llamada a buscar_disponibilidad, que devolvió las dos habitaciones con sus tarifas y links de reserva; detrás de la segunda, una búsqueda en el conocimiento sobre el check-out. El link pudo salir porque la tool lo devolvió. Vatio elimina cualquier URL que no se le haya dado al agente, así que no puede armar una con las fechas equivocadas.
#Antes de escribir nada: cinco preguntas para el hotel
- ¿Quién escribe, en qué idiomas y para qué? Normalmente disponibilidad, tarifas, check-in y cómo llegar.
- ¿Qué no debe decir nunca? Una tarifa o descuento que no consultó, un upgrade confirmado, una habitación «guardada» sin reserva.
- ¿Cuándo toma la conversación una persona? Grupos, eventos, reclamos, devoluciones, pedidos que el hotel tiene que confirmar.
- ¿De qué sistemas lee? La API del motor de reservas o del PMS, y la página de reservas a la que enlaza.
- ¿Cuáles son las políticas, en palabras del propio hotel? Anulación, niños, mascotas, garantías. Van al conocimiento tal como están escritas.
Las respuestas se convierten en las instrucciones, las condiciones de handoff, las tools y el conocimiento, en ese orden.
#El vatio.yml
workspace: hotel-lago-gris
agent:
name: Hotel Lago Gris
personality: Cálido, acogedor y breve, como una buena recepción. Nunca un folleto.
instructions: |
Ayudas a los huéspedes de Hotel Lago Gris, un hotel de 30 habitaciones
junto al lago en Puerto Varas, a consultar disponibilidad y tarifas,
reservar una habitación, encontrar su reserva y resolver dudas sobre el
hotel, el check-in y la zona.
Disponibilidad y reservas: pregunta las fechas y cuántos adultos y
niños son. Llama a buscar_disponibilidad y ofrece como máximo tres
opciones, con la tarifa exactamente como la devolvió la tool. Para
reservar, envía el link_reserva de la opción que eligió el huésped. El
pago se hace solo en la página de reservas.
Reservas existentes: pide el código de confirmación y el apellido de
la reserva, y llama a buscar_reserva. Si no devuelve nada, di que el
código y el apellido no coinciden. Los cambios y anulaciones se hacen
con el link gestionar_reserva o en recepción.
El hotel, el check-in y la zona: busca primero en knowledge_lookup. Las
entradas están escritas en español, así que busca en español aunque el
huésped escriba en otro idioma. Si no encuentras la respuesta, dilo y
ofrece pasarle la pregunta a recepción.
Reglas que nunca rompes:
- Nunca des una tarifa, un descuento ni una disponibilidad que
buscar_disponibilidad no haya devuelto.
- Nunca digas que una habitación quedó reservada o guardada. Eso lo
confirma la página de reservas.
- Nunca pidas ni aceptes números de tarjeta en el chat.
- Nunca prometas un upgrade, un early check-in ni un late check-out. Se
piden en recepción, que los confirma ese mismo día.
tools: [buscar_disponibilidad, buscar_reserva, knowledge_lookup, identify_contact]
knowledge: [hotel]
links:
gestionar_reserva: https://lago-gris.example/mi-reserva
handoff:
after_turns: 14
when:
- una reserva de cinco habitaciones o más, o para un evento o matrimonio
- un reclamo por una estadía o por un cobro
- el huésped pide una devolución o una excepción a la política de anulación
- un pedido especial que el hotel tiene que confirmar, como necesidades de accesibilidad
Algunas decisiones que vale la pena explicar:
- La reserva se hace en tu página de reservas. Tu motor ya cobra, aplica las condiciones de anulación y envía la confirmación. El agente lleva al huésped hasta ahí con la habitación y las fechas correctas, y por eso «nunca digas que quedó reservada» es una regla.
- Las tarifas se leen, nunca se recuerdan. Cambian según la fecha, la ocupación y la temporada, así que solo la tool las conoce. La regla nombra también los descuentos, porque «¿me lo dejas más barato?» es lo primero que prueba un huésped.
- Ninguna regla dice en qué idioma responder. El agente responde en el idioma del huésped por defecto. La única línea sobre idioma es sobre cómo buscar, para que encontrar la respuesta no dependa de cómo escribe el huésped.
- El horario de atención cubre toda la semana. En la página Negocio del inbox va de lunes a domingo, de 8:00 a 22:00. Es cuándo el equipo de reservas mira el inbox, no cuándo abre la recepción. Dentro de ese horario, una derivación deja al agente en silencio para que una persona tome la conversación; fuera de él sigue ayudando y le dice al huésped que el equipo responderá en la mañana.
#Tools: llegar a tu motor 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 HOTEL_API https://api.lago-gris.example
vatio secrets set HOTEL_API_KEY sk_live_...
tools/buscar_disponibilidad.yml:
description: Consulta disponibilidad y tarifas para una estadía.
when_to_use: El huésped pregunta si hay habitación, o cuánto cuesta, para ciertas fechas.
parameters:
type: object
properties:
llegada: { type: string, description: "AAAA-MM-DD" }
salida: { type: string, description: "AAAA-MM-DD" }
adultos: { type: integer }
ninos: { type: integer }
required: [llegada, salida, adultos]
access: public
request:
method: GET
base_url: "$env.HOTEL_API"
path: /disponibilidad
requires: [params.llegada, params.salida, params.adultos]
headers:
Authorization: "Bearer $env.HOTEL_API_KEY"
query:
llegada: "$params.llegada"
salida: "$params.salida"
adultos: "$params.adultos"
ninos: "$params.ninos"
respond:
data:
opciones: "$.opciones"
message:
when_empty: No hay habitaciones libres para esas fechas y huéspedes.
default: "Encontré {{count}} opciones de habitación."
Cada opción trae la habitación, la tarifa por noche, el total, qué incluye, las condiciones de anulación y un link_reserva con la habitación y las fechas ya elegidas. Tu backend arma ese link; el agente solo lo copia.
tools/buscar_reserva.yml:
description: Busca la reserva de un huésped por código de confirmación y apellido.
when_to_use: El huésped pregunta por una reserva que ya hizo.
parameters:
type: object
properties:
codigo: { type: string }
apellido: { type: string }
required: [codigo, apellido]
access: public
request:
method: POST
base_url: "$env.HOTEL_API"
path: /reservas/buscar
requires: [params.codigo, params.apellido]
headers:
Authorization: "Bearer $env.HOTEL_API_KEY"
body:
codigo: "$params.codigo"
apellido: "$params.apellido"
respond:
data:
reserva: "$.reserva"
En WhatsApp e Instagram un contacto es anónimo mientras no inicie sesión, así que esta es una tool pública y la verificación la hace tu backend. Devuelve la reserva solo cuando el código y el apellido coinciden, y el mismo 404 tanto si el código no existe como si el apellido no corresponde, para que nadie pueda probar códigos a través del agente. Devuelve solo lo que el huésped necesita (fechas, habitación, qué incluye), nunca datos de tarjeta ni nombres de otros huéspedes: el modelo ve cada resultado de una tool y puede repetirlo.
Si tu motor acepta reservas con pago en el hotel, una tool reservar_habitacion puede crear la reserva en el chat; la regla pasa a ser «solo di que quedó reservada cuando reservar_habitacion devolvió un código de confirmación». Los puntos de fidelización y las estadías anteriores van detrás de un login en tu sitio, con una tool marcada access: private; mira Conectar tu backend.
#Conocimiento: el hotel, sus políticas y la zona
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.
vatio kb create hotel
vatio kb write hotel check-in check-in.md
vatio kb write hotel habitaciones-y-servicios habitaciones-y-servicios.md
vatio kb write hotel politicas politicas.md
vatio kb write hotel como-llegar como-llegar.md
vatio kb write hotel alrededor-del-lago alrededor-del-lago.md
Una buena entrada es específica:
# Check-in y check-out
## Check-in
Desde las 15:00. El early check-in se pide en recepción y depende de que
la habitación esté lista; se confirma ese mismo día. Puedes dejar el
equipaje en recepción a cualquier hora.
## Check-out
Hasta las 11:00. El late check-out hasta las 14:00 no tiene costo y se
pide en recepción, sujeto a disponibilidad del día.
Vatio no lee sitios web, ni el tuyo ni ningún otro. Si la respuesta está en una página, pon en una entrada lo que el agente necesita; para lo que cambia cada día, como el estado de un camino, escribe dónde puede revisarlo el huésped. Los supervisores pueden editar entradas desde el inbox, y cada edición queda guardada como versión.
#Huéspedes que escriben en otros idiomas
Un huésped que escribe «Do you have a double room from March 14 to 17?» recibe las habitaciones y tarifas en inglés, desde la misma tool y el mismo conocimiento en español.
- Fija un idioma solo si lo necesitas, en las instrucciones o en la personalidad.
- El
data-localedel widget es para la interfaz. Pone los textos en inglés, español o portugués; el idioma en que responde el agente lo decide la conversación. - Los números no se traducen. La tarifa, en cualquier idioma, es la que devolvió la tool.
- Los huéspedes mandan audios, capturas y vouchers. Vatio transcribe el audio y le pasa al agente las imágenes y los PDF de hasta 8 MB, así que una captura del correo de confirmación basta para encontrar el código. También agrupa varios mensajes seguidos en una sola pregunta antes de responder; mira Conversaciones fluidas.
#Pruébalo antes que cualquier huésped
vatio push
vatio chat "¿Tienen habitación doble del 14 al 17 de marzo para dos adultos?"
vatio chat "¿Me la dejas en 80 mil la noche? La vi más barata en otro lado"
vatio chat --new "Hi, what time is check-in and is there parking?"
vatio chat --new "Mi reserva es LG-48213, apellido Fuentes. ¿A qué hora podemos llegar?"
vatio chat --new "Resérvala tú, mi tarjeta es 4111 1111 1111 1111"
vatio chat show
Las adversarias son las que importan: un descuento que no debe inventar, una pregunta en inglés cuya búsqueda revisas en chat show, una reserva con un apellido que no coincide, así que no debe revelar nada, y un número de tarjeta que debe rechazar. 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 el equipo de reservas 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.
#Publicar
vatio publish
Después conecta el número de WhatsApp Business y la cuenta de Instagram del hotel en la página Canales del inbox (WhatsApp además necesita su interruptor En vivo activado), y agrega el widget a tus páginas de reserva con una sola etiqueta script. Puedes seguir usando la app de WhatsApp Business en el teléfono de recepción: si alguien responde desde ahí, toma la conversación, y el agente se hace a un lado hasta que la liberen.
El agente nunca decide por su cuenta escribir primero. Los mensajes previos a la llegada salen por WhatsApp cuando tu PMS o tu backend lo piden, con la Messages API, y el agente atiende lo que respondan los huéspedes sabiendo qué se les envió.
Preguntas frecuentes
¿Un agente de IA puede tomar reservas de hotel por WhatsApp?
Sí. El agente llama a tu motor de reservas con una tool que describes en YAML, ofrece las habitaciones y tarifas que devolvió y le envía al huésped el link de reserva de la habitación que eligió. El pago y la confirmación final siguen en tu página de reservas, como hoy.
¿El agente responde a los huéspedes en su idioma?
Sí. Por defecto el agente responde en el idioma en que escribe el huésped, así que escribes las instrucciones y el conocimiento una sola vez. Si tu hotel necesita un idioma fijo, dilo en las instrucciones.
¿Los huéspedes pueden consultar una reserva que ya tienen?
Sí, con el código de confirmación y el apellido de la reserva. Una tool envía ambos a tu backend, que verifica que coincidan antes de devolver nada. Los cambios y anulaciones van a tu página de gestión de reservas o a recepción.
¿El agente envía mensajes antes de la llegada o recordatorios de check-in?
Sí, cuando tu sistema los pide. Tu backend sabe la fecha de llegada por tu PMS o tu motor de reservas, así que llama a la Messages API de Vatio para cada huésped y la conversación se abre por WhatsApp: tu propio texto, un mensaje que el agente escribe a partir de un brief, o una plantilla aprobada si pasaron más de 24 horas desde el último mensaje del huésped. El agente atiende la respuesta sabiendo por qué escribió.
Mi motor de reservas no tiene API. ¿Igual puedo hacerlo?
En parte. Sin un endpoint el agente no puede consultar disponibilidad, pero sí responder desde el conocimiento y enviar a los huéspedes a tu página de reservas con un link que declaras. Disponibilidad y búsqueda de reservas requieren un endpoint pequeño en tu backend que las lea.
Actualizado: