Überblick
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.
Was du brauchst
- 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).
- Die Strategy-ID. Öffne die Strategy, die du ausführen möchtest, im Aftersell-Strategy-Editor und kopiere ihre ID.
- 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.
PDP-Kontext: Section-Snippet
Installation
- Gehe in deinem Shopify-Adminbereich zu Online Store → Themes, klicke bei deinem Theme auf … und wähle Edit code.
- Erstelle im Ordner Sections eine neue Datei mit dem Namen
aftersell-upsell-carousel.liquid. - Füge das untenstehende Snippet in die neue Datei ein und ersetze
YOUR_STRATEGY_API_KEYdurch den API-Key aus Aftersell. - Speichere.
- Öffne dein Produkt-Template (üblicherweise
templates/product.jsonodersections/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. - Füge in den Einstellungen der Section deine Strategy-ID ein.
Was die Section sendet
- 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.
session-Objekt hinzu.
Das Snippet

Anpassen
{% 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
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:
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
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
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
/cart/add.js-Aufruf Line-Item-Properties an den Warenkorbartikel an:
Zuordnung zur Auswertung
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:
__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.