Variáveis
As variáveis são essenciais para trabalhar com dados dinâmicos no Flow Builder. Esta página explica como criar, manipular e utilizar variáveis em seus flows.
Tipos de Variáveis
1. Variáveis Globais ($vars)
Variáveis definidas no nível do flow, acessíveis em todos os nós.
// Acessar variável global
{{ $vars.apiKey }}
{{ $vars.userEmail }}
Como Definir
No painel de configuração do flow:
{
"variables": {
"apiKey": "sk-abc123",
"maxRetries": 3,
"webhookUrl": "https://api.exemplo.com/webhook"
}
}
2. Variáveis de Trigger ($trigger)
Dados que iniciaram a execução do flow.
// Webhook trigger
{{ $trigger.body.userId }}
{{ $trigger.headers['Content-Type'] }}
{{ $trigger.query.action }}
// Schedule trigger
{{ $trigger.scheduledTime }}
{{ $trigger.executionId }}
3. Variáveis de Nó ($node, $nodes)
Dados de saída dos nós executados.
// Nó anterior
{{ $node.output }}
// Nó específico pelo nome
{{ $nodes['http-request'].output.data }}
{{ $nodes['validar-dados'].output.isValid }}
// Metadata do nó
{{ $node.executionTime }}
{{ $node.status }}
4. Variáveis de Contexto ($context)
Informações sobre a execução atual.
{{ $context.executionId }}
{{ $context.flowId }}
{{ $context.startTime }}
{{ $context.environment }}
Sintaxe de Variáveis
Interpolação Básica
Use chaves duplas para interpolar variáveis:
// String simples
"Olá, {{ $vars.userName }}"
// Em URLs
"https://api.exemplo.com/users/{{ $trigger.body.userId }}"
// Em headers
"Authorization: Bearer {{ $vars.apiToken }}"
Acesso a Propriedades
// Notação de ponto
{{ $node.output.data.user.name }}
// Notação de colchetes
{{ $node.output['data']['user']['name'] }}
// Acesso a array
{{ $node.output.items[0] }}
{{ $node.output.items[1].id }}
Valores Padrão
Use o operador || para valores padrão:
{{ $vars.apiUrl || 'https://api.exemplo.com' }}
{{ $trigger.body.name || 'Usuário' }}
{{ $node.output.count || 0 }}
Operações com Variáveis
Operadores Aritméticos
// Adição
{{ $vars.count + 1 }}
// Subtração
{{ $vars.total - $vars.discount }}
// Multiplicação
{{ $vars.price * $vars.quantity }}
// Divisão
{{ $vars.total / $vars.items.length }}
// Módulo
{{ $vars.number % 2 }}
Operadores de Comparação
// Igualdade
{{ $vars.status === 'active' }}
{{ $vars.count !== 0 }}
// Comparação numérica
{{ $vars.age > 18 }}
{{ $vars.score >= 100 }}
{{ $vars.price < 1000 }}
{{ $vars.quantity <= $vars.maxQuantity }}
Operadores Lógicos
// AND
{{ $vars.isActive && $vars.isPremium }}
// OR
{{ $vars.isAdmin || $vars.isModerator }}
// NOT
{{ !$vars.isBlocked }}
// Combinados
{{ ($vars.age > 18 && $vars.hasLicense) || $vars.isAdmin }}
Operadores de String
// Concatenação
{{ $vars.firstName + ' ' + $vars.lastName }}
// Template literals
{{ `Olá, ${$vars.name}! Bem-vindo ao ${$vars.appName}.` }}
// Includes
{{ $vars.email.includes('@gmail.com') }}
Funções Úteis
Manipulação de Strings
// Uppercase
{{ $vars.name.toUpperCase() }}
// Lowercase
{{ $vars.email.toLowerCase() }}
// Trim
{{ $vars.input.trim() }}
// Replace
{{ $vars.text.replace('old', 'new') }}
// Split
{{ $vars.fullName.split(' ')[0] }}
// Substring
{{ $vars.description.substring(0, 100) }}
Manipulação de Arrays
// Length
{{ $node.output.items.length }}
// Map
{{ $node.output.users.map(u => u.email) }}
// Filter
{{ $node.output.products.filter(p => p.price > 100) }}
// Find
{{ $node.output.items.find(i => i.id === $vars.targetId) }}
// Join
{{ $node.output.tags.join(', ') }}
// Includes
{{ $node.output.permissions.includes('admin') }}
Manipulação de Objetos
// Keys
{{ Object.keys($node.output.data) }}
// Values
{{ Object.values($node.output.data) }}
// Entries
{{ Object.entries($node.output.data) }}
// Merge
{{ Object.assign({}, $vars.defaults, $trigger.body) }}
Manipulação de Datas
// Data atual
{{ new Date() }}
// Formatação
{{ new Date().toISOString() }}
{{ new Date().toLocaleDateString('pt-BR') }}
// Parsing
{{ new Date($vars.dateString) }}
// Cálculos
{{ new Date(Date.now() + 86400000) }} // +1 dia
Funções Matemáticas
// Arredondamento
{{ Math.round($vars.price) }}
{{ Math.floor($vars.value) }}
{{ Math.ceil($vars.number) }}
// Min/Max
{{ Math.min($vars.a, $vars.b, $vars.c) }}
{{ Math.max(...$node.output.scores) }}
// Random
{{ Math.random() }}
{{ Math.floor(Math.random() * 100) }}
JSON
// Parse
{{ JSON.parse($vars.jsonString) }}
// Stringify
{{ JSON.stringify($node.output.data) }}
// Pretty print
{{ JSON.stringify($node.output.data, null, 2) }}
Exemplos Práticos
Exemplo 1: Validação de Email
{
"condition": "{{ $trigger.body.email.includes('@') && $trigger.body.email.length > 5 }}"
}
Exemplo 2: Construir URL Dinâmica
{
"url": "{{ `${$vars.apiBaseUrl}/users/${$trigger.body.userId}/orders?limit=${$vars.pageSize}` }}"
}
Exemplo 3: Processar Lista de Usuários
{
"userEmails": "{{ $nodes['fetch-users'].output.users.map(u => u.email).join(', ') }}"
}
Exemplo 4: Calcular Total de Pedido
{
"total": "{{ $node.output.items.reduce((sum, item) => sum + (item.price * item.quantity), 0) }}"
}
Exemplo 5: Formatar Data em Português
{
"dataFormatada": "{{ new Date($trigger.body.timestamp).toLocaleDateString('pt-BR', { day: '2-digit', month: '2-digit', year: 'numeric' }) }}"
}
Exemplo 6: Condicional Complexa
{
"shouldProcess": "{{ $vars.environment === 'production' && $trigger.body.priority === 'high' && (!$vars.maintenanceMode || $trigger.body.bypassMaintenance) }}"
}
Escopo de Variáveis
Variáveis Locais vs Globais
// Global - disponível em todo flow
$vars.apiKey
// Local - disponível apenas nos nós subsequentes
$nodes['transform-data'].output.localVar
Sobrescrita de Variáveis
Nós podem sobrescrever variáveis:
// Nó 1 define
output: { userId: 123 }
// Nó 2 acessa
{{ $nodes['node-1'].output.userId }} // 123
// Nó 3 sobrescreve
output: { userId: 456 }
// Nó 4 acessa
{{ $node.output.userId }} // 456 (do nó anterior)
{{ $nodes['node-1'].output.userId }} // 123 (ainda disponível)
Segurança e Boas Práticas
1. Não Expor Segredos
❌ NUNCA faça isso:
{
"apiKey": "sk-123456789" // Hard-coded
}
✅ Faça isso:
{
"apiKey": "{{ $vars.apiKey }}" // Variável segura
}
2. Validar Dados de Entrada
// Sempre valide antes de usar
{
"condition": "{{ $trigger.body && $trigger.body.userId && typeof $trigger.body.userId === 'string' }}"
}
3. Use Valores Padrão
// Evite erros com valores undefined
{{ $trigger.body.name || 'Visitante' }}
{{ $node.output.count || 0 }}
4. Nomenclatura Clara
✓ $vars.maxRetriesCount
✓ $vars.apiBaseUrl
✓ $vars.userSessionToken
✗ $vars.x
✗ $vars.temp
✗ $vars.data1
Debugging de Variáveis
Log Node
Use um nó de log para inspecionar variáveis:
{
"type": "log",
"config": {
"message": "Debug",
"data": {
"trigger": "{{ $trigger }}",
"vars": "{{ $vars }}",
"previousNode": "{{ $node }}"
}
}
}
Console Output
Em modo de teste, visualize variáveis no console:
console.log('Trigger:', {{ $trigger }});
console.log('Variables:', {{ $vars }});
console.log('Node output:', {{ $node.output }});
Próximos Passos
- Expressões: Aprenda expressões avançadas
- Primeiro Flow: Crie seu primeiro flow
- Referência de Nós: Veja todos os nós disponíveis