Todo lo que sigue es de tenerlo incrustado en tu web, con el formulario de
reservas dentro de tu propia web. Si tus clientes reservan en la página alojada
por Restoo no hay código que escribir: lo que se configura y dónde lo tienes en
Alojado en Restoo, al final de la página.
API de Restoo.js
El widget se presenta de tres formas, y en el código cada una tiene su valor. Aquí y en los eventos los verás así:
Todos los métodos devuelven la instancia, así que se pueden encadenar. Y donde un valor
admite solo letras, dígitos, guiones y guiones bajos (
[a-zA-Z0-9-_]), se indica.
Ejemplo completo
Todo lo que expone la API, junto en una instalación: una instancia con nombre propio, los cinco parámetros de.create() y un atributo de trigger personalizado. El resto de esta sección lo
explica pieza por pieza, y no hace falta incluirlo todo: solo lo que necesite tu integración.
window.Restoo(account, settings?)
Crea una instancia del widget. Está disponible en cuanto se lanza el evento restoo:loaded en window.
Parámetros
string
requerido
Tu Account ID de Restoo, por ejemplo
"best-burger". Fuera del juego de
caracteres admitido lanza un error.string
ID único de esta instancia. Por defecto toma el valor de
account. Restoo le
añade el prefijo restoo_, así que widgetId: "w-reservations" aparece como
"restoo_w-reservations" en source.widget_id de los eventos del widget de
Restoo.create(), mount(), bindTriggers() y setConsent().
.create(settings?)
Opcional. Configura la instancia antes de montarla: si no necesitas personalizar nada, llama directamente a .mount() o a .bindTriggers() y el widget usará sus valores por defecto.
object
Cómo se comporta el widget: el idioma, la vista con la que arranca y cómo se
asienta dentro de tu página.
object
Apariencia solo para esta instancia: sustituye la de tu cuenta por completo, no
la retoca. Consulta Apariencia para más información.
object
Destinos que hay que desactivar para esta instalación:
ga4, googleAds,
metaPixel, tiktokPixel o gtm, cada uno con el valor false, el único
admitido. Todo lo demás de un destino viene de tu cuenta. Consulta Restoo
Connect para más
información."COOKIEBOT" | "GOOGLE_CONSENT_MODE"
Plataforma de gestión de consentimiento
instalada en esta página, de la que Restoo lee la decisión del visitante. Si lo
omites, el consentimiento llega únicamente a través de
setConsent(). Consulta
Consentimiento
para más información.object
Atribución de campaña fija para esta instalación: lo que declares manda sobre
los parámetros UTM que traiga la URL del visitante. Si lo omites, la atribución
sale de esa URL, como siempre. Consulta Atribución forzada para más información.
.mount(containerId)
Monta el widget dentro del elemento HTML indicado. Se usa para los widgets INLINE.
string
requerido
El
id de tu elemento contenedor, por ejemplo "restoo-widget". Además del
juego de caracteres admitido, no puede empezar por un dígito, ni por un guion
seguido de un dígito, ni ser un único guion. Los id con acentos o con
caracteres no latinos, como "menú" o "café-2", se rechazan: renombra el
elemento o dale al widget un id más sencillo..bindTriggers(settings?)
Pone la instancia en modo OVERLAY y registra como triggers de clic los elementos que llevan data-restoo-open (o el atributo personalizado que indiques). El widget se monta de forma diferida en el primer clic del usuario; los clics siguientes navegan directamente, sin volver a montarlo.
string
predeterminado:"data-restoo-open"
Atributo HTML que se usa como trigger, por ejemplo
"data-open-booking".Solo admite letras, dígitos, guiones, guiones bajos y dos puntos, y tiene que
empezar por una letra; en caso contrario lanza un error.view para llevar al
visitante directamente a esa parte del widget.
.setConsent(signals)
Opcional si has declarado tu plataforma de consentimiento con cmp, porque entonces Restoo ya lee esa plataforma. Informa a Restoo del consentimiento del visitante usando los nombres y valores de señal del Consent Mode v2 de Google.
Llámalo desde tu aviso de cookies cada vez que el visitante acepte, rechace o cambie su decisión.
object
requerido
Una o varias de las siete señales del Consent Mode v2 de Google. Cada valor
tiene que ser exactamente
"granted" o "denied". En
Consentimiento tienes qué significa cada
señal, cómo se acumulan entre llamadas y qué desbloquea cada una.Enlaces profundos
El widget refleja en la URL de tu página la vista en la que está, dentro de un parámetro?restoo_widgets=. Eso convierte esa dirección en un enlace que se puede compartir o guardar en favoritos: al abrirla, el widget arranca en la vista guardada en lugar de en la que tiene por defecto.
Funciona en los dos modos, con una diferencia:
No tienes que construir esas URL a mano: el widget escribe el parámetro por su cuenta al navegar, y tu página solo tiene que conservarlo si la enlazas o la compartes.
Las pantallas que identifican una reserva o a su cliente nunca se escriben
en la URL de tu página, así que no se guardan y no se puede enlazar a ellas.
Una URL acaba en muchos sitios —tu analítica, un enlace compartido, el
historial de un navegador— y los datos del cliente no tienen por qué acabar
ahí.
Atribución forzada
Hay instalaciones en las que la URL del visitante no debe decidir la atribución, porque la página misma es el canal. El caso habitual es un portal de reservas que colabora con el negocio: el negocio quiere medir cuántas reservas le envía ese portal, y todas las que se hacen ahí son suyas, sea lo que sea lo que llevó al visitante hasta el portal. Declara esos valores comoutmTags y todas las reservas y todos los eventos de esa instalación los llevan. Es una atribución forzada: lo que declares manda sobre lo que traiga la URL del visitante.
- Inmutable: los parámetros UTM que lleguen por la URL no pueden pisarlo, ni tampoco los valores recordados de una visita anterior mediante Restoo Attribution Transfer.
- Completo: el conjunto declarado sustituye la atribución entera; un campo que dejes fuera no se coge de la URL, así que dos visitas distintas no acaban mezcladas en el mismo registro. Declarar solo
utmSourceda a todas las reservas ese origen y ninguna campaña, y el medio toma el valor por defecto.
Una atribución forzada no necesita consentimiento. Estos valores son parte
de tu instalación, no información leída del dispositivo del visitante, así que
ahí no se guarda nada y no hay nada que preguntar. Tampoco se escriben nunca en
localStorage: una visita posterior que entre por otra puerta se atribuye por
su cuenta.Notas para integradores
Qué hace Restoo.js en tu página
Qué hace Restoo.js en tu página
El código de la guía rápida de instalación carga Restoo.js (
restoo-widget) desde el subdominio de
Restoo de tu cuenta. Restoo.js:- Añade la función
window.Restoo()a tu página y después lanza un eventorestoo:loadedenwindowpara avisar de que ya se puede usar. - Crea un
<iframe>que apunta a tu subdominio de Restoo y renderiza dentro la aplicación de reservas: al llamar a.mount(), o en el primer clic del visitante cuando usas.bindTriggers(). - Mantiene sincronizados tu página y el widget de forma automática: redimensiona el widget
INLINEpara que se ajuste a su contenido, reenvía los eventos del widget de Restoo awindowy sincroniza la navegación de atrás y adelante del navegador.
Cómo se carga Restoo.js
Cómo se carga Restoo.js
Restoo.js tiene que cargarse con
type="module". Como los scripts de tipo módulo se
ejecutan de forma diferida, inicializa siempre tu widget desde dentro de un listener de
restoo:loaded en lugar de justo después de la etiqueta <script>; si no, puede que
window.Restoo todavía no exista.Presentación del modal (móvil y escritorio)
Presentación del modal (móvil y escritorio)
En móvil, el modal —el valor
OVERLAY— ocupa toda la pantalla. En escritorio es un panel
flotante centrado sobre un fondo oscurecido. Esto es automático; lo único que
puedes personalizar son los colores del propio panel, con
colorWidgetBackground y colorWidgetForeground: consulta
Apariencia.Varios widgets en una misma página
Varios widgets en una misma página
El estado de los enlaces profundos (
?restoo_widgets=) y la navegación de
atrás y adelante del navegador se controlan de forma independiente para cada
widget, así que puedes montar tantos OVERLAY o INLINE como necesites en la
misma página.Content Security Policy (CSP)
Content Security Policy (CSP)
Una Content Security Policy es una regla que envía tu servidor para indicar al navegador qué
dominios externos puede usar una página. La mayoría de las webs no tienen ninguna; si no
lo sabes, pregunta a quien mantenga tu web. Si la tuya sí tiene una, necesita permitir tres
cosas para el widget, que se añaden a las directivas que ya tengas:
Un widget
INLINE necesita además que se permitan los scripts en línea —con un nonce,
un hash o 'unsafe-inline'— porque el redimensionador se carga a través de una pequeña
etiqueta <script> en línea. Permitir solo el dominio cdn.jsdelivr.net no basta. Sin eso
el widget funciona, pero deja de ajustar su altura al contenido. Los widgets OVERLAY no se
redimensionan, así que no les afecta.Alojado en Restoo
El widget alojado en Restoo tiene estas opciones de configuración.En tu cuenta de Restoo
Se guardan una vez y valen para todos tus enlaces:- La apariencia — tus colores, tus tipografías y tu estilo.
- Las plataformas donde mides — GA4, Google Ads, Meta Pixel, TikTok Pixel y OpenAI Pixel.
En el enlace
El idioma, la vista con la que arranca y la campaña a la que se atribuye la reserva:Lo que no existe con el widget alojado en Restoo. No hay instalación que declare nada, así
que tampoco hay
appearance ni connect por instalación, ni cmp
ni setConsent() —el aviso de cookies es nuestro—, ni
utmTags, ni bindTriggers(). Y como el widget no está dentro de tu
web, no hay nada que ajustar de CSP, de autoscroll ni de altura.Siguientes pasos
Apariencia
Ajusta el widget a tu marca: colores, tipografías y redondeos.
Restoo Connect
Envía los eventos de reserva a GA4, Google Ads, Meta, TikTok, ChatGPT Ads y GTM
automáticamente.