Skip to content

Enregistrer des événements eCommerce

Découvrez comment enregistrer des événements eCommerce recommandés via les SDK Android, Swift et Web de Braze à l’aide de classes d’événements typées et de logEcommerceEvent. Pour les schémas de propriétés d’événements, les fonctionnalités de la plateforme et la validation à l’ingestion, consultez Événements recommandés et Validation des événements et résolution des problèmes.

Schémas d’événements

Les six événements eCommerce recommandés partagent un schéma au niveau de la commande sur toutes les plateformes. Utilisez les tableaux de propriétés suivants lorsque vous construisez le payload de chaque événement. Pour le schéma canonique avec le comportement de validation complet et des exemples de REST API, consultez Événements recommandés. Pour les fonctionnalités de la plateforme telles que la segmentation, les modèles Canvas et le reporting, consultez Comment utiliser les événements eCommerce.

Se déclenche lorsqu’un utilisateur consulte une page de détail produit.

Propriétés de l’événement

Nom de la propriété Type de données Requis Description
product_id Chaîne de caractères Oui Identifiant unique du produit (par exemple, unité de gestion des stocks ou ID d’article).
product_name Chaîne de caractères Oui Nom d’affichage du produit.
variant_id Chaîne de caractères Oui Identifiant de la variante du produit (par exemple, shirt_medium_blue).
image_url Chaîne de caractères Non URL de l’image du produit.
product_url Chaîne de caractères Non URL vers la page du produit pour plus de détails.
price Float Oui Prix unitaire de la variante au moment de la consultation.
currency Chaîne de caractères Oui Code ISO 4217 à trois lettres (par exemple, USD ou EUR).
source Chaîne de caractères Oui Source d’où provient l’événement (par exemple, web, ios ou android).
type Tableau de chaînes de caractères Non Requis pour utiliser les fonctionnalités de déclenchement par catalogue Braze pour les alertes de retour en stock et de baisse de prix. Valeurs acceptées : "price_drop", "back_in_stock".
metadata Objet Non Paires clé-valeur flexibles. Sous-propriété reconnue : sku (chaîne de caractères).

Se déclenche chaque fois que le contenu du panier d’un utilisateur change. Utilisez le remplacement complet du panier (omettez action ou définissez-le sur replace) ou les mises à jour incrémentales (add ou remove).

Propriétés de l’événement

Propriété Type de données Requis Description
cart_id Chaîne de caractères Oui Identifiant unique du panier. Partagé entre les événements de panier, de paiement et de commande pour le mappage du panier de l’utilisateur.
action Chaîne de caractères Non add (augmenter la quantité ou ajouter une ligne), remove (diminuer la quantité ; la ligne est supprimée à 0) ou replace (remplacement complet du panier, identique à l’omission de action).
total_value Float Conditionnel Requis lorsque action est omis ou vaut replace. Facultatif lorsque action est add ou remove.
subtotal_value Float Non Sous-total du panier (après remise, avant taxes/livraison).
tax Float Non Total des taxes appliquées au panier.
shipping Float Non Coût total de livraison du panier.
currency Chaîne de caractères Oui Code ISO 4217 à trois lettres.
products Tableau Oui Éléments de ligne pour cette mise à jour. Voir le tableau des propriétés produit.
source Chaîne de caractères Oui Source d’où provient l’événement.
metadata Objet Non Paires clé-valeur flexibles pour des données supplémentaires au niveau de l’événement.

Propriétés produit (products[])

Propriété Type de données Requis Description
product_id Chaîne de caractères Oui Identifiant unique du produit.
product_name Chaîne de caractères Oui Nom d’affichage du produit.
variant_id Chaîne de caractères Oui Identifiant de la variante.
image_url Chaîne de caractères Non URL de l’image du produit.
product_url Chaîne de caractères Non URL vers la page du produit.
quantity Entier Oui Pour un remplacement complet, nombre d’unités dans le panier pour cette ligne. Pour add ou remove, nombre d’unités à ajouter ou à retirer.
price Float Oui Prix unitaire de la variante.
metadata Objet Non Paires clé-valeur flexibles (par exemple, color ou size).

Se déclenche lorsque l’utilisateur initie le processus de paiement.

Propriétés de l’événement

Propriété Type de données Requis Description
checkout_id Chaîne de caractères Oui Identifiant unique de la session de paiement.
cart_id Chaîne de caractères Non Identifiant du panier. Partagé entre les événements de panier, de paiement et de commande pour le mappage du panier de l’utilisateur.
total_value Float Oui Valeur monétaire totale du paiement.
subtotal_value Float Non Sous-total (après remise, avant taxes/livraison).
tax Float Non Total des taxes appliquées au paiement.
shipping Float Non Coût total de livraison.
currency Chaîne de caractères Oui Code ISO 4217 à trois lettres.
products Tableau Oui Articles en cours de paiement. Voir le tableau des propriétés produit.
source Chaîne de caractères Oui Source d’où provient l’événement.
metadata Objet Non Paires clé-valeur flexibles. Sous-propriété reconnue : checkout_url (chaîne de caractères).

Propriétés produit (products[])

Propriété Type de données Requis Description
product_id Chaîne de caractères Oui Identifiant unique du produit.
product_name Chaîne de caractères Oui Nom d’affichage du produit.
variant_id Chaîne de caractères Oui Identifiant de la variante.
image_url Chaîne de caractères Non URL de l’image du produit.
product_url Chaîne de caractères Non URL vers la page du produit.
quantity Entier Oui Nombre d’unités dans le panier.
price Float Oui Prix unitaire de la variante.
metadata Objet Non Paires clé-valeur flexibles (par exemple, color ou size).

Se déclenche lorsqu’une commande est finalisée avec succès ou que le paiement est confirmé.

Propriétés de l’événement

Propriété Type de données Requis Description
order_id Chaîne de caractères Oui Identifiant unique de la commande.
cart_id Chaîne de caractères Non Identifiant du panier. Partagé entre les événements de panier, de paiement et de commande pour le mappage du panier de l’utilisateur.
total_value Float Oui Valeur monétaire totale de la commande.
subtotal_value Float Non Sous-total (après remise, avant taxes/livraison).
tax Float Non Total des taxes appliquées à la commande.
shipping Float Non Coût total de livraison.
currency Chaîne de caractères Oui Code ISO 4217 à trois lettres.
total_discounts Float Non Montant total des remises appliquées à la commande.
discounts Tableau Non Liste détaillée des remises appliquées. Chaque objet de remise prend en charge code (chaîne de caractères), amount (float) et type (chaîne de caractères).
products Tableau Oui Articles de la commande. Voir le tableau des propriétés produit.
source Chaîne de caractères Oui Source d’où provient l’événement.
metadata Objet Non Paires clé-valeur flexibles. Sous-propriété reconnue : order_status_url (chaîne de caractères).

Propriétés produit (products[])

Propriété Type de données Requis Description
product_id Chaîne de caractères Oui Identifiant unique du produit.
product_name Chaîne de caractères Oui Nom d’affichage du produit.
variant_id Chaîne de caractères Oui Identifiant de la variante.
image_url Chaîne de caractères Non URL de l’image du produit.
product_url Chaîne de caractères Non URL vers la page du produit.
quantity Entier Oui Nombre d’unités dans la commande.
price Float Oui Prix unitaire de la variante.
metadata Objet Non Paires clé-valeur flexibles (par exemple, color ou size).

Se déclenche lorsqu’une commande est annulée.

Propriétés de l’événement

Propriété Type de données Requis Description
order_id Chaîne de caractères Oui Identifiant unique de la commande.
total_value Float Oui Valeur monétaire totale de la commande annulée. Envoyez le montant absolu (supérieur ou égal à 0) ; Braze gère la décrémentation.
subtotal_value Float Non Sous-total (après remise, avant taxes/livraison).
tax Float Non Total des taxes appliquées à la commande.
shipping Float Non Coût total de livraison.
currency Chaîne de caractères Oui Code ISO 4217 à trois lettres.
total_discounts Float Non Montant total des remises appliquées à la commande.
discounts Tableau Non Liste détaillée des remises appliquées.
cancel_reason Chaîne de caractères Oui Raison de l’annulation de la commande.
products Tableau Oui Articles de la commande annulée. Voir le tableau des propriétés produit.
source Chaîne de caractères Oui Source d’où provient l’événement.
metadata Objet Non Paires clé-valeur flexibles. Sous-propriété reconnue : order_status_url (chaîne de caractères).

Propriétés produit (products[])

Propriété Type de données Requis Description
product_id Chaîne de caractères Oui Identifiant unique du produit.
product_name Chaîne de caractères Oui Nom d’affichage du produit.
variant_id Chaîne de caractères Oui Identifiant de la variante.
image_url Chaîne de caractères Non URL de l’image du produit.
product_url Chaîne de caractères Non URL vers la page du produit.
quantity Entier Oui Nombre d’unités dans la commande.
price Float Oui Prix unitaire de la variante.
metadata Objet Non Paires clé-valeur flexibles (par exemple, color ou size).

Se déclenche lorsqu’un remboursement total ou partiel est émis. Pour les remboursements partiels, définissez total_value sur le montant remboursé uniquement, et non sur le total initial de la commande.

Propriétés de l’événement

Propriété Type de données Requis Description
order_id Chaîne de caractères Oui Identifiant unique de la commande d’origine.
total_value Float Oui Valeur monétaire totale du remboursement. Envoyez le montant absolu (supérieur ou égal à 0) ; Braze gère l’ajustement du chiffre d’affaires.
currency Chaîne de caractères Oui Code ISO 4217 à trois lettres.
total_discounts Float Non Montant total des remises initialement appliquées.
discounts Tableau Non Liste détaillée des remises.
products Tableau Oui Articles remboursés. Voir le tableau des propriétés produit.
source Chaîne de caractères Oui Source d’où provient l’événement.
metadata Objet Non Paires clé-valeur flexibles. Sous-propriété reconnue : order_status_url (chaîne de caractères).

Propriétés produit (products[])

Propriété Type de données Requis Description
product_id Chaîne de caractères Oui Identifiant unique du produit.
product_name Chaîne de caractères Oui Nom d’affichage du produit.
variant_id Chaîne de caractères Oui Identifiant de la variante.
image_url Chaîne de caractères Non URL de l’image du produit.
product_url Chaîne de caractères Non URL vers la page du produit.
quantity Entier Oui Nombre d’unités remboursées.
price Float Oui Prix unitaire de la variante.
metadata Objet Non Paires clé-valeur flexibles (par exemple, color ou size).

Android

Le SDK Android 42.3.0+ fournit des classes d’événements eCommerce typées avec validation côté client au moment de la construction et sérialisation automatique en snake_case lorsque vous appelez Braze.logEcommerceEvent.

Classe Android Nom de l’événement Notes
ProductViewedEvent ecommerce.product_viewed Aplatit les champs du produit au niveau supérieur de properties (pas de tableau products). Cette classe ne prend pas en charge la propriété type de niveau supérieur pour les déclencheurs de catalogue. Si vous avez besoin de type, utilisez logCustomEvent ou la REST API.
CartUpdatedEvent ecommerce.cart_updated Utilisez CartUpdatedAction (ADD, REMOVE, REPLACE) pour la propriété action.
CheckoutStartedEvent ecommerce.checkout_started  
OrderPlacedEvent ecommerce.order_placed Prend en charge les paramètres facultatifs cartId, totalDiscounts et discounts.

Blocs de construction partagés

  • EcommerceProduct : éléments de ligne pour les événements de panier, de paiement et de commande.
    • Requis : productId, productName, variantId, price, quantity (Long non négatif)
    • Facultatif : imageUrl, productUrl, metadata
  • BrazeProperties : metadata au niveau de l’événement ou du produit. Les clés doivent être des chaînes de caractères non vides d’au maximum 255 caractères sans signe dollar ($) en début de chaîne.

Validation côté client

Les payloads invalides lèvent une IllegalArgumentException lorsque vous construisez la classe d’événement, de sorte que l’événement n’est jamais mis en file d’attente. Règles courantes :

Champ ou règle Validation
ID et noms de type chaîne (product_id, product_name, variant_id, cart_id, checkout_id, order_id, source, URL facultatives) Non vide, jusqu’à 255 caractères
price, total_value, total_discounts Doit être supérieur ou égal à 0
currency Code ISO 4217 valide (nettoyé et converti en majuscules par le SDK)
products (événements de panier, paiement, commande) Au moins un EcommerceProduct
quantity (par produit) Entier non négatif

Au moment de l’envoi, si les propriétés sérialisées dépassent la limite de taille du SDK, logEcommerceEvent enregistre une erreur et n’envoie pas l’événement.

Exemples de code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import com.braze.Braze
import com.braze.models.outgoing.BrazeProperties
import com.braze.models.recommended.ecommerce.ProductViewedEvent

val metadata = BrazeProperties()
  .addProperty("sku", "SS-R-101")
  .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)

Définissez action à l’aide de CartUpdatedAction :

Valeur Valeur transmise Description
CartUpdatedAction.ADD add Augmenter la quantité ou ajouter une ligne.
CartUpdatedAction.REMOVE remove Diminuer la quantité ; supprimer la ligne à 0.
CartUpdatedAction.REPLACE replace Remplacer l’intégralité du panier (par défaut).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 ne fournit pas de classe SDK typée pour cet événement. Utilisez logCustomEvent avec un payload correspondant au schéma de l’événement ecommerce.order_cancelled.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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 ne fournit pas de classe SDK typée pour cet événement. Utilisez logCustomEvent avec un payload correspondant au schéma de l’événement ecommerce.order_refunded.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import com.braze.Braze;
import com.braze.models.outgoing.BrazeProperties;
import com.braze.models.recommended.ecommerce.ProductViewedEvent;

BrazeProperties metadata = new BrazeProperties()
    .addProperty("sku", "SS-R-101")
    .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);

Définissez action à l’aide de CartUpdatedAction :

Valeur Valeur transmise Description
CartUpdatedAction.ADD add Augmenter la quantité ou ajouter une ligne.
CartUpdatedAction.REMOVE remove Diminuer la quantité ; supprimer la ligne à 0.
CartUpdatedAction.REPLACE replace Remplacer l’intégralité du panier (par défaut).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 ne fournit pas de classe SDK typée pour cet événement. Utilisez logCustomEvent avec un payload correspondant au schéma de l’événement ecommerce.order_cancelled.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 ne fournit pas de classe SDK typée pour cet événement. Utilisez logCustomEvent avec un payload correspondant au schéma de l’événement ecommerce.order_refunded.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

Le SDK Swift fournit des classes d’événements eCommerce typées — ProductViewedEvent, CartUpdatedEvent, CheckoutStartedEvent et OrderPlacedEvent — que vous construisez et transmettez à logEcommerceEvent. Utilisez ProductLineItem pour les produits dans les événements de panier, de paiement et de commande. Chaque initialiseur peut lever une exception : encapsulez-le donc dans try? et n’enregistrez l’événement que lorsque la construction réussit. Cette fonctionnalité est disponible à partir de la version 15.0.0 du SDK Swift.

ecommerce.order_cancelled et ecommerce.order_refunded ne sont pas disponibles en tant que classes typées du SDK Swift. Enregistrez-les avec logCustomEvent.

Exemples de code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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: [
        "sku": "",
        "color": "ORANGE",
        "size": "6",
        "brand": "Braze"
    ],
    typeIdentifiers: ["price_drop", "back_in_stock"]
) {
    AppDelegate.braze?.logEcommerceEvent(productViewedEvent)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 ne fournit pas de classe SDK typée pour cet événement. Utilisez logCustomEvent avec un payload correspondant au schéma de l’événement ecommerce.order_cancelled.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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 ne fournit pas de classe SDK typée pour cet événement. Utilisez logCustomEvent avec un payload correspondant au schéma de l’événement ecommerce.order_refunded.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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

Avec le SDK Web 6.8.0+, appelez logEcommerceEvent avec un name d’événement et des properties. Sur les versions antérieures du SDK, appelez logCustomEvent avec le nom de l’événement et un objet de propriétés. ecommerce.order_cancelled et ecommerce.order_refunded utilisent logCustomEvent.

Exemples de code

Sur les versions récentes du SDK, appelez logEcommerceEvent() :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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": {
            "sku": "",
            "color": "ORANGE",
            "size": "6",
            "brand": "Braze"
        }
    }
});

Sur les versions antérieures du SDK, appelez logCustomEvent() :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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": {
        "sku": "",
        "color": "ORANGE",
        "size": "6",
        "brand": "Braze"
    }
});

Sur les versions récentes du SDK, appelez logEcommerceEvent() :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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": {}
    }
});

Sur les versions antérieures du SDK, appelez logCustomEvent() :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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": {}
});

Sur les versions récentes du SDK, appelez logEcommerceEvent() :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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"
        }
    }
});

Sur les versions antérieures du SDK, appelez logCustomEvent() :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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"
    }
});

Sur les versions récentes du SDK, appelez logEcommerceEvent() :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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"]
        }
    }
});

Sur les versions antérieures du SDK, appelez logCustomEvent() :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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"]
    }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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"]
    }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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"]
    }
});

Enregistrement manuel avec logCustomEvent

Pour enregistrer manuellement un événement recommandé, appelez logCustomEvent avec le nom exact de l’événement (par exemple, ecommerce.product_viewed) et un payload BrazeProperties ou JSONObject construit manuellement. Le SDK ne valide pas les schémas d’événements recommandés pour les appels manuels. Braze valide ces payloads lors de l’ingestion :

  • Les payloads valides sont traités comme des événements recommandés avec un post-traitement complet.
  • Les payloads invalides (champs requis manquants, types incorrects, propriétés de niveau supérieur supplémentaires) sont rejetés après l’ingestion. Les échecs apparaissent dans le journal de traitement SDK de l’espace de travail et dans l’e-mail récapitulatif des échecs.

Utilisez logEcommerceEvent autant que possible afin de détecter les données invalides avant qu’elles ne quittent l’application. Pour l’utilisation générale de logCustomEvent, consultez Enregistrer des événements personnalisés.

New Stuff!