EMAIL - Capturar Email
O que é este Node?
O EMAIL é o node responsável por capturar endereços de email digitados pelo usuário com validação automática de formato RFC compliant usando regex.
Por que este Node existe?
Capturar emails requer validação específica de formato. O EMAIL existe para:
- Validação automática: Garante que o texto digitado é um email válido (tem @, domínio, etc.)
- Regex embutido: Pattern
/^[^\s@]+@[^\s@]+\.[^\s@]+$/já configurado - Evitar erros: Impede que "contato" ou "email@" sejam aceitos
- Coleta padronizada: Formato consistente para integração com APIs e banco de dados
Como funciona internamente?
Quando o EMAIL é executado, o sistema:
- Pausa o flow e exibe a pergunta
- Aguarda entrada do usuário
- Valida formato: Aplica regex para verificar padrão email
- Verifica required: Se false, aceita vazio
- Se inválido: Pede novamente com mensagem de erro
- Se válido: Salva na variável e continua
Código interno (basic-flow-executor.service.ts:189-207):
private async executeEmail(parameters: any, context: any): Promise<any> {
const { message, variable, required } = parameters;
return {
success: true,
action: 'email_input_requested',
inputType: 'email',
message: message || 'Please enter your email:',
variable: variable || 'user_email',
validation: {
required: required !== false,
type: 'email',
pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
},
awaitingUserInput: true
};
}
Quando você DEVE usar este Node?
Use EMAIL sempre que precisar de endereços de email válidos do usuário:
Casos de uso:
- Cadastro: "Qual é o seu email?"
- Contato: "Para qual email devo enviar o orçamento?"
- Newsletter: "Digite seu email para receber novidades"
- Recuperação de senha: "Informe o email cadastrado"
- Notificações: "Email para avisos importantes"
- Login/Autenticação: "Digite seu email para login"
Quando NÃO usar EMAIL:
- Validação complexa: Se precisa verificar se email existe no servidor, use INPUT + API
- Múltiplos emails: Se precisa capturar vários emails, use INPUT com pattern customizado
Parâmetros Detalhados
message (string, obrigatório)
O que é: A pergunta que será mostrada ao usuário.
Flow completo para testar:
{
"name": "Teste EMAIL - Message",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "email_1",
"type": "email",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Pedir Email",
"parameters": {
"message": "Qual é o seu email profissional?"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Email capturado: {{user_email}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "email_1" },
{ "source": "email_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
variable (string, opcional)
O que é: Nome da variável onde o email será salvo.
Padrão: "user_email"
Flow completo para testar:
{
"name": "Teste EMAIL - Variable",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "email_1",
"type": "email",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Email Pessoal",
"parameters": {
"message": "Qual é o seu email pessoal?",
"variable": "email_pessoal"
}
}
},
{
"id": "email_2",
"type": "email",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Email Trabalho",
"parameters": {
"message": "Qual é o seu email do trabalho?",
"variable": "email_trabalho"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Mostrar Emails",
"parameters": {
"message": "📧 Pessoal: {{email_pessoal}}\n💼 Trabalho: {{email_trabalho}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "email_1" },
{ "source": "email_1", "target": "email_2" },
{ "source": "email_2", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
required (boolean, opcional)
O que é: Define se o email é obrigatório ou pode ser pulado.
Padrão: true (obrigatório)
Flow completo para testar required=false:
{
"name": "Teste EMAIL - Required False",
"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": "Oferta Newsletter",
"parameters": {
"message": "Quer receber nossas novidades?"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Email Opcional",
"parameters": {
"message": "Digite seu email (ou deixe em branco para pular):",
"variable": "email_newsletter",
"required": false
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Finalizar",
"parameters": {
"message": "Obrigado! ✅"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "email_1" },
{ "source": "email_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Teste: Deixe vazio ou aperte enter - sistema aceita!
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| message | string | Sim | Pergunta para o usuário |
| variable | string | Não | Nome da variável (padrão: "user_email") |
| required | boolean | Não | Se email é obrigatório (padrão: true) |
Exemplo 1: Cadastro Simples
Objetivo: Capturar email para cadastro
JSON para Importar
{
"name": "Cadastro Email",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "email_1",
"type": "email",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Pedir Email",
"parameters": {
"message": "Qual é o seu email?",
"variable": "email"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ Email {{email}} cadastrado com sucesso!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "email_1" },
{ "source": "email_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Qual é o seu email?
Usuário: joao@exemplo.com
Sistema: ✅ Email joao@exemplo.com cadastrado com sucesso!
Exemplo 2: Cadastro Completo
Objetivo: Coletar nome e email
JSON para Importar
{
"name": "Cadastro Completo",
"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 sua conta! 🚀"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Pedir Nome",
"parameters": {
"message": "Qual é o seu nome?",
"variable": "nome"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Pedir Email",
"parameters": {
"message": "Qual é o seu email?",
"variable": "email"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Confirmar Cadastro",
"parameters": {
"message": "Perfeito {{nome}}! Cadastro criado com email {{email}}"
}
}
},
{
"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": "email_1" },
{ "source": "email_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Vamos criar sua conta! 🚀
Sistema: Qual é o seu nome?
Usuário: Maria Silva
Sistema: Qual é o seu email?
Usuário: maria@exemplo.com
Sistema: Perfeito Maria Silva! Cadastro criado com email maria@exemplo.com
Exemplo 3: Email para Contato
Objetivo: Coletar email para envio de orçamento
JSON para Importar
{
"name": "Solicitar Orçamento",
"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": "Apresentação",
"parameters": {
"message": "Olá! Vou enviar o orçamento para você."
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Pedir Email",
"parameters": {
"message": "Para qual email devo enviar o orçamento?",
"variable": "email_cliente"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar Envio",
"parameters": {
"message": "📧 Orçamento será enviado para {{email_cliente}} em até 24h."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "email_1" },
{ "source": "email_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Olá! Vou enviar o orçamento para você.
Sistema: Para qual email devo enviar o orçamento?
Usuário: contato@empresa.com.br
Sistema: 📧 Orçamento será enviado para contato@empresa.com.br em até 24h.
Exemplo 4: Newsletter (Email Opcional)
Objetivo: Permitir pular cadastro de email
JSON para Importar
{
"name": "Newsletter 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": "Oferta",
"parameters": {
"message": "Quer receber nossas novidades por email?"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Pedir Email (Opcional)",
"parameters": {
"message": "Digite seu email ou 'pular' para não cadastrar:",
"variable": "email_newsletter",
"required": false
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Finalizar",
"parameters": {
"message": "Obrigado! 👍"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "email_1" },
{ "source": "email_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Resposta do Node
{
"success": true,
"action": "email_input_requested",
"inputType": "email",
"message": "Qual é o seu email?",
"variable": "email",
"validation": {
"required": true,
"type": "email",
"pattern": "/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/"
},
"awaitingUserInput": true
}
Validação Automática
O node EMAIL valida automaticamente o formato:
✅ Formato válido: usuario@dominio.com
✅ Aceita subdomínios: usuario@mail.empresa.com.br
✅ Validação regex: Pattern /^[^\s@]+@[^\s@]+\.[^\s@]+$/
❌ Rejeita:
- Emails sem @: usuariodominio.com
- Emails sem domínio: usuario@
- Emails com espaços: usuario @dominio.com
- Formato inválido: @dominio.com
Se usuário digitar email inválido, sistema pede novamente.
Exemplos de Emails Válidos
joao@exemplo.com
maria.silva@empresa.com.br
contato@sub.dominio.org
user123@mail-server.net
Parâmetro Required
{
"parameters": {
"message": "Digite seu email:",
"variable": "meu_email",
"required": true // true = obrigatório, false = opcional
}
}
Dicas
💡 Validação automática: Não precisa criar regex customizado 💡 Mensagem clara: "Qual é o seu email?" é melhor que "Email?" 💡 Confirme sempre: Mostre o email capturado em mensagem seguinte 💡 Nome da variável: Use nomes descritivos (email, email_cliente, email_contato)