# Bloco Código

> Rode um código JavaScript com as variáveis do fluxo e use o resultado nos próximos blocos.

Fonte: https://gaio.social/ajuda/categoria/automacoes/bloco-codigo

O bloco `Código` (Beta) roda um código JavaScript com as variáveis do contato e da execução. Cada chave do objeto que o código devolve vira uma variável que os próximos blocos podem usar.

## Quando usar

Use quando você precisa transformar dados no meio do fluxo e nenhum outro bloco faz isso: montar um texto a partir de vários campos, formatar uma data, escolher um valor por uma regra ou tratar o que uma `Requisição HTTP` trouxe.

Para contas simples com campos numéricos, o [Bloco Matemática](https://gaio.social/ajuda/bloco-matematica) costuma bastar.

## Configure o bloco

1. No editor, selecione o + de um bloco e escolha `Código` no grupo `Avançado`.
2. Em `Código`, escreva o código. Ele lê as variáveis em `vars`, como `vars['contact.name']`, e precisa terminar com `return` de um objeto:

   ```
   return {
     saudacao: 'Olá, ' + (vars['contact.name'] || 'tudo bem') + '!'
   };
   ```

   Com esse código, os próximos blocos podem usar `{saudacao}`.
3. Ao digitar `vars.` ou `gaio.`, o editor sugere as variáveis e os recursos disponíveis.
4. Ligue as duas saídas do bloco:
   - `Sucesso`: o código devolveu o objeto, e as chaves dele já valem como variáveis.
   - `Falha`: o código deu erro, passou do tempo, devolveu algo que não é um objeto ou não pôde rodar.

## Teste o código

1. Em `Testar o código`, preencha `Variáveis do teste (JSON)` com os valores que um contato teria, como `{ "contact.name": "Ana" }`.
2. Selecione `Testar`. Nada é salvo.
3. Confira o resultado: as `Variáveis devolvidas`, os `Logs` do que você mostrou com `console.log(...)` ou o erro com a linha em que ele aconteceu.

Depois de publicar, o `Histórico de execuções` mostra as variáveis que o bloco definiu em cada execução.

## Limites

- O código roda sem internet e tem até 1 segundo.
- O código pode ter até 20.000 caracteres.
- O código não tem `Intl`. Para formatar datas, use `gaio.formatDate(valor, opções)`.
- Cada chave do objeto devolvido precisa ser um nome de variável válido.

## Perguntas frequentes

### O bloco Código pode chamar uma API?

Não. O código roda sem internet. Para chamar uma API, use o bloco Requisição HTTP e trate a resposta no bloco Código.

### O que acontece quando o código falha?

A execução segue pela saída Falha. O motivo aparece no histórico de execuções, como "O código passou de 1 segundo" ou "O código não devolveu um objeto".

### As variáveis do bloco Código viram campos do contato?

Não. Elas valem só nesta execução, para os próximos blocos do fluxo.

## Perguntas frequentes

### O bloco Código pode chamar uma API?

Não. O código roda sem internet. Para chamar uma API, use o bloco Requisição HTTP e trate a resposta no bloco Código.

### O que acontece quando o código falha?

A execução segue pela saída Falha. O motivo aparece no histórico de execuções, como "O código passou de 1 segundo" ou "O código não devolveu um objeto".

### As variáveis do bloco Código viram campos do contato?

Não. Elas valem só nesta execução, para os próximos blocos do fluxo.
