> ## 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.

# Externe Dienste und Schnittstellen

> Wie die Einwilligung zur Datenverarbeitung konfiguriert wird, wie Captcha, Trusted Shops, Newsletter-Verwaltung und Partnerprogramm angebunden werden und über welche Schnittstellen der Shop mit externen Systemen spricht.

Alles, was der Shop außerhalb seiner selbst anspricht, wird hier konfiguriert. Das sind drei verschiedene Arten von Diensten.

Zuerst die Dienste, bei denen es um die Einwilligung des Besuchers geht, also Cookie-Einwilligung und Captcha. Dann die fachlichen Dienste, mit denen der Shop zusammenarbeitet, von [Trusted Shops](https://dokumentation.websale.de/v8s/marketing-funktionen/trusted-shops.md) über den [E-Marketing-Manager](https://dokumentation.websale.de/v8s/marketing-funktionen/e-marketing-manager.md) bis zum Partnerprogramm. Zum Schluss die technischen Schnittstellen, über die Daten in beide Richtungen fließen.

Referenz: Shopkonfiguration shop.config, Übersicht aller Abschnitte

## `AgreementCookies`

Der zentrale Abschnitt für die [Einwilligung zur Datenverarbeitung](https://dokumentation.websale.de/v8s/referenz/verwendete-cookies.md#einwilligung-zur-datenverarbeitung). Er legt fest, welche Dienste der Besucher einzeln oder gruppiert zulassen oder ablehnen kann. Die getroffene Auswahl wird erst gespeichert, wenn der Besucher eine Schaltfläche "Einstellungen speichern" drückt.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<AgreementCookies>
   Allow = yes
   <+ConsentGroupInfo>
      ConsentGroupID = marketing
      Name           = Marketing
      Descr          = Dienste zur Reichweitenmessung und Werbung
   </+ConsentGroupInfo>
   <+Entry>
      Allow          = yes
      ID             = google-analytics
      Type           = OptIn
      Name           = Google Analytics
      Descr          = Misst die Nutzung unseres Shops.
      Preselection   = unchecked
      ConsentGroupID = marketing
   </+Entry>
   <+Entry>
      Allow           = yes
      ID              = komfort
      Type            = OptIn
      Name            = Komfortfunktionen
      Descr           = Merkt sich Ihren Warenkorb und Ihre Einstellungen.
      +WEBSALEService = CookieBasket
      +WEBSALEService = WelcomeCookie
   </+Entry>
</AgreementCookies>
```

### Hauptschalter

| Parameter | Zweck | Werte |
| - | - | - |
| `Allow` | Einwilligungsverwaltung aktivieren | `no`, `yes`, `test`. Standard: `no` |

`no` geht von einem Einverständnis des Besuchers aus. Der gesamte Abschnitt ist dann wirkungslos, alle Klammerungen in den Templates werden aktiv, alle Dienste laufen und alle Cookies werden gesetzt. Dasselbe gilt, wenn der Abschnitt in der `shop.config` gar nicht vorhanden ist.

`yes` aktiviert die konfigurierten Einstellungen. Zusätzlich werden die Komfortfunktionen automatisch deaktiviert, bis sie konfiguriert sind und die Einwilligung vorliegt. Betroffen sind Cookie-Warenkorb, Welcome-Back-Funktion, Affiliate-, Referer- und Design-Cookies.

`test` zeigt alle positiven `AC-AgreementMadeForID`-Bereiche an, die geklammerten Dienste laufen also bei jedem Besucher.

> [!WARNING]
>
> Der Kernel wertet `test` jedoch nur aus, wenn der Shop tatsächlich im Testmodus läuft. Im Livebetrieb wirkt `test` wie `no`.
>
> Dieser Unterschied ist erheblich, weil er darüber entscheidet, ob datenschutzrelevante Dienste bei echten Besuchern ausgeführt werden. Bitte vor dem Einsatz von `test` bestätigen lassen.

### `+Entry`

Je Dienst, für den die Einwilligung abgefragt werden soll, ein Unterabschnitt.

| Parameter | Zweck | Werte |
| - | - | - |
| `Allow` | diesen Dienst-Eintrag aktivieren | `yes`, `no`, `test`. Standard: `yes` |
| `ID` | ID des Dienstes | alphanumerisch, Binde- und Unterstrich |
| `Name` | Name des Dienstes | Text, maximal 128 Zeichen |
| `Descr` | Beschreibung des Dienstes | Text beliebiger Länge |
| `Type` | Art der Zustimmung | `OptIn`, `OptOutChecked`, `OptOutUnchecked`. Standard: `OptIn` |
| `Preselection` | Vorbelegung der Checkbox | `checked`, `unchecked`. Standard: `unchecked` |
| `ConsentGroupID` | Zuordnung zu einer Gruppierung | alphanumerisch, Binde- und Unterstrich |
| `ExternalServiceID` | Kennzeichnung eines speziellen Drittanbieter-Dienstes | in Vorbereitung |
| `+WEBSALEService` | WEBSALE-Komfortfunktion, die an diesen Dienst gebunden wird | siehe unten |
| `iOSApp-AcceptViaTrackingFramework-List` | Trackingstatus aus der iOS-App, bei denen dieser Eintrag aktiv wird | siehe unten |

`OptIn` bedeutet: der Besucher hakt die Checkbox an und erteilt damit die Einwilligung. `OptOutChecked` bedeutet: eine angehakte Checkbox gilt als Widerspruch. `OptOutUnchecked` bedeutet: eine **nicht** angehakte Checkbox gilt als Widerspruch.

Die Checkbox für eine komplette Gruppierung wird immer als `OptIn` ausgeführt. Sie verarbeitet die unterschiedlichen Typen der darin enthaltenen Dienste aber korrekt.

#### WEBSALE-Komfortfunktionen

Je Funktion ein eigener `+WEBSALEService`-Parameter.

| Wert | Funktion |
| - | - |
| `CookieBasket` | Cookie-Warenkorb |
| `WelcomeCookie` | Welcome-Back-Funktion |
| `DesignCookie` | Design-Cookie `DC-CookieData` |
| `RefererCookie` | Übergabe von Referern |
| `AffiliateProgram` | Partnerprogramm |
| `TellAFriendCookie` | Tell-A-Friend-Funktion |

> [!WARNING]
>
> `RefererCookie` und `AffiliateProgram` sollten immer in derselben Gruppierung stehen, weil die beiden Dienste teilweise zusammenhängen. Eine getrennte Einwilligung führt zu Lücken in der Werbeerfolgskontrolle.

#### Trackingstatus aus der iOS-App

Seit iOS 14.5 fragt das AppTrackingTransparency-Framework den Nutzer beim ersten Öffnen der App, ob er Tracking zulässt. Das Framework übermittelt den Status im HTTP-Header an die WEBSALE-App. Mit `iOSApp-AcceptViaTrackingFramework-List` legen Sie als kommaseparierte Liste fest, bei welchen Statuswerten dieser Eintrag aktiv wird.

| Wert | Bedeutet |
| - | - |
| `authorized` | der Nutzer erlaubt Tracking |
| `denied` | der Nutzer lehnt Tracking ab |
| `not_determined` | der Nutzer hat noch nichts entschieden |
| `restricted` | Tracking ist global auf dem Gerät deaktiviert |
| `pre_ios14` | das Gerät läuft mit einer iOS-Version vor 14, es gibt dort kein Framework |
| `always` | der Dienst wird unabhängig vom übermittelten Wert aktiviert |

Bei Verwendung der iOS-App wird kein Consent-Layer mehr angezeigt. Die Entscheidung trifft der Nutzer stattdessen im Framework.

### `+ConsentGroupInfo`

Fasst mehrere Dienste zu einer Gruppierung zusammen, die der Besucher gemeinsam zulassen oder ablehnen kann.

| Parameter | Zweck | Werte |
| - | - | - |
| `ConsentGroupID` | ID, wie sie in den `+Entry`-Abschnitten steht | alphanumerisch |
| `Name` | Name der Gruppierung | Text, maximal 128 Zeichen |
| `Descr` | Beschreibung der Gruppierung | Text beliebiger Länge |

Die Reihenfolge der `+ConsentGroupInfo`-Abschnitte bestimmt die Reihenfolge der Anzeige im Template. Nicht gruppierte Dienste erscheinen darunter.

Gibt es Dienste ohne `ConsentGroupID`, legt der Shop automatisch eine Gruppierung mit der ID `ws_noconsentgroupfound` an und weist ihr alle diese Dienste zu.

## Captcha

Zwei Captcha-Dienste lassen sich einbinden. Beide werden hier konfiguriert, die zugehörigen Tags sind auf eigenen Seiten beschrieben.

### `ReCaptchaV3`

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<ReCaptchaV3>
   SiteKey            = 6Lxxxxxxxxxxxxxxxxxxxx
   SecretKey          = 6Lyyyyyyyyyyyyyyyyyyyy
   APIUrl             = https://www.google.com/recaptcha/api.js
   VerifyUrl          = https://www.google.com/recaptcha/api/siteverify
   MinimumScoreToPass = 0.5
</ReCaptchaV3>
```

| Parameter | Zweck | Werte |
| - | - | - |
| `SiteKey` | Websiteschlüssel von Google | Schlüssel |
| `SecretKey` | geheimer Schlüssel von Google | Schlüssel |
| `APIUrl` | URL der reCAPTCHA-API | URL |
| `VerifyUrl` | URL für die Prüfung der Antwort | URL |
| `MinimumScoreToPass` | ab welchem Wert ein Besucher als Mensch gilt | 0.1 bis 1.0. Standard: 0.5 |

reCAPTCHA liefert einen Wert zwischen 0 und 1 zurück. 0 bedeutet sehr wahrscheinlich ein Bot, 1 sehr wahrscheinlich ein Mensch. Über `MinimumScoreToPass` stellen Sie die Schwelle feiner ein.

Referenz: [RECAPTCHAV3-Tags](https://dokumentation.websale.de/v8s/referenz/tags/recaptchav3-google-recaptcha.md)

### `FriendlyCaptchaV1`

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<FriendlyCaptchaV1>
   ApplicationID = ABCDEFGH12345678
   APIKey        = A1B2C3D4E5F6
   APIUrl        = https://eu-api.friendlycaptcha.eu/api/v1/puzzle
   VerifyUrl     = https://eu-api.friendlycaptcha.eu/api/v1/siteverify
</FriendlyCaptchaV1>
```

| Parameter | Zweck |
| - | - |
| `ApplicationID` | ApplicationID aus dem FriendlyCaptcha-Backend |
| `APIKey` | API-Key aus FriendlyCaptcha |
| `APIUrl` | URL der FriendlyCaptcha-API |
| `VerifyUrl` | URL für die Prüfung der Antwort |

FriendlyCaptcha bietet einen globalen und einen EU-Endpunkt an. Welcher für Sie gilt, steht in der Dokumentation von FriendlyCaptcha.

Referenz: [FRIENDLYCAPTCHAV1-Tags](https://dokumentation.websale.de/v8s/referenz/tags/friendlycaptchav1.md)

## Trusted Shops

### `TrustedShopsAdvList`

Definiert die Käuferschutzprodukte, die dem Besteller zur Auswahl angeboten werden. Je Produkt ein `+Entry`-Unterabschnitt.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<TrustedShopsAdvList>
   VATType       = static
   VATRate-Value = 1
   <+Entry>
      TSID-Txt      = TS080501_500_30_EUR
      ERPID-Txt     =
      ListName-Txt  = Käuferschutz bis 500 Euro (0,98 Euro inkl. MwSt.)
      OrderName-Txt = Käuferschutz bis 500 Euro
      Cost-Value    = 0.98
   </+Entry>
   <+Entry>
      TSID-Txt      = TS080501_1500_30_EUR
      ListName-Txt  = Käuferschutz bis 1.500 Euro (2,94 Euro inkl. MwSt.)
      OrderName-Txt = Käuferschutz bis 1.500 Euro
      Cost-Value    = 2.94
   </+Entry>
</TrustedShopsAdvList>
```

| Parameter | Zweck | Werte |
| - | - | - |
| `VATType` | Ermittlung des Mehrwertsteuersatzes für den Käuferschutz | `dynamic`, `static`. Standard: `static` |
| `VATRate-Value` | Mehrwertsteuerindex, nur bei `static` | 1 bis 10. Standard: 1 |

Je `+Entry`:

| Parameter | Zweck | Werte |
| - | - | - |
| `TSID-Txt` | Produkt-ID von Trusted Shops. Wird genau so übermittelt | ID nach Vorgabe von Trusted Shops |
| `ERPID-Txt` | optionale Artikelnummer der Warenwirtschaft | Nummer |
| `ListName-Txt` | Eintrag in der Auswahlliste | Text |
| `OrderName-Txt` | Text in den Bestelldaten | Text |
| `Cost-Value` | Kosten des Käuferschutzprodukts | Betrag |

> [!WARNING]
>
> `TSID-Txt` muss exakt mit der Vorgabe von Trusted Shops übereinstimmen. Der Shop übermittelt diesen Wert unverändert.
>
> `ERPID-Txt` brauchen Sie nur, wenn Ihre Warenwirtschaft die Produkt-ID von Trusted Shops nicht direkt verarbeiten kann.

### `TrustedShops-Txt`

Texte für die Bestätigungsseite nach einer Bestellung, über die sich der Käufer bei Trusted Shops anmelden kann.

| Parameter | Zweck |
| - | - |
| `HeadLine` | Titeltext |
| `Line2` bis `Line5` | Fließtext zur Beschreibung des Dienstes |

> [!WARNING]
>
> Dieser Abschnitt gehört zu einer veralteten Form der Trusted-Shops-Integration. Die aktuelle Integration läuft über `TrustedShopsAdvList`. Verwenden Sie `TrustedShops-Txt` nur in Bestandsshops, die noch darauf aufbauen.

## `eMarketingManager`

Die Templates für die Newsletter-Verwaltung und die Online-Ansicht des Newsletters. Der Abschnitt heißt in der Konfiguration `eMarketingManager`, ohne Bindestriche.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<eMarketingManager>
   Manage         = incl_newsletter.htm
   OnlineView     = incl_newsletter_onlineview.htm
   ShopManage     = tpl_newsletter.htm
   ShopOnlineView = tpl_newsletter_onlineview.htm
</eMarketingManager>
```

| Parameter | Zweck |
| - | - |
| `Manage` | ExternInclude-Bereich für die Zielgruppen-Verwaltung |
| `OnlineView` | ExternInclude-Bereich für die Online-Ansicht im Shop |
| `ShopManage` | Shop-Template, über das `Manage` eingebunden wird |
| `ShopOnlineView` | Shop-Template, über das `OnlineView` eingebunden wird |

Jedes Shop-Template bindet den gleichnamigen Include-Bereich ein.

### `eMarketingManager-Txt`

Die Erfolgs- und Fehlermeldungen rund um die Newsletter-Anmeldung.

| Parameter | Erscheint, wenn |
| - | - |
| `NoEmail` | keine gültige E-Mail-Adresse eingegeben wurde |
| `NoTargetgroupSelected` | kein Interessengebiet ausgewählt wurde |
| `TargetgroupAlreadySubscribed` | der Besucher bereits in allen gewählten Gebieten eingetragen ist |
| `InputTooLong` | die Eingaben die maximale Länge überschreiten |
| `MaxSubscriber` | derzeit keine weiteren Interessenten aufgenommen werden können |
| `WaitVerification` | bereits eine Bestätigungsmail verschickt wurde |
| `OldVerification` | der Gültigkeitszeitraum des Anmeldungs-Links abgelaufen ist |
| `VerificationError` | die Bestätigung der E-Mail-Adresse fehlgeschlagen ist |
| `ErrorCreate` | beim Anlegen der Daten ein Fehler aufgetreten ist |
| `IncorrectConfiguration` | der Dienst wegen fehlender Konfiguration nicht nutzbar ist |
| `Error` | ein allgemeiner Fehler aufgetreten ist |
| `SubscriberOnly` | die Adresse im Newsletter nicht angemeldet ist |
| `VerifiedOK` | die E-Mail-Adresse erfolgreich bestätigt wurde |
| `SubscribedOK` | die Anmeldung erfolgreich war |
| `UnsubscribedOK` | die Abmeldung erfolgreich war |
| `VerifyEmailSent` | eine Bestätigungsmail verschickt wurde |
| `BlackListed` | der Besucher aus allen Newslettern ausgetragen und auf die Blacklist gesetzt wurde |

## `WSAffiliateTemplates`

Die Banner-Templates für das WEBSALE-Partnerprogramm. Der Abschnitt wird nur gebraucht, wenn Partner zusätzlich zu den angelegten Bannern jedes Produkt des Shops als Banner verwenden dürfen, die sogenannten Dynamic Banners.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<WSAffiliateTemplates>
   Start    = ws_affiliate_start.htm
   Category = ws_affiliate_category.htm
   Product  = ws_affiliate_product.htm
</WSAffiliateTemplates>
```

| Parameter | Zweck |
| - | - |
| `Start` | Startseite für die Banner-Auswahl |
| `Category` | Kategorieseite für die Banner-Auswahl |
| `Product` | Produktdetailseite für die Banner-Auswahl |

Die Beispiele sind bewusst sprechend gewählt, damit die Zuordnung der drei Parameter erkennbar bleibt.

## `ExternSystemLiveChecks`

Prüft die Verfügbarkeit externer Systeme. Bis zu zehn `+Entry`-Unterabschnitte, jeder mit einer eigenen ID. Diese ID verwenden Sie als Argument des Bereichs-Tags `WS-ExternSystemLiveCheck()`.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<ExternSystemLiveChecks>
   <+Entry>
      ID        = search
      URL       = https://suche.beispiel.de/alivetest.php
      Type      = 2
      CheckMode = failPersistant
      Timeout   = 1000
   </+Entry>
</ExternSystemLiveChecks>
```

| Parameter | Zweck | Werte |
| - | - | - |
| `ID` | eindeutige Kennung für das Tag | Text, darf nicht leer sein |
| `URL` | Adresse des LiveCheck-Aufrufs | URL, darf nicht leer sein |
| `Type` | Typ der Prüfung | `1` für beliebige Dienstleister, `2` für den Findologic-Alivetest |
| `CheckMode` | wann geprüft wird | `always`, `failPersistant`, `successPersistant`. Standard: `always` |
| `Timeout` | Antwortzeit in Millisekunden | 1 bis 3000. Standard: 3000 |

`always` fragt bei jeder Prüfung an. `failPersistant` fragt so lange an, bis der Check zum ersten Mal fehlschlägt, und wertet ihn danach für die ganze Sitzung als fehlgeschlagen. `successPersistant` arbeitet umgekehrt und wertet nach dem ersten Erfolg die ganze Sitzung als erfolgreich.

> [!WARNING]
>
> Ein `+Entry` wird stillschweigend übersprungen, wenn `ID` leer ist, `URL` leer ist oder `Type` keine gültige Zahl enthält. Jedes Tag mit einer so ausgefallenen ID als Argument bleibt im Template unersetzt stehen.
>
> Ein `Timeout` von 0 oder oberhalb des Maximums wird still auf das Maximum gesetzt.
>
> Die Wahl des Timeouts ist ein Kompromiss. Zu klein, und die Prüfung schlägt fehl, obwohl das externe System verfügbar ist. Zu groß, und der Seitenaufbau verzögert sich spürbar, wenn das System nicht erreichbar ist.

### Schnittstelle für Typ 1

Bei `Type = 1` stellt der Shop eine HTTP-GET-Anfrage an die angegebene URL. Antwortet das System mit `OK`, gilt die Prüfung als erfolgreich. Jede andere Antwort und jede ausbleibende Antwort gelten als Fehlschlag.

```php theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<?php
// Eigene Prüfungen implementieren, dabei keine Ausgaben erzeugen.
// Ergebnis in $result ablegen.
if ($result == true)
    echo "OK";
else
    echo "Not OK";
```

Referenz: [WS-ExternSystemLiveCheck()](https://dokumentation.websale.de/v8s/referenz/tags/ws/merkzettel-vergleich-upload-und-externe-dienste.md#die-tags-im-uberblick)

## `IDSSchnittstelle`

Konfiguriert die integrierte Datenschnittstelle IDS. Die Absenderdaten gehen an das anfragende System, die übrigen Parameter steuern das Übergabeformat.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<IDSSchnittstelle>
   SupplierName             = Mein Shop GmbH
   SupplierStreet           = Musterstraße 1
   SupplierPCode            = 90000
   SupplierCity             = Nürnberg
   SupplierCountry          = Deutschland
   SupplierPhone            = 0911 1234567
   SupplierEmail            = info@mein-shop.de
   SendVatInPercent         = yes
   RueckgabeKZ              = yes
   EncodeOrderInfo          = no
   GenerateOrderInfoIfEmpty = yes
   ClearBasket              = yes
   SurchargeAsOrderItem     = yes
</IDSSchnittstelle>
```

### Absenderdaten

| Parameter | Zweck |
| - | - |
| `SupplierName` | Firmenname des Shopbetreibers |
| `SupplierStreet` | Straße und Hausnummer |
| `SupplierPCode` | Postleitzahl |
| `SupplierCity` | Stadt |
| `SupplierCountry` | Land |
| `SupplierPhone` | Telefonnummer |
| `SupplierEmail` | E-Mail-Adresse |

### Übergabeformat

| Parameter | Zweck | Werte |
| - | - | - |
| `WriteToOrderFile` | einen IDS-Bereich mit hexkodiertem Warenkorb in die Bestelldaten schreiben | `yes`, `no`. Standard: `no` |
| `SendVatInPercent` | Umsatzsteuer in Prozent statt als Betrag übergeben | `yes`, `no`. Standard: `no` |
| `RueckgabeKZ` | Rückgabekennzeichen übergeben, ob eine Bestellung erfolgt ist | `yes`, `no`. Standard: `no` |
| `EncodeOrderInfo` | OrderInfo XML-kodiert übergeben | `yes`, `no`. Standard: `yes` |
| `GenerateOrderInfoIfEmpty` | fehlende Pflichtfelder der OrderInfo erzeugen | `yes`, `no`. Standard: `no` |
| `ResetStateAfterSend` | internen IDS-Status nach dem Senden zurücksetzen | `yes`, `no`. Standard: `no` |
| `ClearBasket` | bei jeder neuen IDS-Anfrage den Warenkorb leeren | `yes`, `no`. Standard: `no` |
| `SurchargeAsOrderItem` | für den Mindermengenzuschlag ein eigenes OrderItem anlegen | `yes`, `no`. Standard: `no` |
| `SendPriceBasis` | Preisbasis mit übergeben | `yes`, `no`. Standard: `no` |

Für das Warenwirtschaftssystem LABELWIN sind fünf dieser Schalter vorgegeben: `SendVatInPercent = yes`, `RueckgabeKZ = yes`, `EncodeOrderInfo = no`, `GenerateOrderInfoIfEmpty = yes`, `ClearBasket = yes` und `SurchargeAsOrderItem = yes`.

> [!WARNING]
>
> Die IDS-Schnittstelle muss zusätzlich für den Shop freigeschaltet sein. Diese Freischaltung ist keine Einstellung der `shop.config`, sondern erfolgt durch die WEBSALE AG. Ohne sie bleibt der gesamte Abschnitt wirkungslos.

## `ASSE`

Die Schnittstelle zur asynchronen Datenübermittlung, [Asynchronous Server Side Events](https://dokumentation.websale.de/v8s/schnittstellen/marketing-seo-und-portale/ws-asse.md). Je Übermittlungsziel ein `+Entry`-Unterabschnitt.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<ASSE>
   <+Entry>
      ID              = tracking
      Endpoint        = https://tracking.beispiel.de/event
      Type            = Post
      ContentType     = application/json
      ServiceCategory = Tracking
      <DefinitionOfOK>
         <+ConditionGroup>
            <+Condition>
               Proof = HTTPStatusCode
               Type  = value
               Value = 200
            </+Condition>
         </+ConditionGroup>
      </DefinitionOfOK>
      <AdditionalHeaders>
         <+HttpHeader>
            Name  = X-Api-Key
            Value = geheim
         </+HttpHeader>
      </AdditionalHeaders>
   </+Entry>
</ASSE>
```

### `+Entry`

| Parameter | Zweck | Werte |
| - | - | - |
| `ID` | eindeutiger Bezeichner | alphanumerisch, maximal 64 Zeichen |
| `Endpoint` | Ziel der Übermittlung. WEBSALE-Tags sind erlaubt | URL |
| `Type` | HTTP-Methode | `Post`, `Get`, `Put`. Standard: `Post` |
| `PayloadParameterName` | optionaler Parametername vor der Nutzlast | Text |
| `ContentType` | Datenformat | beispielsweise `application/json` |
| `ServiceCategory` | steuert Fehlversuche, Abstände und Timeout | `Tracking`, `OrderNotification` |

> [!WARNING]
>
> `ID` und `Endpoint` sind Pflicht. Fehlt einer von beiden, wird der Eintrag verworfen.
>
> Anders als die meisten Abschnitte der `shop.config` meldet `ASSE` Konfigurationsfehler. Ein leeres `ID`, ein leeres `Endpoint`, ein unbekannter `Type` und eine unbekannte `ServiceCategory` erzeugen jeweils eine interne Fehlermeldung.
>
> Auch `ASSE` braucht eine Freischaltung durch die WEBSALE AG, die außerhalb der `shop.config` erfolgt.

Die Werte von `ServiceCategory` gibt WEBSALE vor. Dahinter stehen unterschiedliche Vorgaben für Wiederholversuche und Timeouts.

### `DefinitionOfOK`

Optionaler Abschnitt mit den Bedingungen für eine erfolgreiche Zustellung. Fehlt er, wird einmal gesendet und das Ergebnis nicht geprüft.

Die `+ConditionGroup`-Abschnitte sind **oder**-verknüpft, die `+Condition`-Abschnitte darin **und**-verknüpft.

| Parameter | Zweck | Werte |
| - | - | - |
| `Proof` | was geprüft wird | siehe unten |
| `DataSelector` | Auswahl des Datenfelds, nur bei `Proof = ResponseJSONData` | Feldbezeichner |
| `Type` | Art der Prüfung | `filled`, `empty`, `value`, `notvalue`, `inlist`, `notinlist`, `greater`, `smaller` |
| `Value` | geprüfter Wert, nicht relevant bei `filled` und `empty` | Text |

| `Proof` | prüft |
| - | - |
| `HTTPStatusCode` | den Statuscode der Antwort, beispielsweise 200 |
| `ContentType` | das Datenformat der Antwort |
| `ResponsePlain` | die Antwort als Klartext, beispielsweise `OK` |
| `ResponseJSON` | dasselbe im JSON-Format |
| `ResponseJSONData` | einzelne Felder der zurückgegebenen JSON-Daten. Braucht `DataSelector` und `Type` |

### `AdditionalHeaders`

Optionaler Abschnitt für zusätzliche HTTP-Header. Je Header ein `+HttpHeader`-Unterabschnitt mit `Name` und `Value`.

## `Upload`

Aktiviert das Upload-Modul und hinterlegt die zugehörigen Texte.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Upload>
   Allow                    = yes
   ID-Txt                   = Upload-ID
   PositionID-Txt           = Position-ID
   Link-Txt                 = Upload-Link
   OrderDataUploadLink-Type = UploadLink
</Upload>
```

| Parameter | Zweck | Werte |
| - | - | - |
| `Allow` | Upload-Modul aktivieren | `yes`, `no`. Standard: `no` |
| `ID-Txt` | Text für das Eingabefeld der Upload-ID | Text |
| `PositionID-Txt` | Text für das Eingabefeld der Position-ID | Text |
| `Link-Txt` | Text für den Upload-Link | Text |
| `OrderDataUploadLink-Type` | Art des Links in den Bestelldaten | `UploadLink`, `UploadLinkOrderNumber`. Standard: `UploadLink` |

`UploadLink` schreibt einen Deep Link mit gesicherter Upload-ID in die Bestelldaten. `UploadLinkOrderNumber` schreibt stattdessen einen Deep Link mit gesicherter Auftragsnummer.

## `Download`

Die Texte und die URL-Logik für das Download-Modul.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Download>
   ID-Txt   = Download-ID
   Link-Txt = Download-Link
   URLType  = default
</Download>
```

| Parameter | Zweck | Werte |
| - | - | - |
| `ID-Txt` | Text für die Download-ID | Text |
| `Link-Txt` | Text für den Download-Link | Text |
| `URLType` | Art der URL in den Download-Templates | `default`, `relative`. Standard: `default` |

`default` verwendet eine absolute, global für alle Shops konfigurierte URL. `relative` fügt relative URLs ein. Welche Domain der Browser dann anzeigt, hängt davon ab, über welche URL das Download-Modul aufgerufen wurde.

## `TellAFriend`

Steuert, ob und wie die Werber-Informationen der Tell-A-Friend-Funktion in die Bestelldaten geschrieben werden. Der Abschnitt ist vollständig auf der Seite zu den TAF-Tags beschrieben und hier deshalb nur verlinkt.

Referenz: TAF-Tags und Abschnitt TellAFriend


## Related topics

- [Merkzettel, Vergleich, Upload und externe Dienste](https://dokumentation.websale.de/v8s/referenz/tags/ws/merkzettel-vergleich-upload-und-externe-dienste.md)
- [Externe Dienste: Übersicht](https://dokumentation.websale.de/v8s/externe-dienste/externe-dienste.md)
- [Schnittstellen](https://dokumentation.websale.de/v8s/schnittstellen.md)
- [Marketing, SEO und externe Portale](https://dokumentation.websale.de/v8s/schnittstellen/marketing-seo-und-portale.md)


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