Antes de começar
- O Tracer em execução e acessível, com uma chave de API. Veja Primeiros passos
- As variáveis e o modelo de scope. Veja Motor de regras
- Um id de conta de teste para o qual você pode enviar validações, que nenhum tráfego de cliente usa
- A frase da política, anotada, com quem a escreveu disponível para uma pergunta
X-API-Key.
Passo 1: Mapeie a frase para campos
Uma regra lê o que a requisição de validação carrega. Divida a frase cláusula por cláusula e coloque cada uma na coluna a que 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 significam “cartão não presente” ou “dispositivo novo”. Essa é a pergunta para levar de volta a quem escreveu a política: qual flag no nosso payload indica que o dispositivo é novo?
subType chega às expressões em minúsculas, então "card_not_present" é a forma usada na comparação. Se sua integração já usa subType para outra coisa, carregue o modo de entrada em metadata e compare por ali. Os dois funcionam do mesmo jeito em uma expressão.Passo 2: Divida a regra entre scope e expressão
Duas coisas naquela tabela (o tipo de transação e a conta) são coisas que o Tracer pode filtrar antes de uma expressão ser executada. Elas pertencem ao
scopes da regra. As comparações de valor pertencem à expression.
Scope, que decide se a regra é considerada ou não:
amount > 5000 é estritamente maior, então uma transação de exatamente 5000.00 não a dispara. Confira isso com a política antes de continuar, porque “acima de” e “a partir de” são regras diferentes.
Uma regra que lê uma chave de metadados que a requisição não carrega não corresponde, e as outras regras continuam sendo executadas. Por isso, a expressão acima não precisa de um teste de presença para deviceFirstSeen. Veja Motor de regras.
Passo 3: Crie a regra como rascunho
POST /v1/rules cria a regra em DRAFT. Um rascunho nunca chega à avaliação, então nada que você faz aqui alcança o tráfego.
accountId nesse scope é sua conta de teste. É isso que mantém o passo 4 fora do tráfego de clientes. O passo 5 o remove.
Um 201 responde com a regra armazenada:
FraudRule e fraudrule são nomes diferentes, e o mesmo nome pode coexistir em contextos diferentes.
Pegue o ruleId da resposta. Esse é o identificador usado por todas as chamadas abaixo. Veja Criar uma regra.
A expressão é compilada nessa chamada, então uma expressão que não pode ser executada nunca se torna 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 do CEL_COST_LIMIT responde 0342.
Passo 4: Ensaie em uma conta que mais ninguém usa
O scope que você definiu é o que mantém o ensaio contido. A regra chega à avaliação apenas para transações naquela única conta de teste. A ativação a coloca na frente exatamente do tráfego que você enviar.
1
Ative a regra com o scope definido
status: "ACTIVE" e um activatedAt. Veja Ativar uma regra.2
Envie uma transação que a política deve recusar
3
Leia a decisão
ruleId em matchedRuleIds significa que o ensaio passou.4
Envie os casos que não devem disparar
Altere um valor por vez e repita a chamada com um
requestId novo: "amount": "5000.00" para o valor limite, "deviceFirstSeen": false para um dispositivo conhecido, "subType": "purchase" para uma venda com cartão presente. Cada uma deve voltar sem o seu ruleId em matchedRuleIds.Um ensaio é uma validação real. Ele armazena um registro de decisão e grava um evento de auditoria, e uma decisão
ALLOW consome os limites de gastos que cobrem aquela conta. É por isso que a conta de teste importa.ruleId não estiver em matchedRuleIds, siga esta ordem. A regra está ACTIVE (GET /v1/rules/{id})? A transação corresponde ao scope que você definiu? Os valores que você enviou satisfazem a expressão?
Passo 5: Coloque em produção
Ir para produção significa uma única edição: remover a conta de teste do scope para que a regra se aplique à população que a política nomeia.
1
Pare de avaliar a versão de ensaio
Uma edição de scope não exige O status muda para
INACTIVE. Desativar primeiro faz a troca acontecer no momento que você controla e registra uma lacuna visível na trilha de auditoria. Cada instância serve regras a partir de uma cache que atualiza em um poll (a cada 10 segundos por padrão, RULE_SYNC_POLL_INTERVAL_SECONDS). Reserve essa janela para a desativação alcançar todas as instâncias. GET /v1/rules confirma o status armazenado, não que todas as instâncias já se atualizaram.INACTIVE. Veja Desativar uma regra.2
Substitua o scope
scopes substitui todo o array. Envie todos os objetos de scope que você quer que a regra mantenha. Veja Atualizar uma regra.3
Ative
RULE_SYNC_POLL_INTERVAL_SECONDS, padrão 10). A desativação percorre o mesmo caminho. Reserve essa mesma janela depois da ativação antes de considerar a regra em vigor em todas as instâncias.4
Confirme o que está em produção
GET /v1/rules/{id} retorna a expressão e os scopes como estão armazenados (Recuperar uma regra). As duas reportam o estado armazenado, não o que a cache de cada instância contém.Uma validação carrega seu conjunto de regras uma vez, a partir da cache da instância que a atende, quando a chamada começa. Uma regra que é ativada enquanto uma validação está em andamento não faz parte dessa decisão. Decisões já registradas não mudam quando as regras mudam depois.
Passo 6: Saiba onde sua regra fica entre as outras
Regras não carregam um campo de prioridade nem uma ordenação para configurar. Regras cujo scope corresponde a uma transação são avaliadas juntas. A decisão vem da ação mais restritiva que disparou: primeiro uma regra
DENY, depois um limite de gastos excedido, depois REVIEW, depois ALLOW, depois o padrão configurado para quando nada corresponde. O array matchedRuleIds carrega toda regra que correspondeu, qualquer que seja a ação que ela tenha.
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), coloque-a dentro da expressãoDENY. Adicione-a como mais uma condição que torna a regra mais restrita:Observe o custo disso: a regra mais restrita agora lêmetadata.customerTier, e uma requisição que não carrega essa chave não corresponde a ela. -
Sua regra entra no conjunto que toda 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: Altere a regra quando a política muda
O que você faz depende do campo, não do desempenho da regra.
Um
PATCH é armazenado quando responde, e chega à avaliação na próxima sincronização de regras. Quando a mudança importa até o minuto, desative primeiro e ative de novo depois. Essa sequência também coloca uma lacuna visível na trilha de auditoria em que a regra não esteve em vigor. Um revisor vai procurar essa lacuna.
O ciclo de vida é um conjunto fechado de movimentos: DRAFT ativa ou é excluído. ACTIVE desativa. 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, incluindo uma solicitação para rascunhar uma regra que ainda está ACTIVE.
Passo 8: Desative ou exclua a regra
Para parar de aplicar sem perder nada, desative. A regra mantém sua expressão, seus scopes e seu histórico. Ela não chega mais à avaliação, 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. Desative primeiro, porque você não pode excluir uma regra em ACTIVE:
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 passa a retornar404com o código de erro0347. - 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 move uma regra para fora dele. Uma regra excluída volta apenas como uma nova regra que você cria de novo.
- A trilha 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, scopes) como ela estava no momento da exclusão. Veja Auditoria e compliance. - As decisões que a regra produziu mantêm seu
ruleIdemmatchedRuleIds. Uma negação de seis meses atrás ainda a nomeia. Veja Revisando uma transação negada. - O nome fica disponível de novo para uma nova regra no mesmo contexto.
Armadilhas comuns
Códigos de erro
A lista completa está em Lista de erros do Tracer.

