# Ações A ação é o efeito de uma [condição](/pt/rules/conditions/) satisfeita. Uma condição pode ter de zero a várias ações, executadas de cima para baixo, e cada ação enxerga o que as anteriores escreveram. Esta página reúne o que vale para todas as ações. Cada ação tem sua própria página, com a configuração e o comportamento específicos. ## Origem, destino e ajustes Várias ações consultam um dado e devolvem outro. Em todas elas a configuração segue o mesmo formato: - **Origem**: quais campos do evento alimentam a ação; - **Destino**: quais campos recebem cada resultado; - **Ajustes**: parâmetros próprios da ação. Cada destino é opcional individualmente: se você só precisa do país e não do identificador, deixe o outro em branco. Mas cada ação exige pelo menos um destino preenchido: uma ação que não grava nada em lugar nenhum não seria executada e não é aceita ao salvar. Um resultado que a ação **não conseguiu resolver** deixa o campo de destino intocado, em vez de gravar um valor vazio. Isso é intencional: um campo em branco continua sendo testável por uma condição posterior (`$issuer_country == null`), e nenhum palpite é melhor que um dado errado. Já `false` e `0` são resultados legítimos e são gravados normalmente. ## Valor fixo ou expressão As duas ações que gravam um valor, [preencher campo](/pt/rules/actions/set_field/) e [definir variável temporária](/pt/rules/actions/set_temporary_variable/), aceitam esse valor de duas formas, escolhidas em um seletor ao lado do destino: - **Valor fixo**: o conteúdo é gravado exatamente como foi escrito. Nada dentro dele é interpretado: em valor fixo, `$amount` grava o texto `$amount`. - **Expressão**: o conteúdo é interpretado, e o que se grava é o resultado. Ações criadas antes desta opção abrem em **Valor fixo** e mantêm o comportamento anterior. Uma expressão pode ser: | Forma | Exemplo | | :--------------------------- | :---------------------------------------- | | um campo do evento | `$issuer_country` | | uma variável temporária | `%bot.score` | | um texto, número ou booleano | `"aprovado"`, `10`, `true` | | uma junção com `concat` | `concat($order_id, "-", %bot.score_cell)` | Aplica-se a mesma [sintaxe das condições](/pt/rules/expression-syntax/), com uma diferença: a expressão de uma ação produz um **valor**, não um verdadeiro ou falso, e não há comparações nem `and`/`or`. Como em qualquer condição, uma variável temporária lida na expressão precisa ter sido produzida por uma ação anterior. ### Tipos compatíveis Um texto, número ou booleano escrito diretamente na expressão é validado pelo campo de destino, exatamente como um valor fixo seria. Já um campo, uma variável temporária ou um `concat` precisam ter tipo compatível com o destino. A conversão só acontece quando não há perda: | Tipo do campo de destino | Aceita valor de | | :----------------------- | :--------------- | | Texto | qualquer tipo | | Inteiro | Inteiro | | Decimal | Decimal, Inteiro | | Booleano | Booleano | | Data e hora | Data e hora | Um decimal não é gravado em um campo inteiro: arredondar automaticamente decidiria pelo autor da regra o que fazer com a parte fracionária. O caminho contrário, um inteiro em um campo decimal, é aceito. O resultado de `concat` é sempre um texto, e por isso só cabe em campo de texto. Uma **variável temporária não tem tipo de destino**, de modo que aceita qualquer valor, inclusive um conjunto como `%bot.triggered_cells`. Copiado sozinho, o conjunto continua sendo um conjunto e segue utilizável à direita de um `in`. Esse mesmo conjunto não pode ser gravado em um campo, nem usado dentro de um `concat`. ### Valores ausentes Uma expressão que apenas copia um valor, como `$campo` ou `%variavel` sozinhos, **não grava nada** quando esse valor não existe: o campo de destino fica como estava, e a variável temporária continua ausente. É a mesma escolha descrita acima, de não substituir um dado ausente por um palpite. Já `false`, `0` e um texto vazio são leituras legítimas e são gravados. Um `concat` sempre grava, porque constrói um texto novo em vez de copiar um existente; as partes ausentes entram como vazio. ## Índice - [Preencher campo](/pt/rules/actions/set_field/index.html.md) - [Definir variável temporária](/pt/rules/actions/set_temporary_variable/index.html.md) - [Somar em variável temporária](/pt/rules/actions/increment_transient/index.html.md) - [Enriquecer](/pt/rules/actions/enrich/index.html.md) - [Extrair prefixo do IP](/pt/rules/actions/extract_ip_prefix/index.html.md) - [Adicionar à lista](/pt/rules/actions/add_to_list/index.html.md) - [Executar análise](/pt/rules/actions/run_analysis/index.html.md) - [Registrar análise](/pt/rules/actions/record_analysis/index.html.md)