> For the complete documentation index, see [llms.txt](https://docs.hablla.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hablla.com/fluxos-de-automacoes/todos-os-componentes/transformacao-de-dados/codigo.md).

# Código

### Visão Geral

O **Componente de Código Executável JavaScript** (identificado internamente como `code`) é um nó de ação avançado projetado para estender os recursos nativos da plataforma por meio de programação ativa. Sua função principal é executar scripts customizados em ambiente isolado (*sandbox*), permitindo realizar cálculos matemáticos complexos, limpar ou reformatar strings de texto, manipular arrays de dados e integrar-se com sistemas externos.

**Regras Mandatórias de Desenvolvimento:** 1. **Consumo de APIs Externas:** Sempre que houver a necessidade de efetuar requisições HTTP/HTTPS (como métodos `GET`, `POST`, `PUT` ou `DELETE`) para servidores terceiros dentro do script, é obrigatório o uso da biblioteca **Axios** (nativamente injetada no escopo global do nó).

2. **Persistência de Dados no Fluxo:** O uso da instrução `return` é estritamente obrigatório no encerramento do script. Sem o retorno explícito de um objeto ou variável, o motor de execução descarta o processamento e não repassa os dados calculados para os blocos subsequentes da automação.

### Parâmetros de Configuração

A parametrização do nó é simplificada e concentrada na janela de codificação direta:

* **Código:** Área com sintaxe destacada (*syntax highlighting*) onde o desenvolvedor ou administrador digita o bloco de script em JavaScript (ECMAScript moderno) que será submetido à compilação do motor.<br>

### Construtor Visual

A interface gráfica foca no isolamento e na autonomia técnica do desenvolvedor dentro do construtor de fluxos:

* **Editor de Código Embutido:** O construtor oferece um terminal textual limpo contendo numeração de linhas e recortes rápidos para facilitar a colagem e validação de algoritmos. Dispensa seletores de canais ou arquivos de mídia, operando puramente no core lógico do sistema.<br>
* **Mapeamento de Saídas de Payload:** No mapa visual de automação, o bloco apresenta uma porta de entrada e uma de saída contínua. Ao salvar o script estruturado com o `return`, o editor disponibiliza a variável resultante do componente como metadado legível para os nós vizinhos na árvore de decisão.<br>

### Operadores Especiais

As propriedades lógicas deste componente gerenciam a captura de variáveis locais e chamadas assíncronas:

* **Injeção de Contexto Global (`$data`):** O interpretador JavaScript do componente concede acesso total ao objeto `$data`. Isso permite que o código leia qualquer variável armazenada previamente no fluxo (ex: `$data.nome`, `$data.telefone`, ou payloads de respostas de perguntas anteriores) diretamente dentro das expressões do script.<br>
* **Resolução Assíncrona via Promessas (`async/await`):** Para garantir o correto processamento de requisições externas sem congelar o motor, o nó é preparado para interpretar escopos assíncronos. O desenvolvedor pode estruturar funções com `async` e utilizar o operador `await` nas chamadas do Axios, garantindo que o `return` final aguarde a resposta da API externa.<br>

### Examples Práticos

A tabela abaixo demonstra cenários clássicos de aplicação do componente utilizando a sintaxe correta com Axios e retorno de dados:

| **Objetivo do Script**             | **Código JavaScript Configurado no Construtor**                                                                                                                                                         | **Comportamento do Motor da Plataforma**                                                                              | **Caso de Uso Prático**                                                                                            |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| **Manipulação de String Local**    | <p>const nome = $data.nome;<br><br><br><br>const nomeMaiusculo = nome.toUpperCase();<br><br><br><br>return { nome\_formatado: nomeMaiusculo };</p>                                                      | Captura a variável do CRM, transforma as letras em maiúsculas usando JS nativo e devolve o novo formato para o fluxo. | Padronizar nomes de leads no banco de dados antes de enviar uma notificação formal por e-mail.                     |
| **Integração Externa com Axios**   | <p>const cep = <span class="math">data.cep;\<br>\<br> \<br>\<br>const resposta = await axios.get(`https://viacep.com.br/ws/</span>{cep}/json/`);<br><br><br><br>return { endereco: resposta.data };</p> | Executa uma chamada síncrona externa usando Axios com base no CEP do cliente e retorna o objeto completo de endereço. | Localizar a rua e o bairro de um cliente de forma 100% autônoma após ele digitar o CEP no Webchat.                 |
| **Cálculo Matemático Condicional** | <p>const valorTotal = $data.total\_carrinho;<br><br><br><br>const desconto = valorTotal \* 0.10;<br><br><br><br>return { valor\_desconto: desconto, total\_final: valorTotal - desconto };</p>          | Realiza equações matemáticas na memória do servidor e injeta os dois resultados como variáveis utilizáveis no fluxo.  | Calcular dinamicamente um desconto de 10% na jornada e repassar o valor exato para o link de pagamento do cliente. |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.hablla.com/fluxos-de-automacoes/todos-os-componentes/transformacao-de-dados/codigo.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
