Nápověda menu

Server-to-Server (S2S) měření

Pokročilé měření, kdy data odesíláte přímo z vašeho serveru na Sklik endpoint.

S2S je vhodné pro weby, kde potřebujete maximální přesnost bez závislosti na cookies třetích stran. Lze jej využít také pro měření konverzí z mobilních aplikací nebo pro zasílání offline konverzí.

Frontendový skript (sul.js) je povinný i pro S2S
I při S2S měření musí být na webu nasazen frontendový skript sul.js s vaším SEM ID. Ten vytvoří cookies sid a udid, které musíte přečíst a předat v každém S2S requestu. Samotný S2S payload pak obsahuje SEM ID (parametr sem_id) – to je jiný identifikátor. Bez cookies ze sul.js nelze správně spárovat uživatelskou identitu.

Předpoklady

  • Nasazený frontendový skript na všech stránkách webu (generuje cookies sid a udid)
  • Možnost číst cookies sid a udid ze serveru
  • Schopnost hashovat osobní data SHA-256 na serveru
  • SEM ID pro S2S – speciální identifikátor určený výhradně pro S2S měření. Liší se od běžného SEM ID (pro skript a GTM). Viz Kde najdu SEM ID? Pokud máte provozovny Zboží.cz, každá provozovna má vlastní SEM ID pro S2S.

Endpoint

Všechny S2S requesty odesílejte jako POST na:

POST https://sem.seznam.cz/rtgconv
Content-Type: application/json

HTTP hlavičky

HlavičkaPovinnostPopis
Content-TypePovinnáVždy application/json
X-Client-IdDoporučenáNázev vaší aplikace nebo knihovny, která data odesílá (např. muj-eshop-pluginshoptet-sem)
X-Client-VersionDoporučenáVerze aplikace (např. 1.4.2)

Proč uvádět X-Client-Id a X-Client-Version?
Tyto hlavičky nám pomáhají při debugování problémů na vaší straně – rychle dohledáme, z jaké aplikace a verze data přišla. Nemají vliv na zpracování eventů, ale výrazně zrychlují diagnostiku.

Identifikace uživatele

S2S payload musí obsahovat cookies sid a udid vygenerované frontendovým skriptem. Přečtěte je na frontendu a předejte na server, odkud je zařadíte do objektu user_ids.user_data.

sid a udid vyžadují souhlas uživatele
Cookie sid a udid jsou frontendovým skriptem zapsány až po přijetí souhlasu s ad_storage: 'granted'. Ujistěte se, že na webu předáváte souhlas metodou updateConsent (nebo využíváte IAB TCF) před prvním PageView – jinak cookies nebudou k dispozici a párování uživatelské relace nebude možné. Více viz Nastavení souhlasu.

function getCookie(name) {
  const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));
  return match ? decodeURIComponent(match[1]) : null;
}

const sid  = getCookie('sid');   // předat na server jako user_ids.user_data.sid
const udid = getCookie('udid');  // předat na server jako user_ids.user_data.udid

Dalším klíčovým identifikátorem je sznaiid – proklikové ID ze Skliku. Tato hodnota se nachází v URL parametru po prokliku z inzerátu a slouží pro anonymní modelování konverzí. Lze ji bezpečně uložit na serveru i bez souhlasu uživatele.

Hashujte osobní data před odesláním
Na rozdíl od frontendového skriptu, který hashuje automaticky, při S2S musíte vy sami zahashovat algoritmem SHA-256 všechna osobní data: em, ph, fn, ln, ge, db, ct, zp, sr, country. Výjimka: review_email se nesmí hashovat ani při S2S.

Struktura payloadu

ParametrTypPovinnostPopis
schema_versionstringPovinnýVždy "v2"
event_namestringPovinnýNázev události, např. "Purchase"
event_typestringPovinnýVždy "rtgconv"
event_timeintegerPovinnýUnix timestamp v milisekundách (UTC)
event_urlstringPovinnýURL stránky, kde událost nastala
event_sourcestringPovinný"web" nebo "app"
event_idstringDoporučenýUnikátní ID eventu (ideálně UUID-7) pro deduplikaci
user_idsobjectPovinnýObjekt s identifikátory uživatele (viz níže)
event_dataobjectPovinnýData události – stejná struktura jako u frontendového měření (viz Reference událostí) + parametry sem_id a sznaiid
consent_stringstringDoporučenýIAB TCF consent string (pokud k dispozici)
consent_modeobjectDoporučenýGoogle Consent Mode (alternativa k TCF)
s2s_headersobjectDoporučenýIP adresa a User Agent pro přesnější identifikaci

Objekt user_ids.user_data

ParametrPopisHashovat?
sidSession cookie ze seznamu.cz – číst z prohlížečeNe
udidSession cookie generovaná sul.jsNe
emE-mail uživatele (klíčový identifikátor)Ano (SHA-256)
phTelefonní čísloAno (SHA-256)
fnJménoAno (SHA-256)
lnPříjmeníAno (SHA-256)
gePohlaví (mf nebo o)Ano (SHA-256)
dbDatum narození (formát YYYYMMDD)Ano (SHA-256)
ctMěstoAno (SHA-256)
zpPSČAno (SHA-256)
srUlice a číslo popisnéAno (SHA-256)
countryKód země (ISO 3166-1 alpha-2, např. cz)Ano (SHA-256)

Speciální parametry v event_data pro S2S

ParametrPovinnostPopis
sem_idPovinný pro S2SSEM ID pro S2S – samostatný identifikátor viditelný po zapnutí pokročilého nastavení. Odlišný od SEM ID pro skript/GTM.
sznaiidDoporučenýProklikové ID ze Skliku – URL parametr po kliknutí na inzerát. Slouží pro anonymní modelování konverzí.

Kompletní příklad payloadu

{
  "schema_version": "v2",
  "event_source": "web",
  "event_name": "Purchase",
  "event_type": "rtgconv",
  "event_time": 1770134113676,
  "event_id": "018e4f2a-1234-7abc-9def-0123456789ab",
  "event_url": "https://vas-eshop.cz/dekujeme",

  "user_ids": {
    "user_data": {
      // Cookies ze sul.js – číst z prohlížeče (nehashovat)
      "sid": "id=1922397029101872874|t=1737450723.526|te=1756971615.061|c=0F247CCA",
      "udid": "01958f34-71d5-7ec2-ae01-cb3c80a1d0a0",

      // Osobní data – hashovat SHA-256 na serveru
      "em": "6db68d052788e70eb459463eb34370fe983ef838db65641902f02326fabc37a7",
      "ph": "ca6faa7abf120a739e8ce3bcf581553af9ad983b3290ed8cdf8cc40b9d4fefcf",
      "fn": "6a0ac0fd972c325d6ca5512b67a5e0ad996c4a3e9b59971d125164e6d4db1a1c",
      "ln": "64118260ecb916c23621d8f2768d8dc75d1f5710b1b7e4f2c41ad41e6bc4d688",
      "ct": "f377db9f1f0af132866afd5c4381512a5c9a3b3a32e9ca2f88f0aced18264568"
    }
  },

  "consent_mode": {
    "ad_storage": "granted",
    "ad_user_data": "granted",
    "ad_personalization": "granted",
    "functionality_storage": "denied",
    "analytics_storage": "denied"
  },

  "s2s_headers": {
    "client_ip_address": "77.75.74.172",
    "user_agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36...",
    "sec_ch_ua_mobile": "?0",
    "sec_ch_ua_platform": "\"Windows\""
  },

  "event_data": {
    "sem_id": "VASE_SEM_ID_PRO_S2S",
    "sznaiid": "2627214859780792651",
    "order_id": "OBJ-987654",
    "content_type": "product",
    "currency": "CZK",  // podporováno pouze CZK
    "value": 27364,          // celková hodnota bez DPH (v CZK)
    "value_tax": 5746,
    "delivery_type": "CESKA_POSTA",
    "delivery_price": 121,       // s DPH
    "other_costs": -500,         // sleva s DPH
    "payment_type": "karta",
    "contents": [
      {
        "id": "ABC12345",
        "quantity": 1,
        "unit_price": 33490,       // s DPH
        "content_name": "iPhone 15 Pro Max",
        "content_category": "Elektronika | Mobilní telefony | Apple"
      }
    ]
  }
}

Odeslání requestu

Payload odešlete HTTP POST requestem na endpoint https://sem.seznam.cz/rtgconv s hlavičkou Content-Type: application/json.

curl -X POST https://sem.seznam.cz/rtgconv \
  -H "Content-Type: application/json" \
  -H "X-Client-Id: vas-eshop-plugin" \
  -H "X-Client-Version: 1.0.0" \
  -d '{ ... váš payload ... }'
await fetch('https://sem.seznam.cz/rtgconv', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Client-Id': 'vas-eshop-plugin',
    'X-Client-Version': '1.0.0',
  },
  body: JSON.stringify(payload)
});
import requests

response = requests.post(
    'https://sem.seznam.cz/rtgconv',
    json=payload,
    headers={
        'X-Client-Id': 'vas-eshop-plugin',
        'X-Client-Version': '1.0.0',
    }
)
response.raise_for_status()

Ošetření chyb a doporučení

HTTP statusVýznamDoporučená reakce
200 OKEvent přijat a zpracován
400 Bad RequestNeplatný payload – chybí povinné pole nebo špatný formátOpravit payload, neopakovat automaticky
401 / 403Neplatné SEM ID nebo nepřístupný endpointZkontrolovat SEM ID pro S2S
5xxChyba na straně serveruOpakovat s exponenciálním backoffem (viz níže)

Retry strategie
Při chybách 5xx nebo síťovém timeoutu doporučujeme opakovat request s exponenciálním backoffem: 1 s → 2 s → 4 s, maximálně 3 pokusy. Chyby 4xx neopakujte – signalizují problém v payloadu, ne přechodný výpadek.

Timeout
Nastavte timeout requestu na 3–5 sekund. S2S volání nesmí blokovat zpracování objednávky na vašem serveru – odesílejte eventy asynchronně (např. ve frontě na pozadí).

Potřebujete další pomoc?

Pokud si stále nevíte rady, obraťte se na naše specialisty. 95 % vašich dotazů umíme vyřešit do 2 hodin.