> 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
