Recuperación de Carritos Abandonados Multietapa: guía completa
Instalar, configurar y usar la recuperación de carritos abandonados: secuencias de correos con la imagen de su tienda, cupones escalonados, restauración del carrito en un clic, segmentación y estadísticas por etapa para PrestaShop 8 y 9.
Presentación
El módulo Recuperación de Carritos Abandonados Multietapa (datafireflycartrecovery) detecta los carritos abandonados y contacta con sus clientes mediante una secuencia de correos programados. Cada etapa tiene su retraso, su contenido por idioma y un cupón opcional cuyo incentivo puede aumentar de una etapa a otra. Un enlace firmado permite al cliente recuperar su carrito en un clic, con el cupón ya aplicado, y el panel mide los ingresos realmente recuperados, etapa por etapa.
De media, casi 7 de cada 10 carritos se abandonan antes del pago. Una secuencia bien ajustada (un recordatorio simple, luego un descuento moderado y después una oferta más fuerte con envío gratis) recupera parte de esos ingresos sin trabajo manual.
Compatibilidad
- PrestaShop 8.0 a 9.x
- PHP 8.1 a 8.3
- Tienda única y multitienda (campañas, carritos y estadísticas separados por tienda)
- Interfaz: FR, EN, ES, DE, IT, PL
- Plantillas de correo: FR, EN, ES, DE, IT, PL, NL. Cualquier otro idioma instalado recibe automáticamente una copia editable de la plantilla inglesa.
- Compatible con el módulo RGPD oficial
psgdpr - Arquitectura PSR-4 sin Composer, sin dependencias externas
Instalación
- En el back office, abra Módulos > Gestor de módulos.
- Haga clic en Subir un módulo y seleccione
datafireflycartrecovery.zip. - Haga clic en Configurar para ajustar los parámetros generales y la apariencia de los correos.
- Configure la tarea programada (sección siguiente) y envíese un correo de prueba desde una etapa.
La instalación crea las tablas del módulo, registra sus hooks, añade la pestaña Recuperación de carritos y una campaña por defecto de tres etapas: +1 h (recordatorio simple), +24 h (cupón de -5 %) y +72 h (cupón de -10 % y envío gratis).
Actualización desde una versión anterior
Suba el nuevo ZIP: los scripts de actualización se ejecutan automáticamente.
- A 1.3.5: el cupón de recordatorio ya no se combina con otro código promocional. El script registra dos nuevos hooks. Sin cambios en la base de datos.
- A 1.3.4: corrige una página en blanco «If no employee is assigned in the context, cart ID must be provided to this method» cuando un carrito se guarda fuera de la navegación (webservice, conector, webhook de pago, script), el botón «Enviar ahora» fuera de la franja de envío y un desfase de los vencimientos cuando el servidor MySQL no usa la zona horaria de la tienda. Sin cambios en la base de datos.
- A 1.3.1: corrige el error 500 de la URL cron en PrestaShop 8. Sin cambios en la base de datos.
- A 1.3.0: añade la segmentación por grupos y categorías y los ajustes de apariencia. Los correos pasan a una cabecera blanca con el logotipo de la tienda y el azul original sigue siendo el color de acento. Ajústelo si es necesario en Apariencia de los correos.
- A 1.2.0: registra los nuevos hooks (RGPD, cabeceras de correo, nuevo idioma) y crea las plantillas de correo que faltan para los idiomas instalados.
Si su tienda estaba en 1.1.0, la actualización recalifica los carritos contados erróneamente como recuperados (pedidos realizados sin ningún correo de recordatorio). Los ingresos recuperados mostrados bajan: es la cifra correcta. Pruebe la actualización en un entorno de preproducción antes de producción.
Tarea programada (cron)
El módulo funciona mediante ejecuciones regulares activadas por una URL protegida por token. En cada ejecución:
- Análisis: los carritos inactivos más allá del retraso de abandono se califican (segmentación, antirrepetición) y se programan sus etapas.
- Envío: salen los correos pendientes respetando todas las salvaguardas.
- Limpieza: se eliminan los cupones del módulo caducados hace 7 días y nunca usados.
La URL exacta, con su token, aparece en el panel (botón Configurar, con copia en un clic) y en la configuración del módulo:
https://SU-TIENDA/index.php?fc=module&module=datafireflycartrecovery&controller=cron&token=EL_TOKEN
Programe una llamada cada 10 minutos aproximadamente:
*/10 * * * * curl -s "https://SU-TIENDA/index.php?fc=module&module=datafireflycartrecovery&controller=cron&token=EL_TOKEN" >/dev/null 2>&1
Un bloqueo garantiza que solo se ejecute un proceso a la vez: dos llamadas simultáneas nunca envían dos veces el mismo correo.
Estado del proceso
La parte superior del panel indica el estado de la tarea programada: verde si la última ejecución tiene menos de 30 minutos, naranja hasta 3 horas, rojo más allá o si nunca se ha ejecutado. El botón Ejecutar ahora lanza un proceso inmediato y muestra el resultado: carritos detectados, correos enviados, correos aplazados fuera de la franja de envío, fallos.
Sin acceso a tareas cron
Active Ejecución sin cron del servidor en la configuración del módulo. El proceso se activa entonces con las visitas a la tienda, como máximo cada 10 minutos, después de enviar la página al visitante: la navegación no se ralentiza.
Esta opción depende del tráfico: una tienda sin visitas por la noche no enviará nada hasta la primera visita de la mañana. Un cron real sigue siendo más fiable. No difunda el token de la URL cron.
Ajustes generales
- Retraso de abandono (60 min por defecto): inactividad a partir de la cual un carrito se considera abandonado.
- Correos por ejecución (50 por defecto): número de correos procesados en cada ejecución.
- Correos máximos por carrito (3 por defecto): límite para todas las etapas, 0 para ningún límite.
- Duración máxima (30 días por defecto): después, un carrito no convertido pasa al estado Perdido.
- Inicio de sesión automático mediante el enlace (activado por defecto): vuelve a conectar al cliente registrado que hace clic en el enlace de restauración, durante 7 días tras el envío del correo.
- Correo y nombre del remitente: vacíos, se usan los de la tienda.
- Ejecución sin cron del servidor: vea la sección anterior.
Apariencia de los correos
En la configuración del módulo, el bloque Apariencia de los correos adapta los recordatorios a su identidad visual:
- Logotipo de la tienda: usa el logotipo de correos definido en Diseño > Tema y logotipo, si no el logotipo principal. Sus dimensiones se calculan para mostrarse correctamente en Outlook. Sin logotipo, se muestra el nombre de la tienda.
- Color de acento: botón, enlaces, línea bajo la cabecera y bloque del cupón.
- Fondo de la cabecera: se recomienda blanco si su logotipo es oscuro.
El texto sobre estos colores pasa automáticamente a blanco u oscuro según el contraste: un botón amarillo recibe texto oscuro, un botón azul marino texto blanco. El resultado se ve en la vista previa de cada etapa.
Campañas y segmentación
Una campaña agrupa una secuencia de etapas y sus reglas. La pantalla de una campaña muestra sus ajustes y, debajo, la lista de sus etapas.
- Importe mínimo del carrito: 0 para ningún mínimo.
- Franja de envío: rango horario fuera del cual los correos pendientes se aplazan (la franja puede pasar la medianoche).
- Antirrepetición (en días): un destinatario que ha recibido un recordatorio por otro carrito durante este periodo no vuelve a recibirlo.
- Incluir a los invitados: incluye o no a los clientes invitados.
- Excluir cuentas B2B: excluye a los clientes con empresa, SIRET o número de IVA indicados.
- Grupos de clientes excluidos: ningún correo para los clientes de alguno de estos grupos (revendedores, personal).
- Categorías excluidas: un carrito con al menos un producto de estas categorías no recibe recordatorio (tarjetas regalo, productos de bajo margen, productos con receta). Un campo de búsqueda filtra el árbol.
Etapas de la secuencia
- Posición: orden de la etapa.
- Retraso tras el abandono (en minutos): 60 = 1 h, 1440 = 24 h, 4320 = 72 h.
- Asunto, texto del botón y cuerpo por idioma: el cuerpo se redacta en un editor visual. Si se deja vacío, el texto del botón usa una etiqueta por defecto traducida.
- Etapa activa: suspende una etapa sin eliminarla.
Variables
Utilizables en el asunto, el texto del botón y el cuerpo. Un clic en una variable la copia.
{firstname},{lastname}: nombre y apellido del cliente.{shop_name}: nombre de la tienda.{cart_total}: total del carrito en su divisa.{voucher_code},{voucher_value},{voucher_expiry}: código, valor (por ejemplo 10 % o 5,00 €) y fecha de caducidad del cupón. Vacías si la etapa no genera cupón.
El cuerpo se inserta en una plantilla responsive que añade la cabecera, el resumen del carrito (fotos, combinaciones, total), el bloque del cupón, el botón y el pie con el enlace de baja. Se genera una versión de texto limpia para los clientes de correo que no muestran HTML.
Vista previa y correo de prueba
Una vez guardada la etapa:
- El botón Vista previa de cada pestaña de idioma (o el icono de ojo en la lista de etapas) abre el resultado final, con un selector escritorio / móvil.
- El bloque Enviar un correo de prueba envía la etapa a la dirección y en el idioma que elija. El asunto lleva el prefijo [TEST].
La vista previa y la prueba usan la versión guardada de la etapa y el carrito real más reciente de la tienda, con el código ficticio DFCR-TEST42. No se crea ningún cupón, no se modifica ninguna estadística y el enlace del botón lleva a la página del carrito sin restaurar el carrito de un cliente.
Cupones de descuento
Cada etapa puede generar un cupón en el momento del envío:
- Tipo: porcentaje o importe fijo (con o sin impuestos).
- Valor e importe mínimo de aplicación.
- Validez en días.
- Envío gratis, solo o combinado con el descuento.
- El cupón es de un solo uso y de validez limitada. Es nominativo para los clientes registrados. Para los invitados no se vincula a la cuenta, porque PrestaShop crea una nueva cuenta de invitado en cada pedido: el código sigue siendo secreto y utilizable una sola vez.
- Sin acumulación con otro código promocional: si el cliente introduce otro código cuando hay un cupón de recordatorio en el carrito, o al revés, el código se rechaza con el mensaje «Este código promocional no se puede combinar con otro código promocional.» y se conserva el código ya presente. Las reglas automáticas sin código (por ejemplo, envío gratis a partir de X) siguen siendo acumulables.
- Escalado sin acumulación: cuando una nueva etapa genera un cupón, el cupón anterior sin usar del mismo carrito se desactiva.
- Limpieza: los cupones caducados hace 7 días y nunca usados se eliminan automáticamente.
Buena práctica: ningún descuento en la primera etapa y después un escalado progresivo (-5 %, luego -10 % con envío gratis). El panel indica los ingresos atribuidos a cada etapa: verá si el descuento más fuerte aporta más de lo que cuesta.
Restauración del carrito en un clic
Cada correo contiene un enlace firmado (HMAC). Al hacer clic:
- el carrito se reconstruye y el cliente llega a su página de carrito;
- el cupón del correo pulsado se aplica automáticamente (se retira un posible cupón de recordatorio anterior), salvo si el carrito ya contiene otro código promocional: en ese caso se conserva el del cliente;
- el cliente registrado vuelve a conectarse si la opción está activa y el correo tiene menos de 7 días; se conserva la dirección elegida en el carrito;
- el clic se contabiliza.
Cualquier modificación de los parámetros del enlace lo invalida. Un carrito ya pedido redirige a la página de inicio. Si otro cliente está conectado en el navegador, su sesión y su carrito no se modifican y el carrito del correo no se restaura.
Desarrollo de una secuencia
- Reanudación: si el cliente vuelve a modificar su carrito, los recordatorios pendientes se suspenden. Si se vuelve a ir, la secuencia continúa en la etapa siguiente sin reenviar una etapa ya recibida.
- Carritos antiguos: un carrito inactivo desde hace más de 7 días nunca recibe recordatorio. Tras un cron detenido mucho tiempo, la primera ejecución no escribe a clientes que se fueron hace semanas. Si el cliente vuelve a su carrito, vuelve a ser elegible.
- Productos no disponibles: si ningún producto del carrito puede pedirse ya (sin stock y sin pedidos permitidos, producto desactivado), la etapa se omite. Las etapas siguientes siguen programadas en caso de reposición.
- Fallo de envío: ante un error SMTP, el correo se reintenta 15 y luego 30 minutos después. Tras 3 fallos, pasa a fallido con el mensaje de error y el cupón creado se elimina.
- Pedido: al validarse un pedido, se cancelan los recordatorios restantes.
Seguimiento y atribución
- Aperturas: píxel invisible en cada correo.
- Clics: clic en el botón o en el enlace de restauración.
- Recuperación: un carrito cuenta como Recuperado solo si se envió al menos un correo de recordatorio antes del pedido. Un pedido realizado antes de cualquier correo recibe el estado Pedido sin recordatorio y no entra en los ingresos recuperados.
- Atribución por etapa: cada carrito recuperado se atribuye al último correo enviado antes de la compra.
Panel
- Periodo: 7, 30 o 90 días.
- Indicadores: carritos detectados y valor abandonado, carritos recuperados y tasa de recuperación, correos enviados, tasas de apertura y clic, correos pendientes de envío, ingresos recuperados.
- Gráfico de detecciones y recuperaciones por día.
- Rendimiento por etapa de la campaña activa: enviados, abiertos, clicados, tasa de clic, carritos recuperados e ingresos atribuidos.
Carritos seguidos
La pestaña Carritos lista los carritos seguidos con filtro por estado, búsqueda (correo, nombre o número de carrito), paginación y exportación CSV de los resultados filtrados. Cada línea muestra el cliente, el importe, el estado, el número de correos enviados y programados, un enlace al carrito y, en su caso, al pedido en el back office. El icono de exclusión detiene todo recordatorio para un carrito.
| Estado | Significado |
|---|---|
| Activo | Carrito en curso, aún no abandonado |
| Recordatorio en curso | Secuencia programada o en envío |
| Recuperado | Pedido realizado tras al menos un correo de recordatorio |
| Pedido sin recordatorio | Pedido realizado antes de cualquier correo, no atribuido |
| Perdido | Secuencia terminada o periodo de seguimiento superado |
| Excluido | Filtrado por la campaña (importe, invitado, B2B, grupo, categoría, antirrepetición) o excluido manualmente |
| Dado de baja | El cliente ya no desea recibir recordatorios |
Registro de envíos
La pestaña Registro de envíos detalla cada correo: fecha prevista y fecha de envío, destinatario, etapa, estado (programado, enviado, omitido, cancelado, fallido), apertura, clic, código promocional y motivo (cliente de vuelta en su carrito, límite alcanzado, productos no disponibles, error SMTP…). Para un correo programado, puede enviarlo ahora o cancelarlo. «Enviar ahora» envía el correo de inmediato, incluso fuera de la franja de envío, y muestra el resultado o el motivo del no envío.
RGPD y entregabilidad
- Cada correo contiene un enlace de baja. La dirección se añade a una lista de supresión persistente y los envíos pendientes se cancelan.
- Las cabeceras
List-UnsubscribeyList-Unsubscribe-Postpermiten la baja en un clic desde Gmail, Yahoo y los demás servicios que la exigen para los correos de marketing. - Solo se siguen los carritos vinculados a una dirección de correo (cliente o invitado que ha validado el paso de datos personales): no se captura ninguna dirección antes de que el cliente la envíe.
- Con el módulo oficial
psgdpr, el módulo aparece en la lista de módulos que tratan datos: la exportación y la eliminación de los datos de un cliente incluyen sus carritos seguidos y sus correos de recordatorio. - La eliminación de una cuenta de cliente borra sus carritos seguidos, su cola de envío y sus eventos. Su posible oposición permanece en la lista de supresión.
- La desinstalación elimina las tablas, la configuración y la pestaña de administración.
Preguntas frecuentes y solución de problemas
No sale ningún recordatorio
Mire el estado del proceso en la parte superior del panel. Si está en rojo, la tarea cron no llama a la URL (o no con el token correcto): use Ejecutar ahora para comprobarlo y después corrija la tarea o active la ejecución sin cron del servidor. Compruebe también que la campaña y al menos una etapa están activas, que la hora está dentro de la franja de envío, y consulte el Registro de envíos: allí figura el motivo de cada correo omitido o fallido.
El cliente no puede añadir su código promocional
Es lo previsto: el cupón de recordatorio no se combina con ningún otro código promocional. El cliente debe retirar primero el código del carrito y después introducir el otro. Las reglas automáticas sin código no se ven afectadas.
Página en blanco «If no employee is assigned in the context, cart ID must be provided to this method»
Este mensaje del núcleo de PrestaShop podía aparecer con las versiones 1.0.0 a 1.3.1 cuando un carrito se guardaba fuera de la navegación (webservice, conector, webhook de pago, script). Actualice a la 1.3.4 o superior.
La URL cron devuelve un error 500
En PrestaShop 8, las versiones 1.0.0 a 1.3.0 provocaban un error 500 en la URL cron. Actualice a la 1.3.1 o superior y compruebe la versión mostrada en el gestor de módulos. Si el error persiste, active el modo debug de PrestaShop o consulte los logs PHP del servidor para leer el mensaje exacto.
Un carrito no aparece en la lista
Un carrito solo se sigue cuando está vinculado a una dirección de correo: cliente conectado o invitado que ha validado el paso de datos personales. Pasa a abandonado tras el retraso de abandono (60 minutos por defecto) y en la siguiente ejecución del cron.
Mi logotipo no aparece o no se lee
Compruebe que la opción Logotipo de la tienda está activa y que hay un logotipo definido en Diseño > Tema y logotipo. Si su logotipo es oscuro, elija un fondo de cabecera claro. Algunos clientes de correo bloquean las imágenes por defecto: en ese caso se muestra el nombre de la tienda.
El correo de prueba no llega
Compruebe que la etapa tiene un asunto en el idioma elegido y que la tienda puede enviar correos (Parámetros avanzados > Correo electrónico, botón de prueba de PrestaShop). Revise también la carpeta de spam.
¿Puede un cliente recibir demasiados correos?
No: el límite de correos por carrito, la antirrepetición por destinatario y la franja de envío controlan la frecuencia. Un pedido o una baja cancelan los recordatorios restantes.
¿Es compatible con multitienda?
Sí. Campañas, carritos seguidos, ajustes de apariencia y estadísticas se separan por tienda.
¿Es compatible con PrestaShop 9?
Sí. El módulo es compatible con PrestaShop 8 y 9 y sigue los cambios de API de PS9 (formato de precios mediante la API Locale, controladores, envío de correos).