Pular para conteúdo

DELAY - Aguardar Tempo

O que é este Node?

O DELAY é o node responsável por pausar a execução do flow por um período de tempo antes de continuar para o próximo node.

Por que este Node existe?

Flows precisam controlar timing. O DELAY existe para:

  1. Rate limiting: Respeitar limites de APIs (não enviar muitas requisições rápido)
  2. Experiência do usuário: Espaçar mensagens para não bombardear
  3. Aguardar processamento: Dar tempo para sistemas externos processarem
  4. Simular digitação: Criar experiência natural de conversa
  5. Intervalo entre ações: Controlar velocidade de execução

Como funciona internamente?

Quando o DELAY é executado, o sistema:

  1. Converte duração para millisegundos baseado no unit
  2. Agenda retomada para data/hora futura
  3. Pausa execução do flow
  4. Aguarda tempo especificado
  5. Retoma execução automaticamente

Código interno (logic-control-executor.service.ts:242-259):

private async executeDelay(parameters: any, context: any): Promise<any> {
  const { duration, unit } = parameters;

  const durationMs = this.convertToMilliseconds(duration || 1, unit || 'seconds');

  return {
    success: true,
    action: 'delay_scheduled',
    duration: duration || 1,
    unit: unit || 'seconds',
    durationMs: durationMs,
    resumeAt: new Date(Date.now() + durationMs).toISOString(),
    timestamp: new Date().toISOString()
  };
}

Quando você DEVE usar este Node?

Use DELAY quando precisar controlar timing:

Casos de uso:

  1. Rate limiting de API: Aguardar entre chamadas
  2. Mensagens espaçadas: Evitar spam ao usuário
  3. Aguardar webhook: Dar tempo para sistema externo processar
  4. Experiência natural: Simular tempo de "digitação"
  5. Retry com backoff: Aguardar antes de tentar novamente

Parâmetros

Campo Tipo Obrigatório Descrição
duration number Sim Quantidade de tempo
unit string Não milliseconds, seconds, minutes, hours (padrão: seconds)

Unidades de Tempo

Unit Abreviação Descrição
milliseconds ms Milissegundos
seconds s Segundos (padrão)
minutes m Minutos
hours h Horas

Exemplo 1: Aguardar 5 Segundos

Flow completo para testar:

{
  "name": "Teste DELAY - 5 Segundos",
  "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": "Primeira Mensagem",
        "parameters": {
          "message": "Enviando primeira mensagem... ⏱️"
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Aguardar 5s",
        "parameters": {
          "duration": 5,
          "unit": "seconds"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Segunda Mensagem",
        "parameters": {
          "message": "✅ Segunda mensagem (5 segundos depois)"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "delay_1" },
    { "source": "delay_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Teste: Execute o flow. A segunda mensagem chegará 5 segundos depois da primeira!

Exemplo 2: Espaçar 3 Mensagens

Flow completo para testar:

{
  "name": "Espaçar Mensagens com DELAY",
  "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": "Mensagem 1",
        "parameters": {
          "message": "1️⃣ Primeira mensagem"
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Delay 2s",
        "parameters": {
          "duration": 2,
          "unit": "seconds"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Mensagem 2",
        "parameters": {
          "message": "2️⃣ Segunda mensagem"
        }
      }
    },
    {
      "id": "delay_2",
      "type": "delay",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Delay 2s",
        "parameters": {
          "duration": 2,
          "unit": "seconds"
        }
      }
    },
    {
      "id": "message_3",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Mensagem 3",
        "parameters": {
          "message": "3️⃣ Terceira mensagem"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "delay_1" },
    { "source": "delay_1", "target": "message_2" },
    { "source": "message_2", "target": "delay_2" },
    { "source": "delay_2", "target": "message_3" },
    { "source": "message_3", "target": "end_1" }
  ]
}

Teste: Mensagens chegam com 2 segundos de intervalo cada!

Exemplo 3: Rate Limiting de API

Flow completo para testar:

{
  "name": "Rate Limiting com DELAY",
  "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": "Primeira Chamada",
        "parameters": {
          "message": "🌐 Chamando API... (1/3)"
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Rate Limit",
        "parameters": {
          "duration": 1,
          "unit": "seconds"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Segunda Chamada",
        "parameters": {
          "message": "🌐 Chamando API... (2/3)"
        }
      }
    },
    {
      "id": "delay_2",
      "type": "delay",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Rate Limit",
        "parameters": {
          "duration": 1,
          "unit": "seconds"
        }
      }
    },
    {
      "id": "message_3",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Terceira Chamada",
        "parameters": {
          "message": "🌐 Chamando API... (3/3)"
        }
      }
    },
    {
      "id": "message_4",
      "type": "message",
      "position": { "x": 1300, "y": 100 },
      "data": {
        "label": "Concluído",
        "parameters": {
          "message": "✅ Todas as chamadas completadas respeitando rate limit!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1500, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "delay_1" },
    { "source": "delay_1", "target": "message_2" },
    { "source": "message_2", "target": "delay_2" },
    { "source": "delay_2", "target": "message_3" },
    { "source": "message_3", "target": "message_4" },
    { "source": "message_4", "target": "end_1" }
  ]
}

Resposta do Node

{
  "success": true,
  "action": "delay_scheduled",
  "duration": 5,
  "unit": "seconds",
  "durationMs": 5000,
  "resumeAt": "2025-01-15T10:35:05.000Z",
  "timestamp": "2025-01-15T10:35:00.000Z"
}

Conversões de Tempo

1 hour = 60 minutes = 3600 seconds = 3600000 milliseconds
1 minute = 60 seconds = 60000 milliseconds
1 second = 1000 milliseconds

Boas Práticas

SIM: - Use segundos para delays curtos (1-60s) - Use minutos para delays médios (1-60min) - Especifique sempre o unit para clareza

NÃO: - Não use delays muito longos (> 1 hora) - Não abuse de delays (torna flow lento)

Dicas

💡 Experiência do usuário: 2-3 segundos é ideal entre mensagens 💡 Rate limiting: Consulte documentação da API para limites 💡 Simular digitação: Use 1-2 segundos para parecer natural 💡 Debug: Use delays curtos (100ms) em testes

Próximo Node

SCHEDULE - Agendar execução futura → RETRY - Tentar novamente com delay