02 Retouren-Check¶
Wird vom DAILY mokebo-ops Sync automatisch befüllt — bitte nicht manuell editieren.
Status: — Letzter Erfolgs-Run: — Erfolgsquote 7d: — Trigger: — Node-Count: —
🟢 Auf einen Blick¶
| Was tut der Workflow | Trackt alle offenen Retouren-Sendungen aus dem Tracking-Sheet bei GLS/DHL nach, aktualisiert den Status, und triggert bei drei End-Zuständen automatisch ein Zendesk-Ticket. |
| Wann greift er | Cron: täglich 9:00 Uhr (30 Min nach 01 Retouren-Erfassung). |
| Sichtbarer Effekt für CS | Status-Updates im Tracking-Sheet. Bei 3 End-Zuständen: neues Zendesk-Ticket. |
| Symptom wenn kaputt | Sheet-letzter_check-Spalte zeigt heute kein Update. Oder fällige Sendungen bleiben in offen / in_transit hängen. |
| Owner | Susi (Backup: TBD) |
| Eskalation | Susi direkt anschreiben (Slack-DM). Mit Sendungsnummer einer hängenden Retoure als Beispiel. |
| Link in n8n | 02 Retouren-Check |
Architektur¶
flowchart TB
Cron[Täglich 9:00] --> SheetRead[Sheet 'Tracking' lesen]
SheetRead --> Filter[Fällige Einträge filtern
naechster_check ≤ heute]
Filter --> Empty{Fällig?}
Empty -- nein --> Stop[Ende]
Empty -- ja --> GLSToken[GLS Token holen]
GLSToken --> Track[Tracking prüfen
+ Status bestimmen]
Track --> Update[Sheet-Updates schreiben]
Track --> Ticket{End-Zustand?}
Ticket -- zugestellt --> ZdGutschrift[Zendesk-Ticket:
Gutschrift erstellen]
Ticket -- in_transit_überfällig --> ZdNachfrage[Zendesk-Ticket:
Carrier-Nachfrage]
Ticket -- nicht_versendet_geschlossen --> ZdAbgeschlossen[Zendesk-Ticket:
21d nicht versendet]
ZdGutschrift --> WriteTicket[Ticket-ID zurück ins Sheet]
ZdNachfrage --> WriteTicket
ZdAbgeschlossen --> WriteTicket
Subworkflow-Calls¶
Auto-generiert aus den executeWorkflow-Nodes — bitte nicht manuell editieren.
- (keine — eigenständiger Workflow)
Trigger & Datenfluss¶
- Trigger: Cron, täglich 9:00 Uhr.
- Quelle: Sheet
1VpOWnR_69GyhdWm8NOgvYYBR4zSNKbs3Gfxap3WcXmA, TabTracking(gleiches Sheet wie 01). - APIs:
- GLS:
POST https://api.gls-group.net/oauth2/v1/token(Token), dannGET …/track-and-trace-v1/tracking/simple/trackids/{nr}?showEvents=true. - DHL:
GET https://api-eu.dhl.com/track/shipments?trackingNumber={nr}mitDHL-API-Key-Header. - Zendesk: Ticket-Create bei drei End-Zuständen.
Status-Lebenszyklus¶
stateDiagram-v2
[*] --> offen: 01 schreibt
offen --> in_transit: Carrier sagt 'transit'
offen --> nicht_versendet_geschlossen: 21 Tage + immer noch not_shipped
in_transit --> zugestellt: delivered
in_transit --> in_transit_ueberfaellig: 10 Tage transit
zugestellt --> ticket_erstellt: Gutschrift-Ticket erzeugt
in_transit_ueberfaellig --> ticket_erstellt: Nachfrage-Ticket
nicht_versendet_geschlossen --> ticket_erstellt: Abschluss-Ticket
ticket_erstellt --> [*]
Sechs Stati: offen, in_transit, zugestellt, in_transit_ueberfaellig, nicht_versendet_geschlossen, ticket_erstellt.
Bekannte Stolpersteine / Edge-Cases¶
- Carrier-Patch (12.05.2026):
(data.carrier || '').toUpperCase().startsWith('DHL'/'GLS')statt=== 'DHL'/'GLS'. Das routet jetzt auchDHL-Prime,GLS-Prime,GLSShippingkorrekt zur richtigen Tracking-API. - Amazon-Retouren werden öfter geprüft:
naechster_check = heute + 2für Referrer4.01(Amazon Germany),+7für Rest. Im Code abhängig vonreferrer_id-Prefix143— TODO checken ob das nach mokebo-ID-Update noch korrekt ist. - DHL 429-Behandlung schwach:
RETRY_BACKOFFS_MS = []→ Retry-Schleife läuft genau einmal, bei 429 soforterror-Status. Wenn DHL Rate-Limits, fallen Sendungen aus dem Run und werden morgen wieder aufgenommen. - DHL-API-Key hardcoded im Code-Node → bei Rotation muss der Code-Node manuell editiert werden.
MAX_RUNTIME_MS = 55000— Workflow stoppt sich selbst nach 55 Sek., um n8n-Timeout (60 Sek.) zu vermeiden. Bei viel fälligen Sendungen werden hintere nicht abgearbeitet → fließen morgen wieder rein.- Sentinel
_emptywird in mehreren IFs geprüft — wenn die Filter-Logik mal falsche Form zurückgibt, läuft der ganze Run leer.
Debug-Anleitung¶
- n8n → 02 Retouren-Check → Executions → Filter heute + Failed.
- Wenn Run grün aber Sheet nicht geupdatet: schau im Filter-Node-Output, ob
_emptyrauskam. - Wenn Carrier-spezifischer Fehler: schau, ob Token-Holen-Node lief (GLS-Token braucht GLS Basic Auth Credential).
- Wenn DHL-Calls 429 werfen: hat sich nichts an deinem Tun geändert, am nächsten Tag wieder versuchen.
Entscheidungen / Geschichte¶
- 2026-05-12: Carrier-Patch (
startsWithstatt===) eingeführt fürDHL-Prime/GLS-Prime-Unterstützung — siehe SUB Retoure. - (älter): 21 Tage als Cutoff für
nicht_versendet_geschlossen(DHL/GLS-Frist). - (älter): 10 Tage transit als
in_transit_ueberfaellig-Schwelle.