Hola @marcos94 y @miguelpro,
@miguelpro tiene razón, la funcionalidad que buscas, un sistema de email marketing con secuencias de recordatorio y generación de cupones de descuento únicos y personalizados por carrito abandonado, no está disponible de forma nativa en PrestaShop 1.7.8.5 (asumo esa versión basándome en el contexto de PHP 7.1-7.4 y el tema classic).
Para conseguirlo, necesitarías desarrollar una solución personalizada. Aquí te detallo los pasos lógicos para una implementación básica usando código:
Identificar Carritos Abandonados: Crear un script (que se ejecute vía cron) que consulte la tabla ps_cart. Buscar carritos donde id_customer no sea 0 (cliente registrado o invitado con email) y id_order sea nulo, y la date_add sea anterior a X horas. Deberás guardar en alguna tabla auxiliar (por ejemplo, ps_cart_abandoned_email_log) cuándo se envió el último email para ese carrito y qué cupón se generó.
Generación de Cupones Dinámicos: Una vez identificado un carrito, tu script debería generar una nueva CartRule (Regla de carrito) programáticamente. Esto implica instanciar la clase CartRule y rellenar sus propiedades, como el código del cupón (que sea único), el importe del descuento, la fecha de caducidad, el número de usos (1 por cliente), y asociarlo al cliente del carrito. Algo así:
$cartRule = new CartRule();
$cartRule->name = ['1' => 'Descuento carrito abandonado'];
$cartRule->code = Tools::strtoupper(Tools::passwdGen(8));
$cartRule->reduction_percent = 10; // 10% de descuento
$cartRule->quantity = 1;
$cartRule->quantity_per_user = 1;
$cartRule->date_from = date('Y-m-d H:i:s');
$cartRule->date_to = date('Y-m-d H:i:s', strtotime('+7 days'));
$cartRule->active = 1;
$cartRule->add();
Envío de Emails: Con el cupón generado, usarías la clase Mail de PrestaShop para enviar un email al cliente. Necesitarías crear una plantilla de email personalizada (themes/classic/mails/es/abandoned_cart_reminder.html y .txt) donde puedas inyectar el código del cupón y un enlace directo al carrito.
$customer = new Customer((int)$cart->id_customer);
Mail::send(
(int)Configuration::get('PS_LANG_DEFAULT'),
'abandoned_cart_reminder',
'¡No olvides tu carrito!',
['{customer_name}' => $customer->firstname, '{coupon_code}' => $cartRule->code, '{cart_link}' => $cartLink],
$customer->email,
$customer->firstname,
null, null, null, null, _PS_MAIL_DIR_,
false, (int)$cart->id_shop
Automatización con Cron Job: Este script se ejecutaría periódicamente (por ejemplo, cada hora) mediante un cron job configurado en tu servidor. El cron job sería el encargado de llamar a un controlador o archivo PHP específico de tu módulo personalizado que contenga toda esta lógica.
Es una tarea de desarrollo que requiere conocimientos de PHP y de la estructura interna de PrestaShop, pero es la forma más limpia de conseguirlo sin depender de servicios externos si quieres mantenerlo dentro de tu control.