CONDITION - Desvio Condicional
O que é este Node?
O CONDITION é o node responsável por criar bifurcações no flow baseadas em condições lógicas (if/else), permitindo que o flow tome caminhos diferentes dependendo de valores de variáveis.
Por que este Node existe?
Flows precisam tomar decisões. O CONDITION existe para:
- Bifurcação de lógica: Criar caminhos diferentes baseados em condições
- Validação: Verificar se variável atende critério antes de prosseguir
- Controle de flow: Direcionar para node diferente se/senão
- Comparações: idade > 18, status == "aprovado", etc.
Como funciona internamente?
Quando o CONDITION é executado, o sistema:
- Avalia a condição: Substitui variáveis ({{nome}}) pelos valores reais
- Executa comparação: Usa operadores ==, !=, >, <, >=, <=, &&, ||
- Retorna true/false
- Direciona flow: Se true vai para trueAction, se false vai para falseAction
Código interno (logic-control-executor.service.ts:57-83):
private async executeCondition(parameters: any, context: any): Promise<any> {
const { condition, trueAction, falseAction, variables } = parameters;
try {
const result = this.evaluateCondition(condition, variables || context.variables || {});
return {
success: true,
action: 'condition_evaluated',
condition: condition,
result: result,
nextAction: result ? trueAction : falseAction,
timestamp: new Date().toISOString()
};
} catch (error) {
return {
success: false,
action: 'condition_failed',
error: error.message,
nextAction: falseAction
};
}
}
Quando você DEVE usar este Node?
Use CONDITION sempre que precisar tomar decisões no flow:
Casos de uso:
- Validar idade: "{{idade}} >= 18" para maioridade
- Verificar status: "{{status}} == 'ativo'" para continuar
- Checar estoque: "{{quantidade}} > 0" para vender
- Validar permissão: "{{role}} == 'admin'" para acesso
- Verificar valor: "{{total}} > 100" para desconto
- Múltiplas condições: "{{idade}} >= 18 && {{renda}} > 5000"
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| condition | string | Sim | Expressão lógica a avaliar |
| trueAction | string | Sim | Node ID para ir se true |
| falseAction | string | Sim | Node ID para ir se false |
| variables | object | Não | Variáveis para usar (context.variables por padrão) |
Operadores Suportados
| Operador | Descrição | Exemplo |
|---|---|---|
| == | Igual | {{idade}} == 18 |
| != | Diferente | {{status}} != 'cancelado' |
| > | Maior | {{valor}} > 100 |
| < | Menor | {{idade}} < 65 |
| >= | Maior ou igual | {{nota}} >= 7 |
| <= | Menor ou igual | {{estoque}} <= 10 |
| && | E lógico | {{idade}} >= 18 && {{renda}} > 0 |
| || | OU lógico | {{tipo}} == 'vip' || {{valor}} > 1000 |
Exemplo 1: Verificar Idade
{
"name": "Verificar Maioridade",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "number_1",
"type": "number",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Pedir Idade",
"parameters": {
"message": "Qual é a sua idade?",
"variable": "idade"
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Verificar Maioridade",
"parameters": {
"condition": "{{idade}} >= 18",
"trueAction": "message_maior",
"falseAction": "message_menor"
}
}
},
{
"id": "message_maior",
"type": "message",
"position": { "x": 700, "y": 50 },
"data": {
"label": "Maior de Idade",
"parameters": {
"message": "✅ Você é maior de idade! Pode prosseguir."
}
}
},
{
"id": "message_menor",
"type": "message",
"position": { "x": 700, "y": 150 },
"data": {
"label": "Menor de Idade",
"parameters": {
"message": "❌ Você é menor de idade. Acesso negado."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "number_1" },
{ "source": "number_1", "target": "condition_1" },
{ "source": "condition_1", "target": "message_maior", "condition": "true" },
{ "source": "condition_1", "target": "message_menor", "condition": "false" },
{ "source": "message_maior", "target": "end_1" },
{ "source": "message_menor", "target": "end_1" }
]
}
Exemplo 2: Verificar Estoque
{
"name": "Verificar Estoque Disponível",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "number_1",
"type": "number",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Quantidade",
"parameters": {
"message": "Quantas unidades você deseja?",
"variable": "quantidade"
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Verificar Estoque",
"parameters": {
"condition": "{{quantidade}} <= 50",
"trueAction": "message_disponivel",
"falseAction": "message_indisponivel"
}
}
},
{
"id": "message_disponivel",
"type": "message",
"position": { "x": 700, "y": 50 },
"data": {
"label": "Em Estoque",
"parameters": {
"message": "✅ Temos {{quantidade}} unidades em estoque! Prosseguir com compra?"
}
}
},
{
"id": "message_indisponivel",
"type": "message",
"position": { "x": 700, "y": 150 },
"data": {
"label": "Sem Estoque",
"parameters": {
"message": "❌ Desculpe, temos apenas 50 unidades em estoque."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "number_1" },
{ "source": "number_1", "target": "condition_1" },
{ "source": "condition_1", "target": "message_disponivel", "condition": "true" },
{ "source": "condition_1", "target": "message_indisponivel", "condition": "false" },
{ "source": "message_disponivel", "target": "end_1" },
{ "source": "message_indisponivel", "target": "end_1" }
]
}
Resposta do Node
{
"success": true,
"action": "condition_evaluated",
"condition": "{{idade}} >= 18",
"result": true,
"nextAction": "message_maior",
"timestamp": "2025-01-15T10:30:00.000Z"
}
Boas Práticas
✅ SIM: - Use condições simples e claras - Sempre defina trueAction E falseAction - Use variáveis com {{}} no condition - Teste ambos os caminhos (true e false)
❌ NÃO: - Não faça condições muito complexas - Não esqueça de definir falseAction - Não use variáveis sem {{}}
Dicas
💡 Múltiplas condições: Use && (E) ou || (OU) 💡 Strings: Use aspas duplas: "{{status}} == 'ativo'" 💡 Números: Sem aspas: "{{idade}} >= 18" 💡 Debug: Use MESSAGE antes para ver valor da variável
Próximo Node
→ SWITCH - Múltiplas condições → VARIABLE - Manipular variáveis