Pular para conteúdo

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:

  1. Validação automática: Garante que o texto digitado é um email válido (tem @, domínio, etc.)
  2. Regex embutido: Pattern /^[^\s@]+@[^\s@]+\.[^\s@]+$/ já configurado
  3. Evitar erros: Impede que "contato" ou "email@" sejam aceitos
  4. Coleta padronizada: Formato consistente para integração com APIs e banco de dados

Como funciona internamente?

Quando o EMAIL é executado, o sistema:

  1. Pausa o flow e exibe a pergunta
  2. Aguarda entrada do usuário
  3. Valida formato: Aplica regex para verificar padrão email
  4. Verifica required: Se false, aceita vazio
  5. Se inválido: Pede novamente com mensagem de erro
  6. 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:

  1. Cadastro: "Qual é o seu email?"
  2. Contato: "Para qual email devo enviar o orçamento?"
  3. Newsletter: "Digite seu email para receber novidades"
  4. Recuperação de senha: "Informe o email cadastrado"
  5. Notificações: "Email para avisos importantes"
  6. 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.comAceita subdomínios: usuario@mail.empresa.com.brValidaçã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)

Próximo Node

PHONE - Capturar telefone → NUMBER - Capturar números