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

# SHIPTRACK- (Sendungsverfolgung)

> Den Sendungsstatus beim Versanddienstleister abfragen und im Template ausgeben: den Abruf auslösen, den Erfolg prüfen, Fehlercodes auswerten und die Antwort über die JSON-Schnittstelle zerlegen.

Hat ein Käufer seine Bestellung abgeschickt, will er wissen, wo das Paket gerade ist. Die Sendungsverfolgung holt diese Auskunft direkt beim Versanddienstleister und stellt sie im Template bereit.

Vier Tags genügen dafür, und sie bauen aufeinander auf. Ein Tag stößt den Abruf an, ein zweites sagt, ob er geklappt hat, ein drittes nennt im Fehlerfall den Grund, und das vierte liefert die Antwort des Dienstleisters zur Weiterverarbeitung.

* Wegweiser: [DHL-Sendungsverfolgung](https://dokumentation.websale.de/v8s/referenz/tags/shiptrack-sendungsverfolgung.md)
* Wegweiser: [Post AT Sendungsverfolgung](https://dokumentation.websale.de/v8s/referenz/tags/shiptrack-sendungsverfolgung.md)

Alle vier Tags sind auf allen Templates zulässig. Die Funktion muss im Shop freigeschaltet sein, und die Zugangsdaten je Dienstleister stehen im Abschnitt `ShipTrack` der Shopkonfiguration. Jeder Eintrag dort hat eine Kennung, über die Sie ihn im Template ansprechen.

## Den Abruf auslösen

`SHIPTRACK-Get()` nimmt zwei Argumente entgegen: die Kennung des Konfigurationseintrags und die Sendungsnummer. Beide dürfen aus einem anderen Tag kommen.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~SHIPTRACK-Get(DHL,$DC-FPtrackingNumber_StripHTML$)~
```

> [!WARNING]
>
> Das Tag stößt eine Anfrage beim Versanddienstleister an und wartet auf dessen Antwort. Setzen Sie es genau einmal und nur dort, wo das Ergebnis gebraucht wird. Auf einer Übersichtsseite mit vielen Sendungen wird aus jedem Vorkommen eine eigene Anfrage.
>
> `SHIPTRACK-Get()` ist ausschließlich ein Einzel-Tag und braucht beide Argumente. Fehlt eines, oder ist eines nach der Tag-in-Tag-Auflösung leer, gilt das ganze Tag als ungültig und erzeugt eine Meldung im Template.

Übergeben Sie ein Tag als Argument, ersetzen Sie dessen Tilde-Zeichen durch Dollar-Zeichen, so wie im Beispiel.

Das Shopsystem unterstützt drei Dienstleister: DHL, die österreichische Post und den Schweizer-Post-Anbindung. Welcher gemeint ist, steht am Konfigurationseintrag, nicht im Tag. Im Template ändert sich dadurch nichts außer der Kennung im ersten Argument.

## War der Abruf erfolgreich

`SHIPTRACK-OK` gibt es nur als Klammerung. Es greift, wenn der letzte Abruf ohne Fehler durchgelaufen ist.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~SHIPTRACK-Get(DHL,$DC-FPtrackingNumber_StripHTML$)~

{SHIPTRACK-OK}
   <p>Aktueller Status Ihrer Sendung:</p>
   ...
{/SHIPTRACK-OK}

{!SHIPTRACK-OK}
   <p>Zu dieser Sendung liegen derzeit keine Informationen vor.</p>
{/!SHIPTRACK-OK}
```

> [!WARNING]
>
> Die Reihenfolge im Template entscheidet. `SHIPTRACK-OK`, `SHIPTRACK-LastErrorCode` und `SHIPTRACK-JSONResult` beziehen sich auf den **letzten** Abruf und müssen deshalb hinter `SHIPTRACK-Get()` stehen. Davor hat noch kein Abruf stattgefunden.

## Fehler nachvollziehen

`SHIPTRACK-LastErrorCode` gibt den Code des letzten Abrufs aus.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{!SHIPTRACK-OK}
   <p>Die Sendungsverfolgung ist derzeit nicht erreichbar. Fehlercode ~SHIPTRACK-LastErrorCode~.</p>
{/!SHIPTRACK-OK}
```

| Code | Bedeutung |
| - | - |
| 0 | der Abruf war erfolgreich |
| 1 | die Sendungsverfolgung ist im Shop nicht freigeschaltet |
| 2 | die Kennung ist leer |
| 3 | die Sendungsnummer ist leer |
| 4 | zu dieser Kennung gibt es keinen Konfigurationseintrag |
| 5 | der Konfigurationseintrag nennt keinen bekannten Dienstleister |
| ab 1000 | der Dienstleister hat den Abruf abgelehnt oder nicht geantwortet |

Die Codes 1, 4 und 5 weisen auf eine unvollständige Konfiguration hin, nicht auf ein Problem mit der Sendung. Ein Code ab 1000 kommt dagegen vom Dienstleister selbst, beispielsweise bei einer unbekannten Sendungsnummer, einer abgelehnten Anmeldung oder einer Zeitüberschreitung.

Die Codes 2 und 3 erreichen Sie über ein Template praktisch nicht. Ein leeres Argument lässt `SHIPTRACK-Get()` bereits vorher als ungültiges Tag auflaufen, es kommt also gar nicht erst zum Abruf.

> [!WARNING]
>
> `SHIPTRACK-LastErrorCode` greift als Klammerung, wenn ein Fehler vorliegt, also bei einem Code über null. Die negative Klammerung bedeutet damit nicht "kein Code verfügbar", sondern "kein Fehler", und ist gleichbedeutend mit `SHIPTRACK-OK`.

## Die Antwort auswerten

`SHIPTRACK-JSONResult` liefert die vollständige Antwort des Dienstleisters als JSON. Diese übergeben Sie an die JSON-Schnittstelle und greifen dort auf die einzelnen Angaben zu.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{SHIPTRACK-OK}
   ~EJD-SetRawDataInput($SHIPTRACK-JSONResult$)~
   ~EJD-LoadData(intern,rawdatainput,shiptrack)~
{/SHIPTRACK-OK}
```

Der Aufbau der Antwort kommt vom Dienstleister und unterscheidet sich je nach Anbieter. Bei DHL steht der zuletzt gemeldete Zustand im Kopf des Datensatzes, darunter folgt die Liste der einzelnen Ereignisse.

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "data": {
        "data": {
            "-piece-code": "00340435088500530592",
            "-last-event-timestamp": "10.06.2021 09:51",
            "-status": "Die Sendung wurde erfolgreich zugestellt.",
            "-product-name": "Warenpost",
            "data": [
                {
                    "-name": "piece-event",
                    "-event-timestamp": "09.06.2021 14:21",
                    "-event-status": "Die Sendung wurde elektronisch angekündigt.",
                    "-event-location": "",
                    "-standard-event-code": "VA"
                },
                {
                    "-name": "piece-event",
                    "-event-timestamp": "10.06.2021 09:51",
                    "-event-status": "Die Sendung wurde erfolgreich zugestellt.",
                    "-event-location": "",
                    "-standard-event-code": "ZU"
                }
            ]
        }
    }
}
```

DHL antwortet in XML. Das Shopsystem wandelt die Antwort vor der Ausgabe in JSON um. Daher die führenden Bindestriche an den Schlüsseln, sie kennzeichnen ehemalige XML-Attribute. Die österreichische Post liefert bereits JSON, dort fehlen diese Bindestriche.

> [!WARNING]
>
> Werten Sie `SHIPTRACK-JSONResult` nur innerhalb von `SHIPTRACK-OK` aus. Ohne einen vorangegangenen erfolgreichen Abruf ist die Ausgabe nicht brauchbar.

Die Feldnamen innerhalb der Antwort legt der Dienstleister fest, nicht das Shopsystem. Sie können sich ändern, ohne dass sich im Shop etwas ändert. Fangen Sie fehlende Felder deshalb mit den Prüftags der JSON-Schnittstelle ab, statt sich auf ihr Vorhandensein zu verlassen.

Referenz: [EJD- (JSON-Schnittstelle)](https://dokumentation.websale.de/v8s/referenz/tags/ejd.md)

## Die Tags im Überblick

| Tag | Einzel-Tag | Bereichs-Tag | negatives Bereichs-Tag | Schleifen-Tag |
| - | - | - | - | - |
| `SHIPTRACK-Get()` | ja | – | – | – |
| `SHIPTRACK-OK` | – | ja | ja | – |
| `SHIPTRACK-LastErrorCode` | ja | ja | ja | – |
| `SHIPTRACK-JSONResult` | ja | ja | ja | – |

Alle vier Tags sind auf allen Templates zulässig. Die letzten drei setzen einen vorangegangenen `SHIPTRACK-Get()` voraus.

## Verwandte Themen

* Wegweiser: DHL-Sendungsverfolgung
* Wegweiser: Post AT Sendungsverfolgung
* Referenz: [EJD- (JSON-Schnittstelle)](https://dokumentation.websale.de/v8s/referenz/tags/ejd.md)
* Referenz: Abschnitt [`ShipTrack`](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/versand-und-lieferung#shiptrack) in der Shopkonfiguration


## Related topics

- [$wsShipTrack - Sendungsverfolgung](https://dokumentation.websale.de/frontend/referenz/module/wsshiptrack.md)
- [checkout - Bestellablauf](https://dokumentation.websale.de/konfiguration/checkout-bestellablauf.md)
- [Versand und Lieferung](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/versand-und-lieferung.md)
- [Versandoptionen und Services für Käufer](https://dokumentation.websale.de/v8s/versandarten-anlegen/versandoptionen-und-services.md)
- [Konfigurations-Deeplinks](https://dokumentation.websale.de/admin-interface/konfigurations-deeplinks.md)


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