Wo WooCommerce Intermedio

DataFirefly Push — Guía completa

Instalar, configurar y operar notificaciones Web Push nativas para WooCommerce: claves VAPID auto-generadas, opt-in multi-estilo con pre-prompt y test A/B, diez disparadores automáticos, campañas con constructor visual y segmentación comportamental, analítica completa y página Mi cuenta del cliente.

Actualizado Versión del módulo 1.0.4

Presentación y requisitos

DataFirefly Push convierte tu tienda WooCommerce en una plataforma de notificaciones Web Push nativa. Sin SDK, sin tracking de terceros: toda la criptografía (VAPID y cifrado RFC 8291) se ejecuta en tu propio servidor en PHP puro mediante OpenSSL. El plugin cubre un opt-in inteligente multi-estilo, diez disparadores automáticos, campañas manuales con constructor visual y segmentación, un panel de analítica completo, una página Mi cuenta dedicada para tus clientes y conformidad RGPD nativa.

  • WordPress 6.2 y superior.
  • WooCommerce 7.0 y superior, probado hasta 9.6, compatible con HPOS y Cart/Checkout Blocks.
  • PHP 8.1 y superior.
  • Multilingüe (FR/EN/ES/DE/IT), compatible con Polylang y WPML.
  • Compatible con LiteSpeed Cache, WP Rocket y otros plugins de caché: el Service Worker se sirve como PHP standalone.

Ningún servicio externo que conectar, ninguna librería Composer que mantener. Las claves VAPID se generan automáticamente en la activación, las suscripciones y los eventos permanecen en tu propia base de datos.

Instalación

  1. Descarga el archivo df-push.zip desde tu cuenta de cliente.
  2. En el admin de WordPress, ve a Plugins > Añadir nuevo > Subir plugin y suelta el archivo.
  3. Haz clic en Activar.
  4. El menú DF Push aparece en la barra lateral de administración con siete submenús: Panel, Campañas, Suscriptores, Disparadores, Opt-in, Ajustes, Webhooks y API.

En la activación, el plugin crea ocho tablas dedicadas con prefijo dfpush_, genera tus claves VAPID, programa el cron diario df_push_daily_lifecycle y registra el endpoint Mi cuenta. No se requiere ninguna intervención manual.

Primera configuración: claves VAPID y opt-in

Una vez activado, el plugin es inmediatamente funcional con sus ajustes por defecto: la campana flotante aparece abajo a la derecha tras cinco segundos, el pre-prompt está activado, los disparadores automáticos están listos. Comprueba simplemente dos cosas en DF Push > Ajustes antes de comunicar sobre el servicio:

  • Clave pública VAPID: el bloque muestra tu clave pública generada automáticamente (la application server key que utiliza el navegador). Puedes regenerarla, pero eso invalidará todas las suscripciones existentes.
  • Manifest PWA y icono por defecto: añade tu icono (192×192 mínimo) si site_icon no está definido en el sitio.

Ningún servicio externo que registrar, ninguna cuenta de desarrollador Firebase / OneSignal que crear. Las claves VAPID que el plugin genera son suficientes: autentican tu servidor de aplicación ante los servicios push FCM, Mozilla Push y WNS.

Pestaña Opt-in — prompt, estilos y disparadores

Esta pestaña pilota la solicitud de suscripción. Cinco estilos disponibles, cada uno posicionable y tematizable:

  • Campana flotante (por defecto): píldora discreta abajo a la derecha o abajo a la izquierda.
  • Banner en la parte superior o inferior de la página.
  • Modal centrado con overlay.
  • Slide-in lateral.
  • Barra fija anclada arriba.

El pre-prompt soft-ask (recomendado) muestra tu mensaje personalizado antes de la solicitud nativa del navegador. Este mecanismo preserva tu cupo de opt-in: en Chrome, rechazar el pre-prompt no agota el presupuesto de solicitudes nativas (×3 frente a 1 sin pre-prompt).

Cinco disparadores configurables y combinables:

  • Retardo (en segundos) tras la carga de la página.
  • Scroll en porcentaje de la página (0 = desactivado).
  • Exit-intent al movimiento de salida del ratón (sólo escritorio).
  • X páginas vistas en la sesión.
  • Añadir al carrito (captura el evento WooCommerce added_to_cart).

Activa el test A/B del prompt con un título y un mensaje variante B, y una división configurable. La asignación se persiste en localStorage para garantizar la coherencia entre sesiones por visitante.

Una vez denegado el permiso del navegador, no puede solicitarse de nuevo por script. Cuida tu pre-prompt y no encadenes una solicitud en el primer scroll: ese patrón muestra un 70 % de rechazo frente al 20-30 % con un pre-prompt activado en el momento correcto.

Pestaña Disparadores — los automatismos

Diez disparadores automáticos, todos activables individualmente desde la pestaña Disparadores. Cada uno se apoya en Action Scheduler para los envíos diferidos, con un fallback síncrono si Action Scheduler no está disponible.

Carrito abandonado

Tres recordatorios configurables, por defecto a 1 hora, 24 horas y 72 horas tras el abandono. La detección captura el evento added_to_cart para los usuarios suscritos a Push y programa tres acciones df_push_abandoned_cart a intervalos decrecientes. Los recordatorios se cancelan automáticamente si el pedido se realiza mientras tanto.

De nuevo en stock (back-in-stock)

En la página de producto, tus visitantes suscritos pueden unirse a una lista de espera por producto. Cuando WooCommerce dispara woocommerce_product_set_stock_status con un retorno a instock, el plugin envía una notificación a la lista de espera del producto, y luego la vacía.

Bajada de precio

El plugin mantiene un meta _df_push_last_price por producto. En cada actualización de producto, compara el precio anterior y el nuevo. Si la bajada supera el umbral mínimo en porcentaje configurado, se envía una notificación al tema Promociones.

Confirmación, envío, reseña

  • Confirmación de pedido: envío inmediato en woocommerce_thankyou al suscriptor si el ID de usuario coincide.
  • Envío: detecta el número de seguimiento en el pedido leyendo en orden los metas _tracking_number, _wc_shipment_tracking_items (WooCommerce Shipment Tracking) y _aftership_tracking_number (AfterShip). Si se encuentra un número, la notificación lo incluye en su mensaje.
  • Solicitud de reseña: programada X días después de que el pedido pasa al estado completed (retardo configurable).

Cumpleaños, reenganche, nuevo producto

  • Cumpleaños: el cron diario df_push_daily_lifecycle lee el campo billing_birthday de WooCommerce y envía una notificación a los suscriptores cuyo cumpleaños es ese día.
  • Reenganche: envío a los suscriptores inactivos desde hace 30, 60 y 90 días (ventanas configurables como CSV: 30,60,90).
  • Nuevo producto: al publicar un producto, se envía una notificación al tema Novedades.

Cada disparador acepta un payload con plantilla: {firstname}, {product_name}, {product_price}, {old_price}, {order_number}, {tracking_number}, {category}, {discount_code}. Las variables se resuelven en el momento del envío, no en la programación.

Pestaña Campañas — constructor visual, segmentación, test A/B

Construye una campaña manual en DF Push > Campañas > Nueva campaña. El constructor ofrece una vista previa en tiempo real de la notificación tal como aparecerá en el dispositivo del suscriptor.

  • Contenido: título, mensaje, URL de destino, imagen hero, hasta dos botones de acción con etiqueta y URL propias.
  • Notificación persistente (opción requireInteraction): la notificación permanece visible hasta la interacción.
  • Segmentación por idioma, país, dispositivo, tema, y por comportamiento RFM: pedidos mínimos, carrito medio mínimo, días inactivo, categoría comprada. Los segmentos comportamentales se calculan mediante wc_get_orders en el lanzamiento.
  • Test A/B: activa una variante B (título y mensaje), la división es configurable en porcentaje. La asignación es aleatoria por suscriptor, determinista por ID para la coherencia de la analítica.
  • Programación: elige la fecha y la hora, o envía inmediatamente.
  • Modo de prueba: envía la campaña sólo a los administradores, desde el constructor, antes del lanzamiento en producción.

El motor de envío fragmenta automáticamente el segmento, respeta las horas de silencio por zona horaria del suscriptor, aplica el límite de frecuencia configurado y purga al vuelo los endpoints que devuelven 404 o 410 (cancelación desde el navegador).

Panel y analítica

El tablero DF Push > Panel agrega tus KPIs de 30 días. Chart.js está empaquetado localmente (sin dependencia de CDN externa).

  • KPIs: suscriptores activos, tasa de opt-in, envíos, tasa de clics (CTR), conversiones, ingresos atribuidos.
  • Serie temporal 30 días: envíos frente a clics, una línea por día.
  • Mapa de calor 7 × 24: mejores franjas de envío en función de los clics, cruzando día de la semana y hora del día.
  • Embudo por campaña: enviada > entregada > clicada > convertida.
  • Ingresos atribuidos: una ventana de atribución configurable (72 horas por defecto) vincula cada clic con la primera compra realizada en la ventana por ese suscriptor.
  • Exportación CSV de todos los eventos para auditoría RGPD o integración BI.

Página cliente: Mi cuenta → Notificaciones

Una página dedicada Mi cuenta → Notificaciones se añade automáticamente al panel de WooCommerce. El cliente dispone de cuatro bloques:

  • Este dispositivo: estado actual (activado, desactivado, bloqueado por el navegador, no compatible), con botón Activar o Desactivar en este dispositivo.
  • Todos tus dispositivos: lista de dispositivos suscritos (tipo, navegador, idioma, última actividad), con cancelación individual o cancelación total con un clic.
  • Mis preferencias: casillas para los temas nativos (Novedades, Promociones, De nuevo en stock). Guardado mediante REST con confirmación.
  • Historial de notificaciones: las 30 últimas notificaciones recibidas, con título, cuerpo, icono, enlace y fecha.

La URL es /mi-cuenta/df-push-notifications/ en español. El rewrite endpoint se registra con el mask EP_ROOT | EP_PAGES, con una autoreparación en init:999 que detecta una regla faltante (caso de flush de permalinks concurrente) y reejecuta el flush automáticamente.

Las acciones del cliente (cancelación, preferencias) pasan por las rutas REST bajo df-push/v1/account/*, autenticadas por cookie + nonce wp_rest. Ninguna acción puede ejecutarse sobre otra cuenta, incluso si se manipula el identificador del dispositivo en la solicitud.

RGPD y registro de consentimiento

La conformidad RGPD se trata de forma nativa, no como un añadido cosmético. Cada opt-in y cada cancelación se inscribe en la tabla dfpush_consent_log con:

  • ID del suscriptor.
  • Acción: subscribe o unsubscribe.
  • IP hasheada en SHA-256 (la IP en claro nunca se persiste).
  • User-agent.
  • Marca de tiempo UTC.

Los Exportadores y Borradores de privacidad nativos de WordPress están conectados: un cliente puede solicitar la exportación o la eliminación de sus datos personales desde Herramientas → Exportar datos personales o Herramientas → Borrar datos personales. El plugin incluye entonces sus suscripciones, sus temas, su bandeja y su registro de consentimiento en la respuesta — o los elimina según la solicitud.

Pestaña Ajustes — anti-spam y atribución

Esta pestaña centraliza los parámetros de respeto al suscriptor y la ventana de atribución:

  • Horas de silencio (quiet hours): intervalo durante el cual no se envía ninguna notificación. Sensible a la zona horaria del suscriptor (leída en su dispositivo en el momento del opt-in mediante Intl.DateTimeFormat().resolvedOptions().timeZone). Por defecto 22h-8h locales.
  • Límite de frecuencia: número máximo de notificaciones por día por suscriptor. 0 = ilimitado.
  • Hora de envío inteligente: optimiza la hora de envío por suscriptor basándose en sus franjas de clic históricas.
  • Ventana de atribución: duración en horas entre un clic y un pedido para que el pedido se atribuya a la notificación. Por defecto 72 horas.
  • Bandeja in-site: activa o desactiva la campana flotante con el historial de notificaciones del frontend.
  • Manifest PWA: activa la generación del manifest para hacer el sitio instalable en móvil.

Pestaña Webhooks y API REST

La pestaña Webhooks y API cubre dos mecanismos de integración.

Webhooks salientes

Configura uno o varios endpoints HTTP por evento. Tres formatos están disponibles:

  • Slack: payload { text } compatible con los Incoming Webhooks de Slack.
  • Discord: payload { content } compatible con los Webhooks de Discord.
  • Generic: payload JSON completo con event, timestamp, data — compatible con Zapier, n8n, Make.

Los eventos disponibles: subscriber.created, campaign.launched, notification.clicked, order.attributed. Las solicitudes son no bloqueantes (wp_remote_post con blocking=false) para no ralentizar nunca el envío principal.

API REST

Bajo el namespace df-push/v1, el plugin expone una ruta pública de envío con token: POST /wp-json/df-push/v1/send con la cabecera X-DF-Push-Token. El token es regenerable con un clic desde el admin.

curl -X POST https://tu-sitio.com/wp-json/df-push/v1/send 
  -H "Content-Type: application/json" 
  -H "X-DF-Push-Token: TU_TOKEN" 
  -d '{
    "title": "Promo flash",
    "body": "20 % en todo el catálogo hasta medianoche",
    "url": "https://tu-sitio.com/promociones",
    "segment": { "lang": "es", "topic": "promos" }
  }'

Conserva este token como una contraseña. Quien lo posea puede enviar notificaciones a tus suscriptores. Regenéralo inmediatamente si sospechas de una filtración.

Bandeja in-site, PWA y multilingüe

Tres funciones complementarias cubren los casos en los que el usuario no ha autorizado el Push.

  • Bandeja in-site: una campana flotante (configurable en el frontend) abre una lista de las últimas notificaciones recibidas por el usuario, leídas o no, incluso si nunca ha autorizado el Push. Particularmente útil para iOS Safari antes de 16.4 y los usuarios PWA.
  • Manifest PWA: generado dinámicamente en /df-push-manifest.json a partir de site_icon o de un icono personalizado. Filtro df_push_manifest disponible para ajustar theme color, display, scope, start_url.
  • Multilingüe: compatible con Polylang y WPML. Las notificaciones se envían en el idioma del suscriptor (detectado en el opt-in), con fallback al idioma por defecto del sitio. Los archivos .po y .mo en FR, EN, ES, DE, IT están incluidos.

Service Worker y arquitectura técnica

El Service Worker se sirve mediante un archivo PHP standalone en la URL /wp-content/plugins/df-push/sw.php. Este enfoque evita por completo el routing de WordPress: ninguna posibilidad de interferencia con un plugin de caché, una redirección canónica u otro handler template_redirect.

La cabecera Service-Worker-Allowed: / se envía en respuesta para permitir el registro con scope raíz (scope: '/'), aunque el script viva bajo /wp-content/.

En el lado de la base de datos, ocho tablas con prefijo dfpush_:

  • dfpush_subscribers: suscriptores y su endpoint Push.
  • dfpush_topic_subs: asignaciones tema ↔ suscriptor.
  • dfpush_campaigns: campañas manuales con payload, segmento y programación.
  • dfpush_notifications: registro de notificaciones individuales enviadas.
  • dfpush_events: eventos brutos (opt-in, sent, delivered, clicked, converted) para la analítica.
  • dfpush_inbox: copia persistente de las notificaciones para la bandeja in-site.
  • dfpush_stock_waitlist: listas de espera de retorno en stock.
  • dfpush_consent_log: registro RGPD.

La desinstalación (eliminación completa desde Plugins) hace drop de estas ocho tablas y purga todas las opciones. La desactivación simple, en cambio, conserva los datos para una reactivación posterior.

Hooks para desarrolladores

El plugin expone acciones y filtros en los puntos clave para extender su comportamiento sin modificar el núcleo.

  • df_push_booted (acción): disparada tras el arranque del plugin, útil para registrar extensiones personalizadas.
  • df_push_payload_build (filtro): modificar el payload JSON enviado al servicio push antes del cifrado.
  • df_push_should_send (filtro): cortocircuitar el envío según condiciones personalizadas (devuelve false para omitir).
  • df_push_segment_query (filtro): enriquecer los criterios de segmentación comportamental.
  • df_push_webhook_payload (filtro): ajustar los payloads de los webhooks salientes.
  • df_push_manifest (filtro): modificar el manifest PWA generado.
  • Acciones Action Scheduler registradas: df_push_send_one, df_push_fan_out, df_push_abandoned_cart, df_push_review_request, df_push_dispatch_campaign.

FAQ y resolución de problemas

El prompt de opt-in no aparece

Tres causas posibles: el permiso del navegador ya está denegado (verifica en los ajustes del navegador), el permiso ya está concedido (el prompt ya no tiene sentido), o un disparador no se ha alcanzado (retardo no transcurrido, scroll insuficiente). En la consola JavaScript, ejecuta window.DFPush.isSubscribed() para verificar el estado actual.

El admin Suscriptores está vacío aunque un opt-in haya tenido éxito

Verifica en la consola de red que la solicitud POST /wp-json/df-push/v1/subscribe devuelve un código 200. A partir de la versión 1.0.1, el plugin re-sincroniza automáticamente cualquier PushSubscription existente con el servidor en cada carga de página, y registra cualquier error de inserción en BD en error_log.

El Service Worker devuelve un error de registro

Si el error del navegador es «The script resource is behind a redirect» o «Unexpected token ‘<‘», prueba directamente la URL https://tu-sitio.com/wp-content/plugins/df-push/sw.php. Debes ver el código JavaScript del Service Worker con un Content-Type: application/javascript y la cabecera Service-Worker-Allowed: /. Si ves un HTML 403, verifica las reglas htaccess que podrían bloquear la ejecución directa de archivos PHP bajo wp-content/plugins/.

Las notificaciones no se reciben en iOS

Safari en iOS sólo soporta las notificaciones Push desde la versión 16.4 y únicamente para los sitios instalados como PWA mediante el botón Añadir a la pantalla de inicio. El manifest PWA generado por el plugin facilita esta instalación. Si no apuntas específicamente a iOS, no es un problema: los demás navegadores reciben las notificaciones normalmente.

Cómo migrar desde OneSignal o Pusher

Los suscriptores existentes en esos servicios de terceros no son portables: la criptografía Push vincula cada suscripción a un par único (clave VAPID del servidor, endpoint del navegador). Tus visitantes tendrán que volver a suscribirse tras tu paso a DataFirefly Push. Puedes preparar la transición desactivando el SDK anterior unos días antes y comunicando mediante un banner de pre-anuncio sobre la nueva experiencia.

¿Qué ocurre en la desinstalación?

La desactivación simple conserva todas las tablas y opciones: puedes reactivar el plugin y retomar donde lo dejaste. La eliminación completa desde Plugins ejecuta uninstall.php que hace drop de las ocho tablas dfpush_, purga todas las opciones del plugin (incluyendo las claves VAPID y el token API) y desprograma los crones. Los permalinks se recargan automáticamente en la próxima solicitud.

¿Te ha resultado útil esta página?

¿Sigues atascado? Contacta con soporte