START - Iniciar Flow
O que é este Node?
O START é o ponto de entrada obrigatório de todo flow no Lumina Flow Builder. Ele marca onde a execução começa e inicializa o contexto necessário para que todos os outros nodes possam funcionar corretamente.
Por que este Node existe?
Todo sistema de automação precisa de um ponto de início bem definido. O START serve para:
-
Estabelecer o contexto inicial: Quando um flow é executado, ele precisa de dados básicos como ID do flow, ID do usuário, ID da sessão e timestamp. O START cria essas informações automaticamente.
-
Garantir consistência: Sem um ponto de início único e padronizado, cada flow poderia começar de forma diferente, causando bugs e comportamentos imprevisíveis.
-
Permitir rastreamento: Com o START gerando IDs únicos, você pode rastrear cada execução do flow nos logs, facilitando debug e análise de problemas.
-
Criar variáveis base: O START popula variáveis fundamentais ({{flowId}}, {{userId}}, {{sessionId}}, {{timestamp}}) que qualquer node posterior pode usar.
Como funciona internamente?
Quando o START é executado, o sistema:
- Gera um
flowIdúnico para esta execução específica - Captura o
userIdde quem iniciou o flow - Cria um
sessionIdpara agrupar múltiplas interações da mesma sessão - Registra o
timestampexato do início - Se você passar uma mensagem inicial, ela é enviada ao usuário
- Retorna sucesso e passa o controle para o próximo node conectado
Código interno (básico-flow-executor.service.ts:55-83):
private async executeStart(parameters: any, context: any): Promise<any> {
const { message } = parameters;
return {
success: true,
data: {
action: 'flow_started',
timestamp: new Date().toISOString(),
flowId: context.flowId || 'unknown',
userId: context.userId || 'anonymous',
sessionId: context.sessionId || 'default',
message: message,
messageType: 'text'
}
};
}
Quando você DEVE usar este Node?
SEMPRE! Todo flow precisa ter EXATAMENTE UM node START. É uma regra obrigatória do sistema.
Casos de uso:
- Chatbots: Quando usuário envia "oi" ou "/start", o flow inicia
- Webhooks: Quando recebe POST de sistema externo (ex: novo pedido na loja)
- Agendamentos: Quando cron job dispara execução automática (ex: enviar relatório diário)
- Eventos: Quando algo acontece no sistema (ex: novo cadastro, pagamento aprovado)
Parâmetros Detalhados
message (string, opcional)
O que é: Uma mensagem de texto que será enviada ao usuário assim que o flow iniciar.
Por que usar: Útil para dar contexto ao usuário sobre o que está acontecendo. Por exemplo, se o flow foi acionado por um webhook, você pode avisar "Seu pedido foi recebido!" antes de processar.
Quando NÃO usar: Se o próximo node já vai enviar uma mensagem, não precisa duplicar aqui.
Flow completo para testar:
{
"name": "Teste START com Message",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": {
"label": "Início com Mensagem",
"parameters": {
"message": "Bem-vindo ao atendimento! Vou te ajudar agora."
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Segunda Mensagem",
"parameters": {
"message": "Como posso ajudar você hoje?"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Como testar: 1. Copie o JSON acima 2. Importe no Flow Builder 3. Execute 4. Observe que DUAS mensagens são enviadas: uma do START e outra do MESSAGE
Variáveis que o START cria
Após executar, o START disponibiliza estas variáveis para TODOS os nodes seguintes:
{{flowId}}
- O que é: ID único desta execução específica do flow
- Formato: String (ex: "flow_abc123xyz")
- Uso: Rastrear esta execução nos logs, salvar no banco de dados para auditoria
Flow completo para testar flowId:
{
"name": "Teste Variável flowId",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Mostrar Flow ID",
"parameters": {
"message": "🆔 Flow ID desta execução: {{flowId}}\n\nCada vez que você executar, terá um ID diferente!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Execute 2 vezes e veja IDs diferentes!
{{userId}}
- O que é: ID do usuário que disparou o flow
- Formato: String (ex: "user_456")
- Uso: Personalizar mensagens, buscar dados do usuário no banco, registrar ações
{{sessionId}}
- O que é: ID da sessão de conversa/interação
- Formato: String (ex: "session_789")
- Uso: Agrupar múltiplas execuções da mesma conversa, manter contexto entre flows
{{timestamp}}
- O que é: Data e hora exata que o flow iniciou
- Formato: ISO 8601 (ex: "2025-01-15T10:30:00.000Z")
- Uso: Registros, logs, calcular tempo de execução, validar expiração
Flow completo para testar TODAS as variáveis do START:
{
"name": "Teste TODAS Variáveis do START",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Mostrar Todas Variáveis",
"parameters": {
"message": "📊 DADOS DESTA EXECUÇÃO:\n\n🆔 Flow ID: {{flowId}}\n👤 User ID: {{userId}}\n💬 Session ID: {{sessionId}}\n⏰ Timestamp: {{timestamp}}\n\nTodas essas variáveis vêm automaticamente do START!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Como testar: 1. Copie o JSON acima 2. Importe no Flow Builder 3. Execute 4. Veja todos os dados gerados automaticamente pelo START
Resposta Técnica do Node
Quando o START executa, ele retorna este JSON:
{
"success": true,
"data": {
"action": "flow_started",
"timestamp": "2025-01-15T10:30:00.000Z",
"flowId": "flow_abc123",
"userId": "user_456",
"sessionId": "session_789",
"message": "Mensagem inicial se fornecida",
"messageType": "text"
}
}
Campos explicados:
- success: true → Sempre true, START nunca falha
- action: "flow_started" → Identifica que foi uma ação de início
- timestamp → Momento exato da execução
- flowId, userId, sessionId → IDs gerados/capturados
- message → Só aparece se você passou mensagem nos parâmetros
- messageType: "text" → Tipo da mensagem (sempre texto no START)
Exemplo Real: Flow Completo Explicado
Vou mostrar um flow simples e explicar CADA parte:
{
"name": "Atendimento Básico",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": {
"label": "Início do Atendimento",
"parameters": {
"message": "Olá! Atendimento iniciado."
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Mensagem de Boas-Vindas",
"parameters": {
"message": "Como posso ajudar você hoje?"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Fim do Atendimento"
}
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Explicação linha por linha:
- "name": "Atendimento Básico" → Nome do flow no sistema
- nodes → Array com todos os nodes (blocos) do flow
- "id": "start_1" → ID único deste node no flow (pode ser qualquer string)
- "type": "start" → Tipo do node (obrigatório ser "start")
- position: { x, y } → Posição visual no editor de flows
- "label": "Início do Atendimento" → Nome que aparece no editor
- parameters.message → A mensagem inicial que será enviada
- edges → Conexões entre nodes (de START → MESSAGE → END)
Fluxo de execução: 1. Sistema executa START → Envia "Olá! Atendimento iniciado." 2. Sistema executa MESSAGE → Envia "Como posso ajudar você hoje?" 3. Sistema executa END → Finaliza flow
Exemplo com Uso de Variáveis
{
"name": "Flow com Rastreamento",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": {
"label": "Início",
"parameters": {
"message": "Atendimento iniciado!"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Info Técnica",
"parameters": {
"message": "Flow ID: {{flowId}}\nIniciado em: {{timestamp}}\nSessão: {{sessionId}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
O que acontece: 1. START executa e cria: flowId="flow_xyz", timestamp="2025-01-15T10:30:00Z", sessionId="sess_123" 2. MESSAGE substitui as variáveis e envia:
Flow ID: flow_xyz
Iniciado em: 2025-01-15T10:30:00Z
Sessão: sess_123
Erros Comuns e Como Evitar
❌ ERRO: Flow sem START
{
"nodes": [
{ "id": "message_1", "type": "message" }
]
}
❌ ERRO: Múltiplos STARTs
{
"nodes": [
{ "id": "start_1", "type": "start" },
{ "id": "start_2", "type": "start" }
]
}
❌ ERRO: START conectado a nada
{
"nodes": [
{ "id": "start_1", "type": "start" }
],
"edges": []
}
Boas Práticas
✅ Use mensagem inicial apenas quando fizer sentido: Não duplique se o próximo node já envia mensagem
✅ Dê nomes descritivos ao label: "Início do Cadastro" é melhor que "Start 1"
✅ Use as variáveis do START para rastreamento: Salve flowId e timestamp no banco de dados para auditoria
✅ Conecte sempre a um próximo node: START nunca deve ser o único node do flow
Diferença entre START e outros nodes
| Característica | START | MESSAGE | INPUT |
|---|---|---|---|
| Obrigatório | ✅ Sim | ❌ Não | ❌ Não |
| Quantidade | 1 por flow | Múltiplos | Múltiplos |
| Cria variáveis | ✅ Sim | ❌ Não | ✅ Sim (a que captura) |
| Aguarda usuário | ❌ Não | ❌ Não | ✅ Sim |
Integração com Sistema
O START é acionado quando:
- API REST recebe POST /flows/:flowId/execute
- Webhook externo dispara execução
- Usuário envia comando no WhatsApp/Telegram
- Cron job agenda execução automática
- Evento interno do sistema ocorre
Próximos Passos
Agora que você entende o START, aprenda sobre:
→ MESSAGE - Como enviar mensagens ao usuário → INPUT - Como capturar respostas do usuário → END - Como finalizar o flow corretamente