×
Dokumentace CDPMeiro Pipes/Engage · stav k 24. 9. 2026
Vaprio × Meiro Pipes/Engage

Jedna zákaznická databáze pro web, prodejny a e-mailing

Meiro sbírá události z webů vaprio.cz a vaprio.sk, z databáze Vapria (objednávky, účtenky, účty) a ze SmartEmailingu, spojuje je do profilů a nad nimi počítá atributy. Z atributů se staví segmenty, měřené scénáře (e-maily přes SmartEmailing, bannery na webu) a reporting.

8zdrojů dat (2 weby, DB, SmartEmailing, DOI endpointy, backload, sandbox)
4kanály ven: SmartEmailing e-maily, web bannery, Profile API, SE seznamy
3scénáře v ostrém provozu (košíkový e-mail CZ, košíkový banner CZ desktop + mobil)
5dashboardů: Experiments, Web banners, Emailing performance, Licence a pracovní

Co CDP pro Vaprio dělá

Sbírá

Chování na webu v reálném čase (prohlížení, košík, nákup, přihlášení), transakce a účty z databáze jednou za hodinu, e-mailové události ze SmartEmailingu průběžně.

Spojuje

Události se přes customer_id, e-mail a cookie skládají do profilu jednoho člověka. Web, prodejna i e-mail tak končí na jednom místě.

Aktivuje a měří

Nad profily běží scénáře (opuštěný košík, welcome flow, shopping intention) s kontrolními skupinami. SmartEmailing e-maily jen renderuje a odesílá, rozhoduje Meiro.

Architektura a tok dat

Web vaprio.cz / .skMeiro Web SDK (mpt.js) přes first-party doménu me.vaprio.cz / me.vaprio.sk. Realtime.
Databáze Vaprio5 CSV exportů → Cloud App „Vaprio database“ každých 30 min. Objednávky, účtenky, účty.
SmartEmailingKonektor Meira: kontakty, odhlášení, odeslání / otevření / kliknutí.
Meiro PipesIdentity resolution → profily → atributy (SQL nad eventy profilu).
Meiro EngageAudience, journeys, goals, dashboardy, web bannery, Profile API.
SmartEmailingTrigger-event s payloadem → SE automatizace renderuje a odesílá. DOI import.
WebPersonalizované bannery (Profile API), sběr e-mailů s DOI.

Detaily k jednotlivým vrstvám jsou v kapitolách Zdroje a eventy, Web SDK, Databáze Vaprio a SmartEmailing.

Co běží a co se staví

ScénářStav
Opuštěný košík – e-mail CZBěží
Opuštěný košík – web banner CZ desktopBěží
Opuštěný košík – web banner CZ mobil (A/B test)Běží
Welcome flow „výběr na míru“ + DOIRozpracováno
Shopping intention – e-mail CZDry-run
Shopping intention – web banner CZRozpracováno
Segmenty do SmartEmailingu (plošné rozesílky)K dispozici
Opuštěný košík SK (e-mail, banner)Plán
ReplenishmentPlán
OnboardingPlán

Popis každého scénáře, jeho podmínky a reporting jsou v kapitole Use-casy.

Kde co najít v Meiru

Instance: vaprio.eu2.pipes.meiro.io. Odkazy níže vedou přímo do aplikace (vyžadují přihlášení).

Co hledáteKde v UI
Zdroje dat, event typy, retence, identifier pravidlaSources
Profil zákazníka (identifikátory, eventy, atributy)Profiles → Search
Identifier typy a limityProfiles → Identity resolution
Atributy (SQL, dimenze, test nad profilem)Attributes
SegmentyAudiences
Scénáře (journeys)Journeys
Destinace do SmartEmailingu, DOIDestinations · Pipes
Web banneryChannels → Web banners
Goals, dashboardyGoals · Reporting
Katalogy produktů (feedy)Catalogs
Zdraví systému, fronty, heartbeatHealth
Alerting, API tokenySettings

Zdroje dat a eventy

Každý zdroj má vlastní sadu event typů, retenci a pravidla, podle kterých se eventy lepí na profily. Zdroje a event typy zakládá a mění jen implementátor.

Zdroje v instanci

ZdrojTypCo posíláKadenceUI
Vaprio.cz CZWeb SDK (event stream, slug vaprio-cz-1)chování na webu, identifikace přihlášeného, web banneryrealtime, řádově tisíce eventů za hodinu ve dneotevřít
Vaprio.sk SKWeb SDK (slug vaprio-sk)totéž pro slovenský webrealtimeotevřít
Vaprio.bar – SANDBOXWeb SDK (slug vaprio-cz)testovací e-shop vaprio.bar; v reportech ignorovatjen při testechotevřít
SmartEmailingkonektor Meira (webhooky)kontakty, odhlášení, odeslání / otevření / kliknutíprůběžně, špičky při rozesílkáchotevřít
Vaprio databaseCloud App (pull funkce v Meiru)objednávky, účtenky, zákaznické účty a newsletter kontakty z CSV exportůkaždých 30 min; nová data jednou za hodinuotevřít
Vaprio DB backloadevent stream (POST /collect s tokenem)jednorázové dohrání historie a opravy, stejné 4 eventy jako Cloud Appjen na pokyn implementátoraotevřít
Subscribe endpoint CZ / SKevent stream (/collect/subscribe-endpoint-cz, -sk)žádost o newsletter (bez tokenu) a potvrzení DOI (s tokenem)při každém přihlášení z webuCZ SK
Pravidlo: jeden zdroj na jeden web nebo prostředí. Přejmenování zdroje nemění jeho slug ani endpoint, proto má produkční CZ web slug vaprio-cz-1 a sandbox původní vaprio-cz.

Web eventy (Vaprio.cz, Vaprio.sk, sandbox)

Každý webový zdroj má identickou sadu 54 event typů: 52 ze šablony Meira ve stylu GA4 a dva vlastní, cart_updated a user_identified. Reálně se používá zlomek:

EventKdy vznikáKlíčová polePoznámka
page_viewnačtení stránky (tracking rule on.page)url, title, referrernejvětší objem; někdy 2–3× na jedno načtení (AJAX košík)
view_itemdetail produktuitems[] s item_id, price, original_pricezáklad shopping intention
view_item_listvýpis produktů (kategorie, vyhledávání, doporučení)item_list_name, items[]retence 60 dní; prázdné items u search_no_result jsou záměr
add_to_cart, remove_from_cartzměna košíku (delta)items[]nespolehlivé, stav košíku drží cart_updated
cart_updated (vlastní)po každé změně košíku, kompletní snapshotcurrency, value, items[] (item_id, item_name, item_variant, item_brand, price, original_price, quantity, item_url, item_image)zdroj pravdy pro opuštěný košík; prázdný košík = items: []
begin_checkout, add_shipping_info, add_payment_infoprůchod pokladnouitems[]
purchaseděkovací stránkatransaction_id (= eshop_code objednávky v DB), value, currency, items[]jen propojení chování; tržby vždy z DB
user_identified (vlastní)přihlášení, každý load přihlášeného, registrace, newsletter, objednávkaemail, source (login / session / registration / newsletter / order)spojuje cookie s profilem účtu
web_banner_impression / click / close / submitweb bannery Meirabanner_id, action_text, click_url, form_fieldszáklad reportingu bannerů
search, login, sign_up, survey_answeršablonové eventyčást se posílá, nic na nich nestojí

Identifikátory na webových eventech: $.user_id (cookie Meira), $.email a $.payload.email, $.device_id (browser), u šablonových typů i email_message_id a phone (telefon se nikdy neplní). Jak eventy vznikají na webu, popisuje kapitola Web SDK.

SmartEmailing eventy

EventVýznamIdentifikátor
contact_created, contact_updatedzaložení / změna kontaktu; payload nese contactlists[] se statusem, blacklist a custom field cf_12 = customer_id Vapriaemail
unsubscribed_contactodhlášeníemail
email_sentodeslání kampaně nebo automatizace (automation_id, node_id, campaign_type, utm_content)email
email_opened, email_clickedotevření, kliknutí (sid = SmartEmailing ID)email + SmartEmailing ID

Retence všech SE eventů je neomezená. Význam seznamů a polí je v kapitole SmartEmailing.

Databázové eventy (Vaprio database + backload)

EventKdy vzniká (event_time)ObsahIdentifikátory
order_createdvznik objednávky (created_at)jen neměnná pole: order_id, eshop_code, kanál, prodejna, měna, součty, doprava, platba, položky items[]customer_id; email jen u guest objednávky
order_updatedkaždá změna objednávky (max ze všech časových razítek řádku)vše z order_created + status, is_canceled, časy přípravy, expedice, doručení, storna; verzované snapshoty, atributy berou poslední verzicustomer_id; email jen u guest
receipt_createdúčtenka z prodejny (created_at)receipt_id, prodejna, měna, součty, body, položky s vazbou order_item_id na objednávkucustomer_id + email
customer_updatedregistrace, přihlášení, změna newsletteru (max z časů účtu a souhlasu)celý řádek účtu; GDPR výmaz jen customer_id + příznak; newsletter kontakty bez účtu jen e-mail a souhlascustomer_id + email (ne u GDPR)

Backload zdroj má stejné 4 event typy s jinými ID. Atributy proto vždy pracují s unionem obou zdrojů. Retence všech DB eventů je neomezená. Detail transformace je v kapitole Databáze Vaprio.

Subscribe endpointy (DOI)

Dva event typy, identifikátor e-mail: newsletter_subscription_requested (žádost, spouští DOI e-mail) a newsletter_subscription_confirmed (potvrzení z prokliku, posílá webhook SmartEmailingu s tokenem). Interní domény (dataclub.cz, vaprio.cz, vaprio.sk) se zahazují. Celý tok je v kapitole Souhlas a DOI.

Dedup a verzování

Otisk eventu = zdroj + event typ + event_time + identifikátory v payloadu. Event se stejným otiskem se neuloží znovu, i když má jiný payload. Z toho plyne:

  • Hodinovka může stejný řádek poslat opakovaně, uloží se jednou. Zpětná oprava eventu neexistuje, oprava = nový event s novějším časem.
  • Dvě události stejného typu a zákazníka ve stejné sekundě by se slily, proto Cloud App i backload rozpadají kolize posunem o sekundu.
  • Dedup nefunguje napříč zdroji. Překryv Cloud Appu a backloadu řeší atributy přes obchodní klíč (poslední verze per order_id / receipt_id).
  • Journeys reagují na čas přijetí, ne na event_time. Při dohrávání historie se journeys pozastavují.

Retence eventů

SkupinaRetence dnesPoznámka
DB eventy (objednávky, účtenky, účty)neomezenázáklad RFM a historie od 1/2024
SmartEmailingneomezená
Web view_item_list60 dnínejvětší objem bez dlouhodobé hodnoty
Web šablonové eventy (page_view, view_item, purchase, bannery…)365 dníretence šablonových typů je zamčená, mění jen Meiro
Web cart_updated, user_identifiedneomezenáretenční plán čeká na rozhodnutí
Subscribe endpointyneomezená

Retence je hlavní nástroj na hlídání licenčního objemu uložených eventů, viz Provoz a monitoring.

Dotazy na dokumentaci přes AI

Tlačítko zkopíruje prompt pro AI asistenta (Claude, ChatGPT…). Vložte ho na začátek nové konverzace: asistent si načte aktuální textovou verzi této dokumentace (rozcestník kapitol a Markdown soubory, které se generují z této stránky při každém nasazení) a odpovídá jen z ní, s odkazem na záložku a sekci. Nemá přístup do instance Meira ani k API a nikdy nežádá o tokeny; živé hodnoty vždy ověříte v UI přes odkazy v dokumentaci.

Zobrazit text promptu

Web SDK (mpt.js)

Měření webu vaprio.cz a vaprio.sk běží přes Meiro Web SDK. Web plní GA4 dataLayer, tracking rules v Meiru z něj vyrábí eventy. Implementaci na webu drží Vaprio, tracking rules v Meiru Data Club.

Snippet a first-party doména

Jak je SDK nasazené

  • Skript mpt.js a sběrný endpoint běží na me.vaprio.cz a me.vaprio.sk (A záznam na IP Meira). Díky tomu je cookie mpt_user_id first-party a přežívá i v Safari.
  • Každý web posílá na svůj endpoint: CZ /collect/vaprio-cz-1, SK /collect/vaprio-sk. Záměna endpointů = smíchaná data, doménový filtr na straně Meira neexistuje.
  • Snippet volá mpt("consent", …) se stavem cookie lišty a pak mpt("config", …) s endpointem, link trackingem, tracking rules a přepínačem web bannerů.
  • Eventy odchází přes sendBeacon. V DevTools jsou pod typem ping/beacon, filtr Fetch/XHR je skryje.
  • Soubor mpt.js musí začínat (()=>{ (IIFE build). Starší build bez obalu koliduje s jinými skripty (Leaflet a podobně).

Referenční snippet

<script async src="https://me.vaprio.cz/mpt.js"></script>
<script>
  window.mpt = window.mpt || function(){(window.mpt.q = window.mpt.q || []).push(arguments)};
  mpt("consent", { storage_persistence: window.meiroConsent,
                   user_id: window.meiroConsent, session_id: window.meiroConsent });
  mpt("config", {
    collection_endpoint: "https://me.vaprio.cz/collect/vaprio-cz-1",
    link_tracking:  { enabled: true },
    tracking_rules: { enabled: true },
    web_banners:    { enabled: window.meiroConsent === "granted" }
  });
</script>

window.meiroConsent je "granted" nebo "denied" podle skutečného rozhodnutí návštěvníka. Ve snippetu není žádné ruční page_view, to posílají tracking rules.

  • Consent má tři pole: storage_persistence, user_id, session_id. Hodnota denied u user_id aktivně smaže uložené ID. Proto se nikdy neposílá přechodné „denied“ a hned „granted“ v jednom načtení, identita by se tříštila.
  • Bez souhlasu eventy dál odchází anonymně (user_id: null) a bez cookies. Anonymní event bez e-mailu v payloadu se nikdy nepřipojí k profilu.
  • Web bannery se zobrazují až po souhlasu (web_banners.enabled). Banner s podmínkou na audienci se bez user_id nevykreslí ani sám od sebe. Produkční banner má proto vždy podmínku na audienci.
  • Cookiebot (od 22. 9. na testovacím e-shopu): SDK je blokované do kategorie marketing, stav se předává z CookiebotOnConsentReady. Výpisy produktů (view_item_list) web posílá při souhlasu statistics nebo marketing, ostatní e-commerce eventy jdou bez podmínky. Po nasazení na produkci uvidí Meiro jen návštěvníky s marketingovým souhlasem.

Tracking rules

Kód běží ve Web Workeru v prohlížeči a servíruje se z https://me.vaprio.cz/tracking-rules/<slug>.js. Ten soubor je jediný autoritativní způsob, jak ověřit nasazenou verzi.

Co pravidla dělají

  • on.pagepage_view při každém načtení.
  • on.dataLayer("název") → přesná shoda názvu eventu v dataLayeru. Zpracují GTM objektové pushe i gtag() tuply, včetně bufferu před načtením SDK.
  • Normalizace položek: item_id a transaction_id na string, item_variant null → "". Schéma event typu je přísné na datové typy, jinak padá validace celého batche.
  • Čtou GA4 obálku ecommerce i plochý payload.
  • Blokace interních domén v user_identified.

Omezení platformy

  • Validátor kódu blokuje literál location, URL stránky proto v pravidlech není dostupná (nefunguje dedup page_view ani doménový filtr).
  • Nový custom event typ musí existovat dřív, než na něj přijde traffic. Neznámý typ = HTTP 400 a zahození celého batche bez logu.
  • Pravidla se nasazují jako jeden proposal s přesným kódem a po schválení se porovnává servírovaný soubor.

Kontrakt dataLayer (co web posílá)

EventKdy web pushujePovinná pole
view_itemdetail produktucurrency, value, items[1]
view_item_listvýpis: kategorie, novinky, akce, výběr, výrobce, vyhledávání, recommender v košíkuitem_list_name (product_default, product_news, product_sale, product_selection, manufacturer_detail, search_default, search_no_result, cart_recommender…), items[]
add_to_cart / remove_from_cartpřidání a odebrání (obě cesty: přímo i přes výběr varianty)items[] s deltou
cart_updatedpo každé změně košíku, právě jednou; login = obnovený košík účtucurrency, value, items[] (item_id, item_name, item_variant, item_brand, price, original_price, quantity, item_url, item_image); prázdný košík = items: [], value: 0
begin_checkoutvstup do pokladnyitems[]
purchaseděkovací stránkatransaction_id = eshop_code (string), currency, value, items[]
user_identifiedlogin, každý load přihlášeného (session), registrace, přihlášení k newsletteru, dokončení objednávkyemail, source
Položky sdílí jeden ID prostor: web item_id = zbozi_id (varianta) = ID položky v Heureka feedu = product_id v databázi = external_id v katalogu Meira. Párování napříč systémy je bez převodníků. Nadřazený produkt je katalog_id (web product_id, feed ITEMGROUP_ID).

Web bannery a SDK

  • Banner běží v iframe (srcdoc). SDK samo posílá web_banner_impression, u kliknutí na <a href> web_banner_click s href a textem, u prvku s atributem data-mpt-close web_banner_close, u odeslání formuláře web_banner_submit s poli formuláře.
  • Klikací div s JavaScriptem SDK nezaloguje. Vlastní odstranění iframu neloguje zavření. Odkazy v banneru jsou relativní (/kosik.html), aby stejný kód fungoval na produkci i sandboxu.
  • Podmínky zobrazení: URL, path (jen cesta bez domény), query, referrer, zařízení podle šířky okna (mobil pod 768 px, tablet do 1023 px, desktop od 1024 px), realtime audience. Trigger page_load, exit_intent (jen desktop), scroll, klik. Frekvence per session / den / lifetime.
  • Personalizace: banner si vezme user_id přes window.parent.mpt("get","user_id",cb) a zavolá Profile API endpoint s realtime atributem. Na web nejde žádný osobní údaj, jen anonymní cookie ID.
  • SDK resolvuje členství v audienci přes /profile-api/system-web-banners na sběrné doméně (routing doplnilo Meiro 18. 9.).

Jak ověřit, že měření funguje

  1. View-source obou webů: správný endpoint per web, jediné volání consent s dynamickou hodnotou, žádné ruční page_view, mpt.js začíná IIFE.
  2. Čisté anonymní okno: bez souhlasu eventy s user_id: null a bez mpt_* cookies; po souhlasu cookie mpt_user_id_js existuje a tři refreshe v jednom tabu dají stejné user_id.
  3. DevTools Network, typ beacon, filtr collect: u každého batche kontrolovat status odpovědi (400 = zahozený batch), ne jen payload. Konzole: mpt("get","user_id",cb).
  4. Projít cesty: detail, varianty, kategorie, vyhledávání bez výsledku, košík (přidat, množství, odebrat, vyprázdnit), checkout, registrace, login. Testovací objednávky jen na sandboxu vaprio.bar.
  5. V Meiru: Profiles → Search podle e-mailu testovacího účtu: identifikátory browser + user_id + email, timeline eventů. Surové přijaté requesty (posledních 25 batchů) jsou v detailu zdroje.

Známé vady a otevřené body

CoDopadStav
page_view 2–3× na načtení při AJAX změnách košíkuobjem eventů (licence), na scénáře bez vlivučeká na fix URL dedupu u Meira nebo úpravu webu
DataCloneError z mpt.js v Sentry (formulář recenzí s prvkem name="id" × GA4 form interactions)výjimka propadá do GTM pushe, možná ztráta GA4 form_submitnahlášeno Meiru 17. 9., na webu lze přejmenovat prvek
Proklik ze SmartEmailingu (parametr sid v URL) se na webu nezachytávácookie se ke kontaktu SE lepí jen přes e-mail po přihlášeníotevřené, v2 SDK nemá url_parts
Interní forceLogin z administrace Vapria blokuje Meiro blokinterní uživatelé nevidí bannery ani měřenízáměr
Historické profily s desítkami user_idartefakt z období rotace ID (srpen 2026), nové nepřibývajíbez akce

Databáze Vaprio → CDP

Zdroj pravdy o zákaznících a transakcích je databáze Vapria. Do Meira jde přes CSV exporty, které stahuje a překládá na eventy Cloud App „Vaprio database“. Historie od 1. 1. 2024 byla nahraná jednorázově přes backload zdroj.

CSV exporty

Vaprio generuje jednou za hodinu (kolem :45) pět souborů na exportní endpoint Vapria chráněný basic auth. Přihlašovací údaje jsou v Meiru uložené jako secrets připojené ke Cloud Appu.

SouborObsahKlíč
orders.csvhlavičky objednávek: eshop_code, zákazník, časy, status, storno, kanál, prodejna, měna, součty, doprava, platba, jazyk webuorder_id
order_items.csvpoložky objednávekorder_item_id (globálně unikátní)
uctenky.csvúčtenky z prodejen s věrnostní kartoureceipt_id
uctenky_polozky.csvpoložky účtenek; order_item_id ≠ 0 = položka kryje řádek e-shopové objednávkyreceipt_id
customers.csvzákaznické účty (42 sloupců) + newsletter kontakty bez účtu (jen e-mail a souhlas)customer_id / email
  • Formát: UTF-8 s BOM, oddělovač ;, časy v Europe/Prague bez zóny (Cloud App převádí na UTC včetně letního času). Živé soubory obsahují posledních 24 hodin změn, hlavičky shodné s historickým dumpem.
  • Zápis přes temp + rename, takže Meiro nikdy nečte rozepsaný soubor. Změna účtu bumpuje updated_at jen při registraci, přihlášení a změně newsletteru.
  • Změny stavů objednávek nebumpují updated_at. Výběr změněných řádků i čas eventu proto pracují s maximem ze všech časových razítek řádku.

Hodinovka: Cloud App „Vaprio database“

Jak běží

  • JavaScript pull funkce běžící v Meiru, interval 30 minut (běhy kolem :22 a :52 UTC). Běh v :22 obvykle nepřinese nic nového, běh v :52 uloží celou hodinu.
  • Zpracuje jen řádky změněné za posledních 6 hodin, strop 8 000 eventů a 8,5 MiB na běh (limit platformy 10 000 / 10 MiB, přebytek by se tiše zahodil).
  • Rozpad kolizí stejné sekundy (+1 s), kontrola stáří: nejnovější záznam starší než 3 hodiny = chyba a alert do Slacku.
  • Stav: Sources → Vaprio database (poslední běh, log). Zapnutá od 11. 9. 2026.

Co z toho plyne

  • Objednávka je v Meiru nejdřív ~1 hodinu po vzniku. Webový purchase je realtime a slouží jen k propojení; scénáře stavějí realtime ochranu na webových eventech, transakce jsou druhý pás.
  • Výpadek exportu do 24 hodin se dohraje sám (okno souborů). Delší díra = dohrání přes backload zdroj implementátorem.
  • Kód Cloud Appu a jeho nastavení mění jen implementátor. Referenční kopie kódu je v repozitáři projektu.

Transformace na eventy

orders + order_itemsorder_created (jen neměnná pole, jen s položkami) + order_updated (plný snapshot, čas = max všech razítek)
uctenky + polozkyreceipt_created (jen s položkami; řádky se neagregují, i 0 Kč odměny)
customerscustomer_updated (čas = max z updated_at, last_login, registration_date, opt-in / opt-out data)
Pravidladeterministická konstrukce (žádné aktuální datum), položky seřazené podle order_item_id, prázdné hodnoty "", čísla jako čísla, ID jako stringy

Klíčová rozhodnutí

  • Každá objednávka vznikla na e-shopu (má eshop_code). Pole channel v databázi říká způsob vyřízení (Eshop CZ/SK/EU dopravcem, Prodejna = osobní odběr). V atributech proto channel = původ (Eshop objednávka / Prodejna walk-in) a source = objednávka bez účtenky / s účtenkou / walk-in / web.
  • Trh = měna (CZK → CZ atributy, EUR → SK). Pole lang je jazyk webu, ze kterého zákazník objednal, používá ho atribut Preferred language.
  • Účtenka je finální prodej prodejnové objednávky (částečné odběry, zaokrouhlení). Objednávka a její účtenky se párují přes order_item_id; položky účtenky s order_item_id 0 na téže účtence jsou dokup u pultu. Účtenka bez vazby = walk-in.
  • Tržby vždy z hlavičky databázové objednávky nebo účtenky, nikdy z webového purchase ani z ceníku položek. Slevy a poukazy na úrovni objednávky nejsou v položkách.
  • Stav objednávky = poslední verze order_updated per order_id; při shodě času má přednost order_updated před order_created. Zrušení = is_canceled, sekundárně status.
  • Newsletter kontakty bez účtu jsou stejný event customer_updated bez customer_id, žádný nový event typ.

Datový model eventů (výběr polí)

EventPole
order_createdorder_id, eshop_code, created_at, lang, channel, store_id, store_name, currency, total_incl_vat, total_excl_vat, payment_method, shipping_method, items[] {order_item_id, product_id, product_group_id, product_name, variant_name, quantity, unit_price_incl_vat, unit_price_excl_vat, is_free}, customer_id, order_email (kontaktní e-mail, není identifikátor), email (jen guest), is_guest
order_updatedvše výše + status, status_text, prepared_at, checked_at, shipped_at, delivered_at, is_canceled, canceled_at, updated_at
receipt_createdreceipt_id, created_at, store_id, store_name, currency, total_incl_vat, total_excl_vat, points_earned, items[] {order_item_id, product_id, product_name, variant_name, quantity, ceny}, customer_id, email
customer_updatedcustomer_id, email, jméno, adresa, market (jazyk účtu), birth_date, registration_date, last_login, account_status, age_verified, newsletter_opt_in, newsletter_opt_in_date, newsletter_opt_out_date, newsletter_sources[] {source, subscribed_at}, věrnostní karta, home_store_id, loyalty_points, statistiky nákupů per měna, favorite_store_id, preferred_liquid_type, updated_at, gdpr_flag

Hygiena identifikátorů

Identifier pravidla v Meiru jsou nepodmíněný JSONPath, hygiena se dělá vynecháním klíče z payloadu:

  • customer_id 0 nebo prázdný = guest, klíč se nepošle, is_guest: true.
  • E-mail: lowercase, trim, validace, vyřazení placeholderů a interních domén (dataclub.cz, vaprio.cz, vaprio.sk – prodejny si zakládají účty na firemní adresy a ty by slily prodejní účty do jednoho profilu).
  • Kontaktní e-mail objednávky registrovaného zákazníka jde do order_email (data), protože v části objednávek patří jinému člověku. Guest objednávka a účtenka nesou email jako identifikátor.
  • GDPR výmaz (osobní pole přepsaná na XXX) = jen customer_id + gdpr_flag: true, bez e-mailu a telefonu.
  • Telefon je jen datové pole, lehce normalizovaný, nikdy identifikátor.

Historie (backload)

  • 3.–5. 9. 2026Objednávky a účtenky od 1. 1. 2024 z historického dumpu přes zdroj „Vaprio DB backload“ (stejný transformační kód, dávky po 100 eventech).
  • 7.–8. 9.Zákaznické účty (customer_updated).
  • 11.–12. 9.Zapnutí hodinovky a dohrání mezery mezi dumpem a prvním během.
  • 14. 9.Newsletter kontakty bez účtu; restitch účtů chybně spojených přes kontaktní e-mail objednávky.

Backload zdroj zůstává pro opravy a dohrávky. Píše do něj jen implementátor; atributy počítají s oběma zdroji naráz.

Co v CDP není a proč

  • Guest objednávka bez e-mailu: event bez identifikátoru se na profil nenaváže a platforma ho po pár dnech smaže.
  • Objednávky bez položek (zlomek procenta): order_created se pro ně neemituje, order_updated ano.
  • Anonymní účtenky bez věrnostní karty: export je neobsahuje.
  • Změna jména či adresy bez bumpu updated_at: do CDP se dostane až s dalším přihlášením.

SmartEmailing

SmartEmailing je e-mailový kanál. Kontakty do něj importuje Vaprio z databáze, scénáře z Meira spouští přes trigger-event s payloadem a SmartEmailing e-mail jen vyrenderuje a odešle. O doručitelnosti (blacklist) rozhoduje SmartEmailing.

Kdo co dělá

Vaprio (DB)

Importuje kontakty a objednávky přes SE API v3, plní seznamy podle souhlasu, propisuje odhlášení a nový souhlas. Je zdrojem cf_12 = customer_id.

Meiro

Rozhoduje kdo, kdy a s jakým obsahem dostane scénářový e-mail. Volá SE POST /trigger-event s payloadem. Spouští DOI import. Čte zpět webhooky o kontaktech a událostech.

SmartEmailing

Renderuje šablony (Twig) nad payloadem, odesílá, drží blacklist a statusy kontaktů, posílá DOI e-maily a webhooky do Meira i do DB Vapria.

Seznamy, custom fields, odesílatelé

ObjektIDVýznam
Seznam CZ souhlas6marketingový souhlas CZ, řídí všechny rozesílky a automatizace CZ
Seznam SK souhlas12marketingový souhlas SK
Seznamy „všechny kontakty“9 (CZ), 15 (SK)v praxi všechny registrace včetně kontaktů bez objednávky a bez souhlasu; zákaznická báze se bere z databáze v Meiru, ne z těchto seznamů
Seznamy DOI32 (CZ), 35 (SK)„Potvrdil Meiro DOI“ – SE sem zapíše kontakt po prokliku DOI, automatizace ho po 7 dnech odebere (status removed)
DOI e-maily134 (CZ), 137 (SK)zatím testovací verze, finální dodá Vaprio
Custom field „DOI Confirmed“22CZ / SK, plní automatizace po prokliku
Custom field „Meiro source banner“25ID web banneru z Engage, ze kterého přišla žádost o DOI
Custom field customer_idcf_12customer_id Vapria, jen v payloadu SE eventů (není identifikátor v Meiru)
Odesílateléověřené adresy na subdoméně z.vaprio.cz / z.vaprio.sk, jméno Vaprio
Pravidla kontaktů: každý kontakt je aspoň v jednom seznamu; odhlášený zůstává v 9/15 a nesmí zpět do 6/12; blacklist je globální (CZ i SK), nadřazený seznamům a běžný import ho nezruší; GDPR výmaz = smazat kontakt.

SE API v3 – používané flows

Import kontaktů (Vaprio)

  • POST /import, Basic Auth, max 500 kontaktů na request, klíč emailaddress.
  • Objednávka / běžný update: update: true, preserve_unsubscribed: true, skip_invalid_emails: true, seznamy jen aditivně (confirmed).
  • Odhlášení: blacklisted: 1 (SE odhlásí ve všech seznamech).
  • Nový výslovný souhlas / re-opt-in: preserve_unsubscribed: false + blacklisted: 0 + seznam 6 nebo 12 confirmed. Jen s doloženým souhlasem.
  • Objednávky přes API přepisují webové, klíč eshop_code + eshop_name.

Volání z Meira

  • POST /trigger-event {emailaddress, name, payload} – spustí uzel SE automatizace s vlastním triggerem. Názvy triggerů jen s pomlčkami (meiro-abandoned-cart-cz-30), podtržítka SE nezpracuje.
  • POST /import s double_opt_in_settings – SE pošle jen DOI e-mail, kontakt a seznam zapíše až po prokliku. Vyžaduje sender_credentials; silence_period 1 den brání opakovanému DOI.
  • Všechny destinace volající trigger-event mají od 22. 9. retry: 3 pokusy (1 s, 3 s) jen při HTTP 5xx nebo chybě spojení; 4xx se neopakuje.

Automatizace ve SmartEmailingu

AutomatizaceTriggerCo děláStav
MEIRO – DOI flow to CDPpřidání do seznamu 32 (CZ) / 35 (SK) = proklik DOIwebhook subscription_confirmed do Meira (subscribe endpoint, s tokenem) → webhook newsletter_subscribe do DB Vapria (souhlas, seznamy 6/12) → cf 22 = CZ/SK → po 7 dnech odebrání z 32/35Běží od 16. 9.
Opuštěný košík CZ & SKtrigger-event meiro-abandoned-cart-cz-30, …-cz-120, …-cz-2 (nové uzly z Meira); stará SK větev postarurenderuje košíkový e-mail z payloadu (hero produkt, položky, slevy); stará CZ větev vypnuta 22. 9.Běží
Shopping intention CZtrigger-event meiro-shopping-intention-czzatím jen sbírá payloady, e-mail se stavíDry-run
Welcome selection CZ / SKtrigger-event meiro-welcome-selection-cz / -ske-mail s výběrem na míru po potvrzení DOI; šablona se stavíRozpracováno
Přestavba uzlu v SE automatizaci změní jeho node.id. Na node.id stojí goals v Meiru (otevření a kliky per varianta), po každé změně uzlu je potřeba je aktualizovat. Suppression v journeys naopak jede přes automation_id, přejmenování ji nerozbije.

Destinace z Meira do SmartEmailingu

DestinaceTypCo posíláUI
SE Abandoned cart: Vaprio CZ / SKprofile destination (trigger-event)payload košíku právě jedné adrese se souhlasem; exportuje consent, košík, zakoupené produkty, počet transakcíCZ SK
SE Shopping intention: Vaprio CZprofile destinationprohlížené produkty s hero, jen položky aktuálně v kataloguotevřít
SE Welcome selection: Vaprio CZ / SKprofile destinationodpovědi z welcome banneru, doporučení z katalogu, prohlížené produkty; jen profily s potvrzeným DOICZ SK
SmartEmailing newsletterprofile destination (import)segment → SE seznam, ručně nebo plánovaně z audienceotevřít
SmartEmailing DOIevent destination (import s DOI)DOI e-mail na každý newsletter_subscription_requested; trh určuje pipe (CZ 134/32, SK 137/35)Pipes

Konvence: jedna destinace na scénář a trh, trh je v kódu destinace zapečený. Exportované atributy se do funkce předávají jen vyjmenované (mód Custom).

Payload a šablony

Košíkový a SI payload

  • orders_count, hero_product, items (max 5, řazené podle hodnoty), souhrn košíku, currency.
  • Každá položka i hero: název, obrázek, URL, price, original_price, discount, discount_pct z reálného pole datalayeru (u nezlevněných rovno ceně).
  • Hero kaskáda košíku: opakovaný nákup → shoda značky → nejvyšší hodnota. U shopping intention rozhoduje počet zobrazení, pak stejná kaskáda; hero jen z produktů aktuálně v katalogu.
  • Jména se neposílají, oslovení řeší SE z kontaktu.

Přístup v SE šabloně (Twig)

Payload je pod metadata.event.attributes.*, slevový blok podmíněný discount > 0:

{% set p = metadata.event.attributes %}
{{ p.hero_product.name }} – {{ p.hero_product.price }} {{ p.currency }}
{% for it in p.items %}
  {{ it.name }} {% if it.discount > 0 %}(-{{ it.discount_pct }} %){% endif %}
{% endfor %}

Otevřené body

  • Význam seznamů 9/15: přegenerovat na kupující, nebo oficiálně předefinovat na „všechny kontakty“.
  • Souhlas per trh (souhlas CZ + objednávka SK): dnes je blacklist globální, seznamy oddělené.
  • Změna e-mailu v účtu vytvoří v SE nový kontakt, starý zůstává.
  • Finální DOI e-maily a welcome šablona od Vapria; zápis ID banneru do cf 25 zatím neověřen reálným kontaktem.
  • Výhled: souhlas jako eventový stream přímo v Meiru (subscribe endpointy + odhlášení), pak SE přestane být zdrojem pravdy o souhlasu.

Identita a stitching

Jak se eventy z webu, databáze a SmartEmailingu skládají do profilu jednoho člověka. Nejcitlivější část CDP: špatné pravidlo spojí cizí lidi a oprava (restitch) je drahá. Identifier typy, limity a pravidla mění jen implementátor.

Identifier typy a kde vznikají

TypLimit na profilPrioritaOdkud (JSONPath na event typu)
customer_id210 (vítěz při konfliktu)DB eventy: $.customer_id (objednávky, účtenky, účty)
email4DB: $.email (účty, účtenky, guest objednávky); web: $.email, $.payload.email (user_identified, web_banner_submit); SmartEmailing: $.emailaddress, $.contact.emailaddress; subscribe endpointy: $.email. Meiro hodnoty trimuje a převádí na malá písmena.
user_idweb: $.user_id = first-party cookie Meira
browserweb: $.device_id
SmartEmailing IDSE email_opened / email_clicked: $.sid
phone, email_message_id, mobile_user_id, push tokeny, sms_message_idšablonová pravidla webu a kanálů; telefon se nikdy neplní (sdílená čísla, nekonzistentní formáty)

Jak se profil skládá

Účet Vapriacustomer_id ↔ e-mail účtu (customer_updated) ↔ objednávky (customer_id) ↔ účtenky (customer_id + e-mail účtenky)
Profiljeden člověk: identifikátory, všechny eventy, atributy
Web cookieuser_id / browser se k účtu přilepí přes user_identified.email (login, každý load přihlášeného, registrace, newsletter, objednávka) nebo přes e-mail v odeslaném banneru
SmartEmailingpřes e-mail kontaktu; otevření a kliky navíc přes SmartEmailing ID
  • Webový purchase e-mail nepotřebuje, váže se přes user_id; e-mail dodá souběžný user_identified z děkovací stránky.
  • Guest objednávka = jen e-mail. Newsletter kontakt bez účtu = jen e-mail. GDPR anonymizovaný účet = jen customer_id.
  • Dva účty Vapria se stejným e-mailem účtu se legitimně spojí do jednoho profilu (limit 2 customer_id).

Pravidla a rozhodnutí

Kontaktní e-mail objednávky není identifikátor

U registrovaného zákazníka jde e-mail z objednávky do pole order_email. V části objednávek patří jinému člověku (partner, rodina, nákup pro známé) a původní pravidlo spojovalo cizí účty. 14. 9. 2026 opraveno restitchem; atributy pracující s e-maily toto pole ignorují.

Účtenka e-mail jako identifikátor má

Účtenky někdy přijdou jen s e-mailem, bez něj by se nenavázaly. Důsledek: osobní odběr cizí objednávky na kartu jiného účtu spojí dva účty. Vědomě přijaté, malý počet případů; pravidlo lze změnit a zopakovat restitch.

Telefon nikdy

Sdílená čísla v rodinách a garbage formáty by způsobily mega-merge profilů. Telefon zůstává datové pole v customer_updated.

Interní domény blokované

E-maily na dataclub.cz, vaprio.cz a vaprio.sk se nikdy nestanou identifikátorem (účty prodejen na firemní adresy). Platí v Cloud Appu, backloadu, tracking rules i subscribe endpointech.

Limity a přetečení

  • Třetí customer_id nebo pátý e-mail se k profilu nepřidá. Event se uloží na profil podle zbývajících identifikátorů (může skončit na jiném profilu) a hodnota zůstane jen v payloadu.
  • Profil s příliš mnoha identifikátory Meiro dá do karantény (příznak quarantined v detailu profilu).
  • Event bez jediného identifikátoru se neuloží k profilu a platforma ho po pár dnech smaže.
  • Atribut Number of Emails hlídá kvalitu identity: počet různých e-mailů na profilu bez kontaktních e-mailů objednávek.

Kde to vidět v Meiru

V detailu profilu: záložka Identity ukazuje identifikátory a historii spojení (merge, přidání identifikátoru).

Restitch (oprava chybně spojených profilů)

Restitch (reprocess profilů) přehraje uložené eventy vybraných profilů s aktuálními pravidly. Staré profily zaniknou, výsledkem může být víc profilů nebo sloučení s existujícím. Nevratné, jen implementátor, jeden běh najednou. Ověřovat až po vyprázdnění fronty identityResolution.

Provedeno 14. 9. 2026 pro účty spojené přes kontaktní e-mail objednávky. Postup: dočasně odebrat pravidlo z event typů, restitch, vrátit pravidlo, guest objednávky poslat znovu.

Marketingový souhlas a DOI

Souhlas se počítá ze dvou zdrojů (databáze Vapria a SmartEmailing) do jednoho atributu. Nová přihlášení z webu jdou přes double opt-in řetězec Meiro → SmartEmailing → Meiro a databáze.

Definice souhlasu

Databáze Vaprio

Souhlas = newsletter_opt_in = 1 a zároveň prázdné newsletter_opt_out_date. Odhlášení (v účtu i z SE webhooku) nastaví opt-out datum a vypne flag; znovupřihlášení opt-out smaže. newsletter_source říká odkud souhlas přišel (prázdné = neuvedeno). Platí i pro newsletter kontakty bez účtu.

SmartEmailing

Souhlas = kontakt confirmed v seznamu 6 (CZ) nebo 12 (SK) a není na blacklistu. SmartEmailing dál rozhoduje o doručitelnosti; databázový souhlas je podklad pro segmentaci, ne povolení k odeslání.

Atribut Email marketing consent

Email marketing consent (email_marketing_consent_1) má řádek pro každý e-mail profilu (bez kontaktních e-mailů objednávek): poslední stav z databáze (customer_updated) a poslední stav ze SmartEmailingu (contact_created / updated, unsubscribed_contact).

Známé zdrojeVýsledek consent_status
DB i SEsub jen když oba říkají souhlas, jinak unsub
jen jeden zdrojpodle něj
žádnýunsub

Dimenze: email, consent_status (sub / unsub), newsletter_sources. Doplňkový atribut Number of emails with marketing consent = počet e-mailů profilu se stavem sub.

Použití v segmentech a scénářích

  • Podmínka: Email marketing consent → consent_status has any of sub.
  • Destinace do SmartEmailingu posílají e-mail právě jedné adrese profilu se stavem sub; profil s nulou nebo více adresami sub scénář přeskočí (obsah košíku je citlivý).
  • anonymized_account = 1 (GDPR výmaz) v atributu Personal information není souhlas; takové profily se nikdy neoslovují.
  • Cookie souhlas na webu a e-mailový souhlas jsou dvě různé věci. Bannery filtruje cookie souhlas přes SDK, e-maily filtruje consent_status.

DOI flow (welcome flow)

  1. Banner na webu (welcome flow, 4 kroky) po validaci pošle POST https://me.vaprio.cz/collect/subscribe-endpoint-cz (SK -sk) s {event: "subscription_request", email, source, custom_params}. Bez tokenu, protože HTML banneru je veřejné. Teprve po úspěšném uložení SDK odešle web_banner_submit.
  2. Subscribe endpoint uloží newsletter_subscription_requested (identifikátor e-mail → cookie profil se spojí s profilem účtu nebo SE kontaktu).
  3. Pipe per trh pošle každý takový event do event destination SmartEmailing DOI: SE POST /import s double_opt_in_settings (DOI e-mail 134 / 137, seznam 32 / 35, ověřený odesílatel, silence period 1 den, ID banneru do cf 25). SE pošle jen DOI e-mail.
  4. Proklik DOI: SE zapíše kontakt do seznamu 32 / 35 a přesměruje na děkovací stránku Vapria (/email-potvrzeni.html, SK /email-potvrdenie.html).
  5. SE automatizace „MEIRO – DOI flow to CDP“: webhook subscription_confirmed do Meira (s tokenem) → newsletter_subscription_confirmed; webhook do DB Vapria → souhlas v databázi a seznamy 6 / 12; cf 22 = CZ / SK; po 7 dnech odebrání ze seznamu 32 / 35.
  6. Do CDP se souhlas propíše z databáze (customer_updated přes hodinovku, do ~1 h) a ze SmartEmailingu (contact_updated). Event newsletter_subscription_confirmed je spouštěč pro welcome e-mail.
Na newsletter_subscription_requested chodí jen to, co má dostat DOI. Přihlášení, které DOI nepotřebuje (backend Vapria), se posílá rovnou jako subscription_confirmed s tokenem.

Objekty DOI v instanci

ObjektRoleUI
Subscribe endpoint CZ / SKevent stream, transform v8: request bez tokenu, confirmed s tokenem; blokace interních domén; event_time = čas přijetíCZ SK
Pipes „Subscribe endpoint CZ / SK – SmartEmailing DOI“propouští každý requested event s použitelným e-mailem, nese parametry trhu (DOI e-mail, seznam, odesílatel, děkovací stránka)CZ SK
Event destination „SmartEmailing DOI“společná pro oba trhy, SE import s DOI; chyba SE = delivery failed a alertDestinations
SE automatizace „MEIRO – DOI flow to CDP“potvrzení zpět do Meira a do databázeSmartEmailing → Automatizace
Atribut Web banner submitted on Vaprio.CZ / .SKřádek per odeslání banneru: odpovědi, odchodová stránka, čas žádosti o DOI a čas potvrzení (prázdné = nepotvrdil)CZ SK

Ověřený průběh (17. 9.): odeslání banneru → DOI proklik za sekundy → kontakt v SE seznamu 6 z databáze do 5 minut → customer_updated se souhlasem v Meiru do 45 minut.

Otevřené body

  • Finální DOI e-maily (134 / 137 jsou testovací) a text děkovací stránky dodá Vaprio.
  • Welcome e-mail po potvrzení: journey v Meiru a SE automatizace se šablonou (viz Use-casy).
  • Cílový stav: souhlas jako eventový stream v Meiru včetně odhlášení, SmartEmailing pak přestane být zdrojem pravdy o souhlasu.

Atributy

Atribut je SQL dotaz nad eventy jednoho profilu. Výsledek je jeden nebo více řádků s dimenzemi. Přepočítává se při refreshi profilu, tedy když profilu přijde nový event. Seznam všech: Attributes.

Atributy níže označené jako implementátor nesou scénáře, destinace, dashboardy i hlídky. Neměnit bez konzultace s Data Clubem. Změna SQL neprovede přepočet uložených hodnot a dimenze nejdou upravit; změna s jiným výsledkem = nový atribut pod novým ID a přepojení reportů.

Transakce (databáze)

AtributÚčelLogikaDimenze
All transactions made on Vaprio.CZ / .SK
implementátor
řádek = jedna transakce (objednávka nebo walk-in účtenka); základ RFM, post-purchase a suppressionunion objednávek z obou DB zdrojů → poslední verze per order_id; účtenky napárované přes order_item_id (částka z účtenek včetně dokupu), walk-in samostatně; web purchase bez DB protějšku dočasně jako source = web; trh podle měnyorder_id, source, status_text, channel, store_id, store_name, created_date, last_updated, is_canceled, shipped_at, delivered_at, receipt_date, currency, total_price, items_count, shipping_method, points_earned, receipt_ids
All products purchased on Vaprio.CZ / .SK
implementátor
řádek = zakoupená položka obohacená katalogem (kategorie, příchuť, nikotin)položky objednávek (poslední verze) + účtenek + web purchase; metadata z katalogu produktů; realtime ochrana scénářů proti odeslání po nákupuitem_id, product_name, variant, manufacturer, category, flavor_type, nicotine_strength, nicotine_type, cooling, image_url, url, order_id, purchase_date, status_text, is_canceled, source, channel, quantity, unit_price, currency
Number of completed transactions CZ / SKpočet vyřízených transakcí bez zrušenýchz téže logiky jako All transactionscompleted_transactions
Preferred languagejazyk komunikacenejčastější lang z posledních 3 objednávek, při shodě poslední; profil bez objednávky hodnotu nemápreferred_language
Personal informationúdaje účtu pro personalizaci1 řádek na účet z poslední verze customer_updated; GDPR účty bez osobních polí s anonymized_account = 1; kontakty bez účtu se nezobrazujícustomer_id, email, first_name, last_name, phone, city, zip, registration_date, birth_date, loyalty_points, favorite_store_id, account_status, account_language, first_purchase_date, last_login, anonymized_account

Košík a prohlížení (web)

AtributÚčelLogika
All products in cart on Vaprio.CZ / .SK implementátoraktuální obsah košíku pro opuštěný košík (e-mail)poslední snapshot cart_updated; nákup (purchase) košík vyprázdní; položky s original_price, slevou, katalogovými metadaty; last_cart_update pro podmínky stáří; řádky samy nemizí, TTL 60 dní
All products in cart + hero on Vaprio.CZdata pro košíkový web banner přes Profile APIstejný košík + is_hero podle kaskády opakovaný nákup → značka → nejvyšší hodnota; bez důvodu výběru (privacy)
All viewed products + hero on Vaprio.CZshopping intention (e-mail i banner)max 10 produktů za 30 dní z view_item: počet zobrazení, první / poslední zobrazení, cena a sleva z posledního zobrazení, živá katalogová cena a dostupnost (in_catalog), is_hero (počet zobrazení → opakovaný nákup → značka → cena)
Last 10 viewed products CZ / SK, Most viewed item CZ / SKšablonové atributy Meiraposledních 10 zobrazených produktů (základ welcome selection), nejčastěji zobrazený produkt

E-mail a souhlas

AtributÚčelLogika
Email marketing consent implementátorsouhlas per e-mail profiluDB + SE, sub jen když oba souhlasí (kapitola Souhlas); dimenze email, consent_status, newsletter_sources
Number of emails with marketing consentkolik adres profilu má souhlascount sub
Number of Emailskontrola kvality identitypočet různých e-mailů profilu bez kontaktních e-mailů objednávek
All emails received_v2 implementátorsuppression košíkových a SI e-mailů, goalsřádek per email_sent: kampaň, automation_id, node_id, sid, campaign_type, send_at, utm_content; suppression jede přes automation_id

Web bannery

AtributÚčelLogika
All web banner interactions implementátorevent log bannerů: základ dashboardu Web banners, segmentů, hlídekřádek = imprese / klik / zavření / odeslání, CZ + SK s dimenzí market, sandbox mimo, bez osobních údajů; device, page_path, visitor_status (anonym / identifikovaný v okamžiku události), minutes_since_identified; strop 500 řádků; v podmínkách vždy banner_id
All web banners seen, All web banners clickedčitelnější podmínky v segment builderu a destinacíchjen imprese, resp. jen kliky
Web banner click attributionpost-click atribuce (není inkrement)řádek = klik + první následná nestornovaná objednávka do 30 dní, minutes_to_order; okno (24 h, 7 d) se volí až filtrem v reportu
Web banner submitted on Vaprio.CZ / .SKodpovědi z welcome flow + stav DOIřádek per odeslání: banner, čas, e-mail, experience, flavor, budget, odchodová stránka, doi_requested_at, doi_confirmed_at

Experimenty a provoz

AtributÚčelLogika
Control Groups & Experiment Metrics kanonickýkontrolní skupiny a metriky experimentůsingle-row: bucket_email, bucket_cookie (hash 0–99), nákupy a tržby 30 / 90 dní celkem i per trh, kvalifikační příznaky scénářů s trhem kvalifikace; hash blok a salt se nikdy nemění
Stored events by typelicence: uložené eventy per zdroj a typcount eventů profilu per source / event_type; dashboard Licence
Goal · … · Summary / Daily bucketsspravované atributy goalsMeiro si je zakládá ke každému goalu (2 na goal), jsou read-only

Šablonové atributy Meira

Web: Number of visits CZ / SK, All viewed web pages (timeline), All user_ids, All Google / Facebook IDs. SmartEmailing: All emails opened / clicked / received (email_sent_history), Last campaign received / opened / clicked, Number of emails received / opened / clicked, Date of last …, All email interactions, All email unsubscribes, SmartEmailing subscription status, SmartEmailing Email engagement, First / Last name, All emails, Number of events from SmartEmailing. Vlastník je Meiro nebo Vaprio, na scénářích Data Clubu nestojí (kromě Last 10 viewed products ve welcome selection).

Pravidla platformy (ověřená)

  • Max 20 dimenzí; dimenze po založení nelze měnit. Nový atribut se stejným názvem dostane ID s příponou _1, protože původní zůstává v koši.
  • SQL bez ;, CTE se nesmí jmenovat rows. Verzované eventy (order_updated) se v SQL vždy redukují na poslední verzi.
  • Hodnota se přepočítá až při refreshi profilu. Nový atribut se plní postupně (backfill desítky minut až hodiny), neaktivní profil drží starou hodnotu. Podmínky stáří v segmentech proto přes časové dimenze (last_cart_update), ne přes „řádky zmizí“.
  • Test bez čekání na backfill: v UI Attributes → atribut → Test (SQL nad konkrétním profilem) a validace SQL při ukládání.
  • Atributy nesou fakta s časovými dimenzemi, agregace patří do reportů. Předpočítaná okna v atributu zastarávají (poučení z odstraněného web_banner_stats).
  • Realtime ochrana scénářů stojí na webových eventech (košík, purchase); atributy z databáze se plní se zpožděním hodinovky a jsou vždy druhý pás.

Postup pro nový atribut

  1. Účel a dimenze zapsat; zkontrolovat, zda to neumí existující atribut nebo report.
  2. SQL podle vzorů, preview / test na 5–10 profilech různých typů (účet s objednávkami, walk-in, guest, GDPR, profil bez účtu) a ruční porovnání s eventy.
  3. Schválení: předložit název, SQL, dimenze, single / multi-row. Před založením otázka „Chcete se poradit s implementátorem?“.
  4. Založit a uložit definici do repozitáře projektu, zapsat kdo, co, kdy.

Use-casy

Každý scénář má stejný půdorys: spouštěč, kdo je způsobilý (souhlas, kontrolní skupina, suppression), co odchází a kudy, jak se měří. Stav je označen u každého scénáře; u rozpracovaných je jen popis a co zbývá.

Běží zákazníci dostávají · Dry-run journey běží, ale SE automatizace nic neposílá · Rozpracováno část nasazená, část se staví · Plán jen záměr
Společné pro všechny scénáře: e-mail dostane právě jedna adresa profilu se souhlasem; kontrolní skupina scénáře a globální holdout jsou vyloučeny už v journey (kapitola Měření); Meiro rozhoduje, SmartEmailing renderuje; každý scénář má vlastní destinaci per trh.

Opuštěný košík – e-mail

CZBěžíostrý provoz od 22. 9. 2026
Triggercart_updated (neprázdný košík)
Bucket gatevarianta timingu podle bucket_email; kontrolka 5–24, holdout 0–4 a profil bez bucketu končí
Konec návštěvysmyčka Wait For Event na page_view: 30 min (varianta A) nebo 120 min (B) bez aktivity
Eligibilityconsent sub · žádný nákup za 24 h · žádný košíkový e-mail za 7 dní (automation_id)
SE triggermeiro-abandoned-cart-cz-30 / -120 s payloadem košíku

Druhý krok (od 21. 9.)

Po odeslání čeká journey 24 h na purchase. Když nákup nepřijde a košík je stále neprázdný (realtime atribut) a souhlas trvá, odchází druhý e-mail přes trigger meiro-abandoned-cart-cz-2 (společný pro obě varianty). Záměrně bez 7denní suppression, ta by druhý krok vždy zablokovala.

Timing test

Varianta A (30 min) = buckety 25–44 a 65–82, varianta B (120 min) = 45–64 a 83–99. Každá varianta má polovinu Main group i polovinu cizích kontrolek, vyhodnocení jen nad průnikem s Main (65–82 vs 83–99). Otevření a kliky se čtou po ~2 týdnech, nákupy rozhodují za 6–8 týdnů.

Objekty
Journey wait 30 Journey wait 120 Destinace SE Abandoned cart CZ Dry-run journey (pauznutá)
Obsah
hero produkt (opakovaný nákup → značka → hodnota), max 5 položek podle hodnoty, ceny se slevou, počet dosavadních objednávek; SE šablona v automatizaci „Opuštěný košík CZ & SK“
Měření
goals Web purchase CZ (primární), Abandoned cart email opened / clicked pro wait 30, wait 120 a krok 2 (filtr na node.id uzlů SE); Control vs Main v dashboardu Experiments; hlídka WATCHDOG košíkový e-mail v kontrolce musí být 0
SK
slovenská větev jede postaru ve SmartEmailingu; klon Meiro stavby po odladění CZ (destinace SE Abandoned cart SK už existuje)

Opuštěný košík – personalizovaný web banner

CZBěžídesktop od 18. 9., mobil A/B od 21. 9. 2026

Pro košík je většina způsobilých návštěvníků anonymní, na které e-mail nedosáhne. Banner na webu je proto větší polovina scénáře. Architektura je první použití Profile API v týmu:

Realtime atributAll products in cart + hero (položky košíku, hero produkt)
Profile APIendpoint cart-banner-cz: jen identifikátor user_id, jen tento atribut
Banner (iframe)vezme user_id ze SDK, načte data, vykreslí hero + „a další X položek“, klik vede do košíku; bez dat generická karta
Kdy se zobrazí
audience „Abandoned cart banner CZ“: košík neprázdný a poslední změna starší než 1 h, bucket 25–99 (kontrolka a holdout mimo), bez nákupu za 24 h; path pravidlo vylučuje košík, objednávku, děkovačku, platbu a reklamace; zařízení desktop, resp. mobil; 1 zobrazení za den
Mobilní A/B
varianta A (řádek se šipkou) pro sudé buckety, B (plné CTA „Zpátky do košíku“) pro liché; liší se jen formou výzvy; vyhodnocení CTR z event logu po ~2 týdnech
Objekty
Banner desktop Mobil A Mobil B Audience desktop Profile API endpoint
Měření
dashboard Web banners (imprese, kliky, zavření, CTR, anonym vs identifikovaný, stránky, post-click atribuce); přínos = Experiments (kontrolka vs Main); hlídka WATCHDOG košík banner v kontrolce
Poznámky
na web nejde žádný osobní údaj, jen anonymní cookie ID; cookie souhlas filtruje bannery automaticky (bez user_id se audience nevyhodnotí); frequency cap košíkového banneru zůstává 1×/den, SI banner (viz níže) má 3×/den

Welcome flow „výběr na míru“ + DOI

CZSKRozpracovánoDOI řetězec od 15. 9. 2026

Pop-up se 3 otázkami (zkušenost s vapováním, oblíbené chutě max 2, rozpočet), e-mailem a povinnými checkboxy 18+ a marketingový souhlas. Po odeslání odchází DOI e-mail; po potvrzení má přijít welcome e-mail s doporučením produktů podle odpovědí, prohlíženými produkty a nejbližší prodejnou.

ČástStavPoznámka
DOI řetězec (banner → subscribe endpoint → SE DOI → potvrzení do Meira a DB)Běžíkapitola Souhlas a DOI
Bannery v2 CZ desktop / mobilTest na produkcizapnuté na Vaprio.cz, ale zobrazí se jen s testovacím parametrem v URL; čeká na CZ odkaz na zásady ochrany OÚ, cookie souhlas na webu a rozhodnutí o triggeru (exit intent je jen desktop)
Bannery v2 SKVypnutéčeká na schválení SK textů
Atribut Web banner submitted CZ / SKNasazenodpovědi, odchodová stránka, časy DOI
Destinace SE Welcome selection CZ / SKNasazenahlavní produkt ze „Setů e-cigaret“ v cenovém pásmu, 3 e-liquidy podle chutí, prohlížené produkty, prodejna z účtu; trigger meiro-welcome-selection-cz / -sk
Journey na newsletter_subscription_confirmedStaví seeligibility s bucket guardem, krok destinace
SE automatizace + šablona welcome e-mailu, finální DOI e-mailyVapriošablona nad payloadem destinace
Nejbližší prodejna, popisky produktů, logika doporučení z nového feeduČeká na podkladyfeed prodejen s GPS, nový produktový feed (typ zařízení, bestsellery)

Shopping intention – e-mail a banner

CZDry-runBanner rozpracovándry-run od 21. 9. 2026

Kvalifikace: zobrazení detailu produktu (view_item) bez nákupu. Kdo má košík, patří košíkovému scénáři. Kontrolní pásmo 25–34, timing fixně 60 minut po konci návštěvy, trigger meiro-shopping-intention-cz.

Triggerview_item, cooldown 1 den na profil
Konec návštěvy60 min bez page_view
Suppressionkošík neprázdný · nákup za 24 h (web i transakce) · consent sub · v produkci bucket gate přes bucket_email (5–24 a 35–99)
SE triggerhero + max 5 prohlížených produktů, jen položky aktuálně v katalogu s živou cenou
ČástStavPoznámka
Atribut All viewed products + hero CZNasazenhero kaskáda: počet zobrazení → opakovaný nákup → značka → cena
Destinace SE Shopping intention CZNasazenačte pořadí a hero z atributu, nereplikuje logiku
Journey „Shopping intention CZ (Testing)“Dry-runSE automatizace sbírá payloady pro šablonu, nic neodesílá
Journey „Shopping intention CZ production“Draftpřed spuštěním: vypnout dry-run, doplnit suppression SI e-mailu −7 d (automation_id), goals podle node.id, éra do metodiky
Web banner SI (prohlížené produkty)RozpracovánoProfile API endpoint viewed-banner-cz, audience a bannery desktop/mobil hotové (frequency cap 3×/den); zapnutí čeká na vizuální test na produkci

Segmenty do SmartEmailingu (plošné rozesílky)

CZSKK dispozici

Libovolná realtime audience v Engage se přes profile destination „SmartEmailing newsletter“ pošle do SE seznamu, ručně nebo plánovaně. Plošné newslettery a transakční maily dostávají všechna pásma včetně kontrolek a holdoutu; kontrolní skupiny se týkají jen scénářů.

Vzory podmínek
nakupující: All transactions made → order_id has a value, status_text Vyřízeno, RFM přes created_date a total_price; jazyk: Preferred language; souhlas: consent_status = sub; vždy vyloučit anonymized_account = 1
Objekty
Audiences Destinace SmartEmailing newsletter

Plán

Opuštěný košík SK

Plán

Klon CZ journeys a bannerů po odladění CZ; destinace SE Abandoned cart SK existuje. Přepnutí stejnou sekvencí: spuštění Meiro větve, vypnutí staré SE větve.

Replenishment

Plán

Připomenutí dokupu spotřebního zboží (liquidy, cartridge) podle historie nákupů a katalogu. Kontrolní pásmo 35–44 vyhrazeno, reporty v dashboardu Experiments připravené.

Onboarding

Plán

Série po první objednávce (trigger order_created, stav z atributů, nikdy order_updated). Kontrolní pásmo 45–64 vyhrazeno.

Měření a reporting

Přínos scénářů se měří kontrolními skupinami, ne atribucí. Každý profil má trvalé číslo 0–99 a podle něj patří do pásma; scénář se vyhodnocuje jako kontrolka scénáře proti Main group, která dostává vše.

Jak fungují kontrolní skupiny

Bucket 0–99

  • Hash (md5 se stálým saltem) z klíče profilu, prvních 8 hex znaků mod 100. Není to uložený stav, ale výpočet z eventů profilu, takže vyjde vždy stejně a nic se nezapisuje.
  • Identifikovaný profil → bucket_email z nejstaršího identitního e-mailu (účet, user_identified, SE kontakt, guest objednávka; ne kontaktní e-mail objednávky), fallback nejstarší customer_id.
  • Anonym → bucket_cookie z nejstaršího user_id.
  • Člověk s více e-maily se počítá jednou. Kontrolní profil se nedostane do žádného segmentu, takže se nikam neexportuje.

Vyhodnocení

  • O skupině je rozhodnuto předem; členem experimentu se profil stává kvalifikačním eventem (měl košík, prohlížel bez nákupu…).
  • Intention-to-treat: kvalifikovaní vs. kvalifikovaní, doručení je jen diagnostika.
  • Hlavní metriky: podíl bez nákupu (nižší = lepší) a průměrná tržba na kvalifikovaného, Control vs Main, per trh. Cizí kontrolky se do srovnání nepočítají.
  • Nový scénář = přidělit pásmo a zapsat éru startu do metodiky. Salt ani klíč se nikdy nemění, změna by přemíchala skupiny.

Mapa pásem

BucketPodílRole
0–45 %globální holdout – žádný scénář (plošné newslettery a transakční maily ano)
5–2420 %kontrolka opuštěný košík
25–3410 %kontrolka shopping intention
35–4410 %kontrolka replenishment
45–6420 %kontrolka onboarding
65–9935 %Main group – dostává vše

UI testy (varianty bannerů, timing) se řežou kolmo: sudé vs. liché buckety, nebo stratifikovaný výčet bucketů tak, aby každá varianta měla polovinu Main i polovinu cizích kontrolek. Experimenty se pak nealiasují.

Dashboard Experiments

Reporting → Experiments (18 reportů nad atributem Control Groups & Experiment Metrics), pro každý scénář stejná sada:

  • dvě rate karty „without purchase“ Control group vs Main group za 30 dní (replenishment 90 dní),
  • průměrná tržba na kvalifikovaného per trh (bar), mix trhů (donut), tabulka Control vs Main per trh,
  • plus Onboarding (první nákup), Global holdout a Attribute coverage (kolik profilů má atribut napočítaný).

Trh = měna, EUR přepočet do CZK pevným kurzem jen pro součty. Limit platformy: 20 reportů na dashboard.

Goals

GoalRežimZdroj událostiK čemu
Web purchase CZ / SKkaždý eventpurchase z Vaprio.cz / .sk, hodnota $.valueprimární goal košíkových journeys, srovnání timing variant
First web purchase CZ / SKprvní na profilpurchasenováčci
Kliknutí v e-mailukaždý eventSE email_clickedobecné e-mailové kliky
Abandoned cart email opened / clicked – wait 30, wait 120, krok 2každý eventSE email_opened / email_clicked s filtrem $.node.id na konkrétní uzel SE automatizaceotevření a kliky per varianta košíkového e-mailu
Goals počítají syrové eventy bez dedupu a každý event typ smí být v goalu jen jednou. Přestavba uzlu v SE změní node.id, goal pak tiše počítá nuly. Goal z databázových objednávek by musel být „první na profil“ (order_updated má více verzí), zatím nezaložen. Goals

Ostatní dashboardy

DashboardCo ukazujeZdroj
Web bannersevent log per banner (imprese, kliky, zavření, odeslání, zasažené profily, CTR, submit rate), anonym vs identifikovaný, stránky zobrazení; post-click atribuce (objednávky do 24 h a 7 d po kliku) a distribuce času klik → objednávka. Atribuce není inkrement, přínos říká Experiments.all_web_banner_interactions, web_banner_click_attribution
Licence – uložené eventyuložené eventy celkem, podle zdroje a typu, pokrytí profilů atributem; hlídání licenčního objemustored_events_by_type
Emailing performancedostali / otevřeli / klikli, engagement úrovně, kliky podle rozesílky, CTOR, odhlášeníšablonové SE atributy
Pracovní dashboard Vapriaprázdný, pro vlastní reporty marketingu

Reporty reagují na výběr období dashboardu přes časovou dimenzi atributu (event_time, clicked_at). Čísla jsou úplná až po naplnění atributu na všech profilech; testovací profily zkreslují CTR, odečítají se dočasným filtrem na audienci nebo se testuje na sandboxu.

Hlídky (watchdog audience)

Report neumí spojit dva atributy, proto hlídky „zásah do kontrolky = 0“ existují jako uložené audience:

Velikost audience v přehledu je cache. Živý stav dává náhled profilů v detailu audience nebo přepočet velikosti.

Jak číst čísla

  • Otevření e-mailů po ~2 týdnech, kliky průběžně, rozdíl v nákupech Control vs Main až za 6–8 týdnů.
  • Éry: každý start scénáře nebo změna kontraktu (např. desktop banner měří zavření a skutečné URL až od 22. 9.) je zapsaná v metodice; období před érou se do srovnání nebere.
  • Výpadek přepočtu profilů (19. 9. 2026, 11 hodin) zamrazil audience a atributy; eventy se neztratily, ale den je pro vyhodnocení bannerů zkreslený.
  • Purchase rate košíkové kvalifikace je vysoký, protože kvalifikace zahrnuje i checkout. Proto velké karty ukazují podíl bez nákupu, kde je rozdíl citlivější.

Provoz a monitoring

Co běží samo, kde se to hlídá, co je normální a co dělat, když něco nejde.

Co běží samo

CoKdyKde hlídat
Cloud App „Vaprio database“každých 30 min; nová data jednou za hodinu (export Vapria v :45)Sources → Vaprio database (poslední běh, stav, log)
Web SDK, SmartEmailing, subscribe endpointyrealtimeHealth (fronty), zdroje → eventy za poslední hodinu
Journeys (košík CZ, SI dry-run)průběžněJourneys → aktivní instance, doručení
Destinace do SmartEmailingupři každém odesláníDestinations → logy doručení; Error logs
Heartbeat (Piper)každou hodinu, report za předchozí hodinuHealth → Heartbeat; při problému Slack
Error alertingpři nové chybě (max 1× za 5 min)Slack webhook (Settings → Error alerting)

Heartbeat a alerty

Hodinový AI health report Meira běží podle promptu Data Clubu (verze 12 od 19. 9. 2026). Co hlídá:

  • Weby Vaprio.cz a Vaprio.sk pod 100 eventů za hodinu (kdykoli).
  • Vaprio database: 0 eventů za hodinu mezi 06–20 UTC, nebo selhaný běh.
  • SmartEmailing: nejnovější event starší než 12 hodin (nula v jedné hodině je normální).
  • Subscribe endpointy: nikdy nulu, ale nadměrný počet žádostí = podezření na spam; selhané doručení SmartEmailing DOI vždy.
  • Fronty: přes 5 000 položek, nebo stojící worker (fronta neprázdná, nejstarší položka starší než hodinu, nula zpracovaných za minutu).
  • Selhání destinací: jedno až dvě HTTP 5xx ze SmartEmailingu za hodinu jen do reportu, alert od tří, nebo při jiné chybě než 5xx.
  • Nikdy nehlásí nulu u backloadu, sandboxu a systémových zdrojů. Notifikace česky, s čísly.

Stav a historie běhů: Health → Heartbeat; prompt se mění v Settings (jen implementátor).

Co je normální

  • Vaprio database: stovky až nízké tisíce eventů za hodinu ve dne, stejné číslo dvakrát po sobě (běh v :22 nepřinese nic nového), v noci 0 objednávek.
  • Weby: tisíce eventů za hodinu ve dne, stovky v noci.
  • Fronta profileRefresh roste po hromadných zápisech a velkých rozesílkách (do tisíců) a během minut odtéká; identityResolution se drží u nuly.
  • Log Cloud Appu: mimo_okno, order_email_as_data, guest_orders jsou statistiky, ne chyby. oriznuto > 0 = strop 8 000 eventů, vznikla díra.
  • Journey instance čekající na čerstvý refresh profilu (deferredReason: profile_refresh) a retry po 30 s jsou design platformy, ne chyba.
  • Nový atribut krátce po založení ukazuje „no data“; plní se backfillem.

Když něco nejde

SymptomPříčinaKdo řeší
Slack: „Zdrojové CSV Vaprio nejsou aktualizována… starší než 3 h“výpadek exportu na straně VapriaVaprio (databáze, exporty); běh se opakuje sám, 24h okno dohání do jednoho dne
Slack: „download … HTTP 401 / 5xx“přístup nebo servery VapriaVaprio (databáze, exporty)
Díra delší než okno (Cloud App vypnutý přes 3 h, oriznuto)chybějící dataimplementátor dohraje přes backload zdroj
Heartbeat: Vaprio.cz / .sk 0 eventůSDK na webu se nenačítáVaprio (web); ověřit v prohlížeči (Network → collect)
SmartEmailing bez eventů 12 h+konektor nebo konfigurace SEMeiro support, Vaprio
Destinace SE: HTTP 5xx nebo TLS chybapřechodná chyba SmartEmailingu; retry 3×od tří selhání za hodinu alert; Vaprio / SE
Fronta profileRefresh stojíworker platformyMeiro (restart); atributy, audience a journeys mezitím zamrzlé
Profil vypadá špatně (cizí objednávky, divné e-maily)identitazkontrolovat identifikátory a identity audit, hlásit implementátorovi, neopravovat ručně

Limity platformy (naučené)

  • Cloud App: výstup do 10 000 eventů a ~10 MiB na běh (přebytek se tiše zahodí), limit běhu 5 minut, kolem 8–10 odchozích requestů na běh.
  • /collect: 1 MB na request, 10 000 eventů na request, 429 při plné frontě.
  • Refresh profilu bere max 10 000 nejnovějších eventů; detail profilu v API vrací max 100 eventů (zbytek přes cursor).
  • Atribut max 20 dimenzí, dimenze neměnné, žádný přepočet po změně SQL. Dashboard max 20 reportů. Jeden restitch najednou.
  • Profile API vrací pro neznámý identifikátor 404 s JSON tělem; při health-checku kontrolovat tělo, ne jen status.
  • Aktivní journey nejde uložit; postup pauza → uložit → spustit. Hrany grafu musí mít ID.

Objem eventů a retence

Licence je omezená celkovým počtem uložených eventů. Největší podíl dělá webový page_view. Retence (kolik dní se event drží, 0 = navždy) se nastavuje per event typ a mění ji jen implementátor; retence šablonových typů webu je zamčená u Meira.

SkupinaDnesNávrh (čeká na rozhodnutí)
DB transakce a účtynavždynavždy (účty 365 d)
Web view_item_list60 d60 d
Web page_view365 d30 d
Web user_identified, cart_updatednavždy30 / 90 d
Web view_item a ostatní365 d180 d
SmartEmailingnavždy365 d

Sledování: dashboard Licence – uložené eventy. Změna retence maže jen data starší než limit, čerstvá data nejsou ohrožena. Retenční rozhodnutí není urgentní, do začátku roku 2027 limit nehrozí.

Incidenty

  • 19. 9. 2026Worker přepočtu profilů stál 11 hodin (platforma Meiro). Atributy, audience a journeys zamrzlé; eventy se neztratily, po restartu se dopočítaly. Heartbeat upraven na v12 (stojící worker se hlásí do hodiny), Meiro přidalo interní monitoring front.
  • 17.–21. 9. 2026Ojedinělé HTTP 500 a TLS chyby SmartEmailingu při volání trigger-event, 20.–21. 9. degradace SE. Destinace bez retry doručení propadaly; 22. 9. nasazen retry do všech pěti destinací.
  • 15. 9. 2026Planý poplach heartbeatu (počty ze vzorku) a padající běhy; Meiro opravilo runtime 15./16. 9., prompt přepsán na absolutní prahy.
  • 2. 9. 2026Cloud App vrátil přes 10 000 eventů, platforma zdroj vypnula. Řešení: okno 6 h a strop 8 000 eventů na běh.