# Technische Grundlagen

# Funktionsweise

Das Baskettracking basiert auf einem **serverseitigen Aufruf** vom Shop-System (Advertiser) an das Tracking-System von **easy.MARKETING**.  

Dabei werden **Transaktions- und Artikeldaten** in einem JSON-Array übergeben.  
Jedes bestellte Produkt entspricht einem **Basket-Item**, das mit den relevanten Informationen (z. B. Preis, Anzahl, Produktname) befüllt wird.  

---

## Ablauf im Überblick

1. **Klick auf Werbemittel**  
   - Ein Nutzer klickt auf ein Werbemittel (z. B. Banner oder Link).  
   - Das System hängt die **EMID** (Tracking-ID) an die Ziel-URL an.  

2. **Besuch der Landingpage**  
   - Die EMID wird vom Advertiser-System (Frontend oder Backend) gespeichert.  
   - Dadurch ist die Zuordnung des Nutzers sichergestellt.  

3. **Bestellung im Shop**  
   - Der Nutzer führt eine Transaktion durch.  
   - Das Shop-System erstellt eine Liste aller bestellten Produkte (Basket).  

4. **Serverside Tracking-Call**  
   - Das Shop-System baut einen Trackingaufruf auf und übergibt:  
     - Kampagnen- und Triggerdaten  
     - Bestellnummer (Token)  
     - Basket-Daten (Artikel, Preis, Menge, Kategorie, etc.)  
     - Die gespeicherte **EMID**  
   - Der Aufruf erfolgt an den **Tracking-Endpoint** von easy.MARKETING.  

---

## Rolle der EMID

Die **EMID** ist eine eindeutige Kennung, die für die **Attribution der Transaktion** notwendig ist:  

- Sie wird **beim Klick** erzeugt und an den Advertiser übergeben.  
- Sie muss **beim Conversion-Aufruf** mitgesendet werden.  
- Ohne EMID kann die Customer Journey **nicht korrekt zugeordnet** werden.

# Endpoint & Parameter

Damit Baskettracking funktioniert, müssen die Daten vom Shop-System an den entsprechenden **Tracking-Endpoint** von easy.MARKETING übermittelt werden. Die Übergabe erfolgt per **HTTP-GET-Request** mit einem JSON-Array im Parameter `json`.

---

## Endpoint

Der Basis-Endpoint lautet:

`https://SUB-DOMAIN/trck/ebasket/`

**SUB-DOMAIN** wird individuell pro Advertiser/Kunde konfiguriert. Der Endpoint akzeptiert die GET-Parameter `json` (Pflicht) und optional `currency`.

### Pflichtparameter
| Parameter | Beschreibung |
|---|---|
| json | URL-encodiertes JSON-Array mit allen Basket-Items (Pflichtfeld). Ein Objekt pro bestelltem Produkt. |

### Optionaler Parameter
| Parameter | Beschreibung |
|---|---|
| currency | Übergabe der Währung. Standard: EUR. Bei Bedarf z. B. CHF, USD, … |

### Beispielaufrufe
**Mit Standard-Währung (EUR)**

`https://DOMAIN/trck/ebasket/?json=[{"campaign_id":"CAMPAIGN_ID","trigger_id":"TRIGGER_ID","token":"TOKEN","emid":"EMID","amount":"AMOUNT","price":"PRICE","article_number":"ARTICLE_NUMBER","productname":"PRODUKTNAME","category":"CATEGORY","additional":{"VARIABLE":"VALUE","VARIABLE2":"VALUE2"}}]&currency=EUR`

**Mit alternativer Währung (CHF)**

`https://DOMAIN/trck/ebasket/?json=[{"campaign_id":"1","trigger_id":"5","token":"12345","emid":"abc123","amount":"2","price":"19.90","article_number":"SKU-123","productname":"Sneaker XY","category":"Schuhe"}]&currency=CHF`

---

## Anforderungen an den json-Parameter

* **URL-Encoding**: Der komplette `json`-Parameter muss URL-encodiert übertragen werden, damit Sonderzeichen korrekt verarbeitet werden.
* **Struktur**: Das JSON ist ein Array von Objekten (ein Objekt pro Basket-Item).
* **Pflichtfelder je Item**: `campaign_id`, `trigger_id`, `token`, `action_id` (bzw. `emid` je nach Implementierung), `amount`, `price`, `article_number`, `productname`, `category`.
* **Additional-Daten**: Über das Feld `additional` können beliebige Key-Value-Paare (z. B. `vouchercode`, `customerType`, …) übergeben werden.

### Kurzreferenz JSON-Item
```json
{
  "campaign_id": "CAMPAIGN_ID",
  "trigger_id": "TRIGGER_ID",
  "token": "TOKEN",
  "action_id": "EMID",
  "amount": "AMOUNT",
  "price": "PRICE",
  "article_number": "ARTICLE_NUMBER",
  "productname": "PRODUCT_NAME",
  "category": "CATEGORY",
  "additional": {
    "vouchercode": "WINTER20",
    "zusatzinfo": "additional_1"
  }
}