Skip to main content

Überblick

Wenn weder die nativen Oberflächen von Aftersell (Post-Purchase, Checkout, Upcart) noch eine fertige Integration passen, kannst du die Strategies API selbst aus deinem Shopify-Theme aufrufen und die zurückgegebenen Produkte beliebig rendern. Das Muster ist in jedem Fall dasselbe: Baue einen Kontext-Payload aus Liquid (damit Shopify-Attribute wie das aktuelle Produkt, der Warenkorbinhalt und Kundenfelder zur Renderzeit befüllt werden), sende ihn per POST an /api/public/strategy/evaluate und rendere die Antwort. Diese Seite behandelt zwei Implementierungsmuster:
  • PDP-Kontext — platziere eine Section auf Produktseiten, die die API mit dem aktuell angezeigten Produkt aufruft und ein Karussell mit den zurückgegebenen Empfehlungen rendert.
  • Warenkorb-Kontext — rendere einen Upsell-Block in einem individuellen Warenkorb, der die API mit allen aktuellen Warenkorbpositionen aufruft und die zurückgegebenen Produkte rendert.
Der Unterschied zwischen beiden liegt in der Form des Produktkontexts: ein einzelnes Produkt auf der PDP, ein Array aller Positionen im Warenkorb.

Was du brauchst

  1. Deinen Strategy-API-Key. Gehe in Aftersell zu Settings → Product Strategy und kopiere im Bereich Security Token deinen Token (das ist dein Strategy-API-Key).
  2. Die Strategy-ID. Öffne die Strategy, die du ausführen möchtest, im Aftersell-Strategy-Editor und kopiere ihre ID.
  3. Zugriff auf den Theme-Code. Du fügst deinem Shopify-Theme eine Liquid-Section (PDP) oder einen Block (individueller Warenkorb) hinzu — Online Store → Themes → … → Edit code.
Dein Strategy-API-Key liegt im clientseitigen Theme-Code und ist damit für jeden sichtbar, der den Quelltext der Seite ansieht. Behandle ihn als öffentliches Storefront-Credential und rotiere ihn über Settings → Product Strategy in Aftersell, falls er jemals auf unbeabsichtigte Weise offengelegt wird.

PDP-Kontext: Section-Snippet

Dieses Muster fügt deiner Produktseite eine Shopify-Section hinzu. Beim Rendern der Seite bettet Liquid das aktuelle Produkt, den Warenkorb und die Kundenattribute in den Payload ein, dann sendet JavaScript einen POST an die Strategies API und rendert die zurückgegebenen Produkte in einem Splide-Karussell.

Installation

  1. Gehe in deinem Shopify-Adminbereich zu Online Store → Themes, klicke bei deinem Theme auf und wähle Edit code.
  2. Erstelle im Ordner Sections eine neue Datei mit dem Namen aftersell-upsell-carousel.liquid.
  3. Füge das untenstehende Snippet in die neue Datei ein und ersetze YOUR_STRATEGY_API_KEY durch den API-Key aus Aftersell.
  4. Speichere.
  5. Öffne dein Produkt-Template (üblicherweise templates/product.json oder sections/main-product.liquid) und füge die Section Aftersell Carousel dort ein, wo das Karussell erscheinen soll. Im Theme-Editor kannst du sie auch direkt auf die Produktseite ziehen.
  6. Füge in den Einstellungen der Section deine Strategy-ID ein.

Was die Section sendet

Für jeden PDP-Aufruf enthält der Payload:
  • products — ein Array mit einem einzigen Element, das das aktuell angezeigte Produkt enthält (productId, variantId, quantity, price, handle, title, vendor, productType, tags, collections, sellingPlan).
  • cart — Zwischensumme, Artikelanzahl und Positionsanzahl des aktuellen Warenkorbs des Käufers (entfällt bei leerem Warenkorb).
  • cartToken — damit die API diese Auswertung derselben Session zuordnen kann.
  • customer — Tags, Land, Provinz, Locale, Bestellanzahl, Gesamtausgaben und Accepts-Marketing-Flag, aber nur wenn der Käufer eingeloggt ist.
  • session — Währungscode aus shop.currency.
Die Section sendet standardmäßig keine UTM-Parameter. Wenn du UTM-basiertes Targeting auf der PDP möchtest, erfasse sie clientseitig und füge sie vor dem Fetch dem session-Objekt hinzu.

Das Snippet

Ein Strategy-gestütztes Produktkarussell auf einer Shopify-Produktseite

Anpassen

Das Section-Schema stellt vier vom Händler bearbeitbare Einstellungen bereit: Strategy ID, Heading, CTA Button Label und Max Products to Show. Füge im {% schema %}-Block Einstellungen hinzu oder entferne sie, um dem Theme-Editor mehr Stellschrauben zu geben. Das CSS ist unter .aftersell-*-Klassennamen gescoped und enthält ein Splide-gesteuertes Karussell mit 4 Produkten pro Ansicht, das bei 768px auf 2 und bei 480px auf 1 wechselt. Passe es beliebig an dein Theme an — nichts davon ist für den API-Aufruf erforderlich.

Warenkorb-Kontext: individueller Warenkorb-Upsell-Block

Dieses Muster ist strukturell identisch mit dem PDP-Muster, mit einem entscheidenden Unterschied: Das Produktkontext-Array wird aus den Positionen des Warenkorbs statt aus dem aktuell angezeigten Produkt gebildet. Die Strategy erhält dann jeden Artikel, den der Käufer hinzugefügt hat, und gibt Empfehlungen auf Basis des gesamten Warenkorbs zurück. Die Implementierung befindet sich dort, wo dein individueller Warenkorb-Code lebt — eine Liquid-Section, die den Cart Drawer rendert, ein individueller Block in einer Headless-Storefront oder ein Theme-Template wie cart.liquid. Die Form des API-Aufrufs und die Verarbeitung der Antwort sind identisch mit dem PDP-Beispiel — nur das products-Array unterscheidet sich. Die Struktur sieht so aus:
Der Rest des Payloads (cart, customer, session, cartToken) und der fetch-Aufruf an /api/public/strategy/evaluate bleiben gegenüber dem obigen PDP-Muster unverändert — nur das products-Array wechselt von [productContext] zum aus dem Warenkorb abgeleiteten Array.

Was passiert, wenn die Strategy antwortet

Die Form der Antwort ist unabhängig davon, welchen Kontext du gesendet hast:
Die evaluationId ist eine eindeutige ID für diese Auswertung. Wenn du sie erfasst und an die gerenderten Produkte anhängst, kannst du die resultierende Bestellung genau der Empfehlung zuordnen, die sie hervorgebracht hat — siehe Attribution weiter unten. Wie du das products-Array renderst, liegt vollständig bei deinem Theme-Code. Das obige PDP-Snippet rendert die Produkte als Karussell aus Karten mit Variantenauswahl und Add-to-Cart-Buttons; ein individueller Warenkorb-Block könnte sie als vertikale Liste im Drawer rendern. Das vollständige Request- und Response-Schema findest du in der Evaluate-Strategy-API-Referenz.

Wenn kein Produkt zurückgegeben wird

Wenn die Strategy keine Produkte zurückgibt (products: []), entscheidet dein Code, wie damit umgegangen wird. Das obige PDP-Snippet blendet das Karussell komplett aus. Ein individueller Warenkorb-Block könnte auf die Standard-Upsell-Liste des Warenkorbs zurückfallen oder einfach nichts rendern. Um eine leere Antwort zu vermeiden, konfiguriere in der Strategy einen Catch all, damit immer ein Fallback-Produkt zurückgegeben wird. Wie du einen Catch all einrichtest, erfährst du auf der Seite Strategies erstellen.

Tipps für individuelle Integrationen

  • Kontext in Liquid aufbauen. Liquid läuft zur Renderzeit und hat Zugriff auf den vollständigen Shopify-Objektgraphen — product, cart, customer, shop, request. Nutze es, um den Payload serverseitig zu befüllen, statt auf clientseitige Aufrufe zurückzugreifen.
  • API-Key nicht in öffentliche Repos legen. Er landet in deinem Theme-Code, der an den Browser ausgeliefert wird — das ist in Ordnung. Aber füge dasselbe Theme nicht in ein öffentliches Repository ein und teile das Bundle nicht extern.
  • Catch all verwenden. Storefront-Erlebnisse wirken kaputt, wenn ein Slot verschwindet. Ein Catch all mit einer kleinen Auswahl sicherer Standardprodukte hält die UI konsistent.
  • Cachen, wo es sinnvoll ist. Die Strategies API cached serverseitig leicht (meta.servedFromCache), aber bei stark frequentierten PDPs möchtest du Aufrufe möglicherweise zusätzlich clientseitig debouncen oder memoizen (z. B. nicht erneut aufrufen, wenn dasselbe Produkt in einer Session zweimal gerendert wird).

Attribution

Wenn ein Käufer im Snippet auf den Add-to-Cart-Button klickt, hängt der /cart/add.js-Aufruf Line-Item-Properties an den Warenkorbartikel an:
Diese Properties begleiten die Position bis zur Shopify-Bestellung, wo sie im Line-Item-Datensatz erscheinen. Du kannst sie nachgelagert nutzen, um Umsätze zu attribuieren, Bestellungen zu filtern oder Analysetools zu füttern, die Line-Item-Properties lesen. Die Keys und Werte sind Konventionen, keine Anforderungen — der API-Aufruf funktioniert unabhängig davon, was du hier einträgst. Passe sie an dein eigenes Attributionsmodell an. Zum Beispiel:
Property-Keys, die mit einem Unterstrich (_) beginnen, werden im Warenkorb und im Checkout-UI ausgeblendet, hängen aber trotzdem an der Bestellung. Verwende das Unterstrich-Präfix für reine Attributions-Metadaten, die Käufer nicht sehen sollen.
Wende dasselbe Muster in der Warenkorb-Kontext-Implementierung an — jeder Add-to-Cart-Aufruf aus einem individuellen Upsell-Block kann beliebige Properties mitführen.

Zuordnung zur Auswertung

Um eine Bestellung der exakten Auswertung zuzuordnen, die das Produkt empfohlen hat — statt nur „kam von einer Strategy“ —, erfasse die evaluationId aus der Antwort und hänge sie unter der Property __as_offer_id an die Position an. AfterSell liest diesen Key, sodass damit getaggte Bestellungen im Reporting der spezifischen Auswertung zugeordnet werden. Halte im evaluate()-Handler die ID aus der Antwort fest:
Nimm sie dann in die Add-to-Cart-Properties auf:
Behalte den doppelten Unterstrich bei __as_offer_id bei — das ist der Key, nach dem AfterSell sucht, und das Unterstrich-Präfix hält ihn vor Käufern verborgen. Wenn evaluationId fehlt (zum Beispiel weil keine Produkte zurückgegeben wurden), lass die Property weg, statt einen leeren Wert zu senden.