---
title: "Automatizacija digitalnih putovnica proizvoda pomoću Webhookova — qr3.app Blog"
description: "Digitalna putovnica proizvoda nije statična stranica — svako skeniranje je događaj na kojem možete graditi. Reagirajte na qr.scanned za analitiku, ponovne narudžbe i oznake opoziva, održavajte podatke putovnice ažurnima iz vašeg ERP-a i provjerite svaki payload pomoću HMAC-SHA256. Vodič razvojne razine s kodom."
canonical: "https://qr3.app/hr/blog/dpp-webhooks-automation/"
lang: "hr"
robots: "index,follow,max-image-preview:large,max-snippet:-1"
---

# Automatizacija digitalnih putovnica proizvoda pomoću Webhookova — qr3.app Blog

> Digitalna putovnica proizvoda nije statična stranica — svako skeniranje je događaj na kojem možete graditi. Reagirajte na qr.scanned za analitiku, ponovne narudžbe i oznake opoziva, održavajte podatke putovnice ažurnima iz vašeg ERP-a i provjerite svaki payload pomoću HMAC-SHA256. Vodič razvojne razine s kodom.

Canonical: <https://qr3.app/hr/blog/dpp-webhooks-automation/>

[← Blog](/hr/blog/) [Vodiči](/hr/blog/category/tutorials/)

30. svibnja 2026. 5 min čitanja [Vodiči](/hr/blog/category/tutorials/) [dpp](/hr/blog/tag/dpp/)[webhooks](/hr/blog/tag/webhooks/)[automation](/hr/blog/tag/automation/)[qr-scanned](/hr/blog/tag/qr-scanned/)[sdk](/hr/blog/tag/sdk/)

# Automatizacija digitalnih putovnica proizvoda pomoću Webhookova

Digitalna putovnica proizvoda nije statična stranica — svako skeniranje je događaj na kojem možete graditi. Reagirajte na qr.scanned za analitiku, ponovne narudžbe i oznake opoziva, održavajte podatke putovnice ažurnima iz vašeg ERP-a i provjerite svaki payload pomoću HMAC-SHA256. Vodič razvojne razine s kodom.

autor **QR3 Redaktion**

![Automatizacija digitalnih putovnica proizvoda pomoću Webhookova](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-webhooks-automation/hero.png)

Većina timova tretira digitalnu putovnicu proizvoda kao stranicu: kreirate je, ispišete QR i zaboravite na nju. Time se najkorisniji signal ostavlja neiskorištenim. Svaki put kad netko skenira QR na proizvodu, to je **događaj** — stvarna osoba, u stvarnoj zemlji, koja drži stvarnu jedinicu, u stvarnom trenutku. Povežite te događaje sa svojim stogom i putovnica prestaje biti statična stranica te postaje sučelje automatizacijskog procesa. Ovaj vodič pokazuje kako se pretplatiti na `qr.scanned`, provjeriti svaki payload te pretvoriti skeniranja i ažuriranja u stvarne radne tijekove pomoću qr3 SDK-a.

## Zašto je DPP izvor događaja, a ne statična stranica

Vrijednost putovnice nije stranica koju potrošač jednom vidi. To je tok interakcija oko nje: skeniranja na terenu, promjene podataka iz vašeg ERP-a, prijelazi životnog ciklusa. Svaki od njih je nešto na što vaši sustavi mogu reagirati u stvarnom vremenu.

Webhookovi preokreću uobičajeni model anketiranja. Umjesto da na pravilnim razmacima pitate *„je li se nešto dogodilo?"*, qr3 zove **vas** u trenutku kad se to dogodi. Tipovi događaja koje platforma emitira uključuju `qr.scanned`, uz `qr.created`, `qr.updated` i `qr.deleted` za promjene životnog ciklusa. Onaj koji većina timova nedovoljno koristi je `qr.scanned`: aktivira se kad potrošač, tehničar ili carinik stvarno skenira proizvod u stvarnom svijetu.

`qr.scanned` payload nosi kontekst koji vam je potreban za djelovanje — uključujući **zemlju** skeniranja i **dpp/code id** koji identificira koja je jedinica skenirana. To je dovoljno za pokretanje analitike, popunjavanja zaliha i logike opoziva bez čovjeka u petlji.

## Pretplata na qr.scanned

Usmjerite webhook krajnju točku na svoju uslugu i obradite događaj. Verificirajte potpis prema sirovom tijelu prije nego što ga parsirate:

```
import express from "express";
import { createHmac, timingSafeEqual } from "crypto";

const app = express();
const secret = process.env.QR3_WEBHOOK_SECRET!;

// Recompute the HMAC over the exact bytes qr3 signed and compare in constant time.
function verify(raw: Buffer, header: string | undefined): boolean {
  const expected = createHmac("sha256", secret).update(raw).digest("hex");
  const expectedBytes = Buffer.from(`sha256=${expected}`);
  const receivedBytes = Buffer.from(header ?? "");
  return (
    expectedBytes.length === receivedBytes.length &&
    timingSafeEqual(expectedBytes, receivedBytes)
  );
}

// Use the raw body so the signature matches the exact bytes qr3 signed.
app.post("/webhooks/qr3", express.raw({ type: "application/json" }), (req, res) => {
  if (!verify(req.body, req.headers["x-qr3-signature"] as string)) return res.sendStatus(401);
  const event = JSON.parse(req.body.toString("utf8"));

  if (event.type === "qr.scanned") {
    // event payload includes fields like the scan country and the dpp/code id
    handleScan(event);
  }

  res.sendStatus(200);
});
```

Rukovatelj je namjerno tanak: provjerite, granajte na `event.type`, brzo potvrdite s `200`. Težak posao (zapisi analitike, ERP pozivi) obavljajte asinkrono kako spori downstream nikad ne bi blokirao potvrdu.

## Provjera potpisa (HMAC-SHA256) — uvijek to radite

Webhook krajnja točka je javni URL. Svatko tko ga pronađe može na njega slati POST zahtjeve. Ako vjerujete tijelu bez provjere tko ga je poslao, napadač može krivotvoriti „skeniranja", pokrenuti lažne ponovne narudžbe ili aktivirati lažne oznake opoziva. **Uvijek provjerite potpis prije nego što djelujete na temelju payloada.**

qr3 potpisuje svaki webhook pomoću **HMAC-SHA256** nad sirovim tijelom zahtjeva, koristeći tajni ključ vaše krajnje točke. Potpis stiže u zaglavlju zahtjeva `X-QR3-Signature`, kao `sha256=` nakon čega slijedi heksadecimalni sažetak. Ponovno izračunajte HMAC nad istim bajtovima i usporedite ih u konstantnom vremenu; ako se razlikuju, odbijte zahtjev:

```
app.post("/webhooks/qr3", express.raw({ type: "application/json" }), (req, res) => {
  if (!verify(req.body, req.headers["x-qr3-signature"] as string)) {
    // signature mismatch → not from qr3 (or body was altered in transit)
    return res.sendStatus(401);
  }
  process(JSON.parse(req.body.toString("utf8")));
  res.sendStatus(200);
});
```

Tri pravila koja ovo drže poštenim:

- **Provjeravajte nad sirovim bajtovima.** Ponovna serijalizacija JSON-a može preurediti ključeve i promijeniti razmake, što kvari HMAC. Uhvatite sirovo tijelo (gore, `express.raw`).

- **Čuvajte tajnu kao tajnu.** Ona živi u vašem okruženju, nikad u klijentskom kodu ili repozitoriju.

- **Zatvarajte u slučaju greške.** Nema valjanog potpisa → `401`, bez nuspojava. Nikad nemojte „svejedno obraditi" pri nepodudaranju.

## Obrasci: analitika / ponovna narudžba / opoziv

Kad jednom vjerujete događaju, šačica obrazaca pokriva većinu onoga što timovi žele:

```
function handleScan(event: { type: string; data: { country?: string; dpp_id?: string } }) {
  // 1) Analytics — where and how often are products scanned?
  metrics.increment("dpp.scan", { country: event.data.country });

  // 2) Re-order — a scan can signal consumption or field activity
  if (event.data.country) maybeReplenish(event.data.dpp_id, event.data.country);

  // 3) Recall flag — scans of a flagged unit alert your team
  if (isRecalled(event.data.dpp_id)) alertRecall(event.data.dpp_id, event.data.country);
}
```

- **Analitika:** agregirajte skeniranja po zemlji i jedinici kako biste vidjeli stvarnu angažiranost — koja tržišta zaista skeniraju i koji SKU-ovi imaju najviše interakcije nakon prodaje.

- **Ponovna narudžba / popunjavanje zaliha:** nagli porast skeniranja u nekoj regiji može hraniti signale potražnje ili pokrenuti radne tijekove obnove zaliha u vašem ERP-u.

- **Opoziv / sigurnost:** ako je jedinica pod opozivom, skeniranje je prilika da dosegnete onoga tko je drži — upozorite svoj tim ili prikažite obavijest na samoj putovnici.

Ništa od ovoga ne treba anketiranje ili noćnu serijsku obradu. To se događa u trenutku kad je proizvod skeniran.

## Održavanje podataka ažurnima putem client.dpp.update

Reagiranje na skeniranja je polovica petlje; druga polovica je održavanje same putovnice točnom. Propisi poput **ESPR-a (EU 2024/1781)** i **Uredbe o baterijama (EU 2023/1542)** očekuju da podaci putovnice odražavaju stvarnost tijekom životnog vijeka proizvoda — ponovno izračunati ugljični otisak, ažurirane upute za popravak, dostignuti ciljevi recikliranog sadržaja.

Pokrenite ta ažuriranja iz sustava evidencije. Kad se vrijednost promijeni u vašem ERP-u, gurnite je u putovnicu:

```
import { QR3 } from "@qr3/sdk";

const client = new QR3({ apiKey: process.env.QR3_API_KEY! });

// GTIN and serial are immutable; data fields are updatable.
await client.dpp.update(dppId, {
  battery_data: { carbon_footprint_kg: 58, recycled_content_pct: 16 },
});
```

Budući da QR kodira stabilni URL razrješivača (`https://qr3.app/dpp/{gtin}/{serial}`, dodajte `?format=jsonld` za JSON-LD), nikad ne morate ponovno ispisivati naljepnicu da biste promijenili podatke. Identitet ostaje fiksan; sadržaj iza njega ostaje aktualan. Uparite ovo s `qr.updated` i možete proslijediti obavijest kad god se putovnica promijeni — zatvarajući petlju između vašeg ERP-a, putovnice i svakoga tko prati nizvodno.

## Tablica događaja: događaj → što automatizirati

| Događaj | Aktivira se kad | Što automatizirati |
| --- | --- | --- |
| `qr.scanned` | Proizvodni QR je skeniran na terenu | Analitika po zemlji, signali popunjavanja zaliha, upozorenja o opozivu |
| `qr.created` | Kreirana je nova putovnica | Indeksirajte je, sinkronizirajte s PIM/ERP, obavijestite tim za katalog |
| `qr.updated` | Podaci putovnice se mijenjaju | Ponovno predmemorirajte javnu stranicu, proslijedite obavijesti o promjeni |
| `qr.deleted` | Putovnica je uklonjena | Označite interne zapise kao izbrisane, opozovite nizvodne reference |

Počnite s `qr.scanned` za angažiranost i signale s terena; dodajte događaje životnog ciklusa kako sinkronizirate putovnice u svoje šire sustave.

## Često postavljana pitanja

**Moram li provjeravati potpis ako je URL moje krajnje točke tajan?**
Da. URL nije tajna — curi u zapisnicima, proxyjima i povijesti preglednika. Provjera `X-QR3-Signature` HMAC-a u odnosu na sirovo tijelo (raw body) jedino je što dokazuje da je payload zaista stigao od qr3.

**Što se događa ako je moja krajnja točka nedostupna kad se događaj aktivira?**
Brzo potvrdite s `200` nakon što ste provjerili, a spor posao obavljajte asinkrono kako prolazni nizvodni problemi nikad ne bi zaustavili odgovor. Održavajte vlastitu idempotentnost na `dpp/code id` kako ponovno isporučena dostava ne bi bila dvostruko brojana.

**Mogu li ažurirati GTIN ili serijski broj putem client.dpp.update?**
Ne — GTIN i serijski broj su nepromjenjivi; oni su stabilni identitet proizvoda. Samo se podatkovna polja mogu ažurirati. Upravo ta nepromjenjivost omogućuje da ispisani QR ostane valjan zauvijek.

## Izvori

- [EU ESPR — Regulation (EU) 2024/1781](https://eur-lex.europa.eu/eli/reg/2024/1781/oj)

- [EU Battery Regulation 2023/1542](https://eur-lex.europa.eu/eli/reg/2023/1542/oj)

- [HMAC — RFC 2104](https://www.rfc-editor.org/rfc/rfc2104)

**Započnite besplatno** i povežite svoj prvi DPP webhook: [app.qr3.app/sign-up](https://app.qr3.app/sign-up)

## Povezani članci

- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/gs1-resolver-test-suite-dpp-links/hero.png) Vodiči Testni paket GS1 Resolvera: DPP-veze pouzdano provjeriti prije puštanja u rad Stabilni GS1-testni paket omogućuje provjeru Resolvera 1.2. Tako prije puštanja u rad možete testirati preusmjeravanja, skupove poveznica, CORS, jezike i pogreške.](/hr/blog/gs1-resolver-test-suite-dpp-links/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-battery-passport-2027-20260715/hero.png) Vijesti iz industrije BatteryPass-Ready pokreće testno okruženje spremno za Digitalni baterijski putovnicu Konzorcij BatteryPass-Ready 24. lipnja 2026. pokrenuo je javno testno okruženje za Digitalni baterijski putovnicu, uoči obveze EU-a od veljače 2027.](/hr/blog/dpp-battery-passport-2027-20260715/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/sector-20260713/hero.png) Vijesti iz industrije Digitalni putovnica baterije 2027.: što proizvođači sada moraju znati Webinari, alati otvorenog koda i nove norme: EU-ova putovnica baterije ubrzava se. Pregled stanja u srpnju 2026. i otvorenih pitanja do veljače 2027.](/hr/blog/sector-20260713/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/sector-20260711/hero.png) Vijesti iz industrije Digitalna putovnica za baterije 2026.: testna okruženja, norme i otvorena pitanja Gdje je industrija s digitalnom putovnicom za baterije? Pregled testnih okruženja, normi CEN/CENELEC, alata otvorenog koda i regulatornih smjernica u srpnju 2026.](/hr/blog/sector-20260711/)

[← Svi članci](/hr/blog/) [Počni besplatno](https://app.qr3.app/sign-up)
