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.
Mit csinál?
A modul az elhagyott kosár folyamat teljes életciklusát kezeli: felismeri az elhagyott rendeléseket, triggereli a Brevo Automationt, és leállítja az emlékeztetőket, ha a vevő végül vásárol.
- 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 az email sorozatot.
- 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.
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:
Rendelés létrejön
Vevő checkoutot kezd → oc_order rekord jön létre order_status_id = 0 állapotban (fizetés előtt).
Elhagyott kosár detektálás
brevo_abandoned.php cron fut óránként. Feltétele: status=0, van email-cím, legalább 1 órája várakozik, és még nem küldtünk triggert ehhez a rendeléshez.
Brevo API hívás
A cron frissíti a kontakt adatait (CART_RECOVERY_URL, CART_TOTAL, CART_ITEMS_HTML attribútumok) majd hozzáadja az Elhagyott Kosár listához.
Brevo Automation elindul
A listára kerülés triggereli az automationt → email sorozat indul (pl. 1h, 24h, 3 nap időközönként).
Befejezés vagy lejárat
Ha a vevő vásárol: brevo_completed.php 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 listáról → az automation lezárul, és egy jövőbeli elhagyott kosárnál újra tud triggerelni.
Adatbázis táblák
A telepítés során két tábla jön létre automatikusan (CREATE TABLE IF NOT EXISTS):
| 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 (02:00) | Összes vevő email szinkronizálása hírlevél listára |
Követelmények
| Komponens | Verzió | Státusz |
|---|---|---|
| OpenCart | 3.0.3.x+ | ✔ Tesztelt |
| PHP | 7.2 / 7.4 / 8.0 | ✔ Kompatibilis |
| MySQL / MariaDB | InnoDB engine | ✔ Szükséges |
| Brevo fiók | Alap API kulcs | ✔ Nem MA kulcs! |
| Cron hozzáférés | SSH vagy cPanel crontab | ✔ Szükséges |
| FTP / SFTP | – | ✔ Fájl feltöltéshez |
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.
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 | Admin controller – routing, mentés, install/uninstall |
| └── model/extension/module/ | |
| brevo.php | DB tábla létrehozás / törlés |
| └── view/template/extension/module/ | |
| brevo.twig | Admin beállítások oldal sablonja |
| └── language/hu-hu/extension/module/ | |
| brevo.php | Magyar nyelvfájl |
| └── language/en-gb/extension/module/ | |
| brevo.php | Angol nyelvfájl |
| catalog/ | |
| └── controller/extension/module/ | |
| brevo_recover.php | Recovery link kezelő – kosár visszatöltés |
| system/ | |
| └── cron/ | Ezt a mappát létre kell hozni! |
| brevo_abandoned.php | Elhagyott kosarasok feldolgozása |
| brevo_completed.php | Vásárolt vevők eltávolítása a listáról |
| brevo_sync_contacts.php | Vevők szinkronizálása hírlevél listára |
| .htaccess | Web hozzáférés tiltása a cron mappától |
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
Bejelentkezés
Lépj be az OpenCart admin felületre.
Navigáció
Extensions → Extensions → Modules
Modul keresése
Keresd meg: Brevo – Elhagyott Kosár a listában.
Install gomb
Kattints az Install gombra (zöld + ikon). Ez automatikusan létrehozza az oc_brevo_sent és oc_brevo_contacts táblákat az adatbázisban.
Beállítások megnyitása
Kattints az Edit gombra (ceruza ikon) a beállítások megadásához.
CREATE TABLE IF NOT EXISTS utasítással jönnek létre – nem kell manuálisan futtatni SQL-t.
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; 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 a 6. lépésben) | 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. Titkosan kezeld – ha megváltoztatod, az összes korábban kiküldött recovery link érvénytelenné válik.
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.
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 Uninstall
Admin → Extensions → Extensions → Modules → Brevo → Uninstall (piros – gomb). Ez automatikusan törli az oc_brevo_sent és oc_brevo_contacts táblákat.
Fájlok törlése
Manuálisan töröld a feltöltött fájlokat a szerverről (lásd Fájlszerkezet szekció).
Cron sorok eltávolítása
crontab -e – töröld a három Brevo cron sort.
Hibaelhárítás
„Nincs jogosultságod" hiba az admin mentésnél
- Admin → System → Users → User Groups → adjunk hozzá
extension/module/brevojogosultságot (view + modify).
Cron script nem fut
- Ellenőrizd a PHP bináris útvonalát:
which php. - Győződj meg róla, hogy az útvonal helyes a crontab sorban.
HTTP 400 / 404 hiba a cron outputban
- 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.
Recovery link nem működik
- Az order
order_status_idmár nem 0? Ez szándékos védelem – leadott rendelést nem lehet visszatölteni. - A
RECOVER_SECRETmegváltozott? Ha igen, az összes korábban kiküldött link érvénytelen lett.
Termék nem töltődik vissza a kosárba
- A termék valószínűleg
status=0(deaktivált) – a rendszer szándékosan kihagyja az inaktív termékeket.
Email nem érkezik meg, de a cron [OK]-t ír
- 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.
Fájlszerkezet
| brevo_opencart_oc3/ | |
| ├── docs/brevo_opencart_oc3.html | Ez a dokumentáció |
| └── upload/ | 1:1 másolás a webshop gyökerébe |
| ├── admin/controller/extension/module/ | |
| │ brevo.php | Admin controller |
| ├── admin/model/extension/module/ | |
| │ brevo.php | DB tábla kezelés |
| ├── admin/view/template/extension/module/ | |
| │ brevo.twig | Admin beállítások oldal |
| ├── admin/language/hu-hu/extension/module/ | |
| │ brevo.php | Magyar nyelvfájl |
| ├── admin/language/en-gb/extension/module/ | |
| │ brevo.php | Angol nyelvfájl |
| ├── catalog/controller/extension/module/ | |
| │ brevo_recover.php | Recovery link kezelő |
| └── system/cron/ | |
| brevo_abandoned.php | Elhagyott kosár cron |
| brevo_completed.php | Vásárlás befejezés cron |
| brevo_sync_contacts.php | Vevő szinkronizálás cron |
| .htaccess | Web hozzáférés tiltása |
Változásnapló
| Verzió | Dátum | Változás |
|---|---|---|
| 1.0 | 2026-03-31 | Első kiadás. Elhagyott kosár detektálás, Brevo lista trigger, recovery link, duplikáció szűrés, vevő szinkronizálás. Tesztelve: OpenCart 3.0.3.x, PHP 7.4 / 8.0. |