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 em nível de pedido em todas as plataformas. Use as tabelas de propriedades a seguir ao construir a carga útil de cada evento. Para o esquema canônico com comportamento completo de validação e exemplos de REST API, consulte Eventos recomendados. Para recursos da plataforma como segmentação, modelos de Canvas e relatórios, consulte Como usar eventos de eCommerce.
Dispare quando um usuário visualizar uma página de detalhes do produto.
Propriedades do evento
| Nome da propriedade | Tipo de dados | Obrigatória | Descrição |
|---|---|---|---|
product_id |
String | Sim | Identificador único 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 para 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 | Obrigatória para usar os recursos de gatilho de catálogo da Braze para alertas de volta ao estoque e queda de preço. Valores aceitos: "price_drop", "back_in_stock". |
metadata |
Objeto | Não | Pares chave-valor flexíveis. Subpropriedade reconhecida: sku (String). |
Dispare sempre que o conteúdo do carrinho de um usuário mudar. Use 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ória | Descrição |
|---|---|---|---|
cart_id |
String | Sim | Identificador único do carrinho. Compartilhado entre eventos de carrinho, checkout e pedido para o mapeamento do carrinho do usuário. |
action |
String | Não | add (incrementar quantidade ou adicionar um item), remove (decrementar quantidade; item removido em 0) ou replace (substituição completa do carrinho, igual a omitir action). |
total_value |
Float | Condicional | Obrigatória quando action é omitida ou replace. Opcional quando action é add ou remove. |
subtotal_value |
Float | Não | Valor do subtotal do carrinho (pós-desconto, pré-imposto/frete). |
tax |
Float | Não | Total de impostos aplicados ao carrinho. |
shipping |
Float | Não | Custo total de frete do carrinho. |
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 chave-valor flexíveis para dados adicionais em nível de evento. |
Propriedades do produto (products[])
| Propriedade | Tipo de dados | Obrigatória | Descrição |
|---|---|---|---|
product_id |
String | Sim | Identificador único 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 |
Integer | Sim | Para substituição completa, unidades no carrinho para este item. Para add ou remove, quantas unidades adicionar ou remover. |
price |
Float | Sim | Preço unitário da variante. |
metadata |
Objeto | Não | Pares 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ória | Descrição |
|---|---|---|---|
checkout_id |
String | Sim | Identificador único da sessão de checkout. |
cart_id |
String | Não | Identificador do carrinho. Compartilhado entre 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 (pós-desconto, pré-imposto/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 sendo processados no checkout. Consulte a tabela de propriedades do produto. |
source |
String | Sim | Origem do evento. |
metadata |
Objeto | Não | Pares chave-valor flexíveis. Subpropriedade reconhecida: checkout_url (String). |
Propriedades do produto (products[])
| Propriedade | Tipo de dados | Obrigatória | Descrição |
|---|---|---|---|
product_id |
String | Sim | Identificador único 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 |
Integer | Sim | Número de unidades no carrinho. |
price |
Float | Sim | Preço unitário da variante. |
metadata |
Objeto | Não | Pares 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ória | Descrição |
|---|---|---|---|
order_id |
String | Sim | Identificador único do pedido. |
cart_id |
String | Não | Identificador do carrinho. Compartilhado entre 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 (pós-desconto, pré-imposto/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 de descontos aplicados ao pedido. |
discounts |
Array | Não | Lista detalhada de descontos aplicados. Cada objeto de desconto suporta 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 chave-valor flexíveis. Subpropriedade reconhecida: order_status_url (String). |
Propriedades do produto (products[])
| Propriedade | Tipo de dados | Obrigatória | Descrição |
|---|---|---|---|
product_id |
String | Sim | Identificador único 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 |
Integer | Sim | Número de unidades no pedido. |
price |
Float | Sim | Preço unitário da variante. |
metadata |
Objeto | Não | Pares chave-valor flexíveis (por exemplo, color ou size). |
Dispare quando um pedido for cancelado.
Propriedades do evento
| Propriedade | Tipo de dados | Obrigatória | Descrição |
|---|---|---|---|
order_id |
String | Sim | Identificador único do pedido. |
total_value |
Float | Sim | Valor monetário total do pedido sendo cancelado. Envie o valor absoluto (maior ou igual a 0); a Braze cuida do decremento. |
subtotal_value |
Float | Não | Valor do subtotal (pós-desconto, pré-imposto/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 de descontos aplicados ao pedido. |
discounts |
Array | Não | Lista detalhada de 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 chave-valor flexíveis. Subpropriedade reconhecida: order_status_url (String). |
Propriedades do produto (products[])
| Propriedade | Tipo de dados | Obrigatória | Descrição |
|---|---|---|---|
product_id |
String | Sim | Identificador único 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 |
Integer | Sim | Número de unidades no pedido. |
price |
Float | Sim | Preço unitário da variante. |
metadata |
Objeto | Não | Pares chave-valor flexíveis (por exemplo, color ou size). |
Dispare quando um reembolso total ou parcial for emitido. Para reembolsos parciais, defina total_value apenas com o valor reembolsado, não com o total original do pedido.
Propriedades do evento
| Propriedade | Tipo de dados | Obrigatória | Descrição |
|---|---|---|---|
order_id |
String | Sim | Identificador único 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 de receita. |
currency |
String | Sim | Código ISO 4217 de três letras. |
total_discounts |
Float | Não | Valor total de descontos originalmente aplicados. |
discounts |
Array | Não | Lista detalhada de descontos. |
products |
Array | Sim | Itens sendo reembolsados. Consulte a tabela de propriedades do produto. |
source |
String | Sim | Origem do evento. |
metadata |
Objeto | Não | Pares chave-valor flexíveis. Subpropriedade reconhecida: order_status_url (String). |
Propriedades do produto (products[])
| Propriedade | Tipo de dados | Obrigatória | Descrição |
|---|---|---|---|
product_id |
String | Sim | Identificador único 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 |
Integer | Sim | Número de unidades reembolsadas. |
price |
Float | Sim | Preço unitário da variante. |
metadata |
Objeto | Não | Pares chave-valor flexíveis (por exemplo, color ou size). |
Android
O SDK Android 42.3.0+ fornece classes de eventos de eCommerce tipadas com validação no lado do cliente no momento da construção e serialização automática em snake_case quando você chama Braze.logEcommerceEvent.
| Classe Android | Nome do evento | Notas |
|---|---|---|
ProductViewedEvent |
ecommerce.product_viewed |
Nivela os campos do produto para o nível superior de properties (sem array products). Esta classe não suporta a propriedade type de nível superior para gatilhos de catálogo. Se você precisar de type, use logCustomEvent ou a REST API. |
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-os com logCustomEvent ou 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, então o evento nunca é enfileirado. 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 (aparado e convertido para maiúsculas pelo SDK) |
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
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)
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). |
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)
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.
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)
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.
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);
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). |
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);
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.
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)))));
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.
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
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
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)
}
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.
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)
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.
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
No SDK Web 6.8.0+, chame logEcommerceEvent com um name de evento e properties. Em versões anteriores do SDK, chame logCustomEvent com o nome do evento e um objeto de propriedades. ecommerce.order_cancelled e ecommerce.order_refunded usam logCustomEvent.
Exemplos de código
Em versões mais recentes do SDK, chame 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"
}
}
});
Em versões anteriores do SDK, chame 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"
}
});
Em versões mais recentes do SDK, chame 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": {}
}
});
Em versões anteriores do SDK, chame 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": {}
});
Em versões mais recentes do SDK, chame 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"
}
}
});
Em versões anteriores do SDK, chame 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"
}
});
Em versões mais recentes do SDK, chame 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"]
}
}
});
Em versões anteriores do SDK, chame 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"]
}
});
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.