Regras de audiência
A gramática do JSON de regra, com todas as condições aceitas, seus operadores, tipos de valor e exemplos.
A regra é o campo rule de uma audiência (e do corpo da prévia). Esta página é a referência da gramática: leia uma vez, depois consulte a tabela de condições.
Estrutura
Uma regra é um grupo: um operador lógico e uma lista de itens. Cada item é uma condição (uma folha) ou outro grupo, e você aninha quantos níveis precisar.
{
"op": "AND",
"conditions": [
{ "type": "order_total", "operator": "gte", "value": 50000, "window_days": 90 },
{
"op": "OR",
"conditions": [
{ "type": "state", "operator": "in", "values": ["SP", "RJ"] },
{ "type": "email", "operator": "contains", "value": "@empresa.com.br" }
]
}
]
}Leia assim: "gastou R$ 500,00 ou mais nos últimos 90 dias e (mora em SP ou RJ ou tem e-mail da empresa)".
| Chave | Onde | Significado |
|---|---|---|
op | grupo | AND (padrão) ou OR, sem diferenciar maiúsculas. Qualquer outro texto vira AND. |
conditions | grupo | Lista de condições e subgrupos. Um item só é tratado como grupo se tiver conditions não vazio. |
not | grupo ou condição | true nega o item inteiro. |
type | condição | Nome da condição (tabela abaixo). |
operator | condição | Operador em forma semântica (gte, in...). Vence op quando os dois existem. |
op | condição | Operador em forma de símbolo (>=, in...). |
value | condição | Um valor, ou uma lista (["a","b"], achatada em "qualquer um"). |
values | condição | Lista de valores. Equivale a value com lista. |
window_days | condição | Limita a condição de compra aos últimos N dias. |
window_hours | condição | Janela em horas das condições de comportamento (padrão 24). hours é aceito como sinônimo. |
min_total_cents | abandoned_cart | Valor mínimo do carrinho, em centavos. |
Uma regra sem condições ({"op":"AND","conditions":[]}) casa com todos os clientes. É o valor usado quando você cria uma audiência sem enviar rule.
Operadores
Forma semântica (operator) | Forma de símbolo (op) | Uso |
|---|---|---|
eq, is | = | igual |
gt, lt, gte, lte | >, <, >=, <= | comparação numérica |
purchased, includes, any_of | in | pertence a qualquer um dos valores |
not_purchased, excludes, none_of, is_not, neq | not_in | não pertence a nenhum dos valores |
| (sem sinônimo) | between | intervalo de duas datas, só em order_date |
| (sem sinônimo) | contains | contém o texto, sem diferenciar maiúsculas; só em state, city, district, country, language, email |
Condições
Valores de dinheiro são centavos inteiros. Condições sobre pedidos ignoram pedidos cancelados, reembolsados, com falha, anulados e com chargeback (exceto order_status).
type (sinônimo) | Valor | Operadores | O que testa |
|---|---|---|---|
bought_product (purchased_product) | UUID de produto, um ou vários | in, not_in | Comprou (ou nunca comprou) algum destes produtos. Aceita window_days. |
bought_category (purchased_category) | UUID de categoria | in, not_in | Comprou item de alguma destas categorias. Aceita window_days. |
order_status | status do pedido, uma letra (O, P, C...) ou nome (pending, delivered, cancelled...) | in, not_in | Tem pedido em algum destes status. Nomes são convertidos em letra; use a letra para não depender da conversão. Aceita window_days. |
usergroup (customer_group) | UUID de grupo de clientes | in, not_in | Pertence a algum destes grupos. |
state, city, district, country | texto | in, not_in, contains | Algum endereço da agenda do cliente tem este valor. state usa a sigla (SP). |
language | texto, como pt-BR | eq, in, not_in, contains | Idioma do cadastro. |
email | texto | eq, in, not_in, contains | E-mail do cadastro. |
order_date | data ISO (2026-09-01, 2026-09-01T10:00:00 ou RFC 3339) | gte, lte, between (exatamente 2 datas) | Tem algum pedido nesta faixa de datas. |
marketing_consent | true ou false | (nenhum) | Aceitou (true) ou não aceitou (false) receber marketing. Sem value, o padrão é true. |
order_total (total_spent) | inteiro, centavos | =, >=, <=, >, < | Soma dos pedidos. Aceita window_days. |
order_count | inteiro | =, >=, <=, >, < | Quantidade de pedidos. Aceita window_days. |
last_purchase_days | inteiro, dias | =, >=, <=, >, < | Dias desde a última compra. Quem nunca comprou fica de fora. Aceita window_days. |
first_order (first_purchase) | (nenhum) | (nenhum) | Tem exatamente um pedido. Aceita window_days. |
viewed_no_purchase | (nenhum) | (nenhum) | Viu um produto há mais de window_hours e não o comprou depois. |
wishlist_no_purchase | (nenhum) | (nenhum) | Pôs um produto na lista de desejos há mais de window_hours e não o comprou depois. |
abandoned_cart | (nenhum) | (nenhum) | Tem carrinho abandonado e não recuperado nas últimas window_hours. Aceita min_total_cents. |
rfm_segment | rótulo RFM (lista abaixo) | in, not_in | Segmento RFM atual do cliente. |
loyalty_tier | UUID de nível de fidelidade | in, not_in | Nível atual no programa de fidelidade. |
nps_score | inteiro de 0 a 10 | =, >=, <=, >, < | Nota da resposta de NPS mais recente. Aceita window_hours. |
referrals_rewarded | inteiro | =, >=, <=, >, < | Quantas indicações o cliente teve recompensadas. Aceita window_hours. |
churn_risk | número de 0 a 1 | =, >=, <=, >, < | Risco previsto de abandono (última previsão válida). |
predicted_clv | inteiro, centavos | =, >=, <=, >, < | Valor previsto do cliente em 12 meses. |
next_order_days | inteiro, dias | =, >=, <=, >, < | Dias previstos até o próximo pedido. |
acquisition_channel | texto, canal | in, not_in | Canal pelo qual o cliente foi adquirido (primeiro contato registrado no pedido). |
Os rótulos de rfm_segment são: champions, loyal, potential_loyalist, new_customers, promising, need_attention, at_risk, cant_lose, hibernating, about_to_sleep, lost. Veja como são calculados em Indicadores.
Exemplos
Clientes que compraram duas vezes ou mais nos últimos 6 meses e aceitam marketing:
{
"op": "AND",
"conditions": [
{ "type": "order_count", "operator": "gte", "value": 2, "window_days": 180 },
{ "type": "marketing_consent", "value": true }
]
}Clientes que não compraram a categoria de chinelos e estão em risco no RFM:
{
"op": "AND",
"conditions": [
{ "type": "bought_category", "operator": "not_purchased", "value": "aa70faa9-2e94-4700-9e3c-3916cdae024f" },
{ "type": "rfm_segment", "operator": "in", "values": ["at_risk", "cant_lose"] }
]
}Carrinho abandonado de pelo menos R$ 200,00 nas últimas 48 horas:
{
"op": "AND",
"conditions": [
{ "type": "abandoned_cart", "window_hours": 48, "min_total_cents": 20000 }
]
}