# Acciones La acción es el efecto de una [condición](/es/rules/conditions/) satisfecha. Una condición puede tener de cero a varias acciones, ejecutadas de arriba hacia abajo, y cada acción ve lo que escribieron las anteriores. Esta página reúne lo que vale para todas las acciones. Cada acción tiene su propia página, con la configuración y el comportamiento específicos. ## Origen, destino y ajustes Varias acciones consultan un dato y devuelven otro. En todas ellas la configuración sigue el mismo formato: - **Origen**: qué campos del evento alimentan la acción; - **Destino**: qué campos reciben cada resultado; - **Ajustes**: parámetros propios de la acción. Cada destino es opcional individualmente: si solo necesita el país y no el identificador, deje el otro en blanco. Pero cada acción exige al menos un destino completado: una acción que no graba nada en ningún lugar no sería ejecutada y no se acepta al guardar. Un resultado que la acción **no logró resolver** deja el campo de destino intacto, en lugar de grabar un valor vacío. Esto es intencional: un campo en blanco sigue siendo comprobable por una condición posterior (`$issuer_country == null`), y ninguna suposición es mejor que un dato equivocado. En cambio, `false` y `0` son resultados legítimos y se graban normalmente. ## Valor fijo o expresión Las dos acciones que graban un valor, [completar campo](/es/rules/actions/set_field/) y [definir variable temporal](/es/rules/actions/set_temporary_variable/), aceptan ese valor de dos formas, elegidas en un selector al lado del destino: - **Valor fijo**: el contenido se graba exactamente como fue escrito. Nada dentro de él se interpreta: en valor fijo, `$amount` graba el texto `$amount`. - **Expresión**: el contenido se interpreta, y lo que se graba es el resultado. Las acciones creadas antes de esta opción abren en **Valor fijo** y mantienen el comportamiento anterior. Una expresión puede ser: | Forma | Ejemplo | | :--------------------------- | :---------------------------------------- | | un campo del evento | `$issuer_country` | | una variable temporal | `%bot.score` | | un texto, número o booleano | `"aprobado"`, `10`, `true` | | una unión con `concat` | `concat($order_id, "-", %bot.score_cell)` | Se aplica la misma [sintaxis de las condiciones](/es/rules/expression-syntax/), con una diferencia: la expresión de una acción produce un **valor**, no un verdadero o falso, y no hay comparaciones ni `and`/`or`. Como en cualquier condición, una variable temporal leída en la expresión debe haber sido producida por una acción anterior. ### Tipos compatibles Un texto, número o booleano escrito directamente en la expresión es validado por el campo de destino, exactamente como lo sería un valor fijo. En cambio, un campo, una variable temporal o un `concat` necesitan tener un tipo compatible con el destino. La conversión solo ocurre cuando no hay pérdida: | Tipo del campo de destino | Acepta valor de | | :------------------------ | :--------------- | | Texto | cualquier tipo | | Entero | Entero | | Decimal | Decimal, Entero | | Booleano | Booleano | | Fecha y hora | Fecha y hora | Un decimal no se graba en un campo entero: redondear automáticamente decidiría por el autor de la regla qué hacer con la parte fraccionaria. El camino contrario, un entero en un campo decimal, se acepta. El resultado de `concat` siempre es un texto, y por eso solo cabe en un campo de texto. Una **variable temporal no tiene tipo de destino**, de modo que acepta cualquier valor, incluso un conjunto como `%bot.triggered_cells`. Copiado solo, el conjunto sigue siendo un conjunto y continúa utilizable a la derecha de un `in`. Ese mismo conjunto no puede grabarse en un campo, ni usarse dentro de un `concat`. ### Valores ausentes Una expresión que solo copia un valor, como `$campo` o `%variable` solos, **no graba nada** cuando ese valor no existe: el campo de destino queda como estaba, y la variable temporal sigue ausente. Es la misma elección descrita arriba, de no sustituir un dato ausente por una suposición. En cambio, `false`, `0` y un texto vacío son lecturas legítimas y se graban. Un `concat` siempre graba, porque construye un texto nuevo en lugar de copiar uno existente; las partes ausentes entran como vacío. ## Tabla de contenidos - [Completar campo](/es/rules/actions/set_field/index.html.md) - [Definir variable temporal](/es/rules/actions/set_temporary_variable/index.html.md) - [Sumar a variable temporal](/es/rules/actions/increment_transient/index.html.md) - [Enriquecer](/es/rules/actions/enrich/index.html.md) - [Extraer prefijo de IP](/es/rules/actions/extract_ip_prefix/index.html.md) - [Agregar a la lista](/es/rules/actions/add_to_list/index.html.md) - [Ejecutar análisis](/es/rules/actions/run_analysis/index.html.md) - [Registrar análisis](/es/rules/actions/record_analysis/index.html.md)