Nós de Ação
Nós programáticos não-LLM para operações de fluxo de trabalho determinísticas. Os nós de ação complementam os agentes LLM ao lidar com transformação de dados, integrações de API, fluxo de controle e lógica de automação.
Visão Geral
Os nós de ação são visualmente distintos dos nós de agente LLM — eles usam cores e ícones únicos para facilitar a leitura dos fluxos de trabalho. Cada tipo de nó lida com uma categoria específica de operação, desde requisições HTTP até consultas a banco de dados e ramificação condicional.
Todos os nós de ação compartilham um conjunto de propriedades padrão para tratamento de erros, rastreamento, controle de execução e mapeamento de E/S. Eles suportam {{variable}} interpolação em campos de string e recebem automaticamente as saídas dos nós predecessores.

Nós Disponíveis
| Nó | Ícone | Cor | Descrição |
|---|---|---|---|
| Gatilho | 🎯 | Indigo | Ponto de entrada do fluxo de trabalho (manual, webhook, agendamento, evento) |
| HTTP | 🌐 | Azul | Realizar requisições HTTP para APIs externas |
| Definir | 📝 | Roxo | Define e manipula variáveis de estado do fluxo de trabalho |
| Transformar | ⚙️ | Rosa | Transforma dados usando expressões ou operações integradas |
| Switch | 🔀 | Amber | Ramificação condicional baseada em condições |
| Loop | 🔄 | Emerald | Iterar sobre arrays ou repetir operações |
| Mesclar | 🔗 | Cyan | Combina múltiplos ramos de volta em um único fluxo |
| Aguardar | ⏱️ | Cinza | Pausar fluxo de trabalho por duração ou condição |
| Code | 💻 | Vermelho | Executa JavaScript personalizado em um ambiente de execução isolado |
| Database | 🗄️ | Teal | Operações de banco de dados (PostgreSQL, MySQL, SQLite, MongoDB, Redis) |
| 📧 | Rose | Enviar e-mails via SMTP ou monitorar via IMAP | |
| Notificação | 🔔 | Laranja | Enviar para Slack, Discord, Teams ou webhooks |
| RSS | 📡 | Lime | Monitorar feeds RSS/Atom para novas entradas |
| File | 📁 | Sky | Operações de arquivo em armazenamento local ou em nuvem (S3, GCS, Azure) |
Propriedades Padrão
Cada nó de ação herda estas propriedades compartilhadas:
Identidade
| Propriedade | Tipo | Descrição |
|---|---|---|
id | string | Identificador único |
name | string | Nome de exibição |
description | string? | Descrição opcional do tooltip |
Tratamento de Erros
| Modo | Comportamento |
|---|---|
stop | Interromper fluxo de trabalho em caso de erro (padrão) |
continue | Registrar erro e prosseguir para o próximo nó |
retry | Repetir com contagem configurável (1-10) e atraso (ms) |
fallback | Usar um valor de fallback em caso de erro |
Rastreamento
| Propriedade | Tipo | Descrição |
|---|---|---|
enabled | boolean | Habilitar rastreamentos de execução detalhados |
logLevel | none | error | info | debug | Verbosidade do log |
Controle de Execução
| Propriedade | Tipo | Descrição |
|---|---|---|
timeout | number | Timeout em ms (padrão: 30000) |
condition | string? | Pular o nó se a expressão for avaliada como falsa |
Mapeamento de Entrada/Saída
| Propriedade | Tipo | Descrição |
|---|---|---|
inputMapping | Record<string, string>? | Mapeia campos de estado para entradas de nó |
outputKey | string | Chave onde o resultado é armazenado no estado do fluxo de trabalho |
Referência de Nós
Nó de Gatilho 🎯
Ponto de entrada do fluxo de trabalho. Todo fluxo de trabalho começa com um Nó de Gatilho. Consulte o Guia de Gatilhos dedicado para detalhes completos.
| Tipo de Gatilho | Descrição |
|---|---|
| Manual | Iniciado pelo usuário via entrada de chat |
| Webhook | Endpoint HTTP (POST/GET) com autenticação opcional |
| Agendamento | Agendamento baseado em Cron com suporte a fuso horário |
| Evento | Eventos de sistema externos com filtragem JSONPath |
Nó HTTP 🌐
Faz requisições HTTP para APIs externas com tratamento completo de autenticação, cabeçalho, corpo e resposta.
Configuração:
| Propriedade | Tipo | Descrição |
|---|---|---|
method | GET, POST, PUT, PATCH, DELETE | Método HTTP |
url | string | URL com {{variable}} interpolação |
auth | objeto | Autenticação (none, bearer, basic, api_key) |
headers | Record<string, string> | Cabeçalhos da requisição |
body | object | Corpo (none, json, form, raw) |
response | object | Tratamento de resposta (json, text, binary) com extração opcional de JSONPath |
rateLimit | objeto? | Limitação de taxa (requests per window) |
Exemplo:
{
"type": "http",
"name": "Fetch User Data",
"method": "GET",
"url": "https://api.example.com/users/{{userId}}",
"auth": {
"type": "bearer",
"bearer": { "token": "{{API_TOKEN}}" }
},
"headers": { "Accept": "application/json" },
"body": { "type": "none" },
"response": { "type": "json", "jsonPath": "$.data" },
"errorHandling": { "mode": "retry", "retryCount": 3, "retryDelay": 1000 },
"mapping": { "outputKey": "userData" }
}
Nó de Definição 📝
Define e manipula variáveis de estado do fluxo de trabalho. Suporta valores literais, expressões e segredos.
Configuração:
| Propriedade | Tipo | Descrição |
|---|---|---|
mode | definir, mesclar, excluir | Operação de variável |
variables | Variable[] | Lista de variáveis a serem definidas |
envVars | object? | Carregar do arquivo .env com filtro de prefixo opcional |
Tipos de variáveis: string, number, boolean, json, expression
Variáveis marcadas isSecret: true são mascaradas em registros e na interface do usuário.
Nó de Transformação ⚙️
Transforma dados usando expressões ou operações embutidas.
Tipos de transformação:
| Tipo | Descrição |
|---|---|
jsonpath | Expressão JSONPath |
jmespath | expressão JMESPath |
template | Template de string com interpolação |
javascript | Expressão JavaScript |
Operações integradas: pick, omit, rename, flatten, sort, unique
Alvos de coerção de tipo: string, number, boolean, array, object
Nó Switch 🔀
Ramificação condicional com múltiplas portas de saída. Cada condição mapeia para uma porta de saída separada no nó.

Configuração:
| Propriedade | Tipo | Descrição |
|---|---|---|
evaluationMode | first_match | all_match | Parar no primeiro resultado ou avaliar todos |
conditions | SwitchCondition[] | Lista de condições com portas de saída |
defaultBranch | string? | Porta de saída quando nenhuma condição corresponde |
Operadores de condição: eq, neq, gt, lt, gte, lte, contains, startsWith, endsWith, matches, in, empty, exists
Exemplo:
{
"type": "switch",
"evaluationMode": "first_match",
"conditions": [
{ "id": "ok", "name": "Success", "field": "status", "operator": "eq", "value": "success", "outputPort": "success" },
{ "id": "err", "name": "Error", "field": "status", "operator": "eq", "value": "error", "outputPort": "error" }
],
"defaultBranch": "unknown"
}
Nó de Loop 🔄
Itera sobre arrays, repete um número fixo de vezes ou faz um loop enquanto uma condição for verdadeira.
Tipos de loop:
| Tipo | Descrição |
|---|---|
forEach | Iterar sobre um array a partir do estado |
while | Loop enquanto a condição for verdadeira |
times | Repetir N vezes |
Execução paralela: Habilite parallel.enabled com opcionais batchSize e delayBetween para iteração concorrente.
Agregação de resultados: Quando results.collect for verdadeiro, os resultados da iteração são coletados em um array sob results.aggregationKey.
Nó de Fusão 🔗
Combina múltiplas ramificações paralelas de volta em um único fluxo. Possui múltiplas portas de entrada.
Modos de fusão:
| Modo | Comportamento |
|---|---|
wait_all | Aguardar todas as ramificações de entrada |
wait_any | Continuar quando o primeiro ramo for concluído |
wait_n | Continuar após N ramificações concluídas |
Combinar estratégias: array, object, first, last
Tempo limite opcional com comportamento de continue ou error.
Nó de Espera ⏱️
Pausa a execução do fluxo de trabalho.
Tipos de espera:
| Tipo | Descrição |
|---|---|
fixed | Aguardar por uma duração fixa (ms, s, m, h) |
until | Aguardar até um timestamp específico |
webhook | Aguardar um webhook de entrada |
condition | Verificar uma condição em intervalos |
Nó de Código 💻
Executa JavaScript personalizado em um runtime isolado boa_engine. O estado do grafo é injetado como o objeto global input.
Configuração:
| Propriedade | Tipo | Descrição |
|---|---|---|
language | javascript, typescript | Linguagem de código |
code | string | Código a ser executado |
sandbox | objeto | Limites de segurança (rede, sistema de arquivos, memória, tempo) |
Padrões do Sandbox:
| Limite | Padrão |
|---|---|
| Acesso à rede | falso |
| Acesso ao sistema de arquivos | false |
| Limite de memória | 128 MB |
| Limite de tempo | 5000 ms |
Nó de Banco de Dados 🗄️
Realiza operações de banco de dados com pool de conexões e consultas parametrizadas.
Bancos de dados suportados:
| Banco de Dados | Driver | Recursos |
|---|---|---|
| PostgreSQL | sqlx (postgres) | Pool assíncrono, consultas parametrizadas, linha para JSON |
| MySQL | sqlx (mysql) | Pool assíncrono, consultas parametrizadas, linha-para-JSON |
| SQLite | sqlx (sqlite) | Pool assíncrono, consultas parametrizadas, linha para JSON |
| MongoDB | mongodb | BSON Nativo, find/insert/update/delete |
| Redis | redis | GET, SET, DEL, HGET, HSET, LPUSH, LRANGE |
Strings de conexão são tratadas como segredos e mascaradas em logs.
Nó de E-mail 📧
Envia e-mails via SMTP ou monitora e-mails recebidos via IMAP.
Modo de envio (SMTP):
- Suporte a TLS/SSL
- Autenticação
- Destinatários Para/CC/BCC
- Corpo em HTML ou texto simples
{{variable}}interpolação no assunto e corpo- Anexos de arquivo do estado
Modo de monitoramento (IMAP):
- Seleção de pasta (padrão: INBOX)
- Filtros: remetente, assunto, intervalo de datas, somente não lidos
- Marcar como lido após o processamento
Nó de Notificação 🔔
Envia notificações para plataformas de mensagens.
Canais: Slack, Discord, Microsoft Teams, webhook personalizado
Formatos de mensagem: texto simples, markdown, blocos específicos da plataforma (Block Kit, Embeds, Adaptive Cards)
Nó RSS 📡
Monitora feeds RSS/Atom para novas entradas.
- Intervalo de sondagem configurável
- Filtros por palavra-chave, autor, categoria e data
- Rastreamento de itens vistos para evitar duplicatas
- Conteúdo completo ou apenas resumo opcional
Nó de Arquivo 📁
Operações de arquivo em armazenamento local ou na nuvem.
Operações: ler, escrever, excluir, listar
Provedores de nuvem: Amazon S3, Google Cloud Storage, Azure Blob Storage
Formatos de arquivo: JSON, CSV, XML, texto, binário (com opções de análise CSV para delimitador, cabeçalhos, aspas)
Interpolação de Variáveis
Todos os campos de string em nós de ação suportam a sintaxe {{variable}} para valores dinâmicos:
https://api.example.com/users/{{userId}}
Bearer {{API_TOKEN}}
Hello {{user.name}}, your order {{orderId}} is ready.
As variáveis são resolvidas a partir do estado do fluxo de trabalho no momento da execução. A notação de ponto (user.name) acessa valores aninhados.
Nós Multi-Portas
Dois tipos de nós têm contagens de portas dinâmicas:
- Switch — uma porta de saída por condição, mais uma porta padrão opcional
- Merge — múltiplas portas de entrada, uma por ramificação de entrada
Essas portas são representadas visualmente no nó e conectam-se a diferentes nós a jusante/a montante.
Geração de Código
Nós de ação compilam para código Rust de produção juntamente com LLM agents. As dependências são detectadas automaticamente e adicionadas ao Cargo.toml gerado.
| Nó | Crate | O Que Ele Gera |
|---|---|---|
| HTTP | reqwest | Requisições HTTP assíncronas com autenticação, cabeçalhos, corpo, extração JSONPath |
| Banco de Dados | sqlx / mongodb / redis | Pools de conexão, consultas parametrizadas, comandos Redis |
lettre / imap | Envio SMTP com TLS; monitoramento IMAP com filtros de busca | |
| Código | boa_engine | Execução JavaScript embutida com graph state como input object |
| Set | native | Atribuição de variável (literal, expression, secret) |
| Transformar | nativo | Map, filter, sort, reduce, flatten, group, pick, merge, template |
| Merge | native | Combinação de Branch (waitAll, waitAny, append) |
Todo o código gerado usa adk-graph FunctionNode closures com GraphError::NodeExecutionFailed para tratamento de erros.
Exemplo de código gerado (nó HTTP):
let http_node = FunctionNode::new("fetch_data", |ctx| async move {
let client = reqwest::Client::new();
let resp = client.get("https://api.example.com/data")
.bearer_auth(&ctx.get("API_TOKEN").unwrap_or_default())
.send().await
.map_err(|e| GraphError::NodeExecutionFailed {
node: "fetch_data".into(),
message: e.to_string(),
})?;
let body: serde_json::Value = resp.json().await?;
Ok(NodeOutput::new().with_update("apiData", body))
});
Exemplo de código gerado (nó de Código):
let code_node = FunctionNode::new("process", |ctx| async move {
let mut js_ctx = boa_engine::Context::default();
// Graph state injected as global `input` object
// User code executed in thread-isolated sandbox
Ok(NodeOutput::new().with_update("result", output))
});
Anterior: ← Studio | Próximo: Triggers →