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).

📁 Brevo 🛒 OpenCart 3.0.3.x 🎨 Journal3 📍 Journal3 Popup modul
🖼️
Screenshot: Modul beállítások oldal az OpenCart adminban
admin/view/template/extension/module/brevo.twig

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:

🛍️
OpenCart 3.x Tesztelve: 3.0.3.x+
🐘
PHP 7.2+ Ajánlott: PHP 7.4 / 8.0
🗄️
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
📂
FTP / SFTP Fájlok feltöltéséhez
ℹ️
Marketing Automation kulcs nem 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:

🛒 Vevő checkoutot kezd → oc_order létrejön (status=0)
brevo_abandoned.php cron fut óránként
1+ órája status=0, van email, még nem küldtünk
🔄 Brevo API: kontakt frissítés + CART_* attribútumok + listához adás
✅ Ha vásárol → brevo_completed.php eltávolítja a listáról → Automation leáll

Adatbá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

ScriptAjánlott időzítésFeladata
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 neveMire 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)
⚠️
Jegyezd fel mindkét lista ID számát – a lista neve melletti szám a Brevo felületén. Ezekre a 4. lépésben lesz szükség.

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 neveTípusLeírás
CART_RECOVERY_URLTEXTKosár visszatöltés link
CART_TOTALTEXTKosár végösszege (pl. „45 900 HUF")
CART_ITEMS_HTMLTEXTTermékek HTML táblázatként
ℹ️
A FIRSTNAME és LASTNAME attribútumok általában már léteznek. Ha nem, azokat is hozd létre TEXT típusként.
🖼️
Screenshot: Brevo Contact attributes oldal
Contacts → Contact attributes – CART_RECOVERY_URL, CART_TOTAL, CART_ITEMS_HTML látható

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
⚠️
A 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

  • 1
    Lépj be az admin felületre
  • 2
    Navigálj: Extensions → Extensions → Modules
  • 3
    Keresd meg: Brevo – Elhagyott Kosár a listában
  • 4
    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.
  • 5
    Kattints az Edit gombra (ceruza ikon) a beállítások megnyitásához
Az Install gomb megnyomása után az adatbázis táblák automatikusan, CREATE TABLE IF NOT EXISTS utasítással jönnek létre – nem kell manuálisan futtatni SQL-t.
🖼️
Screenshot: OpenCart Extensions → Modules lista
A „Brevo – Elhagyott Kosár" sor látható a zöld Install gombbal

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ásAlapé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ásAlapé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ásAlapé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.

🖼️
Screenshot: Brevo modul beállítások oldal (kitöltve)
API kulcs, kosár lista ID, és duplikáció szűrés mezők láthatók

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 listElhagyott Kosár lista

ℹ️
Ha a vevő vásárol, a 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.
🖼️
Screenshot: Brevo Automation canvas
Trigger → 3 email lépés → Remove from list flow látható

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
⚠️
Az útvonalat (/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 != '';
ℹ️
Ez az SQL parancs csak akkor szükséges, ha a modul telepítése előtt már manuálisan szinkronizáltad a vevőket Brevóba. Ha most telepíted először a modult, hagyd ki ezt a lépést.

🗑️ Eltávolítás

  1. Admin → Extensions → Extensions → Modules → Brevo → Uninstall (piros – gomb)
    Ez automatikusan törli az oc_brevo_sent és oc_brevo_contacts táblákat.
  2. Fájlok manuális törlése a szerverről (az összes feltöltött fájl eltávolítása)
  3. Cron sorok eltávolítása: crontab -e
⚠️
Az Uninstall gomb az adatbázis táblákat és az összes benne tárolt adatot (tracking rekordok) visszavonhatatlanul törli. Ha szükséges, előtte mentsd el az adatokat.

🔧 Hibaelhárítás

⛔ „Nincs jogosultságod" hiba az admin mentésnél

Admin → System → Users → User Groups → adjunk hozzá extension/module/brevo jogosultsá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_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.

⛔ 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.

Brevo – OpenCart 3.x Elhagyott Kosár Modul  ·  Csak alap Brevo API kulcs szükséges  ·  Nincs Marketing Automation kulcs igény