A cég belső, privát tudásbázisa — hol keresek, ki mit lát, hogyan dolgozza fel a rendszer a dokumentumokat.
Utolsó frissítés: 2026-09-04 (Számlák áttöltése ÉL: email-mellékletként érkező számla-PDF-ek felismerése + feltöltés a könyvelő SharePoint-mappáiba anonim megosztó linken, félautomata/automata; reklám/hírlevél-előszűrő az email-szinkronban (Beállítások-kapcsoló); a deploy által megszakított feldolgozások induláskor automatikusan újra sorba állnak, nem kell újratölteni; új egyedi funkció: „Rendelések → Troli” — emailből felismert rendelések ügyletként a Troli CRM-be, félautomata/automata; Folyamatok ↔ Felületeink kereszt-betáplálás; a Claude helyi motor nagy promptokon is működik; új „Felületeink” almenü a Olé Hosting szerint csoportban + „hozzáadott érték ≠ kommunikáció” súlyozás és rendszer-tények minden AI-szintézisben; új, példány-szinten kapcsolható „🤖 Egyedi funkciók” menücsoport: Számlák áttöltése (előkészítés) + Gyártástervezés (él, automatikusan frissül); az „Egyedi funkciók” fül új neve „Feladatok”; PWA-telepítés javítása Samsung Internetre (PNG ikonok + útmutató). Korábban aznap: PPC funkció teljes átépítése: landing oldalak + kép-vagyon + mért kampány-teljesítmény bemenetként, szerkeszthető strukturált kampány-tervek, Meta Ads/Google Ads API-push mindig PAUSED állapotban, statisztika-panel) · Szerver: xen88-152 (88.151.103.152) · Domain: okos.ole.hu
1. Milyen felületek vannak most
A rendszer több különálló szolgáltatásból áll, mindegyik a okos.ole.hu domain alatt, saját útvonalon.
Felület
URL
Kinek
Státusz
MCP végpont itt kérdezhet rá egy AI asszisztens (Claude, Gemini) a tudásbázisra
okos.ole.hu/mcp
bárki, akinek van hozzáférési tokenje
él
Olé Hosting portál bejelentkezés, Kérdezz felület (Gemini vagy Claude — szűrt kontextus), Dokumentumok (feltöltés+lista), Integrációk (pl. WooCommerce, számlázz.hu), szuperadminnak Pénzügyi riport + felhasználókezelés + globális beállítások; telefonon telepíthető (PWA)
okos.ole.hu/mrag
minden bejelentkezett user; Felhasználók menü csak szuperadminnak
él
Mattermost (csapat-chat) saját, self-hosted chat — csatornák, DM-ek, és egy Olé Hosting nevű AI-bot tagként
chat.okos.ole.hu
meghívottak (a szerver nincs nyitva önregisztrációra)
él
Ez a kézikönyv
okos.ole.hu/userguide
mindenki
él
Új: a okos.ole.hu/mrag portálon most már bejelentkezéssel is lehet kérdezni a tudásbázistól (Gemini-alapú Kérdezz felület), nem csak MCP-s AI-kliensen keresztül. Mobilon telepíthető appként is felajánlja magát (PWA). A navigáció világos, semleges témára és bal oldali menüre (mobilon ☰ hamburger-menüre) váltott, és egy ❓ gomb bármikor újranyitja a gyors bevezetőt.
Új (2026-07-15): Olé Hosting a Mattermost-ban. Telepítsd a Mattermost klienst (mobilon: "Mattermost" az App Store/Google Play-en; asztali gépen: mattermost.com/download, vagy egyszerűen a böngészőben a chat.okos.ole.hu cím), jelentkezz be a saját fiókoddal, és a Olé Hosting bot-fiókkal DM-ben bármikor kérdezhetsz — csatornákban @Olé Hosting megemlítésre válaszol. Rákérdezésre először egy "Gondolkodom…" üzenetet ír, majd azt szerkeszti át a végleges válaszra. Ugyanazt a tudásbázist és ugyanazt a motort (Gemini/Claude, amit a portál Beállítások fülén beállítottak) használja, mint a portál Kérdezz felülete — nincs két külön "agy". Jogosultság: 1:1 DM-ben a saját portál-szerepeddel válaszol; egy privát csoportban/csatornában csak akkor ad "Korlátozott" szintű infót, ha ott minden emberi tag szuperadmin, egyébként (és nyilvános csatornában mindig) csak "Központi" szintű adatból válaszol — attól függetlenül, ki kérdezett, mert ott mások is olvasják a választ.
2. Hogyan kérdezhetek rá a tudásbázisra — most
A) Webes portál (okos.ole.hu/mrag) — bejelentkezés után:
Kérdezz fülön kérdést írhatsz. A rendszer a pgvector-tárból visszakeresi a releváns dokumentum-darabokat (a központi tudásbázisból, plusz a saját személyes feltöltéseidből), és a Gemini 2.5 Flash-nek adja át kontextusként (a küldés előtt mindig lefut rajta a szűrés).
Hangbevitel/felolvasás: a szövegmező mellett 🎤 gombbal (magyarul) diktálhatod is a kérdést, a válasz felett pedig 🔊 gombbal felolvashatod — mindkettő a böngésző saját, beépített hangfelismerését/-szintézisét használja (nincs extra szerverköltség). Csak azokon az eszközökön jelenik meg, ahol a böngésző támogatja: Android Chrome-on mindkettő megy, iOS Safari-n a diktálás gomb nem jelenik meg (a böngésző nem támogatja), a felolvasás ott is működik. Ha diktálva kérdeztél, a rendszer szóban is jelzi ("Kész a válasz."), amikor megjött a válasz — nem kell a képernyőt néznie közben.
Mentés kérdés helyett: ha a mezőbe ragmentés vagy ragmentes szóval kezdve írsz (pl. "ragmentés: a nyitvatartás jövő héten..."), a rendszer NEM az LLM-nek küldi a szöveget kérdésként, hanem a szó utáni részt egyenesen dokumentumként menti el a központi tudásbázisba (ugyanaz a mechanizmus, mint a Dokumentumok fülön a beillesztett szöveg mentése) — nulla LLM-hívással. Tény tanítása helyett is:deployra vár ha a mezőbe jegyezd meg: előtaggal kezdve írsz (pl. "jegyezd meg: a csütörtöki szállítás mostantól 14:00-ig fut"), a rendszer az előtag utáni részt tanult tényként menti el (nem kérdésként küldi el) — ld. lent, „Cég-kánon és tanult tények” a 3. pontban. Emlékszik az eddigi beszélgetésre:deployra vár a Kérdezz fül mostantól megjegyzi az adott munkamenetben feltett kérdéseidet és a kapott válaszokat (utolsó néhány forduló), és minden új kérdésnél elküldi a rendszernek — így egy "és tavaly?" vagy "pontosítanád?" jellegű követő kérdés is érthető marad, nem kell mindig mindent újra leírnod. Az „Új beszélgetés” gombbal bármikor kiürítheted az előzményt, ha új témára váltasz. (Email-vázlat vagy kép-prompt válasz nem kerül az előzménybe.) A Claude motor szükség esetén magától újra keres:deployra vár ha a cégvezető Claude-előfizetése (ld. lent) válaszol, és az első keresési találat nem elég egy kérdéshez, vagy a kérdés több témát is érint, a modell más megfogalmazásokkal (szinonima, konkrét termék-/névformák, magyar és angol változat is) újra rákereshet a tudásbázisra — akár többször is —, mielőtt azt mondaná, hogy nincs rá adat. Motor-hiba esetén ez látszik a válaszon is:deployra vár ha a Beállításokban kiválasztott elsődleges motor (pl. a Claude helyi hívása) hibázik, a rendszer eddig is csendben megpróbálta a másik két motort — ez mostantól a válasz felett egy jól látható figyelmeztető sávban is megjelenik ("⚠️ Az elsődleges motor hibázott, a választ helyette más motor adta" + a hiba rövid oka), nem csak a válasz alatti apró model-címkében. Az OpenRouter motor magától keres ingyenes modellt:deployra vár az OpenRouter-motor korábban egy fixen beégetett, "…:free" végű modell-nevet használt — ezt az OpenRouter idővel visszavonja (2026-ban eddig háromszor, legutóbb 2026-09-15-én openai/gpt-oss-20b:free-nél), és a motor addig hibázott, amíg valaki kézzel be nem írt egy másik nevet a szerver környezeti változójába. Mostantól a rendszer maga kérdezi le az OpenRouter éppen elérhető ingyenes modelljeinek listáját, és — ismert, általános célú gyártói családokat (Qwen, Meta-Llama, Google, Mistral AI, DeepSeek, OpenAI, Z-AI, Nvidia, ebben a sorrendben) előnyben részesítve, csak ezen belül a legnagyobb kontextusablak alapján — választ egy modellt; ezt legfeljebb 7 naponta ellenőrzi újra, hálózati hívás nélkül él a korábbi választással addig. …és megjegyzi, ha egy modell használhatatlannak bizonyul:deployra vár 2026-09-15-én kiderült, hogy a "legnagyobb kontextusablak nyer" szabály önmagában nem elég: a rendszer egy technikailag ":free" végű, de valójában lekorlátozott modellt (thinkingmachines/inkling-small:free) választott, amit az OpenRouter 403-mal ("only available on agentic harnesses") utasított el. Mostantól a rendszer nemcsak a "megszűnt ingyenes" (404) esetet ismeri fel, hanem a korlátozott hozzáférésű (403 "agentic harness"-gate) és a fizetést igénylő (402) eseteket is — ilyenkor a hibát okozó modell 30 napra feketelistára kerül (legfeljebb a 20 legutóbbi ilyen bejegyzést tartja meg), és a rendszer egy másik modellel újrapróbálja a kérdést (egy híváson belül legfeljebb 3 próbálkozás — ha mindhárom elbukik, a hiba továbbmegy a másik motoroknak, Gemini/Claude). Egy átmeneti, fiók-szintű túlterhelés (429, "rate limit") NEM blokkol modellt — csak a valóban modell-specifikus hibák igen. Kézzel beírt szerver-oldali OPENROUTER_MODEL környezeti változó továbbra is mindent felülbírál. A ténylegesen használt modell neve (mikor lett utoljára ellenőrizve) és a feketelistázott modellek száma/legutóbbi oka a Beállítások fülön, az OpenRouter rádiógomb alatt látszik. …és átmeneti túlterhelésnél is talál másikat:deployra vár ha az éppen kiválasztott ingyenes modell átmenetileg túlterhelt ("rate limit", pl. "is temporarily rate-limited upstream"), a rendszer ezt NEM bünteti feketelistával, hanem rövid, 15 perces időre kihagyja, és rögtön egy másik ingyenes modellel próbálkozik tovább — 15 perc után a kihagyott modell újra szóba jöhet.
Dokumentumok fülön feltölthetsz fájlokat (PDF, Word .docx, kép — OCR-rel —, .txt/.md), akár egyszerre többet is, vagy egyszerűen beilleszthetsz szöveget. Opcionális annotáció és időbélyeg adható hozzá, és választhatod: Központi tudásbázis (mindenki keresheti), Csak nekem (személyes) vagy Korlátozott (csak szuperadminok — pl. érzékeny ügyféladat, csak szuperadminnak látszik a rádiógomb is). A feltöltés azonnal visszaigazolást ad, a feldolgozás (kép esetén OCR is) a háttérben fut — a lista alatta automatikusan frissül "feldolgozás alatt" → "kész" állapotra. Ha egy feltöltés átmeneti hiba miatt (pl. túlterhelt szerver) hibára fut, a rendszer 30 percenként automatikusan újrapróbálja (max. 5 alkalommal) — nem kell kézzel újra feltöltened, hacsak nem valódi (nem átmeneti) hiba az ok. Szuperadmin a Dokumentumok fülön egyesével vagy tömegesen (🗑 gomb / "Hibás feltöltések törlése") törölheti a véglegesen hibásakat.
Ha ugyanazt a fájlt/URL-t/beillesztett szöveget (ugyanaz a forrás/fájlnév) újra feltöltöd — pl. mert egy hiba miatt újrapróbálod —, a rendszer felismeri és lecseréli a korábbi próbálkozást ahelyett, hogy duplikátumot hozna létre. Ha szándékosan meg akarsz tartani egy régi verziót is, adj neki eltérő címet/fájlnevet.
Weboldal importálása — ugyanitt megadhatsz egy induló URL-t (pl. a webshopod), a rendszer azonos domainen belül bejárja a linkelt oldalakat (megadott max. oldalszámig), és mindegyiket külön dokumentumként dolgozza fel. Csak szerver-renderelt HTML-t lát — erősen JS-es SPA-oldalaknál nem talál tartalmat (ehhez headless böngésző kellene, ami jelentősen több erőforrást igényelne).
Integrációk fülön látja mindenki, mely külső rendszerek vannak bekötve (státusz), szuperadmin szerkesztheti a hozzáférési adatokat. WooCommerce (majomkenyer.hu), Gmail/Google Workspace (@ole.hu), és (2026-09-04 óta) Meta Ads + Google Ads van bekötve, (2026-09-08 óta) számlázz.hu is bekötendő a Pénzügyi riporthoz — ld. lent, 3. pont.
Pénzügyi riport fül (szuperadmin, 2026-09-08 óta, él) — a számlázó (számlázz.hu) kimenő és bejövő számláiból készülő, nem AI-generált, determinisztikus pénzügyi összesítő: időszak-választó (ez a hónap / előző hónap / idén / utolsó 12 hónap / előző év / egyedi), számlázott bevétel nettó/bruttó, bejövő (szállítói) számlák költsége, nettó eredmény, havi bontás sávdiagrammal, legnagyobb vevők/szállítók, ÁFA-bontás, fizetési módok, mostani kintlévőség (nyitott + lejárt vevői számlák listája) és szállítói tartozás, szűrhető számlalista CSV-letöltéssel. Minden összeg forintban, a számla kelte szerint; díjbekérő/szállítólevél/teszt-számla nem számít, sztornó negatív tételként. Ugyanez a Kérdezz fülön és a Olé Hosting-ban is elérhető szuperadminnak (get_invoice_stats eszköz: „mennyi volt a számlázott bevétel augusztusban?”, „kinek van lejárt számlája?”). Adatforrás és bekötés: ld. 3. pont, „számlázz.hu integráció”.
Email fül — minden bejelentkezett user beállíthatja a saját email-küldő módját (SMTP saját postafiókkal, vagy Brevo/SendGrid/Resend API-kulccsal), és írhat/küldhet emailt. Küldés előtt mindig felugrik egy megerősítő ablak a teljes, végleges szöveggel — automatikusan sosem megy ki semmi. Biztonsági korlát: max. 5 email/óra/felhasználó. Időzíthető is: megadható egy jövőbeli kiküldési időpont — a szöveg jóváhagyása most történik, csak a kiküldés csúszik, nincs újra-megerősítés a kiküldés pillanatában. A Kérdezz fülön is lehet email-vázlatot kérni természetes nyelven (pl. "holnap emailezd meg X-et, hogy…") — a rendszer felismeri, kitölti az Email fület a vázlattal (relatív dátumot is feloldva), és megnyitja ugyanazt a megerősítő ablakot.
Feladatok fül (2026-09-04-ig „Egyedi funkciók” volt a neve — átnevezve, mert az „Egyedi funkciók” név a lenti, cég-specifikus automatizmus-menücsoportra került) — három különálló rész:
Emberi feladatok — sima, konkrét feladat-kiadás egy kollégának (vagy magadnak), NEM AI-generált. Bejelentkezéskor a kijelölt személy fent egy sárga figyelmeztető sávban azonnal látja a nyitott feladatait — nem kell keresnie.
Nyomdai kép-prompt — önálló, megtalálható mini-eszköz: beírod, mit szeretnél, a rendszer a márka-stílus/korábbi grafikai anyagok alapján egy kimásolható promptot ad egy külső kép-generáló AI-hoz (nem generál képet).
Ismétlődő AI-feladatok — cím+utasítás+gyakoriság (pl. kétheti): a rendszer minden lefutáskor friss adatból (dokumentumok, WooCommerce-statisztika) újragenerálja a tartalmat, és egy review-listába teszi. Innen sosem megy ki/exportálódik semmi automatikusan — mindig egy embernek kell átnéznie/elvetnie.
Bárki csinálhat saját feladatot (emberit és AI-t is); szuperadmin mindenkiét látja.
Felhasználók fül (csak szuperadminnak) — új felhasználó létrehozása, lista. A szerepkör soron belül átállítható (user ↔ superadmin, a saját sorodban nem; az utolsó szuperadmin nem fokozható le) — 2026-09-04 óta a jogosultságot a szerver minden kérésnél a felhasználó AKTUÁLIS szerepköre alapján dönti el, nem a belépéskori token alapján, így egy előléptetés/lefokozás percen belül érvényes újra-belépés nélkül (a portál oldalát frissíteni kell). Szuperadmin bármelyik felhasználó jelszavát beállíthatja (🔑 gomb a sorban) — 2026-09-04 óta másik szuperadminét is (egy kizárt adminnak korábban nem volt visszaút); szuperadmin-jelszó visszaállítása bekerül a Beállítások-fül audit-naplójába (ki, kinek, mikor). Saját profilját (felhasználónév, email, jelszó) mindenki (bármilyen szerepkörrel) szerkesztheti a topbar 👤 gombjával — a felhasználónév/email módosításához nem kell megadni a jelenlegi jelszót, a jelszó-módosításhoz igen. Bejelentkezni felhasználónévvel VAGY emaillel is lehet.
Beállítások fül (csak szuperadminnak) — melyik "agy" (Gemini vagy a cégvezető Claude-előfizetése, MCP-n keresztül) válaszol a Kérdezz kérdésekre (globális, mindenkire vonatkozik), a mai napi hívásszám becslése mindkét motorra, és a legutóbbi 👎 visszajelzések listája (tudás-hiány jelzők). 👎-nál a felhasználó opcionálisan megjegyzést is írhat ("mi hiányzott/mi volt rossz"), ez is megjelenik itt a lista mellett — konkrét javítási infó, nem csak a puszta darabszám. deployra vár Itt szerkeszthető az asszisztens cég-kánonja is (szabad szöveg: ki ez a cég, mivel foglalkozik, kik a kulcsemberek, mi a prioritás, milyen hangnem kell) és itt látszik/törölhető a tanult tények listája — ld. lent, 3. pont.
🤖 Egyedi funkciók menücsoport (csak szuperadminnak, és csak azon a példányon, ahol be van kapcsolva: Beállítások → „Egyedi funkciók menücsoport bekapcsolása”, vagy a repóval települő custom_functions.config.json fájl — ez tartalmazza a cég-specifikus alapértékeket is, és csak azon a példányon érvényes, amelynek email-domainjei szerepelnek a fájl only_for_email_domains listájában —, vagy a szerver CUSTOM_FUNCTIONS_ENABLED=true környezeti változója; a felületen mentett érték mindig erősebb a fájlnál) — cég-specifikus, kód-alapú automatizmusok, amik ugyanabból a kódból futó más cégek szerverein alapból nem látszanak. Minden beállításuk a felületen adható meg, semmi cégnév/link nincs a kódba égetve. Három funkció (2026-09-04):
Számlák áttöltése — él: minden szinkronizált céges postafiók PDF-mellékleteit az AI átnézi (csak-PDF, szűk olvasó — a normál szinkron továbbra sem tölt mellékletet), eldönti, számla-e, melyik saját cég a vevő (név/adószám), kiállító, számlaszám, kelt, összeg; könyvelő-barát fájlnevet ad (dátum_kiállító_számlaszám.pdf), és feltölti a könyvelő SharePoint/OneDrive mappájába a cég szerint — a könyvelőtől kapott „bárki a linkkel szerkeszthet” megosztó linken keresztül, Microsoft-fiók és jelszó nélkül (a link 🔍 gombbal ellenőrizhető: megnyílik-e, enged-e feltöltést). Félautomata módban (alap) minden számla a „Jóváhagyásra vár” listában áll meg, ahol a cég is átválasztható, ✔-ra megy fel; automata módban azonnal. Már látott mellékletet nem néz újra, azonos nevű fájlt nem ír felül. Beolvasás a megadott óránként (alap 6) + „Beolvasás most”. Kimenő (számlázz.hu) számlák: később, ugyanerre a feltöltőre.
Gyártástervezés — él: a megrendelések emailben jönnek, és nem tudni előre, melyik postafiókba — ezért az AI minden szinkronizált céges postafiók rendelés-gyanús leveleit (kulcsszavas előszűrés, beállítható visszatekintés) átnézi, és táblázatba szedi: mikorra mit kell leszállítani (vevő, termék, mennyiség, szállítási dátum), ebből mikorra mit kellene legyártani, státusz (új/visszaigazolt/teljesítve), bizonyosság, forrás-emailek, tisztázandó kérdések. A terv a beállított óránként (alap: 24) automatikusan újragenerálódik, és a „Frissítés most” gombbal kézzel is. Futásnapló, korábbi verziók visszanézhetők. Ez az emailek értelmezése, nem rendelés-nyilvántartás — ellenőrizendő. Ugyanazt a Kérdezz-motort használja, amit a Beállításokban kiválasztottál.
Rendelések → Troli — él: az emailben (bármelyik postafiókba) érkező megrendeléseket az AI felismeri, kiszedi a vevőt, tételeket, szállítási dátumot, és ügyletként beküldi a Troli CRM-be (troli.hu, a cég tenantjába, bejövő webhookon), a teljes email-szöveggel jegyzetként az ügylet kartonján. Félautomata módban (alap) minden rendelés a fül „Jóváhagyásra vár” listájában áll meg, ✔-ra megy át; automata módban azonnal. Már látott emaileket nem néz újra; a nem-rendelésnek ítélt leveleket is megjegyzi, hogy ne kérdezze újra. Beolvasás a megadott óránként automatikusan + „Beolvasás most” gombbal. Előfeltétel: Integrációk fül → Troli CRM kártya (Tenant ID + webhook API-kulcs, a Troli Beállítások → Bejövő webhook oldaláról). Sikertelen küldés a listában marad, ✔ Újraküldés gombbal.
🤖 Olé Hosting szerint menücsoport (csak szuperadminnak) — öt, egymástól független, kézzel ("Újragenerálás" gombbal) indítható AI-szintézis a teljes tudásbázisból, mindegyik ugyanazt a motort használja, amit a Beállítások fülön kiválasztottál. Mind az öt ugyanazt a bővített forrást nézi: a portál saját rendszer-tényadatait (2026-09-04 óta: mely rendszerek vannak bekötve, ki a szuperadmin, ki mit töltött fel/indított/döntött — tényadat, nem értelmezés; ebből az Emberek-fül a szerepeket hozzáadott érték szerint súlyozza: egy chat-üzenet kommunikáció, a mindenki által használt rendszerek megépítése/üzemeltetése érték — az üzenetszám nem fontosság-mérték, ezt a prompt kötelező szabályként kapja, és minden személynél megjelenik a fő hozzájárulás-típus: rendszerépítő/döntéshozó/operatív/kommunikáció), a feltöltött dokumentumokat (videomeeting-leiratok is, ha fel vannak töltve), ÉS élőben lekérve a Mattermost minden olyan csatornáját/DM-jét (publikus, privát is), aminek a Mattermost admin-fiók (a bot mögötti token tulajdonosa) tagja — ez fontos azért, mert valaki lehet aktív/kulcsszereplő úgy is, hogy nem küld emailt, csak Mattermoston kommunikál. (Ha egy releváns privát csatorna kimarad, ellenőrizd, hogy az admin-fiók tagja-e annak — az API csak azt látja, aminek tagja.) Ez a Mattermost-lekérdezés minden generáláskor élőben történik, nem tárolódik/indexelődik sehova tartósan.
Folyamatok — a cég működését mutatja be, több (min. 5-7), kis, terület-szerinti Mermaid-folyamatábrában (gombsorral váltva köztük) + magyarázattal, hogy egyetlen zsúfolt, olvashatatlan ábra helyett áttekinthető maradjon.
Emberek, Szerepkörök — kártyánként bemutatja, kik dolgoznak/vesznek részt a cég működésében (név, 👑 vezető-e, ⭐ stakeholder-e, rövid leírás mit csinál — a Google Workspace névjegyzéket is felhasználja, ha be van kötve, hogy valós neveket adjon, ne kitaláltakat), plusz egy kis kapcsolati/szervezeti Mermaid-ábra. Ezt a szintézist a Kérdezz/Olé Hosting is látja (csak szuperadminnak), így pl. "ki van a marketing csapatban" jellegű kérdésre is tud válaszolni.
PPC (csak szuperadminnak; 2026-09-04: teljes átépítés) — bemenete a fenti bővített tudásbázis + Mattermost-kivonat, a webshop rendelés-statisztika, a beállított landing oldalak élőben lekérve (csak szerver-renderelt HTML-t lát, erősen JS-es SPA-oldalaknál kevés szöveget talál), a kép-vagyon (a WooCommerce termékfotóiból, Mattermost-csatornák képmellékleteiből és Gmail-mellékletekből automatikusan gyűjtött, Gemini kép-modellel generált, vagy kézzel feltöltött képek közös készlete), és az elmúlt 30 nap mért kampány-teljesítménye (napi költés/megjelenés/kattintás/konverzió/bevétel kampányonként, a hirdetési platformok API-jából a ppc_stats_daily táblába pillanatkép-szerűen mentve). A célok — napi keret (Ft), max. költés/rendelés arány, havi hirdetési költés cél, havi bevétel cél, célországok (ISO-kód), újragenerálás gyakorisága (nap), landing oldalak (soronként URL | megjegyzés) — 2026-09-04 óta magán a PPC fülön szerkeszthetők (korábban a Beállítások fülön voltak).
Kimenete egy "Irányok" nevű stratégiai markdown, plusz egy strukturált kampány-terv (2-5 kampány, Meta Ads és Google Ads Search platformra elosztva; kampányonként: név, cél — értékesítés/forgalom —, landing URL, napi keret, célországok, célközönség, headline-ök, leírások, Meta-hoz elsődleges szöveg + CTA, Google-höz kulcsszavak, választott kép vagy kép-prompt, indoklás). Közös napi keret (2026-09-04): a napi keret egyetlen Ft-összeg, ami a Meta ÉS a Google kampányokra EGYÜTT vonatkozik, nem platformonként külön; ezt a szerver kódban kényszeríti ki, nem az AI dönt róla — a szerver az összes kampány napi keretének összegét nézi, és ha ez együttesen túllépné a beállított napi keretet, arányosan lecsökkenti mindet, és látható figyelmeztetést ad. Minden összeg magyar forint (Ft); push előtt a szerver ellenőrzi a célzott hirdetési fiók pénznemét is, és nem küld nem-HUF fiókba (kivéve, ha az Integrációk fülön explicit bekapcsolják az allow_non_huf beállítást). A tervből a szerver (determinisztikusan, nem AI-hívással) származtatja a Google Ads Editor CSV-t, a Meta bulk-import CSV-t, és egy "átadó csomagot" (markdown, egy lokális Claude-session számára).
A kampány-kártyák push előtt szerkeszthetők a portálon (szöveg, keret, landing URL, választott kép). A "Hiányzó képek generálása" gomb Geminivel készít 1:1 hirdetés-képet azokhoz a kampányokhoz, amelyeknek egyelőre csak kép-promptja van.
Jóváhagyási kapu (2026-09-04): push előtt minden kampány szövegét és képét külön jóvá kell hagyni ("Jóváhagyom" gomb); bármilyen módosítás a kártyán (szöveg, keret, landing URL, kép) automatikusan visszavonja a jóváhagyást, újra jóvá kell hagyni. A push gombok, és maga a szerver az API-hívás előtt is, csak jóváhagyott kampányt fogadnak el — jóváhagyás nélkül a küldés elutasításra kerül.
Automatikus képgyűjtés minden forrásból (2026-09-04): a képeket nem kell kézzel összeszedni — minden kampány-generálás előtt a rendszer automatikusan frissíti a kép-vagyont, ha az 12 óránál régebbi: a WooCommerce legnépszerűbb termékeinek első képét, a Mattermost-csatornák képmellékleteit és a Gmail-mellékleteket gyűjti be, méret- és időablakkal szűrve, sha256-alapú duplikátumszűréssel. A generálás legfeljebb ~90 másodpercet vár erre, a maradék a háttérben fut tovább. A "Képek begyűjtése" gomb kézzel is elindítja ugyanezt; a kézi feltöltés csak kiegészíti ezt a készletet. IMAP-postafiókok (a Gmail/Google Workspace-en kívüliek) nincsenek lefedve.
API-push: a "Meta Ads-re küldés (PAUSED)" / "Google Ads-re küldés (PAUSED)" gombok — csak jóváhagyott kampányra — a hivatalos API-kon (Meta Marketing API, Google Ads API) keresztül létrehozzák a kampányt → hirdetéscsoportot/ad groupot → kreatívot/hirdetést, mindig PAUSED állapotban; az eredmény (ID-k, link a platform felületére, vagy a hibaüzenet) megjelenik a kártyán. Semmi nem indul el/költ automatikusan — egy embernek kell átnéznie és bekapcsolnia a Meta Ads Managerben / Google Ads-ben. Ez a korábbi "sosem nyúl élő kampányhoz" szabály megegyezéssel bővített változata: korábban egyáltalán nem volt API-kapcsolat, most van, de kizárólag PAUSED-ra. (Ezek a hívások éles hirdetési fiók ellen még nincsenek kipróbálva, amíg a Meta Ads / Google Ads integráció nincs kitöltve valódi hozzáférési adatokkal az Integrációk fülön.)
Handoff lokális Claude-nak (alternatív út): a "Másolás a lokális Claude-nak" gomb kimásolja a csomagot; a user a saját böngészőjében bejelentkezik az Ads Managerbe/Google Ads-be (ez a bejelentkezés szándékosan emberi lépés — az AI sosem tárol/gépel jelszót), és egy helyi Claude-session tölti ki a kampányokat a csomag alapján, PAUSED állapotban, heti manuális átnézésre.
Statisztika-panel: 7/14/30-napos KPI-sor (költés, megjelenés, kattintás, CTR, konverzió, bevétel, ROAS), összevetve a tartomány keretével és a havi célokkal, plusz egy platformonkénti kampány-táblázat. 10 perces szerver-cache.
Jóváhagyás a fül tetején, egy kampány alapból (2026-09-04, később aznap): a "Jóváhagyásra váró kampány(ok)" szekció a PPC fül legtetején mutatja nagy kártyákon a legutóbbi terv még nem jóváhagyott kampányait (platform, név, napi keret, landing link, teljes hirdetésszöveg, kép nagyban) három gombbal: Jóváhagyom, Szerkesztés, Törlés a tervből. A Célok panelen állítható, hány kampányt tervezzen egy generálás (alap: 1) és melyik platformra (alap: csak Meta) — a szerver a prompton túl kódban is levágja a többletet. A landing oldal saját megosztási képe (og:image) automatikusan a képkészletbe kerül és kép nélküli kampánynál alapértelmezett kreatív lesz; kép URL-ről is felvehető. A modell "-" helykitöltőit a szerver kiszűri, Meta-kampánynál a címsor/leírás az elsődleges szövegből esik vissza. A "Mi fut most" táblában színes FUT / Kikapcsolva jelvény mutatja az állapotot.
Indítás/leállítás a portálról (2026-09-05, a cégvezető kifejezett döntése): a PAUSED-only elv egyetlen kivétele — a portál által létrehozott (a kiküldési naplóban rögzített) és jóváhagyott kampány a PPC fül tetején, a jóváhagyó szekcióban egy ▶ Indítás (X Ft/nap) gombbal, megerősítő kérdés után API-n bekapcsolható, és ugyanott ⏸ Leállítás-sal kikapcsolható; a hirdetési felületre nem kell belépni. Más (kézzel készített) kampányt a rendszer sosem kapcsol be. A Meta-app ehhez Live módban kell legyen (fejlesztői módú app nem hozhat létre hirdetést), és a kampány létrehozásánál a Meta megköveteli az is_adset_budget_sharing_enabled mezőt; a pixel csak "vásárlás" célú tervnél kerül a hirdetéscsoportra. Ha a kiküldés félúton elakad, a félkész kampányt a szerver automatikusan törli.
A PPC fül felépítése (2026-09-07, al-fülek):Futó kampányok (minden, a portálról kiküldött kampány bármelyik tervből, állapottal, mai költéssel, Indítás/Leállítás gombbal, plusz a platformok összes kampánya és a "Mindent leállítok") · Új kampány (1. landing/keret/platform, 2. generálás, 3. jóváhagyás és kiküldés, 4. részletek és exportok) · Teljesítmény · Képek · Előzmények és feladatok. Az "Új kampány" fül beállításai csak a következő generálásra vonatkoznak, a futó kampányokat nem módosítják.
Új kampány indítása lépésről lépésre (fejlesztő nélkül): (1) PPC fül → Célok és landing oldalak: landing URL soronként, közös napi keret Ft-ban, platform(ok), Mentés; (2) Újragenerálás (2–4 perc: képgyűjtés, landing oldal, tudásbázis, Mattermost, korábbi teljesítmény); (3) a fül tetején megjelenő kártyán szöveg/kép ellenőrzése, ha kell Szerkesztés, majd Jóváhagyom; (4) Meta Ads-re / Google Ads-re küldés (kikapcsolva); (5) ▶ Indítás megerősítéssel — innentől fut, leállítani ugyanott. A + Google-változat / + Meta-változat hozzáadása gomb a másik platformra másolja a kampányt (címsorok/kulcsszavak a platform szabályai szerint). Google-küldés csak a Google Ads API "Alapszintű hozzáférés" (Basic access) jóváhagyása után működik.
"Mi fut most" panel (2026-09-04): a PPC fül tetején egy rövid szöveges összefoglaló + táblázat mutatja, platformonként mi fut éppen (kampány neve, állapot, napi keret, mai költés, kattintás, landing oldal), 5 perces szerver-cache-sel. Egy "Mindent leállítok" gomb API-hívással egy lépésben PAUSED-ra állít minden futó kampányt mindkét platformon — ez az egyetlen státuszváltás, amit a rendszer önmagában, emberi jóváhagyás nélkül elvégezhet; bekapcsolni kampányt továbbra sem tud, az mindig emberi lépés marad a hirdetési felületen.
Generálás után itt is megjelennek kipipálható követő-feladatok (csomag átnézése; PAUSED kampányok ellenőrzése/bekapcsolása) — az automatikus újragenerálás ütemezése változatlan (alapértelmezett 7 naponta).
Ismert korlátok: a kép-gyűjtés a WooCommerce/Mattermost/Gmail hármasra korlátozódik, IMAP-postafiókokat nem néz; a JS-renderelt SPA landing oldalakból kevés szöveget lát; a Google Ads API-hoz fejlesztői token kell (teszt-fiókra azonnal jár, "Basic" hozzáférésig a Google-nek kell jóváhagynia, az API-verzió az integráción állítható); a Meta pénznem-egységet automatikusan felismeri (HUF egész egység), kézi felülírási lehetőséggel; a WooCommerce rendelések továbbra sem tartalmaznak UTM-attribúciót.
Projekt Potenciál — a fenti bővített tudásbázis és általános üzleti megfontolás alapján az AI konkrét pénzkeresési/bővülési projekt-ötleteket vet fel a cégnek (pl. új értékesítési csatorna/piac, vagy egy a dokumentumokban ténylegesen látott meglévő ügyfélkapcsolat/pilot/partnerség továbbfejlesztése). Minden ötlet egy színes, kattintható kör ("gombóc") a fülön — a szín az állapotot jelzi (szürke = még validálatlan ötlet, borostyán = egyeztetés alatt, zöld = már fut/aktív együttműködés), a kör mérete/glóriája pedig a becsült potenciált (1-3). Rákattintva egy soron belüli panel nyílik le a névvel, egy mondatos leírással, státusz-jelvénnyel, potenciál-csillagokkal és egy 2-4 bekezdéses elemzéssel (miért illik a céghez, piaci kontextus, konkrét következő lépés, kockázatok).
Felületeink (2026-09-04) — a Folyamatok és a Felületeink kölcsönösen látják egymás legutóbbi eredményét: a Folyamatok minden lépésnél megnevezi, melyik rendszerben történik (és hol nincs rendszer, csak kézi/emailes/telefonos munka), a Felületeink pedig a folyamatokból tudja, mire használják a rendszereket. Leltár arról, milyen webes és nem webes rendszereket, felületeket használ a cég (webshop, számlázó, könyvelői fájlmegosztó, bank, futárportál, levelezés, csapat-chat, hirdetési felületek, maga ez a portál, fizikai eszközök stb.): rendszerenként mire használjuk, ki a gazdája, be van-e kötve ebbe a portálba, honnan tudunk róla (integráció-tényadat / dokumentum / email / Mattermost) és mennyire biztos. A bekötött rendszerek tényadatból jönnek (BEKÖTVE=igen), a többi az emailek/dokumentumok értelmezése. Táblázat + összefoglaló (mennyire integrált a rendszer-táj, hol van kézi munka, mit érdemes legközelebb bekötni), korábbi verziók visszanézhetők/törölhetők.
Mindegyiknél minden generálás megmarad (nem törlődik/íródik felül) — a korábbiak a lista alján kattinthatóan visszanézhetők, így nyomon követhető, mi változott (a Projekt Potenciál fülön ez egy lenyitható "Korábbi generálások" lista, törlés-gombbal soronként). A Folyamatok/Emberek diagramjait egy 🔍 gomb közel teljes képernyőn is megnyitja. Fontos korlát mindegyikre: ez az AI értelmezése/javaslata a leíró dokumentumokból/üzenetekből és általános üzleti megfontolásból, NEM hivatalos szervezeti ábra, valódi process mining, szakértői marketing-terv vagy garantált üzleti lehetőség — ellenőrizendő, nem garantáltan pontos, főleg ha egy terület/csatorna alulreprezentált a tudásbázisban.
B) MCP-kompatibilis AI kliens — pl. Claude Desktop, Claude Code, vagy claude.ai "remote connector" a okos.ole.hu/mcp végponton, hozzáférési tokennel. Ez a mai napig csak a központi tudásbázist látja, személyes dokumentumokat nem (mert nincs hozzá bejelentkezett portál-felhasználó kontextus).
Beállítás Claude-dal:
Nyisd meg a Coolify UI-t → Applications → aios-rag-mcp → Environment variables → másold ki a MCP_BEARER_TOKEN értéket.
Claude Desktop / claude.ai-ban add hozzá remote MCP connectorként: URL = https://okos.ole.hu/mcp, Authorization header = Bearer <token>.
Ezután Claude-tól kérdezhetsz a cég dokumentumairól — a search_knowledge_base eszközt fogja használni.
Gemini 2.5 Flash — élesben fut a portál Kérdezz fülén:
Költség-optimalizálás miatt a portál a Claude-előfizetés helyett egy saját kiszolgáló Gemini 2.5 Flash API-hívását használja (ingyenes limitig). Mivel a Gemini API ingyenes szintje esetén Google a beküldött adatokat modellfejlesztésre használhatja, a rendszer minden dokumentum-darabot előszűr, mielőtt kiküldi. Ez egy tudatos, elfogadott kockázat — ld. lent a döntés indoklását.
3. Hogyan lesz egy dokumentumból kereshető adat?
Amikor egy dokumentum bekerül a rendszerbe (jelenleg kézzel/scriptből, később n8n-es automatikus behúzással), ez történik vele:
1
BeérkezésA dokumentum szövege (jelenleg egy szöveges mező) bekerül a feldolgozó folyamatba — forrás és cím megjelölésével.
2
Darabolás (chunking)Hosszú dokumentumnál a szöveg kisebb, kb. néhány bekezdésnyi darabra bomlik — így a keresés pontosabb, nem az egész dokumentumot, hanem a releváns részt találja meg.
3
Vektorizálás (embedding)Minden darab szövegét egy lokálisan futó AI-modell (Ollama, nomic-embed-text) egy 768 számból álló vektorrá alakítja. A hasonló jelentésű szövegek vektora közel esik egymáshoz — ez teszi lehetővé a "jelentés szerinti" keresést, nem csak kulcsszavas egyezést.
4
TárolásA szöveg, a vektor, a forrás és egyéb metaadat egy Postgres adatbázisban landol, a pgvector bővítménnyel — ez egy speciálisan vektorokra optimalizált keresőindexet (HNSW) tart fenn.
5
KeresésAmikor kérdés érkezik, a kérdés szövege is átmegy ugyanazon a vektorizáláson, majd az adatbázis megkeresi a hozzá legközelebb eső dokumentum-darabokat ("cosine similarity" alapján).
6
VálaszadásA legjobban egyező darabokat egy nagy nyelvi modell (jelenleg Claude, az MCP-n keresztül) megkapja kontextusként, és ebből fogalmaz emberi választ a kérdésre.
Élesben: minden dokumentum-darabhoz tartozik egy "effektív dátum" (a dokumentum saját időbélyege, ha van megadva, különben a feltöltés ideje). A keresési rangsor 85% szemantikai hasonlóság + 15% frissesség-súllyal rendez, és a Kérdezz felület a nagy nyelvi modellnek is megadja minden forrás dátumát, explicit utasítással: ha két forrás ellentmond egymásnak, a frissebbet vegye figyelembe, és jelezze is ezt a válaszban. Teszteltem: egy 2020-as és egy 2026-os, egymásnak ellentmondó dokumentumnál a rendszer helyesen a frissebbre hivatkozva válaszolt.
Cég-kánon és tanult tények — deployra vár
A visszakeresett dokumentum-darabok (fent, 1-5. lépés) mellé a Kérdezz-válasz motorja most már egy állandó "preambulumot" is kap, MINDEN kérdésnél, a kikeresett darabok ELÉ befűzve — és ez a motor-választástól függetlenül ugyanaz (Gemini, a cégvezető Claude-előfizetése és az OpenRouter mind ugyanazt a szöveget látja, mert egyetlen közös kontextus-szövegbe kerül bele, nem motoronkénti külön promptba). Három rész:
Cég-kánon — szabad szövegű markdown, amit szuperadmin ír a Beállítások fülön (ki ez a cég, mivel foglalkozik, kik a szereplők/kulcsemberek, mi a prioritás, milyen hangnemet várunk). Ha üres, a rendszer a meglévő cégnév + cég-leírás + márkanév beállításokból rak össze egy minimális helyettesítő szöveget, így ez a funkció bekapcsolva sem ronthat a mai válaszokon.
Fix viselkedési szabályok — kódba írt (nem szerkeszthető) blokk: tömör válasz (ne ismételd a kérdést, ne sorold fel a kontextust), önellenőrzés (kitalált adat tilos, minden állítást a kontextusnak/eszköz-eredménynek kell alátámasztania), ha a kontextus nem elég, mondja ki mi hiányzik és kérdezzen vissza célzottan találgatás helyett, és a dátum-ütközésnél a frissebb forrás nyer (ez korábban motoronként külön volt megírva, most egy helyen van).
Tanult tények ("jegyezd meg") — bárki taníthat be egy rövid tényt a Kérdezz fülön a jegyezd meg: ... előtaggal induló szöveggel (ld. fent, 2. pont), vagy a Beállítások fülön is listázva látszik. Minden tény dátummal és a beküldő nevével kerül be minden jövőbeli válaszba, legújabb elöl. Törlés (csak szuperadmin) nem fizikai törlés, csak inaktívvá teszi — a napló megmarad.
Tárolás módja — miért nem tudott korábban összesítő kérdésekre válaszolni
A vektor-alapú keresés (RAG) a "leginkább hasonló szöveg-darabokat" adja vissza egy kérdésre — ez remek "miről szól ez a dokumentum" kérdésekhez, de szerkezetileg alkalmatlan összesítésre ("hány rendelés volt a héten", "mennyi az átlag kosárérték egy hónapban"): nem tud számolni/összegezni egy teljes adathalmazon, csak néhány "hasonló" darabot mutat.
Ezért minden connectornál (elsőként a WooCommerce-nél) beállítható a Tárolás módja (Integrációk fül, szuperadmin):
RAG — a mostani módszer: szöveggé alakítva, chunkolva, vektorizálva, korlátozott láthatósággal. Jó tartalmi kérdésekhez.
Tábla — a forrás natural mezői (dátum, összeg, vevő, tételek) saját, tipizált Postgres táblába kerülnek (wc_orders, wc_products) — ez teszi lehetővé a valódi SQL-összesítést.
Mindkettő (alapértelmezett) — egyszerre mindkettő fut.
"Tábla" módban a Kérdezz motor (jelenleg Gemini) három fix, biztonságos "eszközt" hívhat, ha a kérdés ezt igényli: rendelés-statisztika (darabszám, bevétel, átlag kosárérték egy időszakra), top termékek (mennyiség/bevétel szerint) és konkrét rendelések listája (pl. "utolsó 3 rendelés" — ez más, mint az összesítés, mert tételes adatot ad, nem darabszámot). Ezek nem szabad SQL-t generálnak — fix, paraméterezett lekérdezések, amit a modell csak dátum-szűrővel hívhat meg, sosem szabad szöveggel. Ez a mechanizmus a sablon minden jövőbeli connectorhoz (pl. Gmail: email-darabszám, gyakoriság egy partnerrel).
Összetett kérésekhez (adatlekérés + email) az eszközök láncolhatók: egy kérdésen belül a modell akár több eszközt is hívhat sorban — pl. előbb lekéri az utolsó 3 rendelést, majd azzal az adattal tölti ki a draft_email-t. Ez max. 4 lépésig mehet egy kérdésen belül; ha ennél is összetettebb lenne, inkább bontsd szétebb, egyszerűbb kérdésekre.
Tárolt adat + automatikus frissítés, nem élő API-hívás minden kérdésnél: egy összesítő kérdés (pl. "mennyi volt az átlag kosárérték egy hónapban") úgyis az adott időszak összes rendelését kellene átnézze — ez a WooCommerce API-n élőben lassabb és a bolt leállásának is kiszolgáltatott lenne. Ezért a tárolt táblákat használja, de ha a legutóbbi frissítés 20 percnél régebbi, egy gyors, csak-a-változásokat-lekérő frissítést futtat a válasz előtt — így a friss kérdések sem mutatnak órákkal elmaradt adatot.
A Kérdezz felület egy másik, hasonló elven működő eszközt is használ: ha a kérdés valójában egy email megírására vonatkozik (pl. "holnap emailezd meg X-et, hogy…"), felismeri, és az Email fülön nyit egy előre kitöltött vázlatot (a relatív időpontot pontos dátummá alakítva) — a kiküldés ugyanúgy emberi jóváhagyáshoz kötött, mint a kézzel írt emaileknél. Hasonlóan, egy nyomdai/grafikai kép-generáláshoz szükséges promptot is meg tud írni (a márka-stílus és korábbi grafikai anyagok alapján) — nem képet generál, csak egy kimásolható promptot egy külső kép-generáló AI-hoz.
Motor-független eszközök: ugyanezek az eszközök (rendelés-statisztika/lista, email-vázlat, kép-prompt) Claude (helyi, előfizetéses) motorral is működnek, nem csak Geminivel — a Claude Code CLI saját, egyszer-használatos MCP-kapcsolatot kap vissza a szerverre, a kérdező felhasználóhoz kötve. Ha a motort a Beállítások fülön átváltod, ugyanaz a képességi kör marad, csak más LLM dönt a háttérben.
Meta Ads és Google Ads integráció (2026-09-04) — PPC API-pusholáshoz
Az Integrációk fülön (szuperadmin) két új connector szerkeszthető, amivel a PPC fül a hivatalos hirdetési API-kon keresztül tud kampányt push-olni (mindig PAUSED állapotban) és mért teljesítmény-adatot lehívni:
Meta Ads — hirdetési fiók ID, Facebook oldal ID, egy System User access token (ads_management + business_management + pages_read_engagement jogokkal), opcionálisan Pixel ID és Instagram fiók ID, Graph API verzió, pénznem-egység.
Google Ads — ügyfél-ID, opcionális MCC (kezelői fiók) ID, developer token, OAuth Client ID/Secret, refresh token (ezt a "Google Ads összekötése" gomb tölti ki, ami a Google-fiók hozzájárulási folyamatát futtatja le a saját böngésződben), API verzió.
Ezek API-hozzáférési adatok/tokenek, nem a saját Facebook/Google bejelentkezési jelszavad — a rendszer sosem a személyes fiók jelszavát kéri, csak egy erre a célra generált, korlátozott jogú tokent.
Hogyan szerezz API-hozzáférést:
Meta: Business Manager → Beállítások → Rendszerfelhasználók → új rendszerfelhasználó (admin szerepkörrel) → eszközök hozzárendelése (a hirdetési fiók + a Facebook oldal) → token generálása a fenti jogokkal. Ez a saját hirdetési fiókodra azonnal működik, nincs Meta app-review várakozás — de kell hozzá egy "Business" típusú Meta developer app a token generálásához.
Google: Google Ads MCC (kezelői) fiók → Eszközök és beállítások → API Center → developer token igénylése (teszt-hozzáférés azonnal jár, a "Basic" hozzáférés kérvényezéssel, jellemzően pár nap alatt jön meg). Google Cloud Console → új projekt → Google Ads API bekapcsolása → OAuth client létrehozása ("Web application" típus, az Integrációk-kártyán mutatott redirect URI-val) → utána az Integrációk fülön a "Google Ads összekötése" gombbal fejezed be (ez futtatja le a Google hozzájárulási folyamatot).
számlázz.hu integráció (2026-09-08) — a Pénzügyi riport adatforrása
A számlázz.hu-nak nincs „összes számla listázása” API-ja (a Számla Agent csak egy-egy számlát ad vissza számlaszám szerint), ezért az adat két, egymást kiegészítő csatornán jöhet, mindkettő ugyanabba a fin_invoices táblába:
Számla Agent szinkron (pull) — ez a fő út, ez működik azonnal: a számlázz.hu számlaszámai egy előtagon belül folytonosan sorszámozottak, ezért a portál sorszám szerint egyenként kéri le őket. Beállítás: számlázz.hu → Beállítások → Számla Agent → Agent kulcs generálása → Integrációk fül → számlázz.hu kártya: a kulcs beírása + a „sorozatok” mezőben a számlaszám-előtag(ok) megadása (pl. E-MJMKN-2026- | 1, soronként egy; az évszámot a portál évfordulón magától továbbviszi) → Aktív → Mentés → „Visszamenőleges betöltés indítása” (15 egymás utáni hiányzó sorszám után áll le). Ettől kezdve 30 percenként automatikusan: az utolsó ismert sorszám utáni új számlák lekérése + a nyitott (nem kifizetett) számlák állapotának napi frissítése — így a riport webhook nélkül is naprakész, és a régi számlák is teljes adattal (tételek, partner, kifizetés) vannak benne, nem csak összesítve. A „Lekérés (teszt)” gomb egy konkrét számlaszámmal ellenőrzi, hogy a kulcs működik.
Online pénzügyi adatkapcsolat (push webhook) — opcionális kiegészítő, regisztrációt igényel: a számlázz.hu a kiállítás után kb. 15 percen belül XML-ben elküldené minden kimenő/bejövő számlát a portál /mrag/api/szamlazz/webhook címére (X-Szamlazzhu-Key fejléc = a kártya „Fogadó kulcs”-a). A portál oldala kész és él, DE a számlázz.hu Fiók beállítások → Online pénzügyi adatkapcsolat űrlapján a „Fogadó rendszer” csak egy előre regisztrált listából választható (Cogentax, NetAccounting, QUiCK, BinX…) — saját URL-hez a számlázz.hu IT supportjánál „privát fogadó rendszer” regisztráció kell. Amíg ez nincs, a fenti Agent-szinkron ad mindent; a webhook előnye csak a gyorsabb (15 perc vs. 30 perc) frissülés és a bejövő számlák/banki tranzakciók automatikus átvétele lenne.
Nem tárolunk számlázz.hu-jelszót — csak a két kulcsot. A számla-adat partnernevet és adószámot tartalmaz, ezért a Pénzügyi riport és a hozzá tartozó AI-eszköz szuperadmin-only; a számlák nem kerülnek a RAG-tudásbázisba (strukturált tábla + összesítő eszköz a helyes forma).
Google Ads bekötés státusza (2026-09-04): a kezelői (MCC) fiók, a developer token (egyelőre teszt-szintű), a Google Cloud-projekt, az OAuth-kliens és a hozzájárulási képernyő elkészült; a "Basic" hozzáférés kérelme be van adva, a bírálat kb. 5 munkanap. Amíg ez nincs jóváhagyva, az éles Google Ads fiókon a statisztika-lekérdezés és az API-push hibát ad — ez egyelőre várt viselkedés, nem hiba; addig a Google Ads Editor CSV-export vagy a lokális Claude-session-nek való átadás használható helyette. A Meta Ads bekötés ezzel szemben már él (rendszerfelhasználó tokennel), a statisztika-lekérdezés is működik rajta.
4. Biztonsági alapelvek
Szerepkörök összefoglalva — ki mit lát
Csak kétféle szerepkör van: munkatárs (user) és szuperadmin. Ugyanez a két szint érvényes a portálon ÉS a Mattermost-beli Olé Hosting-n keresztül is — nincs külön, Mattermost-specifikus jogosultsági rendszer.
Szerepkör
Portálon
Mattermost / Olé Hosting-n keresztül
Munkatárs (user)
Kérdezz/keresés: Központi tudásbázis (mindenki adata, ide tartozik 2026-07-15 óta a WooCommerce/webshop adat is) + saját Személyes doksijai. Nem éri el a Korlátozott (email) tartalmat/eszközöket. A Dokumentumok fülön (lista) viszont 2026-07-23 óta csak a SAJÁT feltöltéseit látja (nem másokét is, még a Központi láthatóságúakat sem) — ez csak a lista-nézetet szűkíti, a keresésben/válaszban a mások Központi doksijai továbbra is elérhetők neki. Nincs hozzáférése a Felhasználók/Beállítások/🤖 Olé Hosting szerint (Folyamatok, Emberek/Szerepkörök) fülekhez.
DM-ben a saját portál-szerepe szerint válaszol (Központi + saját Személyes). Csoportos/publikus csatornában mindig csak Központi szintű adatot kap — akkor is, ha a csoportban van szuperadmin is, mert ott más is olvashatja a választ.
Szuperadmin
Minden a munkatárs-szintből, PLUSZ a Korlátozott (email) tartalom/eszközök, és a Felhasználók/Beállítások/🤖 Olé Hosting szerint fülek (felhasználó-kezelés, motorváltás, folyamatábra-, szervezeti-ábra- és projekt-potenciál-generálás). A Dokumentumok fülön (lista) mindenki feltöltését látja, nem csak a saját magáét — ez a szuperadmin egyetlen kivétele a fenti "csak saját feltöltés" listázási szabály alól.
DM-ben teljes hozzáférés, a Korlátozott adat is. Csoportban/privát csoportos üzenetben (Mattermost "group message") csak akkor ad Korlátozott szintű választ, ha a beszélgetés MINDEN emberi tagja szuperadmin — ha akár egy sima munkatárs is jelen van, Központi-only. Publikus csatornában mindig Központi-only, függetlenül a taglistától (mert oda bárki beléphet később).
Mattermost-fiók összekötése a portál-fiókkal: a Olé Hosting a kérdező Mattermost-email címe alapján ismeri fel, melyik portál-fiókhoz (és így melyik szerepkörhöz) tartozik — ezt a Felhasználók fülön (szuperadmin) kell beállítani minden usernél (kattintás az email-cellára). Ha egy Mattermost-user emailje nincs összekötve egy portál-fiókkal, a Olé Hosting a legszűkebb, biztonságos alapértelmezést használja (Központi-only, mintha sima, nem-azonosított user kérdezne).
Külső LLM-nek (Gemini, vagy bármi nem-lokális) csak a releváns dokumentum-darabok mennek ki, nem a teljes adatbázis — de ez önmagában nem garancia, ha egy releváns darab pont jelszót vagy belső infót tartalmaz.
Ingyenes/free-tier külső AI API-k (pl. Gemini free) adatvédelmi feltételei eltérnek a fizetős szinttől — a free tier promptjait/válaszait a szolgáltató felhasználhatja modellfejlesztésre.
A MCP végpont hozzáférés-védett: Bearer tokennel, ami a Coolify UI-n keresztül kezelhető.
Három láthatósági szint a dokumentumokon: Központi (minden bejelentkezett user — ide tartozik 2026-07-15 óta a WooCommerce rendelési adat is, tudatos döntéssel), Személyes (csak a feltöltő), Korlátozott (csak szuperadmin — pl. Gmail-tartalom). A rendszerszintű/MCP-s hozzáférés (bearer token, nincs mögötte konkrét user) csak a Központi szintet éri el. Ugyanez a szintezés érvényes a Mattermost-beli Olé Hosting botra is — ld. az 1. és 5. pontot.
Email-küldés — mindig emberi jóváhagyással. A rendszer sosem küld emailt automatikusan/láthatatlanul: a portál a végleges, teljes szöveget mindig megjeleníti egy megerősítő ablakban ("Egyetértek, mehet" gomb), és csak ezután hívja meg a valódi küldést — időzített emailnél is a jóváhagyás a szöveg elfogadásakor történik, nem a tényleges kiküldéskor. Mindenki a saját email-küldő hozzáférésével (SMTP jelszó vagy API-kulcs) küld, nem egy közös céges fiókból. Visszaélés/hiba ellen véd az óránkénti 5 emailes limit is (felhasználónként).
Ismétlődő feladatok — sosem automatikus kimenet. Egy kétheti/rendszeres feladat minden lefutáskor újragenerálja a tartalmát friss adatból, de ez mindig egy review-listába kerül — a rendszer innen semmit sem küld ki vagy exportál magától, egy embernek kell átnéznie/felhasználnia az eredményt.
Audit-napló. Minden Kérdezz-kérdés (nem csak a 👍/👎-vel értékeltek) naplózódik: ki, mit, mikor, melyik motorral — a Beállítások fülön (szuperadmin) visszakereshető, a legutóbbi 100 bejegyzés.
Cégazonosság konfigurálható, nem hardcode-olt (2026-07-30). Ugyanez a kódbázis (ez a repó) más VPS-eken, más cégekre is fut — ugyanaz a felület/funkciókör, csak más adatok/kapcsolók (AI API-kulcsok, WooCommerce/Gmail-fiókok stb.). A Beállítások fülön a cégnév/rövid leírás/céges email-domain(ek) szerkeszthető — ez alapján hivatkoznak rá az AI-generált folyamat-/szervezeti-ábrák és a PPC-stratégia, nem egy fixen beégetett cégnévre.
Döntés (2026-07-07): Gemini elfogadva érzékeny adatra is, előszűréssel
A projekt úgy döntött, hogy a Gemini API-t (free tier) használjuk érzékeny/céges tartalomra is, de előfeldolgozó szűrővel a kiküldés előtt. Megépített kétrétegű megoldás:
A
Strukturált szűrő (regex)Gyors, determinisztikus mintaillesztés: jelszó-szerű string, API kulcs formátumok, bankkártyaszám, IBAN, magyar adószám (8-1-2 számjegy), magyar bankszámlaszám, magyar telefonszám (+36/06) — ez a "könnyű" eseteket biztosan elkapja, mielőtt a szabad szöveg egyáltalán eljutna a következő réteghez.
B
Lokális LLM-es szűrő (Ollama, a szerveren belül marad)Egy a szerveren futó, kifelé sosem küldött modell átolvassa a már regex-szűrt szabad szöveget, és kigyomlálja/kitakarja, amit érzékenynek ítél (pl. "ez egy fizetésről szóló bekezdés" jellegű felismerés) — csak a megtisztított szöveg megy ki a Gemini API-nak.
Fontos korlát, amit el kell fogadni: ez a két réteg együtt is csökkenti, nem garantálja nullára a kockázatot — egy szabadszöveges, mintát nem követő érzékeny mondat átcsúszhat. Ezért ajánlott egy kézi "sosem küldhető ki" jelölő mező is minden dokumentumon/darabon, amit a feltöltő vagy admin explicit be tud kapcsolni — ez egy kemény, szoftveres véletlentől nem függő védőháló a legérzékenyebb tartalmakra. Ez a szűrő maga még nincs megépítve — tervezési döntés, a következő fejlesztési kör része lesz.
Mikor fut le melyik réteg — deployra vár
A fenti A+B kétrétegű redakció (regex, majd a lokális kis modell) feltöltéskor mindig, minden dokumentum-darabon lefut, egyszer — ez nem változott. Ha egy kikeresett darabnak valamiért nincs még kész, feltöltéskor elmentett redaktált változata, akkor válaszidőben is lefut rajta a teljes A+B (tehát a lassú, modellhívós B réteg is) — ez az alapértelmezés, vagyis a biztonságosabb viselkedés. Mivel egy kérdéshez már 12 darab kerül kikeresésre, ez érezhetően lassíthatja a választ, és a kis modell át is fogalmazza a szöveget, mielőtt a válaszoló motor látná. Ezért a Beállítások fülön (szuperadmin) kikapcsolható: ilyenkor válaszidőben csak az A (regex) réteg fut — gyors és nem írja át a szöveget, de csak a fix mintákat (jelszó, API-kulcs, IBAN, bankkártya, adószám, bankszámlaszám, telefonszám) veszi észre, szabad szöveges érzékeny tartalmat nem. A rendszer emellett háttérben, kis kötegekben magától utólag pótolja a hiányzó feltöltéskori redakciót, hogy egyre kevesebb darabon kelljen válaszidőben bármit is futtatni.
5. Tervezett funkciók — még nem élnek
Az alábbiak megbeszélés/tervezés alatt állnak, jelenleg semelyik nincs megépítve. Ez a lista él, ahogy a projekt halad.
Per-user jogosultság-finomításjelenleg a "központi" láthatóságú dokumentumokat minden bejelentkezett user látja/kérdezheti — ez egy tudatos, ideiglenes egyszerűsítés. A "személyes" doksik már elkülönülnek, de a központi részen belüli finomabb, dokumentum-szintű jogosultság még nincs.
Személyes naptár-konnektor (Google Calendar)folyamatban — minden user a saját (nem közös) naptárát kötné be, OAuth-bejelentkezéssel (nem service accounttal, mint a Gmail-nél, mert ez személyes hozzájárulást igényel). Csak strukturált lekérdezés (Tábla mód), RAG nélkül — pl. "mikor van a következő megbeszélésem". Várjuk egy Google OAuth Client ID + Secret létrehozását.
Számlák automatikus feltöltése a könyvelőneka menüpont és a beállító-felület már él („🤖 Egyedi funkciók → Számlák áttöltése”), a feltöltő-réteg még nem: Microsoft Graph API-n keresztül töltené fel a bejövő számla-PDF-eket (Gmail-mellékletekből, szűk, csak-PDF olvasóval — a normál Gmail-szinkron továbbra sem tölt mellékletet) és később a számlázz.hu-s kimenő számlákat a könyvelő SharePoint-mappáiba. Ehhez kell: a könyvelőtől megosztó link vagy egy általunk kontrollált Microsoft-fiókkal megosztott mappa + Azure app-regisztráció; számlázz.hu Agent-kulcs a kimenő ághoz.
Meeting-átirat automatizálásplatform még nincs kiválasztva — tisztázandó, melyik videohívó rendszert használjátok
Elvetve: Bitrix24 CRM bekötés — a free csomag nem engedi a fejlesztői API-t/MCP-t, a fizetős upgrade nem opció. Kézi CSV-export+feltöltés maradt volna workaroundként, ezt sem választottuk. Facebook Messenger (személyes/csoportos) bekötés is elvetve — ToS-sérő és technikailag instabil lenne. Túlhaladott terv, ezért törölve a listából: "Csapat-chat (Slack)" — a csapat végül nem Slackre állt át, hanem a Mattermost self-hosted alternatívát választottuk, ami élesben megvalósult, ld. lent. Elkészült azóta: dokumentumfeltöltés a portálon (fájlok — PDF/DOCX/kép-OCR —, annotációval, opcionális időbélyeggel, feldolgozás-státusszal, feltöltő névvel, újrafeltöltéskor automatikus duplikátum-csere), személyes/központi/korlátozott dokumentum-elkülönítés, weboldal-import (crawl), recency-súlyozott rangsorolás, Integrációk fül + WooCommerce termék/rendelés-szinkron (2026-07-15 óta Központi láthatósággal, mindenki kérdezheti — PPC-elemzéshez, RAG/Tábla/Mindkettő tárolás-móddal + automatikus friss-ha-régi frissítéssel + rendelés-statisztika/top-termékek eszközök az összesítő kérdésekhez), Gmail/Google Workspace szinkron (@mokyen.com + @majomkenyer.hu, garantáltan csak-olvasás, automatikus postafiók-felismerés, 2026-09-04 óta tartalom-alapú reklám/hírlevél-előszűréssel — leiratkozó-link/tömeges fejléc/no-reply feladó/akciós szöveg közül legalább két jel esetén a levél nem kerül feldolgozásra, céges domainről jövő levél soha nem esik ki; Beállításokban kikapcsolható —, RAG + email-statisztika/lista eszközök, Korlátozott láthatósággal), választható Kérdezz-motor (Gemini vagy a cégvezető Claude-előfizetése, mindkettő ugyanazokat az eszközöket éri el — motor-független működés) + napi használat-becslés a Beállítások fülön, Email fül (saját SMTP/Brevo/SendGrid/Resend beállítással, jóváhagyás-köteles + időzíthető küldéssel, óránkénti limittel, teszt-email gombbal, chat-ből induló email-vázlat felismeréssel), nyomdai kép-generáláshoz prompt-író eszköz (Kérdezz-ben és önálló mini-eszközként is), Feladatok fül (korábbi nevén „Egyedi funkciók”: emberi feladatok belépési figyelmeztetéssel + ismétlődő AI-feladatok, mindig emberi jóváhagyást igénylő review-sorral), „🤖 Egyedi funkciók” példány-kapcsolós menücsoport (Gyártástervezés él; Számlák áttöltése előkészítés alatt — ld. 2. pont), 👍/👎 visszajelzés a Kérdezz válaszokra, Mattermost csapat-chat + Olé Hosting bot (self-hosted, chat.okos.ole.hu, DM-ben mindig / csatornában @Olé Hosting említésre válaszol, ugyanazt a tudásbázist/motort használja mint a portál, tagság-alapú jogosultsággal).
PPC-funkció teljes átépítése (2026-09-04): a korábbi "csak DRAFT CSV-t generál, nincs API-kapcsolat" állapot helyett a PPC fül most landing oldalakat (élőben lekérve) és egy WooCommerce/Mattermost/Gmail-ből automatikusan gyűjtött + Gemini/kézi feltöltésből épülő kép-vagyont is bemenetként használ, a hirdetési platformok mért teljesítmény-adatát (ppc_stats_daily) tárolja és statisztika-panelen mutatja, portálon szerkeszthető strukturált kampány-tervet készít (a napi/platform-keretet a szerver kényszeríti ki, nem az AI), és két új, Meta Ads + Google Ads integráción keresztül valódi API-hívással létre tudja hozni a kampányokat — mindig PAUSED állapotban, emberi review-ra várva; alternatívaként a terv egy "átadó csomagként" egy lokális Claude-session számára is átadható. Ez minden felsorolt darabjában élesen fut a szerveren 2026-09-04 óta; a tényleges Meta Ads/Google Ads API-hívások éles hirdetési fiók ellen még nincsenek kipróbálva, amíg valaki ki nem tölti a hozzáférési adatokat az Integrációk fülön. Ugyanezen a napon, később: jóváhagyási kapu került a push elé (kártyánkénti "Jóváhagyom", bármilyen módosítás visszavonja), a napi keret mostantól közös — Meta+Google összesített — HUF-összeg pénznem-ellenőrzéssel, egy "Mi fut most" áttekintő panel + "Mindent leállítok" vészleállító gomb jelent meg a PPC fül tetején, a kép-gyűjtés a fenti három forrásból automatikusan, 12 óránként frissül generálás előtt, és a Google Ads Basic-access kérelem beadásra került (bírálat kb. 5 munkanap, addig a Meta Ads oldal él).