> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# WS-Tracking

> Die JavaScript-Variablen, über die WEBSALE V8s Shopdaten in Echtzeit an externe Analyse-Systeme übergibt, mit Standardvariablen, Zuständen und zustandsabhängigen Zusatzdaten.

WEBSALE V8s stellt auf jeder erzeugten Seite bestimmte Shopdaten als JavaScript-Variablen bereit. Ein externes Analyse-System liest sie aus und verarbeitet sie weiter. Diese Variablen sind damit die Grundlage jeder shopspezifischen Statistik-Auswertung.

| Eigenschaft | Wert |
| - | - |
| Übertragungsrichtung | WEBSALE Shop → externe Systeme (Data-from-Shop) |
| Format | JavaScript |

Übermittelt werden keine personenbezogenen Daten, sondern allgemeine Angaben: angezeigte Seite, Kategorie und Artikel, bestellte Artikel mit Menge und Preis, Postleitzahl, Ort und Land der Adressen sowie Zahlungsart und Zustellung. Wo eine Zuordnung zu einer Person nötig wäre, stehen nur Hashwerte, beispielsweise bei Userindex und E-Mail-Adresse.

## Wie die Daten in die Seite kommen

Am Ende jeder HTML-Seite setzt der Shop die Variablen und ruft anschließend eine JavaScript-Datei auf, die sie ausliest und an das externe System schickt. Dieses JavaScript erstellt in der Regel der externe Dienstleister.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<body>
  ...
  <script language="JavaScript">
  <!--
     var ws_state="Start";
     var ws_page_name="Startseite";
     ...
  //-->
  </script>
  <script src="<JavaScript-Datei>" type="text/javascript"></script>
</body>
```

## Netto oder brutto

In einem Netto-Shop werden alle Preise und Kosten netto ausgegeben, in einem Brutto-Shop brutto. Die einzige Ausnahme ist `ws_basket_total`, die Gesamtsumme, die immer brutto ist. Einige Werte wie Warenwert und Gesamtsumme stehen zusätzlich in beiden Varianten bereit.

Welche Variante Ihr Shop verwendet, sagt `ws_price_type`. Verlassen Sie sich darauf, statt es aus den Werten zu erraten.

## Standardvariablen

Diese Variablen stehen auf jeder Seite, können aber leer sein.

| Variable | Bedeutung |
| - | - |
| `ws_state` | Zustand, in dem sich der Shop beim Anzeigen der Seite befindet |
| `ws_shopid` | Von WEBSALE vergebene ShopID |
| `ws_subshopid` | Von WEBSALE vergebene SubshopID. Subshops dienen beispielsweise weiteren Sprachen, können aber auch einen Endkundenshop oder einen Händlershop abbilden. |
| `ws_sid` | 32-stellige Session-ID, je Shop-Besuch eindeutig. Damit lässt sich die Zahl der Besuche exakt messen. |
| `ws_extid` | Optionale ID, die ein externer Dienstleister vergibt |
| `ws_page_name` | Name der angezeigten Seite, beispielsweise `Warenkorb` |
| `ws_data_type` | `basic` gibt nur Standardinformationen aus, `advanced` zusätzlich die unten als erweitert gekennzeichneten |
| `ws_order` | `yes`, wenn die Seite Teil des Bestellprozesses ist, sonst `no` |
| `ws_referer` | Optional beim Shop-Aufruf übergeben, beispielsweise `...&ref=google` |
| `ws_subreferer` | Weitere Angabe zum Referer, beispielsweise `...&subref=banner26` |
| `ws_http_referer` | Vollständige URL, von der der Shop aufgerufen wurde. Nicht jeder Browser übergibt einen HTTP-Referer. |
| `ws_login_type` | `na` für nicht angemeldet, `login` für angemeldeten Altkunden, `register` für registrierten Neukunden |
| `ws_tp1`, `ws_tp2`, `ws_tp3` | Optionale Parameter mit maximal 128 Zeichen, beim Shop-Aufruf über `&ws_tp1=...` übergeben. Fehlt der Parameter, gibt der Shop einen Leerstring aus. |
| `ws_gclid` | Optionale Google Click ID mit maximal 64 Zeichen, über `&gclid=...` übergeben |
| `ws_test` | `yes`, wenn der Shop im Testmodus läuft, sonst `no` |
| `ws_userindex_md5` | MD5-Hash des Userindexes. Für nicht angemeldete Besucher leer. |
| `ws_email_md5` | MD5-Hash der E-Mail-Adresse, erst sobald der Shop sie kennt |
| `ws_price_type` | `net` oder `gross` |
| `ws_currency` | Währungscode nach ISO 4217, beispielsweise `EUR` |
| `ws_currency_display` | Optionale Zielwährung, wenn Subshops mit unterschiedlichen Währungen arbeiten |
| `ws_exchange_rate` | Optionaler Umrechnungskurs zur Zielwährung |

`ws_test` sollten Sie in Ihrer Auswertung immer prüfen. Ohne diese Abfrage fließen Testbestellungen in die Statistik ein.

## Zustände und ihre Zusatzvariablen

`ws_state` bestimmt, welche weiteren Variablen gesetzt sind.

| Zustand | Beschreibung | Zusätzliche Variablen |
| - | - | - |
| `Start` | Startseite | |
| `Category` | Anzeige einer Kategorie | `ws_cat_name`, `ws_cat_index` |
| `Product` | Anzeige eines Artikels | `ws_cat_name`, `ws_cat_index`, `ws_prod_name`, `ws_prod_number`, `ws_prod_index` |
| `Basket` | Anzeige des Warenkorbs | |
| `AddBasket` | Artikel wurden in den Warenkorb gelegt | siehe unten |
| `DelBasket` | Artikel wurden aus dem Warenkorb gelöscht | siehe unten |
| `Address` | Eingabe der Rechnungsadresse | |
| `DelivAddress` | Eingabe einer abweichenden Lieferadresse | |
| `PayDeliv` | Angabe von Zahlungsart und Zustellung | |
| `Conditions` | Anzeige der AGB-Seite | |
| `PlaceOrder` | Bestellübersicht | |
| `Confirm` | Bestätigungsseite | siehe unten |
| `ProductRecmd` | Artikel weiterempfehlen | `ws_cat_name`, `ws_prod_name`, `ws_prod_number`, `ws_prod_index` |
| `ProductRecmdConfirm` | Bestätigung der Weiterempfehlung | wie `ProductRecmd` |
| `Voucher` | Seite zur Eingabe der Gutscheinnummer | |
| `Notify` | Allgemeine Meldungsseite | `ws_notify_msg` |
| `OrderHistory` | Bestellhistorie | |
| `Search` | Suchergebnisse | `ws_search_phrase`, `ws_search_results` |
| `MemoList` | Merkliste | |
| `PrintConfirm` | Druckansicht der Bestätigungsseite | |
| `Login` | Anmeldung oder Registrierung | `ws_login_error` |
| `UserAccount` | Kundenkonto | |
| `Template` | Ein beliebiges Template | `ws_template_name` |
| `DirectOrder` | Direktbestellung | |
| `Logout` | Abmeldung | |

### Werte von ws\_login\_error

| Wert | Bedeutung |
| - | - |
| `na` | Die Anmeldeseite wurde aufgerufen |
| `error` | Allgemeiner Fehler |
| `uid_pw` | Ungültige Benutzerkennung oder ungültiges Passwort bei der Bestandskundenanmeldung |
| `new_uid` | UserID existiert bereits oder ist falsch bei der Neukundenregistrierung |
| `new_pw` | Falsches Passwort bei der Neukundenregistrierung |
| `change_uid` | UserID existiert bereits oder ist falsch beim Ändern der UserID |
| `change_pw` | Falsches Passwort beim Ändern des Passworts |

### Warenkorb-Änderungen: AddBasket und DelBasket

Beide Zustände liefern dieselbe Struktur, einmal mit dem Präfix `ws_add_basket`, einmal mit `ws_del_basket`.

| Variable | Bedeutung |
| - | - |
| `…_positions` | Anzahl betroffener Positionen |
| `…_mainpositions` | Anzahl betroffener Hauptpositionen, also ohne versteckte Positionen und Set-Unterprodukte |
| `…_quantities` | Anzahl betroffener Artikel |
| `…_mainquantities` | Anzahl betroffener Hauptartikel |

Mit `ws_data_type=advanced` kommen hinzu: `…_subtotal` für den Warenwert sowie je Position ein Array `…[i][1]` bis `…[i][11]` mit Artikelnummer, Artikelname, Preis, Menge, Kategorie-Pfad, Produktindex, Mehrwertsteuersatz, Gesamtsumme sowie drei Kennzeichen für Set-Oberprodukt, Set-Unterprodukt und versteckte Position.

### Bestätigungsseite: Confirm

Mit `ws_data_type=advanced` liefert der Zustand `Confirm` die vollständige Bestellung.

| Gruppe | Variablen |
| - | - |
| Auftrag | `ws_order_number` |
| Mengen | `ws_basket_positions`, `ws_basket_mainpositions`, `ws_basket_quantities`, `ws_basket_mainquantities` |
| Summen | `ws_basket_subtotal`, `ws_basket_subtotal_net`, `ws_basket_subtotal_gross`, `ws_basket_total`, `ws_basket_total_net`, `ws_total_discount` |
| Versand und Zahlung | `ws_delivery_name`, `ws_delivery_cost`, `ws_payment_name`, `ws_payment_cost` |
| Affiliate | `ws_affiliate_provider`, `ws_affiliate_partner_id` |
| Rechnungsadresse | `ws_a_zip`, `ws_a_city`, `ws_a_country`, `ws_a_number` als MD5-Hash der Kundennummer |
| Lieferadresse | `ws_d_zip`, `ws_d_city`, `ws_d_country` |
| Optionale Kosten | `ws_climateneutral_cost` und `ws_web2print_cost`, jeweils zusätzlich mit `_net` und `_gross` |

Je Position steht ein Array `ws_basket[i][1]` bis `ws_basket[i][16]` bereit. Die Felder 1 bis 11 entsprechen denen von `AddBasket`, dazu kommen:

| Feld | Inhalt |
| - | - |
| `[12]` | Commission Info |
| `[13]` | AdditionalInput-Felder als JSON-Objekt |
| `[14]` | ExtraInput-Felder als JSON-Objekt |
| `[15]` | Freie Felder im Warenkorb als JSON-Objekt |
| `[16]` | Anzahl verwendeter Adressen der Position bei MultiALA, sonst leer |

## Affiliate-Parameter

`ws_affiliate_provider` nennt den Affiliate-Betreiber. Unterstützt werden Adbutler, Affilinet, Awin, vormals Zanox, und TradeDoubler.

`ws_affiliate_partner_id` ist die PartnerID, über die der Shop aufgerufen wurde und an die die Provision geht. Der Shop hält sie für Folgebestellungen vier Wochen lang in einem Cookie.

Je Betreiber entspricht sie einem anderen Übergabeparameter:

| Betreiber | Übergabeparameter |
| - | - |
| Adbutler | `fp` |
| Affilinet | `ref` |
| Awin | `PartnerID` |
| TradeDoubler | `tduid` |

Beide Parameter werden nur gesetzt, wenn der jeweilige Betreiber für Ihren Shop freigeschaltet ist.

## Artikelnummer und Produktindex

Der Produktindex ist ein variantenunabhängiger, eindeutiger Index je Artikel. Die Artikelnummer dagegen kann sich je Variante ändern. Wer Artikel in der Auswertung zusammenfassen will, gruppiert deshalb über den Produktindex, nicht über die Artikelnummer.

| Farbe | Größe | Artikelnummer | Produktindex |
| - | - | - | - |
| rot | 42 | 12345-1 | 24-2333 |
| rot | 43 | 12345-2 | 24-2333 |
| blau | 42 | 12345-3 | 24-2333 |

## Beispiele

Standardparameter, die auf jeder Seite erscheinen:

```javascript theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
var ws_shopid="test";
var ws_subshopid="deutsch";
var ws_sid="01b0e4e61dd4910fe09d79f07427e4";
var ws_extid="0815";
var ws_data_type="advanced";
var ws_order="no";
var ws_referer="xyz";
var ws_subreferer="123";
var ws_http_referer="http://www.domain.de/seite.htm";
var ws_login_type="na";
var ws_tp1="12345";
var ws_gclid="";
var ws_userindex_md5="";
```

Startseite:

```javascript theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
var ws_state="Start";
var ws_page_name="Startseite";
```

Kategorie. Als Kategoriename steht immer der vollständige Pfad, getrennt durch Schrägstriche:

```javascript theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
var ws_state="Category";
var ws_page_name="Kategorie";
var ws_cat_name="Kleidung/Hosen/Jeans";
```

Artikel:

```javascript theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
var ws_state="Product";
var ws_cat_name="Technik/Handys";
var ws_prod_name="Nokia 6100";
var ws_prod_number="123456";
```

## Verwandte Themen

* Wegweiser: [Marketing, SEO und externe Portale](https://dokumentation.websale.de/v8s/schnittstellen/marketing-seo-und-portale.md)
* Wegweiser: [WS-ASSE: Asynchronous Server Side Events](https://dokumentation.websale.de/v8s/schnittstellen/marketing-seo-und-portale/ws-asse.md)
* Wegweiser: [Integration von econda](https://dokumentation.websale.de/v8s/integration-von-econda/integration-von-econda.md)


## Related topics

- [WS-ASSE: Asynchronous Server Side Events](https://dokumentation.websale.de/v8s/schnittstellen/marketing-seo-und-portale/ws-asse.md)
- [Marketing, SEO und externe Portale](https://dokumentation.websale.de/v8s/schnittstellen/marketing-seo-und-portale.md)
- [$wsShipTrack - Sendungsverfolgung](https://dokumentation.websale.de/frontend/referenz/module/wsshiptrack.md)
- [JavaScript und jQuery](https://dokumentation.websale.de/v8s/templates/javascript-und-jquery.md)
- [Tracking einbinden](https://dokumentation.websale.de/v8s/funktionen-zur-shop-optimierung/tracking-einbinden.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.