Hola @joaquindeco. Entiendo perfectamente tu necesidad, es una funcionalidad muy demandada y esencial para la conversión. Como bien han señalado @patriciadigital y @natalia8994, PrestaShop 1.7.1.2 no incluye de forma nativa un sistema de recuperación de carritos tan avanzado con secuencias de correo y cupones personalizados por carrito.
Sin embargo, podemos abordarlo con una combinación de configuración en Back Office y un script personalizado para la automatización, aunque con ciertas limitaciones en la parte de 'cupones personalizados por carrito'.
Aquí te explico cómo podrías enfocarlo:
Identificación de carritos abandonados: Necesitarás un script PHP personalizado que se ejecute mediante una tarea programada (cron job) en tu servidor. Este script debe consultar la tabla ps_cart buscando carritos con id_customer que no tengan una id_order asociada en ps_orders y cuya date_upd (fecha de última actualización) sea mayor a un determinado tiempo (2h, 24h, 72h).
Envío de correos electrónicos: Dentro de ese mismo script, una vez identificados los carritos, puedes usar la clase Mail::send de PrestaShop para enviar los correos. Necesitarás una plantilla de correo personalizada (puedes copiar y modificar una existente como order_conf.html o crear una nueva en mails/es/). El script debería guardar un registro de los correos enviados para no duplicarlos.
Cupones de descuento: Aquí es donde la personalización por carrito se vuelve compleja sin un desarrollo a medida profundo. PrestaShop no genera cupones únicos automáticamente por cada carrito abandonado. La alternativa más viable con los componentes nativos es crear un código de descuento general en el Back Office:
- Ve a 'Catálogo > Descuentos > Reglas del carrito'.
- Crea una nueva regla. Puedes establecer un porcentaje de descuento, una fecha de validez (por ejemplo, 3 días) y, muy importante, la opción de 'Uso parcial' a 'No' si quieres que solo se use una vez por cliente. También puedes limitar los productos o categorías.
- Este código general (ej. 'RECUPERA10') sería el que incluyas en el contenido de tus correos recordatorios. No será un cupón único para cada carrito, pero sí un incentivo.
Para el script, tendrías que algo como esto para enviar el email (simplificado):
Mail::Send(
(int)Configuration::get('PS_LANG_DEFAULT'), // ID del idioma
'cart_abandoned', // Nombre de tu plantilla de correo
Mail::l('¡No te olvides de tu carrito!', (int)Configuration::get('PS_LANG_DEFAULT')),
array(
'{customer_name}' => $customer->firstname . ' ' . $customer->lastname,
'{cart_link}' => $link->getPageLink('order', true, null, 'step=0&recover_cart=' . $cart->id . '&token_cart=' . $cart->secure_key),
'{discount_code}' => 'RECUPERA10' // Tu código general
),
$customer->email,
Este enfoque te permite automatizar el envío de recordatorios con un incentivo, aunque el cupón no sea dinámico y único para cada carrito específico. La gestión de los estados de envío (2h, 24h, 72h) también necesitaría lógica en tu script para marcar qué correos se han enviado a cada carrito.