Pular para conteúdo

INPUT - Capturar Entrada de Texto

O que é este Node?

O INPUT é o node responsável por capturar texto digitado pelo usuário durante a execução do flow. Diferente do MESSAGE que apenas envia informação, o INPUT pausa o flow e aguarda uma resposta, salvando o texto digitado em uma variável para uso posterior.

Por que este Node existe?

Automações precisam coletar informações do usuário. O INPUT existe para:

  1. Interatividade: Transformar um flow unidirecional (só OUTPUT) em uma conversa bidirecional (INPUT + OUTPUT)
  2. Personalização: Capturar nome, email, preferências, etc. para personalizar a experiência
  3. Coleta de dados: Reunir informações para processar (buscar CEP, consultar banco, criar cadastro)
  4. Validação controlada: Garantir que dados capturados seguem regras (obrigatório, tamanho mínimo/máximo, padrão regex)

Sem o INPUT, seu flow seria um monólogo. Com ele, vira um diálogo.

Como funciona internamente?

Quando o INPUT é executado, o sistema:

  1. Pausa a execução do flow neste ponto
  2. Envia a mensagem/pergunta ao usuário (parâmetro message)
  3. Mostra o placeholder no campo de entrada (se fornecido)
  4. Aguarda o usuário digitar e enviar o texto
  5. Valida a entrada contra as regras definidas (required, minLength, maxLength, pattern)
  6. Se inválido: Pede novamente ao usuário
  7. Se válido: Salva na variável especificada e continua para o próximo node

Código interno (basic-flow-executor.service.ts:144-159):

private async executeInput(parameters: any, context: any): Promise<any> {
  const { message, variable, placeholder, validation } = parameters;

  this.logger.log(`📝 INPUT - Requesting text input: "${message}"`);

  return {
    success: true,
    action: 'input_requested',
    inputType: 'text',
    message: message || 'Please enter text:',
    variable: variable || 'user_input',
    placeholder: placeholder || 'Type your answer...',
    validation: validation || { required: true },
    awaitingUserInput: true
  };
}

Fluxo de execução visual:

[Node INPUT executa]
     ↓
[Sistema envia pergunta ao usuário]
     ↓
[Flow PAUSA e aguarda...]
     ↓
[Usuário digita texto]
     ↓
[Sistema VALIDA o texto]
     ↓
├─ Válido? → Salva na variável → Próximo node
└─ Inválido? → Pede novamente ao usuário

Quando você DEVE usar este Node?

Use INPUT sempre que precisar de texto livre do usuário:

Casos de uso:

  1. Nome: "Qual é o seu nome?"
  2. Cidade: "De qual cidade você é?"
  3. Endereço: "Qual o seu endereço completo?"
  4. Descrição: "Descreva o problema que você está enfrentando"
  5. Feedback: "Como foi sua experiência?"
  6. Motivo: "Por que você quer cancelar o pedido?"
  7. Observações: "Alguma observação sobre a entrega?"
  8. Resposta aberta: "O que você gostaria de saber?"

Quando NÃO usar INPUT:

  • Números: Use NUMBER para validar formato numérico
  • Emails: Use EMAIL para validar formato de email
  • Telefones: Use PHONE para validar formato de telefone
  • Datas: Use DATE para validar formato de data
  • Opções múltipla escolha: Use CHOICE/BUTTON node
  • Sim/Não: Use CONFIRM node

Parâmetros Detalhados

message (string, obrigatório)

O que é: A pergunta ou instrução que será mostrada ao usuário.

Por que importante: É a única forma do usuário saber o que você espera dele.

Boas práticas: - Seja claro e direto: "Qual é o seu nome?" (✅) vs "Nome?" (❌ ambíguo) - Indique o formato esperado se necessário: "Digite seu CEP (somente números)" - Use tom amigável: "Qual é o seu nome completo?" vs "INFORME NOME"

Exemplos:

Flow completo para testar:

{
  "name": "Teste Parâmetro MESSAGE",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Testar Message",
        "parameters": {
          "message": "Qual é o seu nome completo?"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Mostrar Resposta",
        "parameters": {
          "message": "Você digitou: {{user_input}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_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. Digite seu nome quando solicitado 5. Veja a mensagem confirmando o que você digitou

variable (string, opcional)

O que é: Nome da variável onde o texto digitado será salvo.

Padrão: Se não fornecido, usa "user_input"

Como funciona: Após usuário responder, você pode acessar o valor em qualquer node seguinte usando {{nome_da_variavel}}

Naming conventions (boas práticas): - Use nomes descritivos: nome, email, cidade, endereco - Use snake_case: nome_completo, data_nascimento - Evite nomes genéricos: input1, var, x

Flow completo para testar:

{
  "name": "Teste Parâmetro VARIABLE",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Pedir Nome",
        "parameters": {
          "message": "Qual é o seu nome completo?",
          "variable": "nome_completo"
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Pedir Idade",
        "parameters": {
          "message": "Qual é a sua idade?",
          "variable": "idade"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar Dados",
        "parameters": {
          "message": "Olá {{nome_completo}}! Você tem {{idade}} anos."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "input_2" },
    { "source": "input_2", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Como testar: 1. Copie o JSON acima 2. Importe no Flow Builder 3. Execute 4. Digite seu nome completo (salvo em {{nome_completo}}) 5. Digite sua idade (salvo em {{idade}}) 6. Veja ambas as variáveis sendo usadas na mensagem final

placeholder (string, opcional)

O que é: Texto de exemplo que aparece dentro do campo antes do usuário digitar.

Padrão: Se não fornecido, usa "Type your answer..."

Para que serve: Dar uma dica visual do formato ou tipo de resposta esperada.

Boas práticas: - Use exemplos reais: "João Silva" para nome - Seja consistente com a pergunta - Não seja redundante (não repita a pergunta)

Flow completo para testar:

{
  "name": "Teste Parâmetro PLACEHOLDER",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Com Placeholder",
        "parameters": {
          "message": "Digite seu CEP:",
          "variable": "cep",
          "placeholder": "01310-100"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar CEP",
        "parameters": {
          "message": "CEP informado: {{cep}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_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 o campo de entrada mostrando "01310-100" como exemplo 5. Digite seu CEP 6. Veja a confirmação

validation (object, opcional)

O que é: Regras de validação que o texto digitado deve seguir.

Padrão: Se não fornecido, usa { required: true }

Validações disponíveis:

required (boolean)

  • true: Campo obrigatório (usuário DEVE digitar algo)
  • false: Campo opcional (usuário pode pular)

Flow completo para testar required:

{
  "name": "Teste REQUIRED",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Campo Obrigatório",
        "parameters": {
          "message": "Digite seu nome (obrigatório):",
          "variable": "nome",
          "validation": {
            "required": true
          }
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Nome registrado: {{nome}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Tente enviar vazio - o sistema pedirá novamente!

minLength (number)

Número mínimo de caracteres

Flow completo para testar minLength:

{
  "name": "Teste MINLENGTH",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Mínimo 10 Caracteres",
        "parameters": {
          "message": "Descreva o problema (mínimo 10 caracteres):",
          "variable": "descricao",
          "validation": {
            "required": true,
            "minLength": 10
          }
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Descrição: {{descricao}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite "Erro" (4 caracteres) - sistema rejeitará! Digite "Erro no login" (13 caracteres) - aceita!

maxLength (number)

Número máximo de caracteres

Flow completo para testar maxLength:

{
  "name": "Teste MAXLENGTH",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Máximo 20 Caracteres",
        "parameters": {
          "message": "Digite um apelido (máximo 20 caracteres):",
          "variable": "apelido",
          "validation": {
            "required": true,
            "maxLength": 20
          }
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Seu apelido: {{apelido}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite "João" (4 caracteres) - aceita! Digite um texto com mais de 20 caracteres - sistema rejeitará!

pattern (string - regex)

Expressão regular que o texto deve seguir

Flow completo para testar pattern (apenas letras):

{
  "name": "Teste PATTERN - Apenas Letras",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Apenas Letras",
        "parameters": {
          "message": "Digite seu nome (apenas letras):",
          "variable": "nome",
          "validation": {
            "required": true,
            "pattern": "^[A-Za-zÀ-ÿ ]+$"
          }
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Nome válido: {{nome}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite "João Silva" - aceita! Digite "João123" - rejeita (tem número)!

Padrões regex comuns:

Uso Regex Descrição
Apenas letras ^[A-Za-z]+$ Só alfabeto, sem espaços
Letras + espaços ^[A-Za-z ]+$ Alfabeto e espaços
Letras acentuadas ^[A-Za-zÀ-ÿ ]+$ Com acentos portugueses
Alfanumérico ^[A-Za-z0-9]+$ Letras e números
Código alfanumérico ^[A-Z0-9]{6}$ Ex: ABC123 (6 caracteres)

Exemplo 1: Capturar Nome Simples

Objetivo: Perguntar o nome do usuário e cumprimentá-lo.

O que este flow faz: 1. Inicia o flow 2. Pergunta "Qual é o seu nome?" 3. Aguarda usuário digitar 4. Salva o nome na variável nome 5. Envia "Olá [nome]! Prazer em conhecê-lo!" 6. Finaliza

JSON COMPLETO para Importar

{
  "name": "INPUT - Exemplo 1: Capturar Nome",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": {
        "label": "Início"
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Pedir Nome",
        "parameters": {
          "message": "Qual é o seu nome?",
          "variable": "nome",
          "placeholder": "Digite seu nome completo",
          "validation": {
            "required": true,
            "minLength": 2
          }
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Cumprimentar",
        "parameters": {
          "message": "Olá {{nome}}! Prazer em conhecê-lo!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Fim"
      }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Como Importar e Testar

  1. Copie o JSON acima (Ctrl+C)
  2. Abra o Flow Builder
  3. Clique em Importar
  4. Cole o JSON
  5. Clique em Importar Flow
  6. Clique em Executar

Teste Real

Sistema: Qual é o seu nome?
Você digita: João Silva
Sistema: Olá João Silva! Prazer em conhecê-lo!
[Flow termina]

Exemplo 2: Cadastro Completo (Nome + Cidade)

Objetivo: Coletar nome e cidade do usuário e confirmar os dados.

O que este flow faz: 1. Pergunta o nome 2. Pergunta a cidade 3. Mostra resumo com os dois dados 4. Finaliza

JSON COMPLETO para Importar

{
  "name": "INPUT - Exemplo 2: Cadastro Nome e Cidade",
  "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": "Boas-vindas",
        "parameters": {
          "message": "Vamos criar seu cadastro! 📋"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Pedir Nome",
        "parameters": {
          "message": "Qual é o seu nome completo?",
          "variable": "nome",
          "placeholder": "João da Silva",
          "validation": {
            "required": true,
            "minLength": 3,
            "maxLength": 100
          }
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Pedir Cidade",
        "parameters": {
          "message": "De qual cidade você é?",
          "variable": "cidade",
          "placeholder": "São Paulo",
          "validation": {
            "required": true,
            "minLength": 2
          }
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar Cadastro",
        "parameters": {
          "message": "✅ Cadastro realizado com sucesso!\n\n👤 Nome: {{nome}}\n📍 Cidade: {{cidade}}\n\nObrigado por se cadastrar!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Fim"
      }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "input_2" },
    { "source": "input_2", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Teste Real

Sistema: Vamos criar seu cadastro! 📋
Sistema: Qual é o seu nome completo?
Você digita: Maria Santos
Sistema: De qual cidade você é?
Você digita: Rio de Janeiro
Sistema: ✅ Cadastro realizado com sucesso!

         👤 Nome: Maria Santos
         📍 Cidade: Rio de Janeiro

         Obrigado por se cadastrar!
[Flow termina]

Exemplo 3: Feedback com Validação de Tamanho

Objetivo: Coletar feedback do usuário com validação de mínimo 10 caracteres.

O que este flow faz: 1. Informa que pedido foi processado 2. Pede feedback (mínimo 10 caracteres) 3. Se texto muito curto, pede novamente 4. Agradece pelo feedback 5. Finaliza

JSON COMPLETO para Importar

{
  "name": "INPUT - Exemplo 3: Feedback com Validação",
  "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": "Processar Pedido",
        "parameters": {
          "message": "✅ Seu pedido foi processado com sucesso!"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Pedir Feedback",
        "parameters": {
          "message": "Como foi sua experiência? (mínimo 10 caracteres)",
          "variable": "feedback",
          "placeholder": "Deixe seu comentário aqui...",
          "validation": {
            "required": true,
            "minLength": 10,
            "maxLength": 300
          }
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Agradecer",
        "parameters": {
          "message": "Obrigado pelo feedback! 🙏\n\nVocê disse: \"{{feedback}}\"\n\nSua opinião é muito importante para nós!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Fim"
      }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Teste Real com Validação

Cenário 1: Usuário digita texto curto

Sistema: ✅ Seu pedido foi processado com sucesso!
Sistema: Como foi sua experiência? (mínimo 10 caracteres)
Você digita: Bom
Sistema: ❌ Texto muito curto. Digite pelo menos 10 caracteres.
Você digita: Foi muito bom, gostei bastante!
Sistema: Obrigado pelo feedback! 🙏

         Você disse: "Foi muito bom, gostei bastante!"

         Sua opinião é muito importante para nós!
[Flow termina]

Exemplo 4: Código de Validação (Apenas Números)

Objetivo: Capturar código de 6 dígitos numéricos.

O que este flow faz: 1. Envia código por "email" (simulado) 2. Pede código de 6 dígitos 3. Valida: deve ser exatamente 6 números 4. Se inválido, pede novamente 5. Confirma validação 6. Finaliza

JSON COMPLETO para Importar

{
  "name": "INPUT - Exemplo 4: Código de Validação",
  "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": "Enviar Código",
        "parameters": {
          "message": "📧 Enviamos um código de 6 dígitos para seu email.\n\nVerifique sua caixa de entrada!"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Pedir Código",
        "parameters": {
          "message": "Digite o código de 6 dígitos:",
          "variable": "codigo",
          "placeholder": "123456",
          "validation": {
            "required": true,
            "pattern": "^[0-9]{6}$",
            "minLength": 6,
            "maxLength": 6
          }
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar Validação",
        "parameters": {
          "message": "✅ Código {{codigo}} validado com sucesso!\n\nSua conta foi verificada."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Fim"
      }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Teste Real com Validação Rigorosa

Cenário: Múltiplas tentativas até acertar

Sistema: 📧 Enviamos um código de 6 dígitos para seu email.
         Verifique sua caixa de entrada!

Sistema: Digite o código de 6 dígitos:
Você digita: 12345
Sistema: ❌ Código inválido. Deve ter exatamente 6 dígitos.

Você digita: 1234567
Sistema: ❌ Código inválido. Deve ter exatamente 6 dígitos.

Você digita: 12345A
Sistema: ❌ Código inválido. Use apenas números.

Você digita: 123456
Sistema: ✅ Código 123456 validado com sucesso!
         Sua conta foi verificada.
[Flow termina]

Exemplo 5: Suporte - Descrição de Problema

Objetivo: Criar ticket de suporte com descrição do problema.

O que este flow faz: 1. Boas-vindas ao suporte 2. Pede descrição do problema (10-500 caracteres) 3. Gera ticket com ID 4. Confirma abertura 5. Finaliza

JSON COMPLETO para Importar

{
  "name": "INPUT - Exemplo 5: Ticket de Suporte",
  "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": "Boas-vindas Suporte",
        "parameters": {
          "message": "🎫 Bem-vindo ao Suporte Técnico!\n\nVamos abrir um ticket para você."
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Descrever Problema",
        "parameters": {
          "message": "Descreva o problema que você está enfrentando:",
          "variable": "descricao_problema",
          "placeholder": "Ex: Não consigo fazer login no sistema",
          "validation": {
            "required": true,
            "minLength": 10,
            "maxLength": 500
          }
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar Ticket",
        "parameters": {
          "message": "✅ Ticket #12345 criado com sucesso!\n\n📋 Problema:\n{{descricao_problema}}\n\n⏰ Nossa equipe responderá em até 24 horas.\n\nObrigado!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Fim"
      }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Teste Real

Sistema: 🎫 Bem-vindo ao Suporte Técnico!
         Vamos abrir um ticket para você.

Sistema: Descreva o problema que você está enfrentando:
Você digita: Não consigo acessar minha conta mesmo digitando a senha correta

Sistema: ✅ Ticket #12345 criado com sucesso!

         📋 Problema:
         Não consigo acessar minha conta mesmo digitando a senha correta

         ⏰ Nossa equipe responderá em até 24 horas.

         Obrigado!
[Flow termina]

Exemplo 6: Feedback Opcional (Campo Não Obrigatório)

Objetivo: Permitir usuário pular feedback se não quiser dar.

O que este flow faz: 1. Informa conclusão de serviço 2. Pede feedback (OPCIONAL - required: false) 3. Se usuário pular, agradece mesmo assim 4. Se usuário responder, mostra o feedback 5. Finaliza

JSON COMPLETO para Importar

{
  "name": "INPUT - Exemplo 6: Feedback Opcional",
  "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": "Serviço Concluído",
        "parameters": {
          "message": "✅ Serviço concluído com sucesso!"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Feedback Opcional",
        "parameters": {
          "message": "Gostaria de deixar um feedback? (opcional)",
          "variable": "feedback_opcional",
          "placeholder": "Digite aqui ou pule para continuar...",
          "validation": {
            "required": false,
            "maxLength": 300
          }
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Agradecimento",
        "parameters": {
          "message": "Obrigado! Até a próxima! 👋"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Fim"
      }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Teste Real - Usuário Pula

Sistema: ✅ Serviço concluído com sucesso!
Sistema: Gostaria de deixar um feedback? (opcional)
Você: [clica em Pular ou deixa vazio]
Sistema: Obrigado! Até a próxima! 👋
[Flow termina]

Teste Real - Usuário Responde

Sistema: ✅ Serviço concluído com sucesso!
Sistema: Gostaria de deixar um feedback? (opcional)
Você digita: Excelente atendimento!
Sistema: Obrigado! Até a próxima! 👋
[Flow termina]

Resposta Técnica do Node

Quando o INPUT é executado (antes do usuário responder):

{
  "success": true,
  "action": "input_requested",
  "inputType": "text",
  "message": "Qual é o seu nome?",
  "variable": "nome",
  "placeholder": "Digite seu nome completo",
  "validation": {
    "required": true
  },
  "awaitingUserInput": true
}

Erros Comuns e Como Evitar

❌ ERRO: Parâmetro message vazio

{
  "type": "input",
  "parameters": {
    "variable": "nome"
  }
}

Problema: Usuário não sabe o que digitar Solução: Sempre forneça mensagem clara

❌ ERRO: Regex mal formatado

{
  "validation": {
    "pattern": "[A-Z+"  // ❌ Regex inválido
  }
}

Solução: Teste seu regex antes (https://regex101.com/)

Boas Práticas

Seja específico na pergunta: "Qual é o seu nome completo?" > "Nome?"

Use placeholder útil: Mostre exemplo do formato esperado

Valide o necessário: Não exagere em regras se não for essencial

Confirme o que foi capturado: Mostre em MESSAGE seguinte

Não faça perguntas ambíguas: "Digite" sem contexto

Não coloque validação muito restritiva sem avisar o usuário

Próximos Passos

Agora que você domina INPUT, aprenda sobre:

NUMBER - Capturar números com validação numérica → EMAIL - Capturar emails com validação de formato → PHONE - Capturar telefones com validação → MESSAGE - Enviar mensagens ao usuário