Pular para conteúdo

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


← Conceitos Básicos | Expressões →