Aujourd’hui, la plupart des plateformes e-commerce génèrent des codes promos dans tous les sens : opération marketing, relance de panier, meilleurs clients… quand on est e-commerçant, jouer le jeu du couponing est souvent inévitable !
Mais bien souvent, une fois le code généré et le mail envoyé au client, il y a de fortes chances que le code tombe dans l’oubli assez rapidement. Dans cet article, nous allons voir comment automatiser l’envoi d’un email de relance à tous les utilisateurs disposant d’un bon de réduction expirant dans les 24 heures, grâce à un script de cron PHP sur PrestaShop 1.6. Cette fonctionnalité n’étant pas intégrée nativement, on va pouvoir la rajouter assez simplement et automatiser son exécution. C’est parti !
Pourquoi automatiser les rappels de bons de réduction sur PrestaShop ?
Les bons de réduction représentent une forte incitation pour les clients, mais si ces derniers oublient leur date d’expiration, ils risquent de ne jamais en profiter ! Énormément de modules sont configurés pour générer des coupons, mais peu gèrent les relances des coupons inutilisés.
En mettant en place un script d’envoi automatique de rappels par email pour les bons de réduction qui expirent, on augmente alors les chances que notre client revienne sur notre site et passe à l’achat.
Étape 1 : Préparer l’environnement PrestaShop pour l’envoi d’emails automatiques
Normalement c’est déjà le cas, mais avant de créer le script de cron, assurez-vous que PrestaShop est configuré pour envoyer des emails ! Vérifiez que les paramètres SMTP sont bien paramétrés dans le menu Paramètres avancés > E-mails. Cela garantit que le site peut envoyer des messages sans problèmes. Si vous cherchez un prestataire fiable pour l’envoi de vos mails, je vous recommande d’utiliser Mailjet qui remplit parfaitement ce rôle (lire l’article dédié ici).
Étape 2 : Créer le script PHP de cron pour identifier les bons de réduction expirants
Pour commencer, nous allons créer un script PHP capable de récupérer tous les bons de réduction qui expirent dans les prochaines 24 heures. Ce script repose sur une simple requête SQL pour identifier ces bons en tenant compte de l’heure d’expiration.
Voici un exemple de script PHP :
<?php
// Initialisation de PrestaShop
include(dirname(__FILE__) . '/../../config/config.inc.php');
include(dirname(__FILE__) . '/../../init.php');
// Définir la période pour les bons de réduction expirants
$now = new DateTime();
$nowFormatted = $now->format('Y-m-d H:i:s');
$next24Hours = $now->modify('+1 day')->format('Y-m-d H:i:s');
// Requête pour sélectionner les bons de réduction
$sql = 'SELECT c.id_cart_rule, c.code, cu.email, cu.firstname, cu.lastname, c.date_to
FROM ' . _DB_PREFIX_ . 'cart_rule c
INNER JOIN ' . _DB_PREFIX_ . 'customer cu ON cu.id_customer = c.id_customer
WHERE c.date_to BETWEEN "' . pSQL($nowFormatted) . '" AND "' . pSQL($next24Hours) . '"
AND c.active = 1';
$discounts = Db::getInstance()->executeS($sql);
Ce code permet d’identifier les bons d’achat actifs expirant dans les prochaines 24 heures en prenant en compte l’heure d’expiration exacte, évitant ainsi de notifier des utilisateurs dont le bon de réduction expire dans plus d’une journée.
Étape 3 : Préparer les données pour le template d’email
Chaque email de rappel envoyé doit contenir des informations personnalisées pour chaque utilisateur, telles que le prénom, le nom et le code du bon de réduction.
PrestaShop permet de préparer des variables de template pour intégrer facilement ces informations dans l’email.
foreach ($discounts as $discount) {
$email = $discount['email'];
$firstname = $discount['firstname'];
$lastname = $discount['lastname'];
$voucherNum = $discount['code'];
$expirationDate = (new DateTime($discount['date_to']))->format('d/m/Y H:i');
// Préparer les données pour le template
$templateVars = [
'{firstname}' => $firstname,
'{lastname}' => $lastname,
'{voucher_num}' => $voucherNum,
'{expiration_date}' => $expirationDate,
];
Étape 4 : Envoyer l’email avec un template mail PrestaShop
Nous utilisons la classe Mail::Send
pour envoyer les emails de rappel. Assurez-vous que le template de mail (nommé ici discount_expiring
) est déjà configuré dans le dossier de templates de PrestaShop.
// Envoyer l'email en utilisant le template `discount_expiring`
$result = Mail::Send(
(int)Configuration::get('PS_LANG_DEFAULT'), // Langue de l'email
'discount_expiring', // Nom du template
'Votre code de réduction expire bientôt !', // Objet de l'email
$templateVars, // Variables du template
$email, // Email du client
$firstname . ' ' . $lastname, // Nom du client
null, // Email de l'expéditeur
null, // Nom de l'expéditeur
null, // Pièce jointe
null, // Mode SMTP
_PS_MAIL_DIR_, // Chemin des templates
false, // Pas d'utilisation d'un template spécifique
(int)$discount['id_cart_rule'] // ID du bon d'achat
);
if ($result) {
echo "Email envoyé avec succès à $email pour le code $voucherNum.<br>";
} else {
echo "L'envoi de l'email a échoué pour $email.<br>";
}
}
Étape 5 : Planifier l’exécution du script avec un cron
Maintenant, l’idée c’est de ne pas exécuter ce code manuellement toutes les 24H ! Pour que ce processus fonctionne automatiquement, il reste à planifier le script en utilisant un cron. Sur un serveur Linux, ajoutez une ligne à votre fichier de crontab pour exécuter le script chaque jour :
0 8 * * * /usr/bin/php /chemin/vers/votre/script.php
Par exemple cette commande exécutera le script chaque jour à 8h du matin.
À noter que sur la plupart des hébergeurs, une interface permet de paramétrer cela très simplement sans écrire une ligne de code 😉.
Et sur Prestashop 1.7 ?
Ce script peut en grande partie fonctionner sur PrestaShop 1.7, mais il nécessite quelques ajustements mineurs pour s’adapter aux changements dans la structure de PrestaShop 1.7, en particulier au niveau de la gestion des classes et des templates de mails. Voici les principaux changements à apporter pour que le script fonctionne sur PrestaShop 1.7 :
- Inclusion des fichiers de configuration : La logique de base reste la même, mais sur PrestaShop 1.7, l’initialisation des fichiers de configuration peut parfois nécessiter un chemin légèrement différent, notamment en fonction de l’environnement et de la structure des modules si vous utilisez le script en tant que module.
- Structure des templates d’email : Dans PrestaShop 1.7, la gestion des emails a évolué. Assurez-vous que votre template
discount_expiring
se trouve bien dans le dossier/mails/
de PrestaShop, comme pour PrestaShop 1.6, mais vérifiez également les nouvelles conventions de nommage si vous avez une configuration multi-langues ou multi-shops. - Classe et méthode
Mail::Send
: La méthodeMail::Send
reste compatible, mais il peut être nécessaire de vérifier les paramètres de configuration en particulier au niveau de l’ID de langue, car certains comportements ont été modifiés dans PrestaShop 1.7. Assurez-vous également que les traductions de vos templates sont bien configurées via l’interface de PrestaShop. - Structure de base de données : La structure des tables clients et des règles de panier (
cart_rule
) reste compatible, donc la requête SQL pour obtenir les bons expirants devrait fonctionner sans modifications majeures. Toutefois, si vous utilisez des modules tiers de gestion de promotions, vérifiez qu’ils n’ont pas créé de nouvelles relations dans la base de données, pouvant influencer les résultats de la requête.
Adaptez cette logique sur votre e-commerce
Mettre en place un cron pour envoyer un rappel de bons de réduction expirants dans les 24 heures est une stratégie simple et efficace pour optimiser les conversions et encourager vos clients à utiliser leurs réductions avant qu’elles n’expirent. En suivant les étapes ci-dessus, vous pouvez configurer facilement ce processus sur PrestaShop 1.6 / 1.7 et assurer une communication personnalisée et automatisée avec vos clients !