Antes de empezar
- Tracer en ejecución y accesible, con una clave de API. Consulta Primeros pasos
- Las variables de y el modelo de alcance. Consulta Motor de reglas
- Un id de cuenta de prueba al que puedas enviar validaciones, que no use tráfico de clientes
- La oración de la política, por escrito, con quien la redactó disponible para una pregunta
X-API-Key.
Paso 1: mapea la oración a los campos
Una regla lee lo que trae la solicitud de validación. Descompón la oración cláusula por cláusula y coloca cada una en la columna a la que pertenece.
Los dos primeros son campos que define Tracer. Los últimos dos son campos que tu integración debe enviar. Tracer no tiene una postura sobre qué significa “sin presencia de tarjeta” o “dispositivo nuevo”. Esa es la pregunta que debes llevarle a quien redactó la política: ¿qué indicador en nuestro payload dice que el dispositivo es nuevo?
subType llega a las expresiones en minúsculas, así que "card_not_present" es la forma con la que se debe comparar. Si tu integración ya usa subType para otra cosa, lleva el modo de entrada en metadata en su lugar y compara con eso. Ambas funcionan igual dentro de una expresión.Paso 2: divide la regla entre alcance y expresión
Dos cosas en esa tabla (el tipo de transacción y la cuenta) son cosas que Tracer puede filtrar antes de que se ejecute una expresión. Esas pertenecen a los
scopes de la regla. Las comparaciones de valores pertenecen a la expression.
Alcance, que decide si la regla se considera siquiera:
amount > 5000 es estrictamente superior, así que una transacción de exactamente 5000.00 no la activa. Verifica esto contra la política antes de continuar, porque “por encima de” y “desde” son reglas distintas.
Una regla que lee una clave de metadatos que la solicitud no trae no coincide, y las demás reglas siguen ejecutándose. Por eso, la expresión anterior no necesita una prueba de presencia para deviceFirstSeen. Consulta Motor de reglas.
Paso 3: crea la regla como borrador
POST /v1/rules crea la regla en DRAFT. Un borrador nunca llega a evaluación, así que nada de lo que hagas aquí llega al tráfico.
accountId de ese alcance es tu cuenta de prueba. Es lo que mantiene el paso 4 fuera del tráfico de clientes. El paso 5 lo retira.
Un 201 responde con la regla almacenada:
FraudRule y fraudrule son nombres distintos, y el mismo nombre puede coexistir en contextos diferentes.
Toma el ruleId de la respuesta. Ese es el identificador que usa cada llamada siguiente. Consulta Crear una regla.
La expresión se compila en esta llamada, así que una expresión que no puede ejecutarse nunca llega a ser un borrador. Un error de sintaxis responde 0340, una expresión que no devuelve un booleano responde 0341, y una cuyo costo estimado supera CEL_COST_LIMIT responde 0342.
Paso 4: ensáyala en una cuenta que nadie más usa
El alcance que definiste es lo que mantiene el ensayo contenido. La regla llega a evaluación solo para transacciones en esa única cuenta de prueba. La activación la pone frente a exactamente el tráfico que le envías.
1
Activa la regla con el alcance configurado
status: "ACTIVE" y un activatedAt. Consulta Activar una regla.2
Envía una transacción que la política debería rechazar
3
Lee la decisión
ruleId en matchedRuleIds significa que el ensayo pasó.4
Envía los casos que no deberían activarla
Cambia un valor a la vez y repite la llamada con un
requestId nuevo: "amount": "5000.00" para el límite exacto, "deviceFirstSeen": false para un dispositivo conocido, "subType": "purchase" para una venta con presencia de tarjeta. Cada una debería regresar sin tu ruleId en matchedRuleIds.Un ensayo es una validación real. Almacena un registro de decisión y escribe un evento de auditoría, y una decisión
ALLOW consume los límites de gasto que cubren esa cuenta. Por eso importa la cuenta de prueba.ruleId no está en matchedRuleIds, revísalo en este orden. ¿La regla está ACTIVE (GET /v1/rules/{id})? ¿La transacción coincide con el alcance que definiste? ¿Los valores que enviaste satisfacen la expresión?
Paso 5: ponla en producción
Pasar a producción significa una sola edición: quita la cuenta de prueba del alcance para que la regla se aplique a la población que nombra la política.
1
Detén la evaluación de la versión de ensayo
Editar el alcance no exige El estado pasa a
INACTIVE. Desactivar primero hace que el cambio surta efecto en un momento que controlas y registra un espacio visible en el registro de auditoría. Cada instancia sirve las reglas desde una caché que actualiza con un sondeo (cada 10 segundos por defecto, RULE_SYNC_POLL_INTERVAL_SECONDS). Da esa ventana de tiempo para que la desactivación llegue a todas las instancias. GET /v1/rules confirma el estado almacenado, no que todas las instancias ya se pusieron al día.INACTIVE. Consulta Desactivar una regla.2
Reemplaza el alcance
scopes reemplaza todo el arreglo. Envía cada objeto de alcance que quieras que la regla conserve. Consulta Actualizar una regla.3
Activa
RULE_SYNC_POLL_INTERVAL_SECONDS, predeterminado 10). La desactivación viaja de la misma forma. Da esa misma ventana después de la activación antes de tratar la regla como aplicada en todas las instancias.4
Confirma qué está en producción
GET /v1/rules/{id} devuelve la expresión y los alcances tal como se almacenaron (Consultar una regla). Ambos reportan el estado almacenado, no lo que contiene la caché de cada instancia.Una validación carga su conjunto de reglas una vez, desde la caché de la instancia que la atiende, cuando empieza la llamada. Una regla que se activa mientras una validación está en curso no forma parte de esa decisión. Las decisiones ya registradas no cambian cuando las reglas cambian después.
Paso 6: entiende dónde se ubica tu regla entre las demás
Las reglas no tienen un campo de prioridad ni un orden que configurar. Las reglas cuyo alcance coincide con una transacción se evalúan en conjunto. La decisión proviene de la acción más estricta que se activó: primero una regla
DENY, luego un límite de gasto excedido, después REVIEW, luego ALLOW, y por último el valor predeterminado configurado para la ausencia de coincidencias. El arreglo matchedRuleIds lleva cada regla que coincidió, sin importar qué acción tenga cada una.
Dos consecuencias para la regla que acabas de escribir:
-
Una regla
ALLOWno exime a nadie de una reglaDENY. Si la política tiene una excepción (clientes VIP, un comercio asociado), colócala dentro de la expresiónDENY. Agrégala como una condición más que hace la regla más estrecha:Eso cuesta lo siguiente: la regla más estrecha ahora leemetadata.customerTier, y una solicitud que no trae esa clave no coincide con ella. -
Tu regla se une al conjunto que evalúa cada transacción coincidente.
MAX_RULES_PER_REQUESTlimita cuántas reglas evalúa una validación. Cuando el conjunto es mayor, la respuesta reportatruncated: true. Consulta variables de entorno.
Paso 7: cambia la regla cuando cambia la política
Lo que hagas depende del campo, no de cómo se desempeña la regla.
Un
PATCH se almacena cuando responde, y llega a evaluación en la siguiente sincronización de reglas. Cuando el cambio importa al minuto, desactiva primero y vuelve a activar después. Esa secuencia también deja un espacio visible en el registro de auditoría donde la regla no se aplicó. Un revisor buscará ese espacio.
El ciclo de vida es un conjunto cerrado de movimientos: DRAFT se activa o se elimina. ACTIVE se desactiva. INACTIVE vuelve a DRAFT, vuelve a ACTIVE, o se elimina. DELETED es el final. Cualquier otra cosa responde 422 con el código de error 0349, incluida una solicitud para poner en borrador una regla que sigue ACTIVE.
Paso 8: retira o elimina la regla
Para dejar de aplicarla sin perder nada, desactívala. La regla conserva su expresión, sus alcances y su historial. Ya no llega a evaluación, y
POST /v1/rules/{id}/activate la trae de vuelta. Ese es el movimiento para una política suspendida, estacional o en revisión.
Para eliminarla, bórrala. Desactívala primero, porque no puedes eliminar una regla en ACTIVE:
204 responde en caso de éxito. Consulta Eliminar una regla.
Qué elimina el borrado:
- La regla deja de responder en
GET /v1/rules/{id}, que después devuelve404con el código de error0347. - Ya no aparece en
GET /v1/rules, yDELETEDno es un valor que acepte el filtrostatus. DELETEDes el final del ciclo de vida. Ningún endpoint saca una regla de ahí. Una regla eliminada regresa solo como una regla nueva que vuelves a crear.
- El registro de auditoría conserva el ciclo de vida de la regla, y el evento
RULE_DELETEDlleva la definición (name, description, expression, action, scopes) tal como estaba al momento de la eliminación. Consulta Auditoría y cumplimiento. - Las decisiones que produjo la regla conservan su
ruleIdenmatchedRuleIds. Una denegación de hace seis meses todavía la nombra. Consulta Revisar una transacción denegada. - El nombre queda disponible de nuevo para una regla nueva en el mismo contexto.
Errores comunes
Códigos de error
La lista completa está en Lista de errores de Tracer.

