Sintaxis para expresiones
La expresión de una condición sigue una sintaxis sencilla, inspirada en fórmulas de planillas. Siempre resulta en verdadero o falso, y está compuesta por, como mínimo, una variable, una operación y un valor.
$merchant_id == "XYZ"
La expresión anterior es verdadera cuando el campo merchant_id del evento es igual a "XYZ".
Los tres prefijos
Toda variable comienza con un símbolo que indica de dónde viene el valor y cuánto tiempo dura:
| Prefijo | Contiene | Duración |
|---|---|---|
$campo | un campo del evento | persistido con el evento |
@lista | una lista de valores de la cuenta | mantenida por la cuenta, entre eventos |
%temporal | un valor calculado durante esta ejecución | solo existe durante la ejecución de la regla |
Campos del evento ($)
Las variables disponibles son exactamente los campos del tipo de evento al que pertenece la regla; no existe una lista fija. Si el tipo de evento tiene un campo amount, la regla puede usar $amount; un tipo de evento diferente tendrá otro conjunto de variables.
El panel ofrece los campos disponibles mientras usted escribe la condición y resalta la expresión a medida que se escribe. Los campos que comienzan con _ están reservados por la plataforma y no quedan disponibles para su uso en expresiones.
Además de los campos del tipo de evento, $id contiene el identificador del evento informado en POST /events, y puede usarse en las condiciones y como dimensión de un análisis.
El tipo del campo determina cómo se compara el valor:
| Tipo del campo | Ejemplo de comparación |
|---|---|
| Texto | $status == "approved" |
| Entero | $installments > 6 |
| Decimal | $amount >= 1500.00 |
| Booleano | $is_first_purchase == true |
| Fecha y hora | $signup_at > "30 days ago" |
Un campo que no vino en el evento se trata como vacío. Para probar esa ausencia, compárelo con null, sin comillas:
$device_fingerprint_id == null
La expresión anterior es verdadera cuando el evento no trajo fingerprint del dispositivo. Use != para el caso contrario.
Operaciones
| Operación | Significado |
|---|---|
== | Igualdad |
!= | Desigualdad |
> | Mayor que |
>= | Mayor o igual |
< | Menor que |
<= | Menor o igual |
in | Pertenece a una colección |
not in | No pertenece a una colección |
any in | Al menos uno de los valores pertenece a una colección |
all in | Todos los valores pertenecen a una colección |
Valores
El valor comparado con una variable puede ser un texto, un número o un booleano:
- Texto: siempre entre comillas dobles, como
"XYZ". No se aceptan comillas simples ni textos sin comillas. - Número: sin comillas, con punto como separador decimal, como
1000o99.01. - Booleano:
trueofalse, sin comillas.
Como todo texto va entre comillas dobles, valores como una IP, una fecha o una palabra usada en la propia sintaxis (por ejemplo, in) también necesitan las comillas para ser tratados como texto.
Fechas
Los campos de fecha y hora aceptan valores relativos y absolutos, siempre entre comillas:
$signup_at > "30 days ago"
$signup_at == "2026-03-15"
El formato relativo es [número] [hour|day|week|month|year]s ago. El formato absoluto acepta año ("2026"), año y mes ("2026-03") o fecha completa ("2026-03-15"); en los dos primeros casos, la comparación cubre todo el período.
Combinando expresiones
Use and y or para combinar expresiones. and tiene precedencia sobre or: en una combinación sin paréntesis, las partes unidas por and se evalúan primero. Así, A and B or C equivale a (A and B) or C.
Use paréntesis para agrupar expresiones y alterar esa precedencia:
($amount > 1000 and $user_email_domain == "gmail.com") or $issuer_country != "BR"
Un salto de línea funciona como un espacio entre los términos. Una combinación larga puede distribuirse en varias líneas para facilitar la lectura, sin alterar el resultado:
($amount > 1000 and $user_email_domain == "gmail.com")
or $issuer_country != "BR"
true y false como condición entera
Una expresión puede consistir solo en true o false, sin variable ni comparación. true es siempre verdadera y mantiene la condición siempre activa; false es siempre falsa y desactiva la condición sin eliminarla. Difiere de la comparación de un campo booleano con true o false, descrita en Valores: en ese caso el literal está a la derecha de una comparación; como condición entera, constituye la expresión por completo.
Colecciones (@)
Las listas de la cuenta quedan disponibles como colecciones, identificadas por el prefijo @. Por ejemplo, para verificar si un cliente está en una lista de cuarentena:
$user_id in @clientes_cuarentena
También es posible escribir la colección directamente en la expresión, entre corchetes y con los valores separados por coma:
$issuer_country not in ["BR", "AR", "CL"]
Además del formato anterior, in y not in aceptan:
- un texto fijo a la izquierda, para probar un valor conocido contra una colección:
"BR" in @paises_atendidos; - un campo en ambos lados, para probar si el valor de un campo está contenido en el de otro:
$user_id in $allowed_users.
Probando varios valores a la vez
Cuando el lado izquierdo es una colección escrita entre corchetes, hay que indicar cuántos de los valores necesitan pertenecer a la colección de la derecha:
| Operación | Verdadera cuando |
|---|---|
any in | al menos uno de los valores pertenece |
all in | todos los valores pertenecen |
not in | ninguno de los valores pertenece |
["susp_59", "susp_83"] any in %regla.triggered_cells
["BR", "AR"] all in @paises_atendidos
["tor", "vpn"] not in @tipos_permitidos
No existe forma sin cuantificador: escribir ["a", "b"] in @lista es un error de escritura. “A y B están en la lista” es ambiguo entre “al menos uno” y “los dos”, y una condición de riesgo no puede depender de cuál de las dos lecturas tenía en mente el autor. En la negación no hay ambigüedad, ya que “A y B no están en la lista” solo puede significar que ninguno de los dos está, y por eso not in no necesita cuantificador. Por el mismo motivo, not any in y not all in no se aceptan.
La colección de la derecha puede ser una lista de la cuenta, una variable temporal de conjunto, un campo u otra colección literal.
Variables temporales (%)
Una variable temporal guarda un valor calculado durante la ejecución de la regla: una acción la produce y las condiciones siguientes pueden leerla. No se graba en el evento, no aparece en la respuesta de la API y no se reaprovecha en el evento siguiente: un valor que deba sobrevivir al evento debe grabarse en un campo.
Las variables temporales existen en dos formas.
Valores simples, definidos por una acción de definir variable temporal:
%revision_manual == "1"
Resultados de un análisis, publicados por una acción de ejecutar análisis bajo el nombre del resultado, con atributos accedidos por punto:
| Atributo | Contiene | Tipo |
|---|---|---|
score | puntuación calculada por el análisis | Decimal |
score_cell | nombre de la celda que originó la puntuación | Texto |
triggered | si el análisis fue activado | Booleano |
triggered_count | cuántas celdas fueron activadas | Entero |
triggered_cells | nombres de las celdas activadas | Conjunto |
%bot.triggered_count >= 2
El atributo triggered_cells es un conjunto, no un valor único: solo puede usarse a la derecha de una operación de pertenencia, para probar qué celdas fueron activadas.
"email_velocity" in %bot.triggered_cells
["susp_59", "susp_83"] any in %bot.triggered_cells
Compararlo con ==, o usarlo en cualquier otra operación, es un error de escritura y la condición no se acepta.
Un conjunto también puede guardarse en una variable temporal simple, mediante una acción en modo expresión, y sigue siendo un conjunto, comprobable de la misma manera.
Funciones
concat
La función concat une varios valores en un único texto, que puede compararse con un valor. Cada argumento es un campo del evento ($campo), una variable temporal (%temporal) o un texto fijo, separados por coma:
concat($user_id, "-", $merchant_id) == "cliente-1234-tienda-1234"
concat($merchant_id, "-", %bot.score_cell) == "tienda-1234-email_velocity"
La primera expresión es verdadera cuando la combinación del ID del usuario y el ID del establecimiento, unidos por un guion, resulta en "cliente-1234-tienda-1234".
Consideraciones sobre los valores unidos:
- Las variables sin valor se tratan como texto vacío.
- Los valores numéricos se convierten a texto en su forma original (por ejemplo,
99.01y0.9). - Un conjunto, como
%bot.triggered_cells, no puede entrar en unconcat: solo puede probarse con una operación de pertenencia.
El resultado de concat también acepta in y not in, lo que permite comparar la combinación contra una lista:
concat($user_id, "-", $merchant_id) in @pares_bloqueados
Errores de escritura
La expresión se valida en el momento en que se guarda la condición. La regla no se publica mientras haya un error, y el panel señala el problema. Los casos más comunes:
- campo inexistente: la variable no corresponde a ningún campo del tipo de evento vinculado a la regla;
- tipo incompatible: el valor comparado no tiene sentido para el tipo del campo, como comparar un campo numérico con
"aprobado"; - variable temporal desconocida: el nombre o el atributo no es producido por ninguna acción de la regla;
- variable temporal leída demasiado pronto: ninguna condición anterior la produce. Como las condiciones se evalúan en orden, el productor debe venir antes que el lector;
- texto sin comillas: los valores de texto necesitan comillas dobles.
Cada expresión tiene un límite de tamaño. Consulte límites y parámetros.