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:
- Interatividade: Transformar um flow unidirecional (só OUTPUT) em uma conversa bidirecional (INPUT + OUTPUT)
- Personalização: Capturar nome, email, preferências, etc. para personalizar a experiência
- Coleta de dados: Reunir informações para processar (buscar CEP, consultar banco, criar cadastro)
- 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:
- Pausa a execução do flow neste ponto
- Envia a mensagem/pergunta ao usuário (parâmetro
message) - Mostra o placeholder no campo de entrada (se fornecido)
- Aguarda o usuário digitar e enviar o texto
- Valida a entrada contra as regras definidas (required, minLength, maxLength, pattern)
- Se inválido: Pede novamente ao usuário
- 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:
- Nome: "Qual é o seu nome?"
- Cidade: "De qual cidade você é?"
- Endereço: "Qual o seu endereço completo?"
- Descrição: "Descreva o problema que você está enfrentando"
- Feedback: "Como foi sua experiência?"
- Motivo: "Por que você quer cancelar o pedido?"
- Observações: "Alguma observação sobre a entrega?"
- 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
- Copie o JSON acima (Ctrl+C)
- Abra o Flow Builder
- Clique em Importar
- Cole o JSON
- Clique em Importar Flow
- 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