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.

Para wrapper SDKs não listados, use o método nativo Android ou Swift correspondente.
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. |

ecommerce.order_cancelled e ecommerce.order_refunded não estão disponíveis como classes tipadas do SDK Android. Registre esses eventos com logCustomEvent ou com a REST API.
Blocos de construção compartilhados
EcommerceProduct: itens de linha para eventos de carrinho, checkout e pedido.- Obrigatórios:
productId,productName,variantId,price,quantity(Longnão negativo) - Opcionais:
imageUrl,productUrl,metadata
- Obrigatórios:
BrazeProperties:metadatano 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.