Zum Inhalt springen

E-Commerce-Events protokollieren

Erfahren Sie, wie Sie empfohlene E-Commerce-Events über die Braze Android-, Swift- und Web-SDKs mithilfe typisierter Event-Klassen und logEcommerceEvent protokollieren. Informationen zu Event-Eigenschaftsschemata, Plattform-Features und Ingestion-Validierung finden Sie unter Empfohlene Events und Event-Validierung und Fehlerbehebung.

Event-Schemas

Die sechs empfohlenen E-Commerce-Events teilen ein Schema auf Bestellebene über alle Plattformen hinweg. Verwenden Sie die folgenden Eigenschaftstabellen, wenn Sie die Payload für jedes Event erstellen. Das kanonische Schema mit vollständigem Validierungsverhalten und REST-API-Beispielen finden Sie unter Empfohlene Events. Informationen zu Plattform-Features wie Segmentierung, Canvas-Templates und Reporting finden Sie unter E-Commerce-Events verwenden.

Wird ausgelöst, wenn ein:e Nutzer:in eine Produktdetailseite aufruft.

Event-Eigenschaften

Eigenschaftsname Datentyp Erforderlich Beschreibung
product_id String Ja Eindeutiger Produktbezeichner (z. B. SKU oder Artikel-ID).
product_name String Ja Anzeigename des Produkts.
variant_id String Ja Bezeichner der Produktvariante (z. B. shirt_medium_blue).
image_url String Nein Bild-URL des Produkts.
product_url String Nein URL zur Produktseite für weitere Details.
price Gleitkommazahl Ja Stückpreis der Variante zum Zeitpunkt der Ansicht.
currency String Ja Dreibuchstabiger ISO-4217-Code (z. B. USD oder EUR).
source String Ja Quelle, aus der das Event stammt (z. B. web, ios oder android).
type String-Array Nein Erforderlich, um Braze-Katalog-Trigger-Features für „Wieder verfügbar“- und „Preissenkung“-Benachrichtigungen zu verwenden. Akzeptierte Werte: "price_drop", "back_in_stock".
metadata Object Nein Flexible Schlüssel-Wert-Paare (z. B. category oder brand).

Wird jedes Mal ausgelöst, wenn sich der Inhalt des Warenkorbs eines/einer Nutzer:in ändert. Verwenden Sie vollständigen Warenkorb-Ersatz (lassen Sie action weg oder setzen Sie es auf replace) oder inkrementelle Updates (add oder remove).

Event-Eigenschaften

Eigenschaft Datentyp Erforderlich Beschreibung
cart_id String Ja Eindeutiger Bezeichner für den Warenkorb. Wird über Warenkorb-, Checkout- und Bestell-Events hinweg für die Warenkorb-Zuordnung der Nutzer:innen geteilt.
action String Nein add (Menge erhöhen oder Position hinzufügen), remove (Menge verringern; Position wird bei 0 entfernt) oder replace (vollständiger Warenkorb-Ersatz, wie wenn action weggelassen wird).
total_value Gleitkommazahl Bedingt Erforderlich, wenn action weggelassen wird oder replace ist. Optional, wenn action add oder remove ist.
subtotal_value Gleitkommazahl Nein Zwischensumme des Warenkorbs (nach Rabatt, vor Steuern/Versand).
tax Gleitkommazahl Nein Gesamtsteuer, die auf den Warenkorb angewendet wird.
shipping Gleitkommazahl Nein Gesamtversandkosten für den Warenkorb.
currency String Ja Dreibuchstabiger ISO-4217-Code.
products Array Ja Positionen für dieses Update. Siehe die Tabelle der Produkteigenschaften.
source String Ja Quelle, aus der das Event stammt.
metadata Object Nein Flexible Schlüssel-Wert-Paare für zusätzliche Daten auf Event-Ebene.

Produkteigenschaften (products[])

Eigenschaft Datentyp Erforderlich Beschreibung
product_id String Ja Eindeutiger Produktbezeichner.
product_name String Ja Anzeigename des Produkts.
variant_id String Ja Variantenbezeichner.
image_url String Nein Bild-URL des Produkts.
product_url String Nein URL zur Produktseite.
quantity Integer Ja Bei vollständigem Ersatz die Anzahl der Einheiten im Warenkorb für diese Position. Bei add oder remove die Anzahl der hinzuzufügenden oder zu entfernenden Einheiten.
price Gleitkommazahl Ja Stückpreis der Variante.
metadata Object Nein Flexible Schlüssel-Wert-Paare (z. B. color oder size).

Wird ausgelöst, wenn der/die Nutzer:in den Checkout-Prozess startet.

Event-Eigenschaften

Eigenschaft Datentyp Erforderlich Beschreibung
checkout_id String Ja Eindeutiger Bezeichner für die Checkout-Sitzung.
cart_id String Nein Warenkorbbezeichner. Wird über Warenkorb-, Checkout- und Bestell-Events hinweg für die Warenkorb-Zuordnung der Nutzer:innen geteilt.
total_value Gleitkommazahl Ja Gesamter Geldwert des Checkouts.
subtotal_value Gleitkommazahl Nein Zwischensumme (nach Rabatt, vor Steuern/Versand).
tax Gleitkommazahl Nein Gesamtsteuer, die auf den Checkout angewendet wird.
shipping Gleitkommazahl Nein Gesamtversandkosten.
currency String Ja Dreibuchstabiger ISO-4217-Code.
products Array Ja Artikel im Checkout. Siehe die Tabelle der Produkteigenschaften.
source String Ja Quelle, aus der das Event stammt.
metadata Object Nein Flexible Schlüssel-Wert-Paare. Erkannte Untereigenschaft: checkout_url (String).

Produkteigenschaften (products[])

Eigenschaft Datentyp Erforderlich Beschreibung
product_id String Ja Eindeutiger Produktbezeichner.
product_name String Ja Anzeigename des Produkts.
variant_id String Ja Variantenbezeichner.
image_url String Nein Bild-URL des Produkts.
product_url String Nein URL zur Produktseite.
quantity Integer Ja Anzahl der Einheiten im Warenkorb.
price Gleitkommazahl Ja Stückpreis der Variante.
metadata Object Nein Flexible Schlüssel-Wert-Paare (z. B. color oder size).

Wird ausgelöst, wenn eine Bestellung erfolgreich abgeschlossen oder die Zahlung bestätigt wird.

Event-Eigenschaften

Eigenschaft Datentyp Erforderlich Beschreibung
order_id String Ja Eindeutiger Bezeichner für die Bestellung.
cart_id String Nein Warenkorbbezeichner. Wird über Warenkorb-, Checkout- und Bestell-Events hinweg für die Warenkorb-Zuordnung der Nutzer:innen geteilt.
total_value Gleitkommazahl Ja Gesamter Geldwert der Bestellung.
subtotal_value Gleitkommazahl Nein Zwischensumme (nach Rabatt, vor Steuern/Versand).
tax Gleitkommazahl Nein Gesamtsteuer, die auf die Bestellung angewendet wird.
shipping Gleitkommazahl Nein Gesamtversandkosten.
currency String Ja Dreibuchstabiger ISO-4217-Code.
total_discounts Gleitkommazahl Nein Gesamtbetrag der auf die Bestellung angewendeten Rabatte.
discounts Array Nein Detaillierte Liste der angewendeten Rabatte. Jedes Rabattobjekt unterstützt code (String), amount (Gleitkommazahl) und type (String).
products Array Ja Artikel in der Bestellung. Siehe die Tabelle der Produkteigenschaften.
source String Ja Quelle, aus der das Event stammt.
metadata Object Nein Flexible Schlüssel-Wert-Paare. Erkannte Untereigenschaft: order_status_url (String).

Produkteigenschaften (products[])

Eigenschaft Datentyp Erforderlich Beschreibung
product_id String Ja Eindeutiger Produktbezeichner.
product_name String Ja Anzeigename des Produkts.
variant_id String Ja Variantenbezeichner.
image_url String Nein Bild-URL des Produkts.
product_url String Nein URL zur Produktseite.
quantity Integer Ja Anzahl der Einheiten in der Bestellung.
price Gleitkommazahl Ja Stückpreis der Variante.
metadata Object Nein Flexible Schlüssel-Wert-Paare (z. B. color oder size).

Wird ausgelöst, wenn eine Bestellung storniert wird.

Event-Eigenschaften

Eigenschaft Datentyp Erforderlich Beschreibung
order_id String Ja Eindeutiger Bezeichner für die Bestellung.
total_value Gleitkommazahl Ja Gesamter Geldwert der stornierten Bestellung. Senden Sie den absoluten Betrag (größer oder gleich 0); Braze übernimmt die Verrechnung.
subtotal_value Gleitkommazahl Nein Zwischensumme (nach Rabatt, vor Steuern/Versand).
tax Gleitkommazahl Nein Gesamtsteuer, die auf die Bestellung angewendet wird.
shipping Gleitkommazahl Nein Gesamtversandkosten.
currency String Ja Dreibuchstabiger ISO-4217-Code.
total_discounts Gleitkommazahl Nein Gesamtbetrag der auf die Bestellung angewendeten Rabatte.
discounts Array Nein Detaillierte Liste der angewendeten Rabatte.
cancel_reason String Ja Grund für die Stornierung der Bestellung.
products Array Ja Artikel in der stornierten Bestellung. Siehe die Tabelle der Produkteigenschaften.
source String Ja Quelle, aus der das Event stammt.
metadata Object Nein Flexible Schlüssel-Wert-Paare. Erkannte Untereigenschaft: order_status_url (String).

Produkteigenschaften (products[])

Eigenschaft Datentyp Erforderlich Beschreibung
product_id String Ja Eindeutiger Produktbezeichner.
product_name String Ja Anzeigename des Produkts.
variant_id String Ja Variantenbezeichner.
image_url String Nein Bild-URL des Produkts.
product_url String Nein URL zur Produktseite.
quantity Integer Ja Anzahl der Einheiten in der Bestellung.
price Gleitkommazahl Ja Stückpreis der Variante.
metadata Object Nein Flexible Schlüssel-Wert-Paare (z. B. color oder size).

Wird ausgelöst, wenn eine vollständige oder teilweise Rückerstattung erfolgt. Setzen Sie bei Teilrückerstattungen total_value nur auf den erstatteten Betrag, nicht auf den ursprünglichen Bestellwert.

Event-Eigenschaften

Eigenschaft Datentyp Erforderlich Beschreibung
order_id String Ja Eindeutiger Bezeichner für die ursprüngliche Bestellung.
total_value Gleitkommazahl Ja Gesamter Geldwert der Rückerstattung. Senden Sie den absoluten Betrag (größer oder gleich 0); Braze übernimmt die Umsatzanpassung.
currency String Ja Dreibuchstabiger ISO-4217-Code.
total_discounts Gleitkommazahl Nein Gesamtbetrag der ursprünglich angewendeten Rabatte.
discounts Array Nein Detaillierte Liste der Rabatte.
products Array Ja Artikel, die erstattet werden. Siehe die Tabelle der Produkteigenschaften.
source String Ja Quelle, aus der das Event stammt.
metadata Object Nein Flexible Schlüssel-Wert-Paare. Erkannte Untereigenschaft: order_status_url (String).

Produkteigenschaften (products[])

Eigenschaft Datentyp Erforderlich Beschreibung
product_id String Ja Eindeutiger Produktbezeichner.
product_name String Ja Anzeigename des Produkts.
variant_id String Ja Variantenbezeichner.
image_url String Nein Bild-URL des Produkts.
product_url String Nein URL zur Produktseite.
quantity Integer Ja Anzahl der erstatteten Einheiten.
price Gleitkommazahl Ja Stückpreis der Variante.
metadata Object Nein Flexible Schlüssel-Wert-Paare (z. B. color oder size).

Android

Ab Android SDK 42.3.0+ stehen typisierte E-Commerce-Event-Klassen mit clientseitiger Validierung zur Konstruktionszeit und automatischer snake_case-Serialisierung beim Aufruf von Braze.logEcommerceEvent zur Verfügung.

Android-Klasse Event-Name Hinweise
ProductViewedEvent ecommerce.product_viewed Flacht Produktfelder auf die oberste Ebene von properties ab (kein products-Array). Diese Klasse unterstützt nicht die type-Eigenschaft auf oberster Ebene für Katalog-Trigger. Wenn Sie type benötigen, verwenden Sie logCustomEvent oder die REST API.
CartUpdatedEvent ecommerce.cart_updated Verwenden Sie CartUpdatedAction (ADD, REMOVE, REPLACE) für die action-Eigenschaft.
CheckoutStartedEvent ecommerce.checkout_started  
OrderPlacedEvent ecommerce.order_placed Unterstützt optionale cartId, totalDiscounts und discounts.

Gemeinsame Bausteine

  • EcommerceProduct: Einzelposten für Warenkorb-, Checkout- und Bestell-Events.
    • Erforderlich: productId, productName, variantId, price, quantity (nicht-negativer Long)
    • Optional: imageUrl, productUrl, metadata
  • BrazeProperties: metadata auf Event- oder Produktebene. Schlüssel müssen nicht-leere Strings mit höchstens 255 Zeichen ohne führendes Dollarzeichen ($) sein.

Clientseitige Validierung

Ungültige Payloads lösen beim Konstruieren der Event-Klasse eine IllegalArgumentException aus, sodass das Event nie in die Warteschlange gestellt wird. Allgemeine Regeln:

Feld oder Regel Validierung
String-IDs und -Namen (product_id, product_name, variant_id, cart_id, checkout_id, order_id, source, optionale URLs) Nicht leer, bis zu 255 Zeichen
price, total_value, total_discounts Muss größer oder gleich 0 sein
currency Gültiger ISO-4217-Code (vom SDK getrimmt und in Großbuchstaben konvertiert)
products (Warenkorb-, Checkout-, Bestell-Events) Mindestens ein EcommerceProduct
quantity (pro Produkt) Nicht-negative Ganzzahl

Wenn die serialisierten Eigenschaften zum Versandzeitpunkt das SDK-Größenlimit überschreiten, protokolliert logEcommerceEvent einen Fehler und sendet das Event nicht.

Code-Beispiele

import com.braze.Braze
import com.braze.models.outgoing.BrazeProperties
import com.braze.models.recommended.ecommerce.ProductViewedEvent

val metadata = BrazeProperties()
  .addProperty("category", "Apparel")

val productViewedEvent = ProductViewedEvent(
  productId = "PROD101",
  productName = "Silk Scarf",
  variantId = "SCARF_RED_SILK",
  price = 150.00,
  currency = "EUR",
  source = "https://braze-fashion.eu",
  imageUrl = "https://braze-fashion.eu/images/scarf_red.jpg",
  productUrl = "https://braze-fashion.eu/products/scarf",
  metadata = metadata,
)

Braze.getInstance(context).logEcommerceEvent(productViewedEvent)

Legen Sie action mit CartUpdatedAction fest:

Wert Wire-Wert Beschreibung
CartUpdatedAction.ADD add Menge erhöhen oder eine Position hinzufügen.
CartUpdatedAction.REMOVE remove Menge verringern; Position bei 0 entfernen.
CartUpdatedAction.REPLACE replace Den gesamten Warenkorb ersetzen (Standard).
import com.braze.Braze
import com.braze.models.recommended.ecommerce.CartUpdatedAction
import com.braze.models.recommended.ecommerce.CartUpdatedEvent
import com.braze.models.recommended.ecommerce.EcommerceProduct

val product = EcommerceProduct(
  productId = "SKU-RUN-4821",
  productName = "Ultraboost Running Shoe",
  variantId = "UB-BLK-11",
  price = 189.99,
  quantity = 1,
)

val cartUpdatedEvent = CartUpdatedEvent(
  cartId = "cart_abc123",
  currency = "USD",
  source = "android",
  totalValue = 189.99,
  products = listOf(product),
  action = CartUpdatedAction.ADD,
)

Braze.getInstance(context).logEcommerceEvent(cartUpdatedEvent)
import com.braze.Braze
import com.braze.models.outgoing.BrazeProperties
import com.braze.models.recommended.ecommerce.CheckoutStartedEvent
import com.braze.models.recommended.ecommerce.EcommerceProduct

val products = listOf(
  EcommerceProduct(
    productId = "SKU-RUN-4821",
    productName = "Ultraboost Running Shoe",
    variantId = "UB-BLK-11",
    price = 189.99,
    quantity = 1,
  ),
)

val checkoutStartedEvent = CheckoutStartedEvent(
  checkoutId = "chk_88291",
  currency = "USD",
  source = "android",
  totalValue = 234.96,
  products = products,
  cartId = "cart_abc123",
  metadata = BrazeProperties().addProperty("checkout_url", "https://www.example.com/checkout/chk_88291"),
)

Braze.getInstance(context).logEcommerceEvent(checkoutStartedEvent)
import com.braze.Braze
import com.braze.models.outgoing.BrazeProperties
import com.braze.models.recommended.ecommerce.EcommerceProduct
import com.braze.models.recommended.ecommerce.OrderPlacedEvent

val products = listOf(
  EcommerceProduct(
    productId = "SKU-RUN-4821",
    productName = "Ultraboost Running Shoe",
    variantId = "UB-BLK-11",
    price = 189.99,
    quantity = 1,
  ),
)

val orderPlacedEvent = OrderPlacedEvent(
  orderId = "ord_77821",
  currency = "USD",
  source = "android",
  totalValue = 224.96,
  products = products,
  cartId = "cart_abc123",
  totalDiscounts = 10.0,
  discounts = listOf(
    mapOf("code" to "SPRING10", "amount" to 10.0, "type" to "percentage"),
  ),
  metadata = BrazeProperties().addProperty("order_status_url", "https://www.example.com/orders/ord_77821/status"),
)

Braze.getInstance(context).logEcommerceEvent(orderPlacedEvent)

Braze stellt für dieses Event keine typisierte SDK-Klasse bereit. Verwenden Sie logCustomEvent mit einem Payload, der dem ecommerce.order_cancelled-Event-Schema entspricht.

import com.braze.Braze
import com.braze.models.outgoing.BrazeProperties
import org.json.JSONArray
import org.json.JSONObject

val properties = BrazeProperties(
  JSONObject()
    .put("order_id", "ord_77821")
    .put("total_value", 224.96)
    .put("currency", "USD")
    .put("cancel_reason", "customer_request")
    .put("source", "android")
    .put(
      "products",
      JSONArray().put(
        JSONObject()
          .put("product_id", "SKU-RUN-4821")
          .put("product_name", "Ultraboost Running Shoe")
          .put("variant_id", "UB-BLK-11")
          .put("quantity", 1)
          .put("price", 189.99),
      ),
    ),
)

Braze.getInstance(context).logCustomEvent("ecommerce.order_cancelled", properties)

Braze stellt für dieses Event keine typisierte SDK-Klasse bereit. Verwenden Sie logCustomEvent mit einem Payload, der dem ecommerce.order_refunded-Event-Schema entspricht.

import com.braze.Braze
import com.braze.models.outgoing.BrazeProperties
import org.json.JSONArray
import org.json.JSONObject

val properties = BrazeProperties(
  JSONObject()
    .put("order_id", "ord_77821")
    .put("total_value", 189.99)
    .put("currency", "USD")
    .put("source", "android")
    .put(
      "products",
      JSONArray().put(
        JSONObject()
          .put("product_id", "SKU-RUN-4821")
          .put("product_name", "Ultraboost Running Shoe")
          .put("variant_id", "UB-BLK-11")
          .put("quantity", 1)
          .put("price", 189.99),
      ),
    ),
)

Braze.getInstance(context).logCustomEvent("ecommerce.order_refunded", properties)
import com.braze.Braze;
import com.braze.models.outgoing.BrazeProperties;
import com.braze.models.recommended.ecommerce.ProductViewedEvent;

BrazeProperties metadata = new BrazeProperties()
    .addProperty("category", "Apparel");

ProductViewedEvent productViewedEvent = new ProductViewedEvent(
    /* productId */ "PROD101",
    /* productName */ "Silk Scarf",
    /* variantId */ "SCARF_RED_SILK",
    /* price */ 150.00,
    /* currency */ "EUR",
    /* source */ "https://braze-fashion.eu",
    /* imageUrl */ "https://braze-fashion.eu/images/scarf_red.jpg",
    /* productUrl */ "https://braze-fashion.eu/products/scarf",
    /* metadata */ metadata
);

Braze.getInstance(context).logEcommerceEvent(productViewedEvent);

Legen Sie action mit CartUpdatedAction fest:

Wert Wire-Wert Beschreibung
CartUpdatedAction.ADD add Menge erhöhen oder eine Position hinzufügen.
CartUpdatedAction.REMOVE remove Menge verringern; Position bei 0 entfernen.
CartUpdatedAction.REPLACE replace Den gesamten Warenkorb ersetzen (Standard).
import com.braze.Braze;
import com.braze.models.recommended.ecommerce.CartUpdatedAction;
import com.braze.models.recommended.ecommerce.CartUpdatedEvent;
import com.braze.models.recommended.ecommerce.EcommerceProduct;
import java.util.Collections;

EcommerceProduct product = new EcommerceProduct(
    /* productId */ "SKU-RUN-4821",
    /* productName */ "Ultraboost Running Shoe",
    /* variantId */ "UB-BLK-11",
    /* price */ 189.99,
    /* quantity */ 1
);

CartUpdatedEvent cartUpdatedEvent = new CartUpdatedEvent(
    /* cartId */ "cart_abc123",
    /* currency */ "USD",
    /* source */ "android",
    /* totalValue */ 189.99,
    /* products */ Collections.singletonList(product),
    /* metadata */ null,
    /* action */ CartUpdatedAction.ADD
);

Braze.getInstance(context).logEcommerceEvent(cartUpdatedEvent);
import com.braze.Braze;
import com.braze.models.outgoing.BrazeProperties;
import com.braze.models.recommended.ecommerce.CheckoutStartedEvent;
import com.braze.models.recommended.ecommerce.EcommerceProduct;
import java.util.Collections;

EcommerceProduct product = new EcommerceProduct(
    /* productId */ "SKU-RUN-4821",
    /* productName */ "Ultraboost Running Shoe",
    /* variantId */ "UB-BLK-11",
    /* price */ 189.99,
    /* quantity */ 1
);

BrazeProperties metadata = new BrazeProperties()
    .addProperty("checkout_url", "https://www.example.com/checkout/chk_88291");

CheckoutStartedEvent checkoutStartedEvent = new CheckoutStartedEvent(
    /* checkoutId */ "chk_88291",
    /* currency */ "USD",
    /* source */ "android",
    /* totalValue */ 234.96,
    /* products */ Collections.singletonList(product),
    /* cartId */ "cart_abc123",
    /* metadata */ metadata
);

Braze.getInstance(context).logEcommerceEvent(checkoutStartedEvent);
import com.braze.Braze;
import com.braze.models.outgoing.BrazeProperties;
import com.braze.models.recommended.ecommerce.EcommerceProduct;
import com.braze.models.recommended.ecommerce.OrderPlacedEvent;
import java.util.Collections;

EcommerceProduct product = new EcommerceProduct(
    /* productId */ "SKU-RUN-4821",
    /* productName */ "Ultraboost Running Shoe",
    /* variantId */ "UB-BLK-11",
    /* price */ 189.99,
    /* quantity */ 1
);

BrazeProperties metadata = new BrazeProperties()
    .addProperty("order_status_url", "https://www.example.com/orders/ord_77821/status");

OrderPlacedEvent orderPlacedEvent = new OrderPlacedEvent(
    /* orderId */ "ord_77821",
    /* currency */ "USD",
    /* source */ "android",
    /* totalValue */ 224.96,
    /* products */ Collections.singletonList(product),
    /* cartId */ "cart_abc123",
    /* totalDiscounts */ 10.0,
    /* discounts */ null,
    /* metadata */ metadata
);

Braze.getInstance(context).logEcommerceEvent(orderPlacedEvent);

Braze stellt für dieses Event keine typisierte SDK-Klasse bereit. Verwenden Sie logCustomEvent mit einem Payload, der dem ecommerce.order_cancelled-Event-Schema entspricht.

import com.braze.Braze;
import com.braze.models.outgoing.BrazeProperties;
import org.json.JSONArray;
import org.json.JSONObject;

Braze.getInstance(context).logCustomEvent(
    "ecommerce.order_cancelled",
    new BrazeProperties(new JSONObject()
        .put("order_id", "ord_77821")
        .put("total_value", 224.96)
        .put("currency", "USD")
        .put("cancel_reason", "customer_request")
        .put("source", "android")
        .put("products", new JSONArray()
            .put(new JSONObject()
                .put("product_id", "SKU-RUN-4821")
                .put("product_name", "Ultraboost Running Shoe")
                .put("variant_id", "UB-BLK-11")
                .put("quantity", 1)
                .put("price", 189.99)))));

Braze stellt für dieses Event keine typisierte SDK-Klasse bereit. Verwenden Sie logCustomEvent mit einem Payload, der dem ecommerce.order_refunded-Event-Schema entspricht.

import com.braze.Braze;
import com.braze.models.outgoing.BrazeProperties;
import org.json.JSONArray;
import org.json.JSONObject;

Braze.getInstance(context).logCustomEvent(
    "ecommerce.order_refunded",
    new BrazeProperties(new JSONObject()
        .put("order_id", "ord_77821")
        .put("total_value", 189.99)
        .put("currency", "USD")
        .put("source", "android")
        .put("products", new JSONArray()
            .put(new JSONObject()
                .put("product_id", "SKU-RUN-4821")
                .put("product_name", "Ultraboost Running Shoe")
                .put("variant_id", "UB-BLK-11")
                .put("quantity", 1)
                .put("price", 189.99)))));

iOS

Das Swift SDK stellt typisierte E-Commerce-Event-Klassen bereit – ProductViewedEvent, CartUpdatedEvent, CheckoutStartedEvent und OrderPlacedEvent –, die Sie erstellen und an logEcommerceEvent übergeben. Verwenden Sie ProductLineItem für die Produkte in Warenkorb-, Checkout- und Bestell-Events. Jeder Initializer kann einen Fehler werfen, daher sollten Sie ihn in try? einschließen und das Event nur protokollieren, wenn die Konstruktion erfolgreich ist. Dies ist ab Swift SDK Version 15.0.0 und höher verfügbar.

ecommerce.order_cancelled und ecommerce.order_refunded sind nicht als typisierte Swift-SDK-Klassen verfügbar. Protokollieren Sie diese mit logCustomEvent.

Code-Beispiele

if let productViewedEvent = try? Braze.Ecommerce.ProductViewedEvent(
    productId: "4111176",
    productName: "Torchie runners",
    variantId: "4111176700",
    imageUrl: "https://braze-apparel.com/images/products/large/torchie-runners.jpg",
    productUrl: "https://braze-apparel.com/footwear-categories/sneakers/braze-orange-torchie-runners/",
    price: 85,
    currency: "GBP",
    source: "https://braze-apparel.com/",
    metadata: [
        "color": "ORANGE",
        "size": "6",
        "brand": "Braze"
    ],
    typeIdentifiers: ["price_drop", "back_in_stock"]
) {
    AppDelegate.braze?.logEcommerceEvent(productViewedEvent)
}
if let productLine = try? Braze.Ecommerce.ProductLineItem(
    productId: "8266836345064",
    productName: "Classic T-Shirt",
    variantId: "44610569208040",
    imageUrl: "https://braze-apparel.com/images/tshirt-blue-medium.jpg",
    productUrl: "https://braze-apparel.com/products/classic-tshirt?variant=44610569208040",
    quantity: 2,
    price: 99.99,
    metadata: [
        "sku": "TSH-BLU-M",
        "color": "BLUE",
        "size": "Medium",
        "brand": "Braze"
    ]
), let cartUpdatedEvent = try? Braze.Ecommerce.CartUpdatedEvent(
    cartId: "cart_12345",
    totalValue: 199.98,
    currency: "USD",
    products: [productLine],
    source: "https://braze-apparel.com",
    metadata: [:]
) {
    AppDelegate.braze?.logEcommerceEvent(cartUpdatedEvent)
}
if let productLine = try? Braze.Ecommerce.ProductLineItem(
    productId: "632910392",
    productName: "Wireless Headphones",
    variantId: "808950810",
    quantity: 1,
    price: 199.98,
    metadata: [
        "sku": "WH-BLK-PRO",
        "color": "Black",
        "brand": "BrazeAudio"
    ]
), let checkoutStartedEvent = try? Braze.Ecommerce.CheckoutStartedEvent(
    checkoutId: "checkout_abc123",
    cartId: "cart_12345",
    totalValue: 199.98,
    currency: "USD",
    products: [productLine],
    source: "https://braze-audio.com",
    metadata: [
        "checkout_url": "https://checkout.braze-audio.com/abc123"
    ]
) {
    AppDelegate.braze?.logEcommerceEvent(checkoutStartedEvent)
}
if let productLine = try? Braze.Ecommerce.ProductLineItem(
    productId: "632910392",
    productName: "Wireless Headphones",
    variantId: "808950810",
    quantity: 1,
    price: 199.98,
    metadata: [
        "sku": "WH-BLK-PRO",
        "color": "Black",
        "brand": "BrazeAudio"
    ]
), let orderPlacedEvent = try? Braze.Ecommerce.OrderPlacedEvent(
    orderId: "order_67890",
    cartId: "cart_12345",
    totalValue: 189.98,
    currency: "USD",
    totalDiscounts: 10.00,
    discounts: [.structured(code: "SAVE10", amount: 10.00, type: "fixed")],
    products: [productLine],
    source: "https://braze-audio.com",
    metadata: [
        "order_status_url": "https://braze-audio.com/orders/67890/status",
        "order_number": "ORD-2024-001234",
        "tags": ["electronics", "audio"],
        "referring_site": "https://www.e-referrals.com",
        "payment_gateway_names": ["tap2pay", "dotcash"]
    ]
) {
    AppDelegate.braze?.logEcommerceEvent(orderPlacedEvent)
}

Braze stellt für dieses Event keine typisierte SDK-Klasse bereit. Verwenden Sie logCustomEvent mit einem Payload, der dem ecommerce.order_cancelled-Event-Schema entspricht.

let discounts: [[String: Any]] = [
    [
        "code": "SAVE10",
        "amount": 10.00
    ]
]

let products: [[String: Any]] = [
    [
        "product_id": "632910392",
        "product_name": "Wireless Headphones",
        "variant_id": "808950810",
        "quantity": 1,
        "price": 199.98,
        "metadata": [
            "sku": "WH-BLK-PRO",
            "color": "Black",
            "brand": "BrazeAudio"
        ]
    ]
]

let properties: [String: Any] = [
    "order_id": "order_67890",
    "cancel_reason": "customer changed mind",
    "total_value": 189.98,
    "subtotal_value": 169.98,
    "tax": 14.40,
    "shipping": 5.60,
    "currency": "USD",
    "total_discounts": 10.00,
    "discounts": discounts,
    "products": products,
    "source": "https://braze-audio.com",
    "metadata": [
        "order_status_url": "https://braze-audio.com/orders/67890/status",
        "order_number": "ORD-2024-001234",
        "tags": ["cancelled", "customer_request"]
    ]
]

AppDelegate.braze?.logCustomEvent(name: "ecommerce.order_cancelled", properties: properties)

Braze stellt für dieses Event keine typisierte SDK-Klasse bereit. Verwenden Sie logCustomEvent mit einem Payload, der dem ecommerce.order_refunded-Event-Schema entspricht.

let discounts: [[String: Any]] = [
    [
        "code": "SAVE5",
        "amount": 5.00
    ]
]

let products: [[String: Any]] = [
    [
        "product_id": "632910392",
        "product_name": "Wireless Headphones",
        "variant_id": "808950810",
        "quantity": 1,
        "price": 99.99,
        "metadata": [
            "sku": "WH-BLK-PRO",
            "color": "Black",
            "brand": "BrazeAudio"
        ]
    ]
]

let properties: [String: Any] = [
    "order_id": "order_67890",
    "total_value": 99.99,
    "currency": "USD",
    "total_discounts": 5.00,
    "discounts": discounts,
    "products": products,
    "source": "https://braze-audio.com",
    "metadata": [
        "order_status_url": "https://braze-audio.com/orders/67890/status",
        "order_note": "Customer requested refund due to defective item",
        "order_number": "ORD-2024-001234",
        "tags": ["refund", "defective"]
    ]
]

AppDelegate.braze?.logCustomEvent(name: "ecommerce.order_refunded", properties: properties)

Web

Rufen Sie im Web SDK 6.8.0+ logEcommerceEvent mit einem Event-name und properties auf. In älteren SDK-Versionen rufen Sie logCustomEvent mit dem Event-Namen und einem Properties-Objekt auf. ecommerce.order_cancelled und ecommerce.order_refunded verwenden logCustomEvent.

Code-Beispiele

In neueren SDK-Versionen rufen Sie logEcommerceEvent() auf:

braze.logEcommerceEvent({
    "name": "ecommerce.product_viewed",
    "properties": {
        "product_id": "4111176",
        "product_name": "Torchie runners",
        "variant_id": "4111176700",
        "image_url": "https://braze-apparel.com/images/products/large/torchie-runners.jpg",
        "product_url": "https://braze-apparel.com/footwear-categories/sneakers/braze-orange-torchie-runners/",
        "price": 85,
        "currency": "GBP",
        "source": "https://braze-apparel.com/",
        "metadata": {
            "color": "ORANGE",
            "size": "6",
            "brand": "Braze"
        }
    }
});

In älteren SDK-Versionen rufen Sie logCustomEvent() auf:

braze.logCustomEvent("ecommerce.product_viewed", {
    "product_id": "4111176",
    "product_name": "Torchie runners",
    "variant_id": "4111176700",
    "image_url": "https://braze-apparel.com/images/products/large/torchie-runners.jpg",
    "product_url": "https://braze-apparel.com/footwear-categories/sneakers/braze-orange-torchie-runners/",
    "price": 85,
    "currency": "GBP",
    "source": "https://braze-apparel.com/",
    "metadata": {
        "color": "ORANGE",
        "size": "6",
        "brand": "Braze"
    }
});

In neueren SDK-Versionen rufen Sie logEcommerceEvent() auf:

braze.logEcommerceEvent({
    "name": "ecommerce.cart_updated",
    "properties": {
        "cart_id": "cart_12345",
        "currency": "USD",
        "total_value": 199.98,
        "products": [
            {
                "product_id": "8266836345064",
                "product_name": "Classic T-Shirt",
                "variant_id": "44610569208040",
                "image_url": "https://braze-apparel.com/images/tshirt-blue-medium.jpg",
                "product_url": "https://braze-apparel.com/products/classic-tshirt?variant=44610569208040",
                "quantity": 2,
                "price": 99.99,
                "metadata": {
                    "sku": "TSH-BLU-M",
                    "color": "BLUE",
                    "size": "Medium",
                    "brand": "Braze"
                }
            }
        ],
        "source": "https://braze-apparel.com",
        "metadata": {}
    }
});

In älteren SDK-Versionen rufen Sie logCustomEvent() auf:

braze.logCustomEvent("ecommerce.cart_updated", {
    "cart_id": "cart_12345",
    "currency": "USD",
    "total_value": 199.98,
    "subtotal_value": 179.98,
    "tax": 15.00,
    "shipping": 5.00,
    "products": [
        {
            "product_id": "8266836345064",
            "product_name": "Classic T-Shirt",
            "variant_id": "44610569208040",
            "image_url": "https://braze-apparel.com/images/tshirt-blue-medium.jpg",
            "product_url": "https://braze-apparel.com/products/classic-tshirt?variant=44610569208040",
            "quantity": 2,
            "price": 99.99,
            "metadata": {
                "sku": "TSH-BLU-M",
                "color": "BLUE",
                "size": "Medium",
                "brand": "Braze"
            }
        }
    ],
    "source": "https://braze-apparel.com",
    "metadata": {}
});

In neueren SDK-Versionen rufen Sie logEcommerceEvent() auf:

braze.logEcommerceEvent({
    "name": "ecommerce.checkout_started",
    "properties": {
        "checkout_id": "checkout_abc123",
        "cart_id": "cart_12345",
        "total_value": 199.98,
        "currency": "USD",
        "products": [
            {
                "product_id": "632910392",
                "product_name": "Wireless Headphones",
                "variant_id": "808950810",
                "quantity": 1,
                "price": 199.98,
                "metadata": {
                    "sku": "WH-BLK-PRO",
                    "color": "Black",
                    "brand": "BrazeAudio"
                }
            }
        ],
        "source": "https://braze-audio.com",
        "metadata": {
            "checkout_url": "https://checkout.braze-audio.com/abc123"
        }
    }
});

In älteren SDK-Versionen rufen Sie logCustomEvent() auf:

braze.logCustomEvent("ecommerce.checkout_started", {
    "checkout_id": "checkout_abc123",
    "cart_id": "cart_12345",
    "total_value": 199.98,
    "subtotal_value": 179.98,
    "tax": 15.00,
    "shipping": 5.00,
    "currency": "USD",
    "products": [
        {
            "product_id": "632910392",
            "product_name": "Wireless Headphones",
            "variant_id": "808950810",
            "quantity": 1,
            "price": 199.98,
            "metadata": {
                "sku": "WH-BLK-PRO",
                "color": "Black",
                "brand": "BrazeAudio"
            }
        }
    ],
    "source": "https://braze-audio.com",
    "metadata": {
        "checkout_url": "https://checkout.braze-audio.com/abc123"
    }
});

In neueren SDK-Versionen rufen Sie logEcommerceEvent() auf:

braze.logEcommerceEvent({
    "name": "ecommerce.order_placed",
    "properties": {
        "order_id": "order_67890",
        "cart_id": "cart_12345",
        "total_value": 189.98,
        "currency": "USD",
        "total_discounts": 10.00,
        "discounts": [
            {
                "code": "SAVE10",
                "amount": 10.00
            }
        ],
        "products": [
            {
                "product_id": "632910392",
                "product_name": "Wireless Headphones",
                "variant_id": "808950810",
                "quantity": 1,
                "price": 199.98,
                "metadata": {
                    "sku": "WH-BLK-PRO",
                    "color": "Black",
                    "brand": "BrazeAudio"
                }
            }
        ],
        "source": "https://braze-audio.com",
        "metadata": {
            "order_status_url": "https://braze-audio.com/orders/67890/status",
            "order_number": "ORD-2024-001234",
            "tags": ["electronics", "audio"],
            "referring_site": "https://www.e-referrals.com",
            "payment_gateway_names": ["tap2pay", "dotcash"]
        }
    }
});

In älteren SDK-Versionen rufen Sie logCustomEvent() auf:

braze.logCustomEvent("ecommerce.order_placed", {
    "order_id": "order_67890",
    "cart_id": "cart_12345",
    "total_value": 189.98,
    "subtotal_value": 169.98,
    "tax": 14.40,
    "shipping": 5.60,
    "currency": "USD",
    "total_discounts": 10.00,
    "discounts": [
        {
            "code": "SAVE10",
            "amount": 10.00
        }
    ],
    "products": [
        {
            "product_id": "632910392",
            "product_name": "Wireless Headphones",
            "variant_id": "808950810",
            "quantity": 1,
            "price": 199.98,
            "metadata": {
                "sku": "WH-BLK-PRO",
                "color": "Black",
                "brand": "BrazeAudio"
            }
        }
    ],
    "source": "https://braze-audio.com",
    "metadata": {
        "order_status_url": "https://braze-audio.com/orders/67890/status",
        "order_number": "ORD-2024-001234",
        "tags": ["electronics", "audio"],
        "referring_site": "https://www.e-referrals.com",
        "payment_gateway_names": ["tap2pay", "dotcash"]
    }
});
braze.logCustomEvent("ecommerce.order_cancelled", {
    "order_id": "order_67890",
    "cancel_reason": "customer changed mind",
    "total_value": 189.98,
    "subtotal_value": 169.98,
    "tax": 14.40,
    "shipping": 5.60,
    "currency": "USD",
    "total_discounts": 10.00,
    "discounts": [
        {
            "code": "SAVE10",
            "amount": 10.00
        }
    ],
    "products": [
        {
            "product_id": "632910392",
            "product_name": "Wireless Headphones",
            "variant_id": "808950810",
            "quantity": 1,
            "price": 199.98,
            "metadata": {
                "sku": "WH-BLK-PRO",
                "color": "Black",
                "brand": "BrazeAudio"
            }
        }
    ],
    "source": "https://braze-audio.com",
    "metadata": {
        "order_status_url": "https://braze-audio.com/orders/67890/status",
        "order_number": "ORD-2024-001234",
        "tags": ["cancelled", "customer_request"]
    }
});
braze.logCustomEvent("ecommerce.order_refunded", {
    "order_id": "order_67890",
    "total_value": 99.99,
    "currency": "USD",
    "total_discounts": 5.00,
    "discounts": [
        {
            "code": "SAVE5",
            "amount": 5.00
        }
    ],
    "products": [
        {
            "product_id": "632910392",
            "product_name": "Wireless Headphones",
            "variant_id": "808950810",
            "quantity": 1,
            "price": 99.99,
            "metadata": {
                "sku": "WH-BLK-PRO",
                "color": "Black",
                "brand": "BrazeAudio"
            }
        }
    ],
    "source": "https://braze-audio.com",
    "metadata": {
        "order_status_url": "https://braze-audio.com/orders/67890/status",
        "order_note": "Customer requested refund due to defective item",
        "order_number": "ORD-2024-001234",
        "tags": ["refund", "defective"]
    }
});

Google Tag Manager

Wenn Sie Google Tag Manager (GTM) verwenden, nutzen Sie den Tag-Typ Log eCommerce Event (New) im Braze-Actions-Tag anstelle des Aufrufs von logEcommerceEvent() im Code Ihrer Website. Der Tag liest Ihren GA4-formatierten E-Commerce-Datenlayer und unterstützt die Events ecommerce.product_viewed, ecommerce.cart_updated, ecommerce.checkout_started und ecommerce.order_placed. Er unterstützt außerdem Event- und Produkt-Metadaten. Um ecommerce.order_cancelled oder ecommerce.order_refunded zu protokollieren, verwenden Sie einen Custom HTML-Tag, der braze.logCustomEvent() aufruft.

Für Einrichtungsschritte, Feld-Zuordnung und Fehlerbehebung siehe E-Commerce-Events mit GTM protokollieren.

Manuelles Protokollieren mit logCustomEvent

Um ein empfohlenes Event manuell zu protokollieren, rufen Sie logCustomEvent mit dem exakten Event-Namen (zum Beispiel ecommerce.product_viewed) und einem manuell erstellten BrazeProperties- oder JSONObject-Payload auf. Das SDK validiert keine Schemata empfohlener Events bei manuellen Aufrufen. Braze validiert diese Payloads während der Ingestion:

  • Gültige Payloads werden als empfohlene Events mit vollständiger Nachverarbeitung verarbeitet.
  • Ungültige Payloads (fehlende Pflichtfelder, falsche Typen, zusätzliche Eigenschaften auf oberster Ebene) werden nach der Ingestion verworfen. Fehler erscheinen im SDK-Verarbeitungsprotokoll des Workspace und in der Fehlerübersichts-E-Mail.

Verwenden Sie nach Möglichkeit logEcommerceEvent, damit Sie ungültige Daten erkennen, bevor sie die App verlassen. Informationen zur allgemeinen Verwendung von logCustomEvent finden Sie unter Angepasste Events protokollieren.

New Stuff!