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

Implementar Denorly en WooCommerce

Método manual. El Libro de Reclamaciones es obligatorio por ley en tu tienda Woo: esto lo deja a ≤1 clic en todo el sitio.

El plugin nativo de WooCommerce está planificado (incluye pre-llenado con datos del pedido y enganche al checkout). Mientras tanto, este método manual cubre lo legalmente exigible.

a) Libro de Reclamaciones site-wide (obligatorio)

Requisito legal Qué significa
Ley 29571 / 32495 Todo ecommerce en Perú debe ofrecer un Libro de Reclamaciones virtual.
≤ 1 clic Accesible desde la home con un solo clic. Un botón flotante site-wide lo cumple.

Opción 1: PHP en el theme (recomendado)

Inyecta el widget en wp_footer desde el functions.php de tu child theme. Sale en todas las páginas, incluido el checkout.

<?php
// functions.php (child theme)
add_action('wp_footer', function () {
  ?>
  <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>
  <?php
});

Opción 2: Widget HTML en el footer

Sin tocar PHP: Apariencia → Widgets → área del footer → bloque HTML personalizado → pega solo el <script> (sin el PHP). Tabla de atributos en Libro embed.

b) Form de contacto / reclamo a un endpoint Denorly

Para un form de contacto o reclamo propio (aparte del Libro), pega este HTML en cualquier página o bloque.

<form id="woo-contacto">
  <input type="text"  name="nombre"  placeholder="Nombre"  required>
  <input type="email" name="email"   placeholder="Email"   required>
  <input type="text"  name="pedido"  placeholder="N° de pedido (opcional)">
  <textarea name="mensaje" placeholder="Tu consulta o reclamo"></textarea>
  <button type="submit">Enviar</button>
  <p id="woo-msg"></p>
</form>
<script>
  document.getElementById("woo-contacto").addEventListener("submit", async (e) => {
    e.preventDefault();
    const data = Object.fromEntries(new FormData(e.target));
    const res = await fetch("https://denorly.com/f/8f3b2c1a-9d4e-4f7a-b6c2-1e5a7d9c0b3f", {
      method: "POST",
      headers: { "Content-Type": "application/json", "Accept": "application/json" },
      body: JSON.stringify(data),
    });
    const json = await res.json();
    document.getElementById("woo-msg").textContent = json.success ? "¡Enviado!" : json.error;
    if (json.success) e.target.reset();
  });
</script>

El campo pedido es solo un input más: se guarda tal cual en la submission. No hay esquema fijo: lo que mandas es lo que se guarda.

c) Pre-llenado con datos del pedido

Planificado. El pre-llenado automático con datos del pedido (cliente, N° de orden, items) y el enganche nativo al flujo de checkout llegan con el plugin de WooCommerce. Por ahora, pasa el N° de pedido como un input manual (arriba) o pre-rellénalo tú con PHP del objeto $order si lo incrustas en una página de pedido.

⚠ Gotchas WooCommerce

  • El widget del Libro debe cargar en toda la tienda, checkout incluido. El hook wp_footer lo garantiza; un bloque suelto en una sola página no cumple el "≤1 clic desde la home".
  • Plugins de caché y "optimización JS" pueden diferir o romper el <script>. Excluye libro-widget.js de la minificación/combinación si no carga.
  • Status de error del POST: 402 límite del plan, 403 origen bloqueado, 404 form inactivo, 400 validación. El motivo viene en json.error (string único).