Skip to content

Sledenje skeniranjem in analitika

Pregled

Vsak sken dinamične QR-kode ustvari zapis o skenu (Scan-Record) v tvojem delovnem prostoru (Workspace). Zajem podatkov poteka v celoti na Cloudflare-Edge — brez zunanjih storitev sledenja, brez piškotkov in brez tega, da bi izvorni IP-naslov kadar koli dosegel tvojo podatkovno bazo.

Trije načini za uporabo podatkov o skeniranju:

Aggregations-API

GET /v1/codes/:id/scans — časovne vrste + najboljše države/naprave/operacijski sistemi za posamezen objekt kode.

Webhooks (Echtzeit)

qr.scanned-dogodek na sken, podpisan s HMAC-SHA256. Glej spletne kavlje.

Dashboard

Vizualizacija na nadzorni plošči qr3.app — klic API ni potreben.


Katere podatke zbiramo

Za vsak sken se ustvari zapis v tabeli scans:

PoljeVirPrimer
idUUID, ustvarjen na strežnikuscn_d1f8…
code_idID skenirane QR-kodeqr_a1b2c3d4
workspace_idDelovni prostor (Workspace) kodews_xxx
countryCloudflare cf.countryAT
regionCloudflare cf.regionVienna
cityCloudflare cf.cityWien
device_typeRazčlenjevanje uporabniškega agenta (User-Agent)mobile, tablet, desktop
osRazčlenjevanje uporabniškega agenta (User-Agent)iOS, Android, macOS, Windows
browserRazčlenjevanje uporabniškega agenta (User-Agent)Safari, Chrome, Firefox
refererHTTP glava Refererhttps://example.com/landing
languageGlava Accept-Language (prvi jezik)de
redirected_toDejanski cilj preusmeritvehttps://example.com
ip_hashSHA-256(IP + dnevna sol/salt) — nepovratno8f3a…
scanned_atISO-8601 časovni žig2026-05-12T14:32:11.000Z

Geolokalizacija na Edge

Vsi geografski podatki (country, region, city) izvirajo iz objekta cf ponudnika Cloudflare in temeljijo na zbirki podatkov Cloudflare Geo-IP. Zunanje storitve Geo-IP se ne poizvedujejo — razreševanje poteka v istem Workerju, ki izvede tudi preusmeritev.

To ima tri posledice:

  1. Nizka zakasnitev — brez dodatnega skoka (hop), brez poizvedbe DNS pri zunanjem ponudniku.
  2. Varstvo podatkov — IP-naslov ne zapusti Cloudflare-a in se nikoli ne posreduje tretjim osebam.
  3. Omejena natančnostcity ni vedno na voljo (npr. pri VPN-jih, mobilnih operaterjih ali manjših regijah). Pričakuj vrednosti null in jih upoštevaj pri oblikovanju svojih nadzornih plošč.

Poizvedovanje po analitiki skeniranj

GET /v1/codes/:id/scans

Vrne agregirano analitiko za posamezno QR-kodo za izbrano časovno obdobje.

Terminal window
curl "https://qr3.app/v1/codes/qr_a1b2c3d4/scans?days=30" \
-H "Authorization: Bearer qr3_sk_..."

Parametri poizvedbe (Query Parameters):

ParameterVrstaPrivzetoOpis
dayscelo število (integer)30Časovno obdobje v dneh (1–365)

Odgovor (HTTP 200):

{
"data": {
"code_id": "qr_a1b2c3d4",
"short_code": "r7f3Kx",
"total_scans": 1842,
"period_days": 30,
"period_scans": 367,
"scans_by_day": [
{ "date": "2026-04-13", "count": 12 },
{ "date": "2026-04-14", "count": 18 }
],
"top_countries": [
{ "value": "AT", "count": 142 },
{ "value": "DE", "count": 98 },
{ "value": "CH", "count": 41 }
],
"top_devices": [
{ "value": "mobile", "count": 281 },
{ "value": "desktop", "count": 72 },
{ "value": "tablet", "count": 14 }
],
"top_os": [
{ "value": "iOS", "count": 158 },
{ "value": "Android", "count": 123 },
{ "value": "macOS", "count": 48 }
]
},
"meta": { "request_id": "req_xyz123" }
}

Polja v odgovoru:

PoljeOpis
total_scansSkupno število skenov kode v celotnem obdobju delovanja (neodvisno od časovnega okna days)
period_scansVsota skenov v izbranem časovnem oknu
scans_by_dayDnevne skupine (buckets), naraščajoče po datumu, prazni dnevi so izpuščeni
top_countriesNajboljših 8 držav v časovnem oknu, padajoče
top_devicesNajboljših 5 vrst naprav (mobile, tablet, desktop)
top_osNajboljših 5 operacijskih sistemov

Agregacija za več kod

Vsote na ravni delovnega prostora (npr. skeni na mesec za vse kode) so na voljo prek GET /v1/workspaces/:id v polju scans_this_month. Za analize med različnimi kodami priporočamo uporabo nadzorne plošče ali občasen izvoz.


Spremljanje v realnem času prek spletnih kavljev (Webhooks)

Če želiš obdelati dogodke skeniranja takoj, ko se zgodijo — na primer za nadzorne plošče v živo, sledenje sledem (lead tracking) or integracije CRM — se naroči na dogodek qr.scanned:

Terminal window
curl -X POST https://qr3.app/v1/webhooks \
-H "Authorization: Bearer qr3_sk_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/webhooks/qr3",
"events": ["qr.scanned"],
"secret": "my-secret-key-min-16-chars"
}'

Tovor (Payload):

{
"id": "evt_abc123xyz",
"type": "qr.scanned",
"created": "2026-05-12T14:32:11.000Z",
"data": {
"code_id": "qr_a1b2c3d4",
"short_code": "r7f3Kx",
"scan_id": "scn_d1f8...",
"country": "AT",
"device_type": "mobile",
"os": "iOS"
}
}

Celotna dokumentacija o preverjanju podpisov, logiki ponovnih poskusov in dnevnikih dostave je na voljo v API → Spletni kavlji (Webhooks).


Splošna uredba o varstvu podatkov (GDPR) in zasebnost

Zapisi o skeniranju ne vsebujejo osebnih IP-naslovov. Prvotni IP-naslov se v Edge-Workerju nadomesti s kriptografsko zgoščevalno funkcijo (SHA-256) z dnevno rotirajočo soljo (salt). To pomeni:

  • Ponovna identifikacija ni mogoča, tudi če je algoritem znan
  • Ni mogoča korelacija istega obiskovalca med različnimi dnevi
  • Izvorni IP-naslov nikoli ne doseže podatkovne baze D1

Hramba podatkov (Retention) je odvisna od paketa:

PaketHramba
Free7 dni
Pro90 dni
Business / Agency1 leto
EnterprisePo meri (SLA)

Dnevno opravilo Cron (purgeOldScans) samodejno odstrani starejše zapise — to ne vpliva na vrednost total_scans v objektu kode.


Najboljše prakse

  • Pogostost poizvedovanja (Polling): Agregacijski API je učinkovit, vendar ni namenjen poizvedovanju vsako sekundo. Za posodobitve v živo vedno raje uporabi spletne kavlje (webhooks), API pa uporabljaj le za naknadno polnjenje podatkov (backfills) ali nadzorne plošče.
  • Predpomnjenje (Caching): Odgovor vsebuje časovne vrste — pri velikih časovnih oknih (days=365) lahko tovor (payload) obsega več KB. Predpomni podatke na strani odjemalca s kratkim časom veljavnosti (TTL, npr. 60 s).
  • Omejitve Top-N: top_countries, top_devices in top_os so na strežniku omejeni na 8 oziroma 5 vnosov. Za globlje analize izvozi surove podatke.
  • Dopuščanje vrednosti null: country, region, city, referer in language so lahko null. V svoji analizi jih obravnavaj kot »neznano«.