Skip to content

Skenēšanas izsekošana un analītika

Pārskats

Katrs dinamiskā QR koda skenējums izveido skenēšanas ierakstu (Scan-Record) tavā darba vidē (Workspace). Datu apkopošana pilnībā notiek Cloudflare-Edge — bez ārējiem izsekošanas pakalpojumiem, bez sīkfailiem (cookies) un bez oriģinālās IP adreses nonākšanas tavā datubāzē.

Trīs veidi, kā piekļūt skenēšanas datiem:

Agregācijas API

GET /v1/codes/:id/scans — laika rindas + populārākās valstis/ierīces/OS vienam koda objektam.

Webhooks (reāllaikā)

qr.scanned notikums katram skenējumam, parakstīts ar HMAC-SHA256. Skatiet Webhooks.

Vadības panelis

Vizualizācija qr3.app vadības panelī — nav nepieciešams API izsaukums.


Kādi dati tiek apkopoti

Katram skenējumam tiek izveidots ieraksts tabulā scans:

LauksAvotsPiemērs
idServera ģenerēts UUIDscn_d1f8…
code_idSkenētā QR koda IDqr_a1b2c3d4
workspace_idKoda darba vide (Workspace)ws_xxx
countryCloudflare cf.countryAT
regionCloudflare cf.regionVienna
cityCloudflare cf.cityWien
device_typeUser-Agent parsēšanamobile, tablet, desktop
osUser-Agent parsēšanaiOS, Android, macOS, Windows
browserUser-Agent parsēšanaSafari, Chrome, Firefox
refererHTTP Referer galvenehttps://example.com/landing
languageAccept-Language galvene (pirmā valoda)de
redirected_toFaktiskais novirzīšanas mērķishttps://example.com
ip_hashSHA-256(IP + ikdienas sāls) — neatgriezenisks8f3a…
scanned_atISO-8601 laika zīmogs2026-05-12T14:32:11.000Z

Ģeolokalizācija Edge līmenī

Visi ģeogrāfiskie dati (country, region, city) nāk no Cloudflare cf objekta un ir balstīti uz Cloudflare Geo-IP datubāzi. Ārējie Geo-IP pakalpojumi netiek pieprasīti — noteikšana notiek tajā pašā Worker, kas veic novirzīšanu.

Tam ir trīs sekas:

  1. Zems latentums — nav papildu pārejas (hop), nav DNS vaicājuma ārējam pakalpojumu sniedzējam.
  2. Datu aizsardzība — IP adrese nepamet Cloudflare un nekad netiek nodota trešajām pusēm.
  3. Ierobežota granularitātecity ne vienmēr ir pieejama (piemēram, izmantojot VPN, mobilo sakaru operatorus vai mazos reģionos). Rēķinieties ar null vērtībām un iekļaujiet tās savos vadības paneļos.

Skenēšanas analītikas pieprasīšana

GET /v1/codes/:id/scans

Nodrošina apkopotu analītiku vienam QR kodam izvēlētajā laika periodā.

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

Vaicājuma parametri (Query Parameters):

ParametrsTipsNoklusējumsApraksts
daysvesels skaitlis30Laika periods dienās (1–365)

Atbilde (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" }
}

Atbildes lauki:

LauksApraksts
total_scansKopējais skenējumu skaits koda darbības laikā (neatkarīgi no days loga)
period_scansSkenējumu skaits izvēlētajā laika logā
scans_by_dayDienu grupas, augošā secībā pēc datuma, tukšās dienas tiek izlaistas
top_countriesTop 8 valstis laika logā, dilstošā secībā
top_devicesTop 5 ierīču tipi (mobile, tablet, desktop)
top_osTop 5 operētājsistēmas

Agregācija vairākiem kodiem

Darba vides mēroga kopsummas (piemēram, skenējumi mēnesī visiem kodiem) ir pieejamas, izmantojot GET /v1/workspaces/:id laukā scans_this_month. Starpkodu analīzei mēs iesakām izmantot vadības paneli vai periodisku eksportēšanu.


Reāllaika patēriņš, izmantojot Webhooks

Ja vēlaties apstrādāt skenēšanas notikumus tiklīdz tie notiek — piemēram, tiešsaistes vadības paneļiem, kontaktu izsekošanai (Lead-Tracking) vai CRM integrācijām —, abonējiet qr.scanned notikumu:

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"
}'

Datu kopa (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"
}
}

Pilna dokumentācija par paraksta verifikāciju, atkārtošanas loģiku (Retry-Logik) un piegādes žurnāliem (Delivery-Logs) ir pieejama sadaļā API → Webhooks.


VDAR un datu aizsardzība

Skenēšanas ieraksti nesatur personas datus saturošas IP adreses. Sākotnējā IP adrese Edge-Worker vidē tiek aizstāta ar kriptogrāfisku jaucējfunkciju (SHA-256) ar katru dienu rotējošu sāli (salt). Tas nozīmē:

  • Nav iespējama atkārtota identifikācija, pat zinot algoritmu
  • Nav iespējama viena un tā paša apmeklētāja korelācija starp dažādām dienām
  • Oriģinālā IP adrese nekad nenonāk D1 datubāzē

Datu glabāšanas ilgums (Retention) ir atkarīgs no plāna:

PlānsUzglabāšana
Free7 dienas
Pro90 dienas
Business / Agency1 gads
EnterprisePielāgots (SLA)

Katru dienu palaists Cron uzdevums (purgeOldScans) automātiski dzēš vecākus ierakstus — tas neietekmē total_scans vērtību koda objektā.


Labākā prakse

  • Aptaujas biežums (Polling-Frequenz): Agregācijas API ir efektīva, taču tā nav paredzēta vaicājumiem katru sekundi. Tiešsaistes atjauninājumiem vienmēr dodiet priekšroku Webhooks un izmantojiet API tikai datu papildināšanai (Backfills) vai vadības paneļiem.
  • Kešatmiņa (Caching): Atbilde satur laika rindas — lielu laika logu gadījumā (days=365) datu kopa (payload) var sasniegt vairākus KB. Veiciet kešatmiņu klienta pusē ar īsu TTL (piemēram, 60 s).
  • Top-N ierobežojumi: top_countries, top_devices, top_os servera pusē ir ierobežoti attiecīgi līdz 8 vai 5 ierakstiem. Padziļinātai analīzei eksportējiet neapstrādātos datus.
  • Pieļaujiet null vērtības: country, region, city, referer, language var būt null. Savā analīzē apstrādājiet tās kā “Nezināms”.