api.denorly.com
Ir al sitio →
Trata sobre: Libro de Reclamaciones

Libro de Reclamaciones: embed

Un botón flotante con modal, vía un solo <script>. Sin dependencias, < 5KB.

El widget es un script con atributos data-*, no un custom element. Pégalo antes de </body>. Se monta solo al cargar el DOM.

Instalación

<script src="https://app.denorly.com/assets/libro-widget.js"
  data-token="8f3b2c1a-9d4e-4f7a-b6c2-1e5a7d9c0b3f"
  data-position="bottom-right"
  data-color="#E8A817"
  data-text="Libro de Reclamaciones"
  data-mode="modal"
  async></script>

Solo data-token es obligatorio. El resto tiene defaults.

Atributos

Atributo Default Valores / notas
data-token - Requerido. UUID del formulario. Sin él, el widget no se monta.
data-position bottom-right bottom-right o bottom-left.
data-color #EF4444 Color del botón (cualquier CSS color).
data-text Libro de Reclamaciones Texto del botón (se oculta en móvil, queda el ícono).
data-mode modal modal (iframe en overlay) o redirect (navega a la página).

Sin widget: iframe directo

Si prefieres incrustar el formulario tú mismo, usa la URL pública con ?embed=true.

<iframe
  src="https://denorly.com/libro-de-reclamaciones/8f3b2c1a-9d4e-4f7a-b6c2-1e5a7d9c0b3f?embed=true"
  style="width:100%;height:85vh;border:none"
  title="Libro de Reclamaciones"
  loading="lazy"></iframe>

La página pública también funciona standalone (sin embed) en https://denorly.com/libro-de-reclamaciones/{TOKEN}.

Evento postMessage

Al enviar una queja, el iframe emite un postMessage a la ventana padre. El widget lo usa para auto-cerrar el modal; tú puedes escucharlo para tu propia lógica.

window.addEventListener("message", (e) => {
  if (e.data && e.data.type === "denorly:complaint:submitted") {
    // queja registrada: dispara tu analytics, toast, etc.
  }
});

Gotcha: el widget se auto-protege contra doble carga (window.__denorlyLibroWidget). Si incluyes el script dos veces, solo se monta una vez. En SPAs (Next/Astro con vistas client-side), inclúyelo una sola vez en el layout raíz, no por página.