Ir para o conteúdo

Registrar eventos de eCommerce

Saiba como registrar eventos recomendados de eCommerce pelos SDKs Android, Swift e Web da Braze usando classes de eventos tipadas e logEcommerceEvent. Para esquemas de propriedades de eventos, recursos da plataforma e validação de ingestão, consulte Eventos recomendados e Validação de eventos e solução de problemas.

Esquemas de eventos

Os seis eventos recomendados de eCommerce compartilham um esquema no nível do pedido em todas as plataformas. Use as tabelas de propriedades a seguir ao criar a carga útil de cada evento. Para ver o esquema canônico com o comportamento completo de validação e exemplos da REST API, consulte Eventos recomendados. Para recursos da plataforma, como segmentação, modelos do Canvas e relatórios, consulte Como usar eventos de eCommerce.

Dispare quando um usuário visualizar a página de detalhes de um produto.

Propriedades do evento

Nome da propriedade Tipo de dados Obrigatório Descrição
product_id String Sim Identificador exclusivo do produto (por exemplo, SKU ou ID do item).
product_name String Sim Nome de exibição do produto.
variant_id String Sim Identificador da variante do produto (por exemplo, shirt_medium_blue).
image_url String Não URL da imagem do produto.
product_url String Não URL da página do produto com mais detalhes.
price Float Sim Preço unitário da variante no momento da visualização.
currency String Sim Código ISO 4217 de três letras (por exemplo, USD ou EUR).
source String Sim Origem do evento (por exemplo, web, ios ou android).
type Array de strings Não Necessário para usar os recursos de disparo de catálogo da Braze para alertas de volta ao estoque e de queda de preço. Valores aceitos: "price_drop", "back_in_stock".
catalog_name String Não O catálogo ao qual pertence uma inscrição de volta ao estoque ou de queda de preço criada a partir deste evento. Se for omitido, será usado o catálogo de fallback do espaço de trabalho. Deve ser uma propriedade de nível superior; um catalog_name aninhado dentro de metadata é ignorado.
metadata Objeto Não Pares de chave-valor flexíveis (por exemplo, category ou brand).

Dispare sempre que o conteúdo do carrinho de um usuário mudar. Use a substituição completa do carrinho (omita action ou defina como replace) ou atualizações incrementais (add ou remove).

Propriedades do evento

Propriedade Tipo de dados Obrigatório Descrição
cart_id String Sim Identificador exclusivo do carrinho. Compartilhado entre os eventos de carrinho, checkout e pedido para o mapeamento do carrinho do usuário. Para ver as regras de reutilização após o checkout ou a realização do pedido, consulte ID do carrinho após checkout ou pedido.
action String Não add (aumenta a quantidade ou adiciona uma linha), remove (diminui a quantidade; a linha é removida em 0) ou replace (substituição completa do carrinho, o mesmo que omitir action).
total_value Float Condicional Obrigatório quando action é omitido ou é replace, e armazenado como o total do carrinho. Opcional quando action é add ou remove.

Quando action é add ou remove, o valor não é armazenado no carrinho e não apaga um total armazenado anteriormente. Quando um carrinho é atualizado apenas com add ou remove, nenhum total_value é armazenado, e a tag {% shopping_cart %} soma o price de cada produto multiplicado pela respectiva quantity.
subtotal_value Float Não Valor do subtotal do carrinho (após descontos, antes de impostos e frete). Não é armazenado no carrinho e não está disponível pela Liquid tag {% shopping_cart %}.
tax Float Não Total de impostos aplicados ao carrinho. Não é armazenado no carrinho e não está disponível pela Liquid tag {% shopping_cart %}.
shipping Float Não Custo total de frete do carrinho. Não é armazenado no carrinho e não está disponível pela Liquid tag {% shopping_cart %}.
currency String Sim Código ISO 4217 de três letras.
products Array Sim Itens de linha desta atualização. Consulte a tabela de propriedades do produto.
source String Sim Origem do evento.
metadata Objeto Não Pares de chave-valor flexíveis para dados adicionais no nível do evento.

Propriedades do produto (products[])

Propriedade Tipo de dados Obrigatório Descrição
product_id String Sim Identificador exclusivo do produto.
product_name String Sim Nome de exibição do produto.
variant_id String Sim Identificador da variante.
image_url String Não URL da imagem do produto.
product_url String Não URL da página do produto.
quantity Inteiro Sim Na substituição completa, a quantidade de unidades desta linha no carrinho. Para add ou remove, quantas unidades adicionar ou remover.
price Float Sim Preço unitário da variante.
metadata Objeto Não Pares de chave-valor flexíveis (por exemplo, color ou size).

Dispare quando o usuário iniciar o fluxo de checkout.

Propriedades do evento

Propriedade Tipo de dados Obrigatório Descrição
checkout_id String Sim Identificador exclusivo da sessão de checkout.
cart_id String Não Identificador do carrinho. Compartilhado entre os eventos de carrinho, checkout e pedido para o mapeamento do carrinho do usuário.
total_value Float Sim Valor monetário total do checkout.
subtotal_value Float Não Valor do subtotal (após descontos, antes de impostos e frete).
tax Float Não Total de impostos aplicados ao checkout.
shipping Float Não Custo total de frete.
currency String Sim Código ISO 4217 de três letras.
products Array Sim Itens no checkout. Consulte a tabela de propriedades do produto.
source String Sim Origem do evento.
metadata Objeto Não Pares de chave-valor flexíveis. Subpropriedade reconhecida: checkout_url (String).

Propriedades do produto (products[])

Propriedade Tipo de dados Obrigatório Descrição
product_id String Sim Identificador exclusivo do produto.
product_name String Sim Nome de exibição do produto.
variant_id String Sim Identificador da variante.
image_url String Não URL da imagem do produto.
product_url String Não URL da página do produto.
quantity Inteiro Sim Número de unidades no carrinho.
price Float Sim Preço unitário da variante.
metadata Objeto Não Pares de chave-valor flexíveis (por exemplo, color ou size).

Dispare quando um pedido for concluído com sucesso ou o pagamento for confirmado.

Propriedades do evento

Propriedade Tipo de dados Obrigatório Descrição
order_id String Sim Identificador exclusivo do pedido.
cart_id String Não Identificador do carrinho. Compartilhado entre os eventos de carrinho, checkout e pedido para o mapeamento do carrinho do usuário.
total_value Float Sim Valor monetário total do pedido.
subtotal_value Float Não Valor do subtotal (após descontos, antes de impostos e frete).
tax Float Não Total de impostos aplicados ao pedido.
shipping Float Não Custo total de frete.
currency String Sim Código ISO 4217 de três letras.
total_discounts Float Não Valor total dos descontos aplicados ao pedido.
discounts Array Não Lista detalhada dos descontos aplicados. Cada objeto de desconto aceita code (String), amount (Float) e type (String).
products Array Sim Itens do pedido. Consulte a tabela de propriedades do produto.
source String Sim Origem do evento.
metadata Objeto Não Pares de chave-valor flexíveis. Subpropriedade reconhecida: order_status_url (String).

Propriedades do produto (products[])

Propriedade Tipo de dados Obrigatório Descrição
product_id String Sim Identificador exclusivo do produto.
product_name String Sim Nome de exibição do produto.
variant_id String Sim Identificador da variante.
image_url String Não URL da imagem do produto.
product_url String Não URL da página do produto.
quantity Inteiro Sim Número de unidades no pedido.
price Float Sim Preço unitário da variante.
metadata Objeto Não Pares de chave-valor flexíveis (por exemplo, color ou size).

Dispare quando um pedido for cancelado.

Propriedades do evento

Propriedade Tipo de dados Obrigatório Descrição
order_id String Sim Identificador exclusivo do pedido.
total_value Float Sim Valor monetário total do pedido cancelado. Envie o valor absoluto (maior ou igual a 0); a Braze cuida da dedução.
subtotal_value Float Não Valor do subtotal (após descontos, antes de impostos e frete).
tax Float Não Total de impostos aplicados ao pedido.
shipping Float Não Custo total de frete.
currency String Sim Código ISO 4217 de três letras.
total_discounts Float Não Valor total dos descontos aplicados ao pedido.
discounts Array Não Lista detalhada dos descontos aplicados.
cancel_reason String Sim Motivo do cancelamento do pedido.
products Array Sim Itens do pedido cancelado. Consulte a tabela de propriedades do produto.
source String Sim Origem do evento.
metadata Objeto Não Pares de chave-valor flexíveis. Subpropriedade reconhecida: order_status_url (String).

Propriedades do produto (products[])

Propriedade Tipo de dados Obrigatório Descrição
product_id String Sim Identificador exclusivo do produto.
product_name String Sim Nome de exibição do produto.
variant_id String Sim Identificador da variante.
image_url String Não URL da imagem do produto.
product_url String Não URL da página do produto.
quantity Inteiro Sim Número de unidades no pedido.
price Float Sim Preço unitário da variante.
metadata Objeto Não Pares de chave-valor flexíveis (por exemplo, color ou size).

Dispare quando um reembolso total ou parcial for emitido. Em reembolsos parciais, defina total_value apenas como o valor reembolsado, e não como o total original do pedido.

Propriedades do evento

Propriedade Tipo de dados Obrigatório Descrição
order_id String Sim Identificador exclusivo do pedido original.
total_value Float Sim Valor monetário total do reembolso. Envie o valor absoluto (maior ou igual a 0); a Braze cuida do ajuste da receita.
currency String Sim Código ISO 4217 de três letras.
total_discounts Float Não Valor total dos descontos aplicados originalmente.
discounts Array Não Lista detalhada dos descontos.
products Array Sim Itens reembolsados. Consulte a tabela de propriedades do produto.
source String Sim Origem do evento.
metadata Objeto Não Pares de chave-valor flexíveis. Subpropriedade reconhecida: order_status_url (String).

Propriedades do produto (products[])

Propriedade Tipo de dados Obrigatório Descrição
product_id String Sim Identificador exclusivo do produto.
product_name String Sim Nome de exibição do produto.
variant_id String Sim Identificador da variante.
image_url String Não URL da imagem do produto.
product_url String Não URL da página do produto.
quantity Inteiro Sim Número de unidades reembolsadas.
price Float Sim Preço unitário da variante.
metadata Objeto Não Pares de chave-valor flexíveis (por exemplo, color ou size).

Android

O SDK Android 42.3.0+ oferece classes tipadas de eventos de eCommerce. Elas validam os dados no lado do cliente no momento da construção e serializam automaticamente em snake_case quando você chama Braze.logEcommerceEvent.

Classe Android Nome do evento Notas
ProductViewedEvent ecommerce.product_viewed Coloca os campos do produto no nível superior de properties (sem array products). Suporta os parâmetros opcionais type (43.0.0+) e catalogName para gatilhos de catálogo de volta ao estoque e queda de preço. Em versões anteriores, use logCustomEvent ou a REST API para enviar essas propriedades.
CartUpdatedEvent ecommerce.cart_updated Use CartUpdatedAction (ADD, REMOVE, REPLACE) para a propriedade action.
CheckoutStartedEvent ecommerce.checkout_started  
OrderPlacedEvent ecommerce.order_placed Suporta cartId, totalDiscounts e discounts opcionais.

Blocos de construção compartilhados

  • EcommerceProduct: itens de linha para eventos de carrinho, checkout e pedido.
    • Obrigatórios: productId, productName, variantId, price, quantity (Long não negativo)
    • Opcionais: imageUrl, productUrl, metadata
  • BrazeProperties: metadata no nível do evento ou do produto. As chaves devem ser strings não vazias com no máximo 255 caracteres e sem cifrão ($) no início.

Validação no lado do cliente

Cargas úteis inválidas lançam IllegalArgumentException quando você constrói a classe do evento. Assim, o evento nunca entra na fila. Regras comuns:

Campo ou regra Validação
IDs e nomes em string (product_id, product_name, variant_id, cart_id, checkout_id, order_id, source, URLs opcionais) Não vazio, até 255 caracteres
price, total_value, total_discounts Deve ser maior ou igual a 0
currency Código ISO 4217 válido (o SDK remove espaços e converte para maiúsculas)
products (eventos de carrinho, checkout e pedido) Pelo menos um EcommerceProduct
quantity (por produto) Inteiro não negativo

No momento do envio, se as propriedades serializadas excederem o limite de tamanho do SDK, logEcommerceEvent registra um erro e não envia o evento.

Exemplos de código

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,
  type = listOf("price_drop", "back_in_stock"),
  catalogName = "scarves",
)

Braze.getInstance(context).logEcommerceEvent(productViewedEvent)

Defina action usando CartUpdatedAction:

Valor Valor no protocolo Descrição
CartUpdatedAction.ADD add Aumenta a quantidade ou adiciona um item.
CartUpdatedAction.REMOVE remove Diminui a quantidade; remove o item quando chega a 0.
CartUpdatedAction.REPLACE replace Substitui o carrinho inteiro (padrão).
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)

A Braze não fornece uma classe tipada do SDK para este evento. Use logCustomEvent com uma carga útil que corresponda ao esquema do evento ecommerce.order_cancelled.

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)

A Braze não fornece uma classe tipada do SDK para este evento. Use logCustomEvent com uma carga útil que corresponda ao esquema do evento ecommerce.order_refunded.

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,
    /* type */ Arrays.asList("price_drop", "back_in_stock"),
    /* catalogName */ "scarves"
);

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

Defina action usando CartUpdatedAction:

Valor Valor no protocolo Descrição
CartUpdatedAction.ADD add Aumenta a quantidade ou adiciona um item.
CartUpdatedAction.REMOVE remove Diminui a quantidade; remove o item quando chega a 0.
CartUpdatedAction.REPLACE replace Substitui o carrinho inteiro (padrão).
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);

A Braze não fornece uma classe tipada do SDK para este evento. Use logCustomEvent com uma carga útil que corresponda ao esquema do evento ecommerce.order_cancelled.

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)))));

A Braze não fornece uma classe tipada do SDK para este evento. Use logCustomEvent com uma carga útil que corresponda ao esquema do evento ecommerce.order_refunded.

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

O SDK Swift fornece classes de eventos de eCommerce tipadas — ProductViewedEvent, CartUpdatedEvent, CheckoutStartedEvent e OrderPlacedEvent — que você constrói e passa para logEcommerceEvent. Use ProductLineItem para os produtos em eventos de carrinho, checkout e pedido. Cada inicializador pode lançar exceção, então envolva-o em try? e registre o evento somente quando a construção for bem-sucedida. Disponível a partir da versão 15.0.0 do SDK Swift.

ecommerce.order_cancelled e ecommerce.order_refunded não estão disponíveis como classes tipadas do SDK Swift. Registre-os com logCustomEvent.

Exemplos de código

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"
    ],
    type: ["price_drop", "back_in_stock"],
    catalogName: "footwear"
) {
    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)
}

A Braze não fornece uma classe tipada do SDK para este evento. Use logCustomEvent com uma carga útil que corresponda ao esquema do evento ecommerce.order_cancelled.

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)

A Braze não fornece uma classe tipada do SDK para este evento. Use logCustomEvent com uma carga útil que corresponda ao esquema do evento ecommerce.order_refunded.

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

No Web SDK 6.8.0+, chame logEcommerceEvent com um name de evento e properties. Em versões legadas do SDK, chame logCustomEvent com o nome do evento e um objeto de propriedades. Os eventos ecommerce.order_cancelled e ecommerce.order_refunded usam logCustomEvent.

Exemplos de código

Em versões mais recentes do SDK, chame logEcommerceEvent():

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/",
        "type": ["price_drop", "back_in_stock"],
        "catalog_name": "footwear",
        "metadata": {
            "color": "ORANGE",
            "size": "6",
            "brand": "Braze"
        }
    }
});

Em versões legadas do SDK, chame logCustomEvent():

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"
    }
});

Em versões mais recentes do SDK, chame logEcommerceEvent():

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": {}
    }
});

Em versões legadas do SDK, chame logCustomEvent():

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": {}
});

Em versões mais recentes do SDK, chame logEcommerceEvent():

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"
        }
    }
});

Em versões legadas do SDK, chame logCustomEvent():

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"
    }
});

Em versões mais recentes do SDK, chame logEcommerceEvent():

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"]
        }
    }
});

Em versões legadas do SDK, chame logCustomEvent():

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

Se você usa o Google Tag Manager (GTM), use o tipo de tag Log eCommerce Event (New) na tag Braze Actions em vez de chamar logEcommerceEvent() no código do seu site. A tag lê a camada de dados de eCommerce no formato GA4 e oferece suporte aos eventos ecommerce.product_viewed, ecommerce.cart_updated, ecommerce.checkout_started e ecommerce.order_placed. Ela também oferece suporte a metadados de eventos e de produtos. Para registrar ecommerce.order_cancelled ou ecommerce.order_refunded, use uma tag Custom HTML que chame braze.logCustomEvent().

Para ver as etapas de configuração, o mapeamento de campos e a solução de problemas, consulte Registrar eventos de eCommerce com o GTM.

Registro manual com logCustomEvent

Para registrar manualmente um evento recomendado, chame logCustomEvent com o nome exato do evento (por exemplo, ecommerce.product_viewed) e uma carga útil BrazeProperties ou JSONObject construída manualmente. O SDK não valida esquemas de eventos recomendados para chamadas manuais. A Braze valida essas cargas úteis durante a ingestão:

  • Cargas úteis válidas são processadas como eventos recomendados com pós-processamento completo.
  • Cargas úteis inválidas (campos obrigatórios ausentes, tipos incorretos, propriedades extras no nível superior) são descartadas após a ingestão. As falhas aparecem no registro de processamento do SDK do espaço de trabalho e no e-mail de resumo de falhas.

Use logEcommerceEvent sempre que possível para detectar dados inválidos antes que saiam do app. Para o uso geral de logCustomEvent, consulte Registrar eventos personalizados.

New Stuff!