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:
- Rate limiting: Respeitar limites de APIs (não enviar muitas requisições rápido)
- Experiência do usuário: Espaçar mensagens para não bombardear
- Aguardar processamento: Dar tempo para sistemas externos processarem
- Simular digitação: Criar experiência natural de conversa
- Intervalo entre ações: Controlar velocidade de execução
Como funciona internamente?
Quando o DELAY é executado, o sistema:
- Converte duração para millisegundos baseado no unit
- Agenda retomada para data/hora futura
- Pausa execução do flow
- Aguarda tempo especificado
- 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:
- Rate limiting de API: Aguardar entre chamadas
- Mensagens espaçadas: Evitar spam ao usuário
- Aguardar webhook: Dar tempo para sistema externo processar
- Experiência natural: Simular tempo de "digitação"
- 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