Una línea, todos los casos.
Esta guía recorre, paso a paso y caso por caso, los atributos
data-siana-* que el SDK reconoce, las llamadas de
window.SianaBooking y los flujos completos
(modal, drawer, inline, widget, recuperación post-pago). Copia,
pega, sustituye tu subdominio. No hay paquete que instalar.
Índice de casos
- Paso 1 · Cómo mostrar el motor
- A El script y nada más
- B Modal centrado
- C Drawer lateral
- D Inline (como una sección más)
- E Esconder la navegación del motor
- F Auto-open al cargar la página
- G Anchos del modal y del drawer
- H Un enlace, sin código
- Paso 2 · Tu dominio
- I ¿Qué dominio quieres utilizar?
- Paso 3 · Qué mostrar
- J Aterriza en la ficha del tratamiento
- K Sólo el cuadro de reserva
- L Forzar el idioma de entrada
- M Pre-rellenar fecha
- N Link por canal (subdominio)
- O Link por categoría (?exp=)
- Paso 4 · Vuelta del pago
- P Abrir directamente la confirmación de una reserva
- Q Locator + PIN (vuelta del pago)
- Paso 5 · Tu marca
- R Colores, tipografía y redondeo por query params
- S Configura tu marca desde el panel de Siana
- Integración avanzada
- T Controla el motor desde tu código
- U Escuchar lo que pasa dentro
- V Un contador de carrito sobre tu botón
- W El carrito y la navegación sobreviven
- X CSP & sandbox
- Y Diagnóstico
- Referencia
- Z Tabla completa de atributos
- AA Prefijo siana_* en query params del host
Cómo mostrar el motor
El script y nada más
Pega este <script> una sola vez en cada página donde quieras que aparezca el motor — idealmente antes de </body>. No hay paquete que instalar; el script se descarga del subdominio que Siana provisiona para ti.
<script src="https://reservas.tuhotel.com/embed.js"></script>
El script no pinta nada por sí solo. Sólo reacciona a los elementos con marcas data-siana-* que añadas debajo (o que aparezcan después en el DOM — escucha mutaciones).
Modal centrado
Marca cualquier botón con data-siana-open. Al pulsarlo se abre el motor en una capa centrada sobre tu web. Cierra con la X interna, Esc o click en el backdrop.
<button type="button" data-siana-open>Reservar</button>
Drawer lateral
Mismo botón con data-siana-mode="drawer". Entra por la derecha (default), o por la izquierda con data-siana-drawer-side="left". El ancho lo controlas con data-siana-drawer-width (acepta px, %, vw y funciones CSS min/max/clamp).
<button type="button" data-siana-open data-siana-mode="drawer" data-siana-drawer-side="right" data-siana-drawer-width="min(560px,80vw)" >Reservar</button>
Inline (como una sección más)
Un <div data-siana-inline></div> vacío hace de hueco. El script monta el iframe dentro y auto-redimensiona a medida que el contenido crece — no tienes que medir alturas.
<h1>Reserva tu experiencia</h1> <div data-siana-inline data-siana-chrome="minimal"></div>
data-siana-mode se ignora dentro de data-siana-inline — el contenedor inline no puede convertirse en overlay aunque alguien lo pida.
Esconder la navegación del motor
data-siana-chrome="minimal" oculta los breadcrumbs, la flecha "atrás" y el bloque de info del centro. Útil cuando el motor vive dentro de un contexto que ya provee su propia navegación (una ficha, un drawer, una sección inline).
<button type="button" data-siana-open data-siana-chrome="minimal" >Reservar</button>
Auto-open al cargar la página
Marca el botón con data-siana-auto-open (sin valor) y el SDK lo "clica" en cuanto el DOM está listo. Patrón típico de la página de vuelta de Redsys: el cliente aterriza, el drawer se abre solo, la confirmación se pinta.
<button type="button" data-siana-open data-siana-auto-open data-siana-locator="abcd-1234" data-siana-pin="fdd2bt" data-siana-mode="drawer" >Cargando…</button>Simular la vuelta de Redsys →
Si añades data-siana-auto-open a varios elementos, sólo se dispara el primero (con warning).
Anchos del modal y del drawer
Sólo modal: data-siana-modal-width, data-siana-modal-height (px o %).
Sólo drawer: data-siana-drawer-width (px, %, vw, o CSS min/max/clamp) — default min(480px,80vw).
Inline (antes del primer resize): data-siana-min-height en px.
<button type="button" data-siana-open data-siana-modal-width="720px" data-siana-modal-height="80%" >Modal estrecho</button> <button type="button" data-siana-open data-siana-mode="drawer" data-siana-drawer-width="clamp(360px, 50vw, 720px)" >Drawer fluido</button> <div data-siana-inline data-siana-min-height="640"></div>
Un enlace, sin código
La forma más simple de todas: un enlace normal a la dirección del motor. El cliente llega a la pantalla de reserva en su propia página o pestaña. Cero JavaScript, sin script que instalar — la activas tú en unos minutos, sin depender de nadie.
<a href="https://163-f1401005.bysiana.com">Reservar</a>
Es la opción recomendada para empezar sin ayuda técnica. Cuando quieras que el motor aparezca encima de tu web sin cambiar de página, pasa al modal (B), al panel (C) o al insertado (D).
Tu dominio
¿Qué dominio quieres utilizar?
Antes de configurar el dominio, decide cómo quieres que funcione el motor en tu web (Paso 1). En todos los casos te dejamos una dirección lista para usar, sin que toques nada. Si abre como enlace externo —la redirección—, no hay ninguna configuración DNS por tu parte. Si el motor va insertado dentro de tu web (modal, drawer o inline), no se ve ninguna dirección del motor, así que no hay nada que configurar: puedes saltarte este paso.
Opción A — Motor con enlace externo
El cliente hace clic en un botón de tu web y el motor se abre en una página nueva. Tienes dos alternativas y ninguna requiere configuración técnica:
A1 · Usar el dominio de bysiana.com. Dinos qué alias personalizado quieres utilizar —por ejemplo tu-spa.bysiana.com— y te proporcionamos el enlace bajo nuestro dominio, listo para usar.
A2 · Usar tu propio dominio. Si prefieres que el enlace lleve tu marca —por ejemplo reservas.tu-dominio.com—, escríbenos a soporte@spalopia.com indicando el dominio que quieres usar y nosotros nos encargamos de la configuración interna necesaria.
Opción B — Motor insertado en tu web
El motor aparece integrado dentro de tu propia página (modal, drawer o inline), sin que el cliente la abandone en ningún momento. Como no se ve ninguna dirección del motor, no hay nada que configurar aquí: pasa directamente al Paso 3.
Qué mostrar
Aterriza en la ficha del tratamiento
Cuando tu propia tarjeta ya describe el tratamiento, salta el listado: pasa el UUID del servicio con data-siana-service y el iframe abre directamente la ficha (PDP).
<button type="button" data-siana-open data-siana-mode="drawer" data-siana-service="a809b572-b2eb-52bb-acdc-42e862e09063" data-siana-chrome="minimal" >Reservar masaje</button>
Combina con data-siana-chrome="minimal" para ocultar la flecha "atrás" del motor — no tiene a dónde volver, el cliente venía de tu tarjeta.
Sólo el cuadro de reserva
data-siana-view="widget" renderiza únicamente el bloque "Personas + Fecha + Reservar" del servicio — sin descripción, imágenes ni recomendaciones. Necesita un data-siana-service válido.
<button type="button" data-siana-open data-siana-mode="drawer" data-siana-view="widget" data-siana-service="a809b572-b2eb-52bb-acdc-42e862e09063" data-siana-chrome="minimal" >Reservar (widget)</button>
Forzar el idioma de entrada
data-siana-locale arranca el motor en el idioma que indiques. Si tu web ya tiene un selector de idioma, pásalo aquí para que el motor herede el contexto.
<button type="button" data-siana-open data-siana-locale="en">Book</button>
Pre-rellenar fecha
data-siana-date="YYYY-MM-DD" llega al motor como query param para arrancar con esa fecha pre-seleccionada cuando el servicio lo soporta.
<button type="button" data-siana-open data-siana-service="a809b572-b2eb-52bb-acdc-42e862e09063" data-siana-date="2026-06-15" >Reservar el 15 de junio</button>
Abrir en un canal concreto
Un canal aplica precios y condiciones propios (socios, empresa, una promoción…), y los configuras en Siana. En un enlace directo el canal es el prefijo del subdominio (promo-tudominio.com); embebido, se pasa con data-siana-channel.
<!-- Como enlace: el canal va en el subdominio --> <a href="https://promo-reservas.tuhotel.com">Reservar</a> <!-- O embebido (data-siana-channel) --> <button data-siana-open data-siana-channel="promo">Reservar</button>
Abrir filtrado por categoría
Filtra el catálogo a una categoría (su slug en Siana) con el parámetro ?exp=<categoria>. En el demo usamos masajes-corporales.
<!-- Como enlace --> <a href="https://reservas.tuhotel.com/?exp=masajes-corporales">Ver categoría</a> <!-- O embebido (data-siana-exp) --> <button data-siana-open data-siana-exp="masajes-corporales">Ver categoría</button>
Vuelta del pago
Abrir directamente la confirmación de una reserva
data-siana-locator apunta el iframe a /purchase/{LOCATOR} en lugar del catálogo. Sirve para enlaces "Revisa tu reserva" en emails, área de cliente o landing post-pago. Si el cliente no ha validado el PIN en este navegador, el motor se lo pide.
<button type="button" data-siana-open data-siana-locator="abcd-1234-efgh-5678" data-siana-mode="drawer" data-siana-chrome="minimal" >Revisa tu reserva</button>
data-siana-locator tiene prioridad sobre data-siana-service y data-siana-view — la página de confirmación es autosuficiente.
Locator + PIN (vuelta del pago)
Las pasarelas que sacan al cliente de la pantalla para pagar —Redsys, PayPal, Bizum— lo devuelven después a una página de tu dominio. Creas esa página —por ejemplo /confirmation— y nos la pasas como return_url: Siana devuelve al cliente ahí con ?siana_locator=N-SPD-T5SB-A3EA-9&siana_pin=fdd2bt. Esa página empareja data-siana-locator con data-siana-pin (así el motor no le pide el PIN) y abre la confirmación sola (ver caso AA). Pruébalo en Simular.
<!-- Versión estática (locator + PIN conocidos a build time) -->
<button
type="button"
data-siana-open
data-siana-auto-open
data-siana-locator="abcd-1234-efgh-5678"
data-siana-pin="fdd2bt"
data-siana-mode="drawer"
data-siana-chrome="minimal"
>Revisa tu compra</button>
<!-- Tu página /confirmation — recibe: ?siana_locator=N-SPD-T5SB-A3EA-9&siana_pin=fdd2bt -->
<div id="siana-confirmation"></div>
<script>
var params = new URLSearchParams(window.location.search)
var locator = (params.get('siana_locator') || '').trim()
var pin = (params.get('d3226782744ce122d789ea8e03d32f53') || params.get('siana_pin') || '').trim()
if (locator && pin) {
var btn = document.createElement('button')
btn.setAttribute('data-siana-open', '')
btn.setAttribute('data-siana-auto-open', '')
btn.setAttribute('data-siana-locator', locator)
btn.setAttribute('data-siana-pin', pin)
btn.setAttribute('data-siana-mode', 'drawer')
btn.setAttribute('data-siana-chrome', 'minimal')
btn.textContent = 'Revisa tu compra'
document.getElementById('siana-confirmation').appendChild(btn)
}
</script>
<script src="https://reservas.tuhotel.com/embed.js"></script>
Sin locator no se forwardea el PIN. data-siana-pin en solitario se ignora (con warning en consola).
Vuelta del banco a tu dominio
Redsys lleva al cliente a la pantalla de su banco para validar la tarjeta y después lo devuelve a una página de tu propio dominio —tu /confirmation—. Esa página reconoce su reserva por los parámetros de la URL y le muestra la confirmación automáticamente, sin pedirle nada. El mismo flujo aplica a PayPal y Bizum.
https://tudominio.com/confirmation?siana_locator=N-SPD-T5SB-A3EA-9&siana_pin=fdd2btSimular →
El botón abre una página de ejemplo (/confirmation) que lee siana_locator y siana_pin y levanta el motor con la confirmación. El código de esa página está en el caso Q.
Tu marca
Colores, tipografía y redondeo por query params
El motor adopta los colores de tu marca. Lo habitual es fijarlos desde tu configuración (panel), pero también puedes forzar o previsualizar una paleta añadiendo parámetros theme_* a la URL del motor — útil para enseñar variantes sin tocar la configuración. El override se mantiene durante la sesión hasta que lo limpias.
Formato: los colores son hex de 6 dígitos sin # (p. ej. a8456b). Un valor inválido se ignora y se mantiene el color por defecto.
| Parámetro | Valor | Qué cambia |
|---|---|---|
| theme_primary | hex (6, sin #) | Color primario (botones y acentos principales) |
| theme_primary_light | hex | Primario claro (fondos suaves del primario) |
| theme_primary_dark | hex | Primario oscuro (hover / estados) |
| theme_accent | hex | Color secundario / accent |
| theme_accent_light | hex | Accent claro |
| theme_text_base | hex | Color del texto base |
| theme_body_bg | hex | Fondo de la página |
| theme_card_bg | hex | Fondo de las tarjetas |
| theme_radius | square · semirounded · rounded | Redondeo de esquinas (no acepta px/rem) |
| theme_font | Open Sans · Roboto · Lato · Montserrat Poppins · Inter · Nunito | Tipografía del motor (sólo familias permitidas; un valor fuera de lista se ignora) |
| theme_preset | 1 – 4 | Aplica una paleta completa predefinida (pisa los colores individuales) |
| theme_clear | true | Borra el override y vuelve a la configuración por defecto |
Ejemplo — primario rosa-café, accent azul y esquinas redondeadas:
https://reservas.tuhotel.com/?theme_primary=a8456b&theme_primary_light=f3c9da&theme_primary_dark=5b2b3a&theme_accent=1e5fd0&theme_accent_light=bcd6ff&theme_radius=rounded
Atajo con una paleta predefinida:
https://reservas.tuhotel.com/?theme_preset=3
La tipografía también es configurable con theme_font, dentro de una lista de familias permitidas (Open Sans, Roboto, Lato, Montserrat, Poppins, Inter, Nunito). Colores, fondos, redondeo y fuente se adaptan a tu marca.
Desde el SDK (sin tocar la URL). No tienes que construir la URL del motor a mano: el SDK reenvía el tema al iframe por ti. Define una paleta global con window.SIANA_THEME (se aplica a todos los embeds de la página) o una puntual por botón con atributos data-siana-theme-* (pisan la global). El SDK valida cada valor y lo traduce a los theme_* de la tabla de arriba.
// Global — una vez, antes de embed.js. Aplica a modal, drawer, inline y widget. <script> window.SIANA_THEME = { primary: '034c53', primaryDark: '033d42', primaryLight: 'cddbdd', accent: 'd07e40', accentLight: 'fff9f0', textBase: 'ffffff', bodyBg: 'ffffff', cardBg: 'ffffff', radius: 'semirounded', font: 'Open Sans' } </script> <script src="https://reservas.tuhotel.com/embed.js"></script> <!-- Override puntual en un botón --> <button data-siana-open data-siana-theme-primary="a8456b" data-siana-theme-accent="1e5fd0" data-siana-theme-radius="rounded" data-siana-theme-font="Poppins">Reservar</button> // …o desde la API JS SianaBooking.open({ mode: 'drawer', theme: { primary: '047074', font: 'Open Sans' } })
| Atributo SDK | Clave en window.SIANA_THEME / API | theme_* equivalente |
|---|---|---|
| data-siana-theme-primary | primary | theme_primary |
| data-siana-theme-primary-light | primaryLight | theme_primary_light |
| data-siana-theme-primary-dark | primaryDark | theme_primary_dark |
| data-siana-theme-accent | accent | theme_accent |
| data-siana-theme-accent-light | accentLight | theme_accent_light |
| data-siana-theme-text-base | textBase | theme_text_base |
| data-siana-theme-body-bg | bodyBg | theme_body_bg |
| data-siana-theme-card-bg | cardBg | theme_card_bg |
| data-siana-theme-radius | radius | theme_radius |
| data-siana-theme-font | font | theme_font |
| data-siana-theme-preset | preset | theme_preset |
| data-siana-theme-clear | clear | theme_clear |
Configura tu marca desde el panel de Siana
Lo recomendado para producción es no tocar código: fija la identidad del motor una vez desde tu back office, en Configuración › Motor de reservas. Ahí ajustas el color primario y secundario, la tipografía y el formato de los botones (relleno o contorno, y el redondeo de las esquinas). Una vista previa te muestra cómo lo verán tus clientes; cuando esté a tu gusto, guardas y publicas, y todos los embeds (modal, drawer, inline, widget) lo reflejan al instante.
¿Back office o theme_*? El back office es la fuente de verdad y el camino para clientes sin perfil técnico. Los theme_* / data-siana-theme-* del caso R sirven para forzar o previsualizar una variante puntual desde la propia integración, y pisan lo configurado en el panel mientras están presentes.
Integración avanzada
Controla el motor desde tu código
Una vez cargado embed.js, expone window.SianaBooking: una API global con los mismos atributos en forma de objeto. Útil cuando el botón se construye en runtime o desde un framework.
// Abrir el motor desde JS (default modal)
window.SianaBooking.open()
// Abrir un servicio concreto en drawer
window.SianaBooking.open({
service: 'a809b572-b2eb-52bb-acdc-42e862e09063',
mode: 'drawer',
chrome: 'minimal',
drawerSide: 'right',
drawerWidth: 'min(560px,80vw)'
})
// Abrir la confirmación de una compra
window.SianaBooking.open({
locator: 'abcd-1234-efgh-5678',
pin: 'fdd2bt',
mode: 'drawer'
})
// Montar inline en un elemento
window.SianaBooking.mount(document.getElementById('booking-slot'), {
chrome: 'minimal',
minHeight: 640
})
// Cerrar el overlay activo
window.SianaBooking.close()
Escuchar lo que pasa dentro
El motor emite eventos al host vía postMessage v1. Los recibes con SianaBooking.on(event, handler).
window.SianaBooking.on('ready', () => console.log('motor listo'))
window.SianaBooking.on('open', () => console.log('overlay abierto'))
window.SianaBooking.on('close', () => console.log('overlay cerrado'))
window.SianaBooking.on('booking:complete', booking => {
// { id, reference, total, currency }
myAnalytics.track('purchase', booking)
})
window.SianaBooking.on('error', err => {
// { code, message } — error recuperable, el motor sigue vivo
console.warn('[motor]', err.code, err.message)
})
window.SianaBooking.on('cart:count', ({ count }) => {
// nº de items en el carrito — pinta un badge en tu botón "Reservar"
var badge = document.querySelector('#mi-badge')
if (badge) badge.textContent = count
})
Para integraciones que no requieren página de vuelta (Stripe), suscríbete a booking:complete para tracking. Usa cart:count para mostrar un contador de items sobre tu botón de apertura. No necesitas crear nada más.
Un contador de carrito sobre tu botón
El motor avisa cada vez que cambia el número de items en el carrito con el evento cart:count. Suscríbete y pinta un badge sobre tu botón "Reservar", como en cualquier tienda online. Copia-pega tal cual:
<button id="reservar" data-siana-open data-siana-mode="drawer">
Reservar
<span id="cart-badge" hidden>0</span>
</button>
<script src="https://reservas.tuhotel.com/embed.js"></script>
<script>
var badge = document.getElementById('cart-badge')
function wire () {
if (!window.SianaBooking) return false
window.SianaBooking.on('cart:count', function (e) {
badge.textContent = e.count
badge.hidden = e.count === 0 // ocúltalo cuando está vacío
})
return true
}
// embed.js puede cargar después: reintenta hasta que exista
if (!wire()) { var n = 0; var t = setInterval(function () { if (wire() || ++n > 100) clearInterval(t) }, 50) }
</script>
El conteo se emite también al abrir (con lo que el cliente tuviera guardado del carrito), así el badge aparece correcto desde el primer momento. El dato es sólo un número — no lleva información de la reserva.
El carrito y la navegación sobreviven
Si el cliente añade algo al carrito, navega por tu web y vuelve a la página del motor, el carrito sigue ahí (hasta 6 h). Está aislado por el dominio de tu web, así que dos sitios distintos que embeban el mismo motor nunca comparten carrito.
En una apertura genérica (sin data-siana-service ni otra intención concreta) el motor además reabre donde lo dejó el cliente (última ficha o catálogo). Si abres con una intención explícita (service, date, purchase-mode, view=widget, preset, locator), manda lo que llega y no se reanuda.
<!-- reabre donde lo dejó el cliente, con su carrito --> <button data-siana-open data-siana-mode="drawer">Reservar</button> <!-- empieza siempre en el catálogo (carrito intacto) --> <button data-siana-open data-siana-mode="drawer" data-siana-fresh>Nueva reserva</button>
data-siana-fresh sólo reinicia la navegación: ignora la reanudación y entra en el catálogo. No vacía el carrito — es la selección del cliente y borrarla en silencio frustra. Si en el futuro necesitas vaciar también el carrito, se añadiría un atributo aparte explícito.
CSP & sandbox
Si tu sitio publica una política de seguridad (CSP), añade el dominio del motor a las directivas:
Content-Security-Policy: frame-src https://reservas.tuhotel.com; script-src https://reservas.tuhotel.com
No pongas sandbox en el iframe. Si tu plataforma lo fuerza, asegúrate de incluir allow-forms, allow-scripts, allow-same-origin, allow-popups y allow-top-navigation — sin este último el paso de pago falla.
Diagnóstico
Cualquier valor inválido en un data-siana-* se ignora con un warning en consola prefijado por [Siana]. Para inspeccionar el estado:
window.SianaBooking.diagnose()
// {
// engineOrigin: 'https://reservas.tuhotel.com',
// protocolVersion: 1,
// modalOpen: false,
// inlineFrames: 1,
// lastError: null
// }
Si embed.js nunca carga, comprueba: (1) la URL del script, (2) el header script-src de tu CSP, (3) que el dominio resuelva DNS. El SDK también vigila errores ERR_BLOCKED_BY_ORB — suele significar que embed.js no se sirve con MIME tipo JavaScript.
Referencia
Tabla completa de atributos
Todos los data-siana-* reconocidos por el SDK v1. Marcan el botón con data-siana-open o el contenedor con data-siana-inline.
| Atributo | Valor | Efecto |
|---|---|---|
| data-siana-open | (sin valor) | Marca un elemento como trigger del overlay (modal o drawer) |
| data-siana-inline | (sin valor) | Marca un contenedor para incrustar el motor in-page |
| data-siana-auto-open | (sin valor) | Dispara el click automáticamente al cargar el DOM |
| data-siana-mode | modal · drawer | Tipo de overlay (default modal). Ignorado en inline |
| data-siana-chrome | full · minimal | minimal oculta breadcrumbs, flecha atrás y info del centro |
| data-siana-service | UUID | Pre-selecciona un servicio (aterriza en su ficha) |
| data-siana-view | full · widget | widget = sólo cuadro de reserva (requiere service) |
| data-siana-locator | 4-128 [a-z0-9-] | Apunta a la confirmación de una compra existente |
| data-siana-pin | 3-128 [a-z0-9] | PIN auto-validado (requiere locator) |
| data-siana-date | YYYY-MM-DD | Fecha pre-seleccionada |
| data-siana-locale | es · en · fr · … | Idioma inicial del motor |
| data-siana-drawer-side | right · left | Lado del drawer (default right) |
| data-siana-drawer-width | CSS length | Ancho del drawer (default min(480px,80vw)) |
| data-siana-modal-width | px · % | Ancho del modal |
| data-siana-modal-height | px · % | Alto del modal |
| data-siana-min-height | px | Alto inicial inline antes del primer resize |
| data-siana-session-id | 1-128 [A-Za-z0-9_-] | Tu referencia de reserva — vuelve en el handoff para correlacionar |
| data-siana-item-id | 1-128 [a-z0-9_-] | Item a dar de baja (delete mode) → el motor emite cart:remove |
| data-siana-callback-url | https URL | Endpoint server-side que recibe el mismo payload del handoff por POST |
| data-siana-purchase-mode | voucher · appointment · both | Filtra el catálogo: sólo bonos, sólo citas, o todo (default both) |
| data-siana-hide-add-to-cart | 1 · true | Oculta el botón "añadir al carrito" (compra directa, sin cesta) |
| data-siana-fresh | 1 · true | Abre limpio: ignora la reanudación de ruta y entra en el catálogo. No toca el carrito (ver persistencia) |
Prefijo siana_* en query params del host
Hay dos espacios de nombres distintos en esta integración. Conviene tenerlos claros para no mezclarlos:
| Capa | Convención | Dónde vive |
|---|---|---|
| SDK (HTML) | data-siana-* | Atributos del botón o contenedor en tu página. data-siana-locator, data-siana-pin, etc. El prefijo data-siana- ya namespacea el SDK — no colisiona con nada. |
| URL (host) | siana_* | Query params en la URL de tu página. ?siana_locator=…&siana_pin=…. El prefijo evita que choquen con params propios de tu sitio (mucha gente usa ?locator o ?id para otras cosas). |
Siana configura el return_url de Redsys para emitir el prefijo automáticamente. Si construyes tú el enlace (email, área de cliente, footer "Consulta tu reserva"), úsalo también:
// Email post-venta enviado desde tu CRM https://tuhotel.com/confirmacion?siana_locator=ABCD-1234&siana_pin=8421 // Vuelta de Redsys configurada por Siana https://tuhotel.com/confirmacion?siana_locator=ABCD-1234&siana_pin=8421
El motor también acepta el mismo prefijo si construyes a mano la URL del iframe (integración avanzada, sin SDK):
<iframe src="https://reservas.tuhotel.com/?embed=1&siana_locator=ABCD-1234"></iframe>
Lo importante: el SDK no lee la URL de tu página padre. Eres tú quien lee window.location.search en tu snippet y luego se lo pasa al SDK como atributos data-siana-* (ver caso Q). El prefijo siana_ sólo aplica a la URL del host.