Skip to main content
El widget de Restoo emite eventos personalizados de navegador para los pasos principales del embudo de reserva. Escúchalos con listeners de eventos estándar para medir el embudo en tu propia analítica, o en cualquier otro sistema que consuma eventos de navegador.
Si usas GA4, Google Ads, Meta Pixel, TikTok Pixel, OpenAI Pixel o Google Tag Manager, consulta Restoo Connect. Reenvía estos eventos sin necesidad de un listener a medida para cada uno.

Escuchar los eventos

Cada evento es un CustomEvent estándar del navegador. Su nombre empieza por restoo: y su payload está disponible en event.detail. Por ejemplo, para recibir una reserva confirmada:
Registra tus listeners en la página que incrusta el widget.
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

customer_identified lleva datos personales, así que se emite solo cuando el visitante ha concedido ad_user_data: consulta Consentimiento. No se pierde si el permiso llega más tarde: el widget retiene la identificación y la emite en cuanto el visitante la concede, que es lo que ocurre cuando se reconoce a alguien por sus datos recordados antes de que responda al aviso de cookies.

Acciones

Campos comunes a todos los eventos

Todos los eventos tienen la misma estructura de primer nivel en event.detail:
Campos
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 de event.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 usa widget_mounted.
Campos
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 usa page_viewed.
Campos
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 cuyo type 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.
Campos
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:
Cada segmento va en minúsculas. Los caracteres no alfanuméricos se normalizan a guiones bajos.
El ID de una franja horaria identifica la cuenta y la hora local del día. Usa los campos date y floor_plan_area_id del elemento cuando necesites el contexto completo de la reserva.

NoAvailability

Lo usa booking_no_availability_viewed.
Campos
object
requerido
Resultado que se muestra cuando no se encuentra disponibilidad.
object
requerido
Instantánea de la reserva documentada en BookingFunnel.

BookingViewItemList

Lo usa booking_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.

BookingSelectItem

Lo usa booking_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.

BookingViewItemDetail

Lo usa booking_item_detail_viewed. Sigue el patrón view_item de ecommerce.
Campos
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 usa action_taken.
Campos
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 usa customer_identified.
Campos
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:
Para las correspondencias automáticas con las plataformas de analítica admitidas, usa Restoo Connect.

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.