Antes de começar
- Tracer em execução e acessível, com uma API key — veja Primeiros passos
- As variáveis e o modelo de escopo — veja o Motor de regras
- Um id de conta de teste para o qual você possa enviar validações, que nenhum tráfego de clientes use
- A frase da política, por escrito, com quem a escreveu disponível para uma pergunta
X-API-Key.
Passo 1: Mapeie a frase sobre os campos
Uma regra lê o que a requisição de validação carrega. Decomponha a frase cláusula por cláusula e coloque cada uma na coluna à qual ela pertence.
Os dois primeiros são campos que o Tracer define. Os dois últimos são campos que sua integração precisa enviar — o Tracer não tem opinião sobre o que “sem presença física” ou “dispositivo novo” significam. Essa é a pergunta para levar de volta a quem escreveu a política: qual sinalizador do nosso payload diz que o dispositivo é novo?
subType chega às expressões em minúsculas, então "card_not_present" é a forma contra a qual comparar. Se sua integração já usa subType para outra coisa, leve o modo de entrada em metadata e compare contra isso — os dois funcionam do mesmo jeito em uma expressão.Passo 2: Divida a regra entre escopo e expressão
Duas coisas daquela tabela — o tipo de transação e a conta — são coisas que o Tracer consegue filtrar antes de uma expressão rodar. Elas pertencem aos
scopes da regra. As comparações de valor pertencem à expression.
Escopo, que decide se a regra é sequer considerada:
amount > 5000 é estritamente maior, então uma transação de exatamente 5000.00 não dispara a regra — confira isso contra a política antes de seguir, porque “acima de” e “a partir de” são regras diferentes.
Uma regra que lê uma chave de metadata que a requisição não carrega não corresponde, e as outras regras continuam rodando. Por isso a expressão acima não precisa de um teste de presença para deviceFirstSeen; veja o Motor de regras.
Passo 3: Crie a regra como rascunho
POST /v1/rules cria a regra em DRAFT. Um rascunho não é avaliado, então nada do que você fizer aqui alcança o tráfego.
accountId nesse escopo é a sua conta de teste. É o que mantém o passo 4 fora do tráfego de clientes; o passo 5 o remove.
Um 201 responde com a regra armazenada:
name que ele devolve pode diferir da string que você enviou. Pegue o ruleId da resposta — esse é o identificador que toda chamada abaixo usa. Veja Criar uma regra.
A expressão é compilada nesta chamada, então uma expressão que não consegue rodar nunca vira um rascunho. Um erro de sintaxe responde 0340, uma expressão que não retorna um booleano responde 0341, e uma cujo custo estimado está acima de CEL_COST_LIMIT responde 0342.
Passo 4: Ensaie em uma conta que ninguém mais usa
O escopo que você definiu é o que mantém o ensaio contido: a regra é considerada apenas para transações daquela única conta de teste, então ativá-la a coloca na frente de exatamente o tráfego que você enviar.
1
Ative a regra com escopo
status: "ACTIVE" e um activatedAt. Veja Ativar uma regra.2
Envie uma transação que a política deveria negar
3
Leia a decisão
ruleId em matchedRuleIds é o ensaio passando.4
Envie os casos que não deveriam disparar
Mude um valor por vez e repita a chamada com um
requestId novo: "amount": "5000.00" para o limite exato, "deviceFirstSeen": false para um dispositivo conhecido, "subType": "purchase" para uma venda com presença física. Cada uma deve voltar sem o seu ruleId em matchedRuleIds.Um ensaio é uma validação real. Ele armazena um registro de decisão e escreve um evento de auditoria, e uma decisão
ALLOW consome os limites de gasto que cobrem aquela conta. É por isso que a conta de teste importa.ruleId não estiver em matchedRuleIds, percorra nesta ordem: a regra está ACTIVE (GET /v1/rules/{id})?, a transação corresponde ao escopo que você definiu?, os valores que você enviou satisfazem a expressão?
Passo 5: Coloque no ar
Entrar em produção significa uma edição: tire a conta de teste do escopo para que a regra se aplique à população que a política nomeia.
1
Pare de avaliar a versão de ensaio
Editar o escopo não exige O status vai para
INACTIVE. Desativar primeiro faz a troca surtir efeito em um momento que você controla e deixa uma lacuna visível no rastro de auditoria. Cada instância serve as regras a partir de um cache que ela atualiza por sondagem (a cada 10 segundos por padrão, RULE_SYNC_POLL_INTERVAL_SECONDS), então aguarde essa janela para a desativação alcançar todas as instâncias; GET /v1/rules confirma o status armazenado, não que cada instância já se atualizou.INACTIVE. Veja Desativar uma regra.2
Substitua o escopo
scopes substitui o array inteiro — envie cada objeto de escopo que você quer que a regra mantenha. Veja Atualizar uma regra.3
Ative
RULE_SYNC_POLL_INTERVAL_SECONDS, padrão 10). A desativação viaja do mesmo jeito. Aguarde essa mesma janela depois de ativar antes de considerar a regra valendo em todas as instâncias.4
Confirme o que está no ar
GET /v1/rules/{id} devolve a expressão e os escopos como estão armazenados (Recuperar uma regra). Os dois retornam o estado armazenado, não o que o cache de cada instância guarda.Uma validação carrega o conjunto de regras dela uma vez, do cache da instância que atende a chamada, quando a chamada começa. Uma regra que é ativada enquanto uma validação está em voo não faz parte daquela decisão, e decisões já registradas não mudam quando as regras mudam depois.
Passo 6: Saiba onde a sua regra fica entre as outras
As regras não têm campo de prioridade nem ordem para configurar. Regras cujo escopo corresponde a uma transação são avaliadas juntas, e a decisão vem da ação mais estrita que disparou: primeiro uma regra
DENY, depois um limite de gasto excedido, depois REVIEW, depois ALLOW, depois o padrão configurado para quando não há correspondência. matchedRuleIds carrega cada regra que correspondeu, seja qual for a ação de cada uma.
Duas consequências para a regra que você acabou de escrever:
-
Uma regra
ALLOWnão isenta ninguém de uma regraDENY. Se a política tem uma exceção — clientes VIP, um lojista parceiro — a exceção pertence dentro da expressãoDENY, como mais uma condição que a torna mais estreita:Repare no que isso custa: a regra estreitada agora lêmetadata.customerTier, e uma requisição que não carrega essa chave não corresponde a ela. -
A sua regra entra no conjunto que cada transação correspondente avalia.
MAX_RULES_PER_REQUESTlimita quantas regras uma validação avalia; quando o conjunto é maior, a resposta reportatruncated: true— veja variáveis de ambiente.
Passo 7: Mude a regra quando a política mudar
O que você faz depende do campo, não de como a regra está indo.
Um
PATCH fica armazenado quando responde, e chega à avaliação na próxima sincronização de regras. Quando a mudança importa ao minuto, desative primeiro e ative de novo depois — essa sequência ainda deixa uma lacuna visível no rastro de auditoria onde a regra não estava valendo, que é o que quem revisa vai procurar.
O ciclo de vida é um conjunto fechado de movimentos: DRAFT é ativado ou excluído; ACTIVE é desativado; INACTIVE volta para DRAFT, volta para ACTIVE ou é excluído; DELETED é o fim. Qualquer outra coisa responde 422 com o código de erro 0349 — inclusive um pedido para voltar para rascunho uma regra que ainda está ACTIVE.
Passo 8: Aposente ou exclua a regra
Para parar de valer sem perder nada, desative. A regra mantém a expressão, os escopos e a história dela, para de ser avaliada, e
POST /v1/rules/{id}/activate a traz de volta. Esse é o movimento para uma política suspensa, sazonal ou em revisão.
Para removê-la, exclua — e só depois de desativar, porque uma regra em ACTIVE não pode ser excluída:
204 responde em caso de sucesso. Veja Excluir uma regra.
O que a exclusão remove:
- A regra para de responder em
GET /v1/rules/{id}, que devolve404com o código de erro0347a partir de então. - Ela não aparece mais em
GET /v1/rules, eDELETEDnão é um valor que o filtrostatusaceita. DELETEDé o fim do ciclo de vida. Nenhum endpoint tira uma regra de lá — uma regra excluída volta apenas como uma regra nova que você crie de novo.
- O rastro de auditoria mantém o ciclo de vida da regra, e o evento
RULE_DELETEDcarrega a definição — nome, descrição, expressão, ação, escopos — como ela estava na exclusão. Veja Auditoria e compliance. - As decisões que a regra produziu mantêm o
ruleIddela emmatchedRuleIds. Uma negativa de seis meses atrás ainda a nomeia — veja Revisar uma transação negada. - O nome fica disponível de novo para uma regra nova no mesmo contexto.
Erros comuns
Códigos de erro
A lista completa está na Lista de erros do Tracer.

