Brevo – Elhagyott Kosár
Modul
Automatikus elhagyott kosár emlékeztető rendszer OpenCart 3.x webshopokhoz, Brevo (korábbi nevén Sendinblue) email marketing platformmal integrálva. Nincs Marketing Automation kulcsra szükség – csak az alap API kulcs elég. Opencart átadja az adatokat, de a küldést a Brevo végzi! A Brevo-n belül kell létrehozni néhány dolgot (lista, szabály, email sablon).
Az admin beállítások oldal áttekintése – API kulcs, kosár Lista ID, sablon és dedup beállítások
✨ Funkciók
A modul az alábbi fő funkciókat biztosítja:
Elhagyott kosár detektálás
Automatikusan felismeri azokat a vevőket, akik elkezdték a checkoutot, de nem fejezték be a vásárlást.
Kosár visszatöltő link
SHA-256 tokenes, biztonságos recovery link, amely egy kattintással visszatölti a vevő kosarát.
Brevo Automation trigger
Lista alapú automation – a modul a megfelelő listára helyezi a kontaktot, a Brevo Automation innen veszi át.
Duplikáció szűrés
Nem küld emlékeztetőt, ha a vevő az elmúlt X napban már vásárolt hasonló terméket.
Hírlevél szinkronizálás
Az összes rendelést leadó vevő email címe automatikusan szinkronizálható egy Brevo hírlevél listára.
Multi-store & multi-currency
A rendelésből veszi a store URL-t és a valutát – több webshop és pénznem is támogatott.
📋 Követelmények
A modul telepítéséhez és működéséhez az alábbi környezet szükséges:
A modul kizárólag a Brevo alap REST API-ját használja (kontakt kezelés, listákhoz adás/eltávolítás). Az email sorozatot a Brevo Automation kezeli lista-trigger alapon.
⚙️ Hogyan működik
A rendszer három cron script és egy recovery link kezelő segítségével valósítja meg az elhagyott kosár funkciót:
oc_order létrejön (status=0)brevo_abandoned.php cron fut óránkéntCART_* attribútumok + listához adásbrevo_completed.php eltávolítja a listáról → Automation leállAdatbázis táblák
A telepítés során két tábla jön létre automatikusan:
| Tábla | Mező | Típus | Leírás |
|---|---|---|---|
oc_brevo_sent |
order_id |
INT(11) PK | OpenCart rendelés ID |
sent_at |
DATETIME | Mikor lett elküldve a trigger | |
purchase_notified |
TINYINT(1) | 0 = függőben, 1 = vásárolt / lejárt | |
oc_brevo_contacts |
email |
VARCHAR(255) PK | Vevő email címe |
synced_at |
DATETIME | Mikor lett szinkronizálva |
Cron scriptek áttekintése
| Script | Ajánlott időzítés | Feladata |
|---|---|---|
brevo_abandoned.php |
Óránként | Elhagyott kosarasok Brevo listára helyezése, recovery link generálás |
brevo_completed.php |
30 percenként | Vásárolt vevők eltávolítása a listáról, automation leállítása |
brevo_sync_contacts.php |
Naponta egyszer (02:00) | Összes vevő email szinkronizálása hírlevél listára |
1 Előkészítés Brevóban
A. Két lista létrehozása
Brevo → Contacts → Lists → New list
| Lista neve | Mire való |
|---|---|
Elhagyott Kosár |
Automation trigger – ide kerülnek az elhagyott kosarasok |
Vevők (vagy tetszőleges) |
Hírlevél lista – ide kerülnek az összes vevő emailjei (szinkronizáláshoz) |
B. Contact attribútumok létrehozása
Brevo → Contacts → Contact attributes → New attribute
Hozd létre az alábbi 3 attribútumot, mind TEXT típusú:
| Attribútum neve | Típus | Leírás |
|---|---|---|
CART_RECOVERY_URL | TEXT | Kosár visszatöltés link |
CART_TOTAL | TEXT | Kosár végösszege (pl. „45 900 HUF") |
CART_ITEMS_HTML | TEXT | Termékek HTML táblázatként |
FIRSTNAME és LASTNAME attribútumok általában már léteznek. Ha nem, azokat is hozd létre TEXT típusként.A szükséges contact attribútumok a Brevo felületén
2 Fájlok feltöltése
Töltsd fel az összes fájlt FTP/SFTP-vel a webshop gyökérkönyvtárába. A ZIP struktúrája megfelel a szerver struktúrájának (1:1 másolás).
admin/
controller/extension/module/brevo.php
model/extension/module/brevo.php
view/template/extension/module/brevo.twig
language/hu-hu/extension/module/brevo.php
language/en-gb/extension/module/brevo.php
catalog/
controller/extension/module/brevo_recover.php
system/
cron/brevo_abandoned.php
cron/brevo_completed.php
cron/brevo_sync_contacts.php
cron/.htaccess
system/cron/ mappa valószínűleg nem létezik az alaprendszerben – hozd létre FTP-n keresztül.3 Telepítés az OpenCart adminban
-
1Lépj be az admin felületre
-
2Navigálj: Extensions → Extensions → Modules
-
3Keresd meg: Brevo – Elhagyott Kosár a listában
-
4Kattints az Install gombra (zöld + ikon)
Ez automatikusan létrehozza azoc_brevo_sentésoc_brevo_contactstáblákat az adatbázisban. -
5Kattints az Edit gombra (ceruza ikon) a beállítások megnyitásához
CREATE TABLE IF NOT EXISTS utasítással jönnek létre – nem kell manuálisan futtatni SQL-t.A modul a Modules listában – kattints a zöld + gombra a telepítéshez
4 Beállítások megadása az adminban
Általános beállítások
| Mező | Leírás | Alapértelmezett |
|---|---|---|
| Státusz | Modul engedélyezése/letiltása | Letiltva |
| Brevo API kulcs * | Brevo → Settings → API Keys → Generate a new API key | – |
| Recovery titkos kulcs * | Random string a recovery linkek aláírásához (lásd lent) | – |
| Elhagyott kosár időkorlát (óra) | Hány óra után számít elhagyottnak a kosár | 1 |
| Elhagyott kosár lejárat (nap) | Hány napig próbálja feldolgozni az elhagyott kosarakat; ennél régebbi ordereket figyelmen kívül hagyja | 30 |
| Elhagyott kosár Lista ID * | Az 1. lépésben létrehozott „Elhagyott Kosár" Brevo lista ID-ja | – |
| Termék HTML sablon | HTML sablon a termékek megjelenítéséhez az emailben (részletek lent) | Beépített sablon |
Duplikáció szűrés
| Mező | Leírás | Alapértelmezett |
|---|---|---|
| Duplikáció szűrés | Ha be van kapcsolva, nem küld emailt ha a vevő az utóbbi X napban már vásárolt hasonló terméket | Engedélyezve |
| Ellenőrzési időablak (nap) | Hány napig visszamenőleg ellenőrizze a korábbi vásárlásokat | 7 |
| Minimum termék egyezés | Minimum hány terméknek kell egyeznie. 1 = elég ha 1 termék megegyezik | 1 |
Vevők szinkronizálása
| Mező | Leírás | Alapértelmezett |
|---|---|---|
| Szinkronizálás | Vevők szinkronizálása hírlevél listára (be/ki) | Letiltva |
| Brevo Lista ID | A hírlevél lista ID-ja (pl. a „Vevők" lista) | – |
| Kizáró lista ID-k | Vesszővel elválasztott lista ID-k (pl. 42, 58, 103). Ha a vevő már ezen a listán szerepel, nem kerül szinkronizálásra. Üresen hagyva: mindenki szinkronizálódik |
– |
Recovery titkos kulcs generálása
php -r "echo bin2hex(random_bytes(16));"
Az eredményt illeszd be a mezőbe. Ezt titkosan kezeld – ha megváltoztatod, az összes korábban kiküldött recovery link érvénytelenné válik.
Az admin beállítások oldal kitöltve – a piros csillaggal jelölt mezők kötelezők
5 Brevo Automation létrehozása
Brevo → Automations → Create an automation → Create from scratch
Trigger (Triggers fül)
Húzd a canvasra: Contact added to list → válaszd ki az Elhagyott Kosár listát.
Lépések (Actions fül)
Contact added to list: Elhagyott Kosár
↓
Send email ← 1. emlékeztető levél (azonnali)
↓
Time delay: 23 óra
↓
Send email ← 2. emlékeztető
↓
Time delay: 2 nap
↓
Send email ← 3. emlékeztető (esetleg kuponnal)
↓
Remove from list: Elhagyott Kosár ← lista tisztítás
Exit condition (Rules fül)
Contact removed from list → Elhagyott Kosár lista
brevo_completed.php cron eltávolítja a listáról → az automation azonnal leáll.Ha nem vásárol, az automation utolsó lépése veszi le → a lista tiszta marad, és egy jövőbeli elhagyott kosárnál az automation újra tud triggerelni.
A Brevo Automation beállítása – Contact added to list trigger és exit condition
6 Email sablon változók
Az email sablonban az alábbi Brevo contact attribútumok érhetők el:
| Változó | Tartalom |
|---|---|
{{ contact.FIRSTNAME }} | Vevő keresztneve |
{{ contact.CART_TOTAL }} | Kosár végösszege (pl. „45 900 HUF") |
{{ contact.CART_RECOVERY_URL }} | Visszatérés link – a kosarat visszatölti |
{{ contact.CART_ITEMS_HTML }} | Termékek kész HTML sorokban |
Visszatérés gomb sablonban
<a href="{{ contact.CART_RECOVERY_URL }}"
style="display:inline-block; background:#e74c3c; color:#fff;
padding:12px 28px; text-decoration:none; border-radius:4px;
font-size:15px;">
Folytatom a vásárlást →
</a>
Termékek táblázat sablonban
<table style="width:100%; border-collapse:collapse;">
<tr style="background:#f5f5f5;">
<th style="padding:6px;"></th>
<th style="padding:6px; text-align:left;">Termék</th>
<th style="padding:6px;">Mennyiség</th>
<th style="padding:6px;">Ár</th>
</tr>
{{ contact.CART_ITEMS_HTML }}
</table>
<p><strong>Összesen: {{ contact.CART_TOTAL }}</strong></p>
Termék HTML sablon változói (admin beállítás)
Az admin felületen a Termék HTML sablon mezőben az alábbi változók használhatók (minden termékre ismétlődik):
| Változó | Tartalom |
|---|---|
{IMAGE} | Termék képe <img> tagként |
{NAME} | Termék neve |
{OPTIONS} | Kiválasztott opciók (pl. szín, méret) |
{QTY} | Mennyiség |
{PRICE} | Egységár |
7 Cron beállítása
Az admin felület Cron szekciójában láthatod a pontos fájlútvonalakat a szerveredhez igazítva.
SSH-n futtasd: crontab -e
# Elhagyott kosár – óránként
0 * * * * php /home/user/public_html/system/cron/brevo_abandoned.php >> /home/user/logs/brevo_abandoned.log 2>&1
# Vásárlás befejezve – 30 percenként
*/30 * * * * php /home/user/public_html/system/cron/brevo_completed.php >> /home/user/logs/brevo_completed.log 2>&1
# Vevők szinkronizálása – naponta egyszer hajnali 2-kor
0 2 * * * php /home/user/public_html/system/cron/brevo_sync_contacts.php >> /home/user/logs/brevo_sync.log 2>&1
/home/user/public_html/) cseréld a saját szervered útvonalára. A PHP bináris elérési útját a which php paranccsal ellenőrizd.Kézi tesztelés
php /home/user/public_html/system/cron/brevo_abandoned.php
Elvárt output:
[INFO] 2026-02-10 14:00:01 – Feldolgozandó orderek: 2
[OK] order_id=1042 → valaki@example.com
[OK] order_id=1043 → masik@example.com
8 Meglévő vevők szinkronizálása (opcionális)
Ha korábban már szinkronizáltad a vevőket Brevóba, töltsd fel a tracking táblát, hogy a cron ne próbálja újra az összes emailt:
INSERT IGNORE INTO `oc_brevo_contacts` (email, synced_at)
SELECT DISTINCT email, NOW()
FROM `oc_order`
WHERE email != '';
🗑️ Eltávolítás
- Admin → Extensions → Extensions → Modules → Brevo → Uninstall (piros – gomb)
Ez automatikusan törli azoc_brevo_sentésoc_brevo_contactstáblákat. - Fájlok manuális törlése a szerverről (az összes feltöltött fájl eltávolítása)
- Cron sorok eltávolítása:
crontab -e
🔧 Hibaelhárítás
Admin → System → Users → User Groups → adjunk hozzá extension/module/brevo jogosultságot (view + modify).
Ellenőrizd a PHP bináris útvonalát: which php. Győződj meg róla, hogy az útvonal helyes a crontab sorban.
Ellenőrizd az API kulcsot (Brevo → Settings → API Keys). Győződj meg róla, hogy a Lista ID helyes – a Brevo felületén a lista neve mellett látható a szám.
Az order order_status_id már nem 0? Ez szándékos védelem – leadott rendelést nem lehet visszatölteni.
A RECOVER_SECRET megváltozott? Ha igen, az összes korábban kiküldött link érvénytelen lett.
A termék valószínűleg status=0 (deaktivált) – a rendszer szándékosan kihagyja az inaktív termékeket.
Ellenőrizd a Brevo Automation beállítását – aktív-e az automation, és a helyes listára van-e beállítva a trigger.