> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aurora-ai.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Função

O bloco Função permite executar código JavaScript ou TypeScript personalizado nos seus fluxos de trabalho. Use-o para transformar dados, realizar cálculos ou implementar lógica personalizada que não está disponível em outros blocos.

<div className="flex justify-center my-6">
  <img src="https://mintcdn.com/aruroraai/ZEdOsJiaQfygoyWq/images/block-api.png?fit=max&auto=format&n=ZEdOsJiaQfygoyWq&q=85&s=44bed5b19e01e4ffcec2f70bcd9abd2c" alt="API" width="300" height="547" data-path="images/block-api.png" />
</div>

## Visão geral

O bloco Função permite:

<Steps>
  <Step>
    <strong>Transformar dados</strong>: Converter formatos, analisar texto,
    manipular arrays e objetos
  </Step>

  <Step>
    <strong>Realizar cálculos</strong>: Operações matemáticas, estatísticas,
    cálculos financeiros
  </Step>

  <Step>
    <strong>Implementar lógica personalizada</strong>: Condicionais complexos,
    loops e algoritmos
  </Step>

  <Step>
    <strong>Processar dados externos</strong>: Analisar respostas, formatar
    solicitações, gerenciar autenticação
  </Step>
</Steps>

## Como funciona

O bloco Função executa seu código em um ambiente seguro e isolado:

<Steps>
  <Step>
    **Receber entrada**: Acessa os dados de blocos anteriores através do objeto
    `input`
  </Step>

  <Step>**Executar código**: Executa seu código JavaScript/Python</Step>

  <Step>
    **Retornar resultados**: Usa `return` para passar dados ao próximo bloco
  </Step>

  <Step>**Lidar com erros**: Gerenciamento de erros e registro integrados</Step>
</Steps>

## Execução remota (E2B)

* **Linguagens**: Executa JavaScript e Python em um sandbox E2B isolado.
* **Como ativar**: Ative "Execução de código remoto" no bloco Função.
* **Quando usar**: Lógica mais pesada, bibliotecas externas ou código específico de Python.
* **Desempenho**: Mais lento que JS local devido à inicialização do sandbox e sobrecarga de rede.
* **Notas**: Requer `E2B_API_KEY` se executado localmente. Para menor latência, use JS nativo local (Modo rápido).

## Entradas e saídas

<Tabs items={["Configuração", "Variáveis"]}>
  <Tab title="Configuração">
    <ul className="list-disc space-y-2 pl-6">
      <li>
        <strong>Código</strong>: Seu código JavaScript/Python para executar
      </li>

      <li>
        <strong>Tempo de espera</strong>: Tempo máximo de execução (padrão 30
        segundos)
      </li>

      <li>
        <strong>Dados de entrada</strong>: Todas as saídas de blocos conectados
        disponíveis através de variáveis
      </li>
    </ul>
  </Tab>

  <Tab title="Variáveis">
    <ul className="list-disc space-y-2 pl-6">
      <li>
        <strong>function.result</strong>: O valor retornado pela sua função
      </li>

      <li>
        <strong>function.stdout</strong>: Saída de console.log() do seu código
      </li>
    </ul>
  </Tab>
</Tabs>

## Casos de uso de exemplo

### Pipeline de processamento de dados

<div className="mb-4 rounded-md border p-4">
  <h4 className="font-medium">
    Cenário: Transformar resposta de API em dados estruturados
  </h4>

  <ol className="list-decimal pl-5 text-sm">
    <li>O bloco de API obtém dados brutos do cliente</li>
    <li>O bloco de função processa e valida os dados</li>
    <li>O bloco de função calcula métricas derivadas</li>
    <li>O bloco de resposta retorna resultados formatados</li>
  </ol>
</div>

### Implementação de lógica de negócio

<div className="mb-4 rounded-md border p-4">
  <h4 className="font-medium">
    Cenário: Calcular pontuações e níveis de fidelidade
  </h4>

  <ol className="list-decimal pl-5 text-sm">
    <li>O agente recupera o histórico de compras do cliente</li>
    <li>O bloco de função calcula métricas de fidelidade</li>
    <li>O bloco de função determina o nível do cliente</li>
    <li>O bloco de condição roteia de acordo com o nível</li>
  </ol>
</div>

### Validação e limpeza de dados

<div className="mb-4 rounded-md border p-4">
  <h4 className="font-medium">
    Cenário: Validar e limpar a entrada do usuário
  </h4>

  <ol className="list-decimal pl-5 text-sm">
    <li>Entrada do usuário recebida do envio do formulário</li>
    <li>O bloco de função valida o formato de e-mail e números de telefone</li>
    <li>O bloco de função limpa e normaliza os dados</li>
    <li>O bloco de API salva os dados validados no banco de dados</li>
  </ol>
</div>

### Exemplo: Calculadora de pontuação de fidelidade

```javascript title="loyalty-calculator.js" theme={null}
// Process customer data and calculate loyalty score
const { purchaseHistory, accountAge, supportTickets } = <agent>;

// Calculate metrics
const totalSpent = purchaseHistory.reduce((sum, purchase) => sum + purchase.amount, 0);
const purchaseFrequency = purchaseHistory.length / (accountAge / 365);
const ticketRatio = supportTickets.resolved / supportTickets.total;

// Calculate loyalty score (0-100)
const spendScore = Math.min(totalSpent / 1000 * 30, 30);
const frequencyScore = Math.min(purchaseFrequency * 20, 40);
const supportScore = ticketRatio * 30;

const loyaltyScore = Math.round(spendScore + frequencyScore + supportScore);

return {
  customer: <agent.name>,
  loyaltyScore,
  loyaltyTier: loyaltyScore >= 80 ? "Platinum" : loyaltyScore >= 60 ? "Gold" : "Silver",
  metrics: { spendScore, frequencyScore, supportScore }
};
```

## Melhores práticas

* **Mantenha as funções focadas**: Escreva funções que façam uma única coisa bem para melhorar a manutenibilidade e depuração
* **Lide com erros elegantemente**: Use blocos try/catch para lidar com possíveis erros e fornecer mensagens de erro significativas
* **Teste casos extremos**: Certifique-se de que seu código lide corretamente com entradas incomuns, valores nulos e condições limite
* **Otimize o desempenho**: Considere a complexidade computacional e o uso de memória para grandes conjuntos de dados
* **Use console.log() para depuração**: Aproveite a saída stdout para depurar e monitorar a execução de funções
