Escuchar los eventos
Cada evento es unCustomEvent estándar del navegador. Su nombre empieza por restoo: y su payload está disponible en event.detail.
Por ejemplo, para recibir una reserva confirmada:
Estos eventos llegan siempre, con o sin consentimiento. El widget los emite
en tu página para que midas con tus propias herramientas; lo que el
consentimiento controla es lo que Restoo Connect entrega a
cada plataforma. Si los reenvías a un tercero, el consentimiento lo aplicas tú.
La excepción es la identidad del cliente: el correo y el teléfono hasheados solo
se emiten con el permiso de publicidad concedido (identidad del
cliente).
Referencia de eventos
Widget y navegación
Embudo de reserva
Algunos eventos dependen de la configuración de la reserva. Por ejemplo, los
eventos de condiciones y de política de cancelación solo aparecen cuando esos
pasos se presentan.
Estos dos eventos son mutuamente excluyentes y se disparan una vez cada vez que
se guarda una reserva, en el momento en que el backend la confirma, no cuando se
renderiza la página de confirmación, así que recargar esa página no los vuelve a
emitir. Modificar una reserva emite
booking_updated, nunca booking_created.
Los dos llevan is_update_flow con el valor correspondiente.Eventos de listado de elementos
Cliente
Acciones
Campos comunes a todos los eventos
Todos los eventos tienen la misma estructura de primer nivel enevent.detail:
string
requerido
Identificador único de esta emisión, no del tipo de evento. Los navegadores
modernos generan un UUID RFC 4122, pero trátalo como una cadena opaca, porque el
método alternativo que usan los navegadores antiguos tiene otro formato.Cada emisión recibe uno nuevo: tres clics en el botón de contacto producen tres
eventos
action_taken con tres valores de id distintos.string
requerido
Identificador compartido por los eventos de una misma sesión del widget. Sigue
las mismas reglas de formato que
id.string
requerido
Nombre del evento sin el prefijo
restoo:.string | null
requerido
Modelo del payload. Determina la forma de
data; tanto type como data son
null en los eventos que no llevan payload.string
requerido
Hora del evento como marca temporal ISO 8601 en UTC. Ejemplo:
"2026-07-22T10:15:00.000Z".object
requerido
Contexto del widget.
object
requerido
Atribución de marketing asociada a la visita.
boolean
requerido
true cuando el evento pertenece a un flujo de modificación; en caso contrario, false.object | null
requerido
Payload propio de cada evento. Consulta Datos de los eventos para más información.
Datos de los eventos
Los ejemplos de abajo muestran el valor deevent.detail.data, no el evento completo.
Definiciones: WidgetEvent, PageViewed,
BookingFunnel, NoAvailability,
BookingViewItemList,
BookingSelectItem,
BookingViewItemDetail,
ActionTaken y
CustomerIdentified.
¿Buscas un campo que no está aquí, como el nombre de un elemento del catálogo o
más datos del cliente? Algunos se omiten a propósito; consulta Qué omite Restoo
deliberadamente.
WidgetEvent
Lo usawidget_mounted.
string
requerido
URL del documento interno que Restoo carga dentro del iframe.No es la URL de tu página, y no es una dirección que puedas abrir: por sí
sola se queda en blanco, porque el widget no dibuja nada hasta que Restoo.js le
manda los ajustes al montarlo.La ruta es siempre la misma y solo cambian sus parámetros, así que este campo
identifica la vista de arranque, no dónde estaba el visitante. Para eso lee
window.location.href en tu propia página.PageViewed
Lo usapage_viewed.
string
requerido
Ruta interna de la vista; refleja las propias rutas del widget, una por
pantalla (hay más de 50). Algunos ejemplos representativos:
"reservation"
(calendario), "reservation/details" (formulario de datos del cliente),
"reservation/confirmed", "experiences", "store", "store/checkout",
"booking/cancel" y "my-account".BookingFunnel
Lo usan los eventos del embudo de reserva cuyotype es booking. El payload es una instantánea de la reserva en el momento en que se emite el evento, así que los campos que todavía no se han seleccionado o asignado pueden valer null.
object
requerido
Estado de la reserva en el momento de emitir el evento.
IDs de recurso
Los ID de experiencias, complementos, zonas y franjas horarias usan este formato:date y floor_plan_area_id del elemento cuando necesites el contexto completo de la reserva.
NoAvailability
Lo usabooking_no_availability_viewed.
object
requerido
Resultado que se muestra cuando no se encuentra disponibilidad.
object
requerido
Instantánea de la reserva documentada en BookingFunnel.
BookingViewItemList
Lo usabooking_item_list_viewed. Sigue el patrón view_item_list de ecommerce y se emite una vez cuando se muestra la vista del listado.
Campos
string
requerido
Tipo de listado que se muestra.
object[]
requerido
Elementos que se muestran en el listado. Sus campos dependen de
list_type.- Experiencias
- Franjas horarias
- Complementos
BookingSelectItem
Lo usabooking_item_selected. Sigue el patrón select_item de ecommerce. Las formas de los elementos coinciden con BookingViewItemList; las experiencias seleccionadas incluyen además tickets, y los complementos seleccionados, quantity.
Campos
string
requerido
Tipo de elemento seleccionado.
object[]
requerido
Elementos seleccionados. Sus campos dependen de
list_type.- Experiencia
- Franja horaria
- Complemento
BookingViewItemDetail
Lo usabooking_item_detail_viewed. Sigue el patrón view_item de ecommerce.
string
requerido
Tipo de elemento que se ha abierto.
string
requerido
Listado desde el que se abrió el detalle:
booking_experiences,
booking_time_slots o booking_add_ons. Consulta las definiciones en
BookingViewItemList.object
requerido
Elemento cuyo detalle se ha abierto.
ActionTaken
Lo usaaction_taken.
string
requerido
Grupo al que pertenece la acción.
string
requerido
Elección concreta dentro de la categoría.
Un contacto desde el menú emite dos eventos, no uno. Al abrir el menú de
contacto llega
option: "open", y al elegir el canal llega el canal —
"whatsapp", "phone" o "email"—, los dos con category: "contact". Donde
los canales se muestran directos, sin menú, solo llega el segundo.Así que para contar contactos, filtra por option y no solo por category.
Las conversiones no se ven afectadas: "open" y "click" nunca las disparan
(Mapeo de eventos).CustomerIdentified
Lo usacustomer_identified.
string
requerido
Cómo se ha identificado al cliente.
object
requerido
Cliente identificado. Los valores de texto personales se normalizan quitando
los espacios del principio y del final y pasándolos a minúsculas antes de
hashearlos.
Enviar eventos concretos a tu data layer
Puedes reenviar solo los eventos que le importan a tu web:Siguientes pasos
Mapeo de eventos
En qué se convierte cada uno de estos eventos en GA4, Google Ads, Meta,
TikTok, ChatGPT Ads y GTM.
Consentimiento
Qué necesita permiso y qué no, y por qué la identidad del cliente va aparte.