Pular para conteúdo

REMOVE_EMAILS - Remoção de Endereços de Email

O que é esta operação?

A operação REMOVE_EMAILS do Content Cleaner é responsável por identificar e remover todos os endereços de email presentes em um texto, utilizando regex que reconhece padrões válidos de email.

Por que esta operação existe?

Endereços de email podem conter informações pessoais sensíveis ou ser alvos de spam. A operação REMOVE_EMAILS existe para:

  1. Proteção de Privacidade: Ocultar endereços de email em conteúdo público ou compartilhado
  2. Conformidade com LGPD: Remover dados pessoais identificáveis de textos antes de armazenamento ou análise
  3. Anti-Spam: Prevenir coleta de emails por bots em conteúdo publicado
  4. Limpeza de Dados: Preparar texto para análise removendo informações de contato

Como funciona internamente?

Quando a operação REMOVE_EMAILS é executada, o sistema:

  1. Recebe o texto: Obtém o conteúdo da variável especificada em inputVariable
  2. Aplica regex de emails: Utiliza padrão que identifica formato padrão de email (usuario@dominio.com)
  3. Conta ocorrências: Registra quantos emails foram encontrados para estatísticas
  4. Remove os emails: Substitui todos os endereços encontrados por string vazia
  5. Atualiza estatísticas: Incrementa o contador emailsRemoved nas estatísticas
  6. Retorna resultado: Armazena o texto limpo na variável de saída

Código interno (content-cleaner-executor.service.ts:223-229):

// Remove emails
if (config.removeEmails !== false) {
  const emailRegex = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g;
  const matches = cleaned.match(emailRegex);
  stats.emailsRemoved = matches ? matches.length : 0;
  cleaned = cleaned.replace(emailRegex, '');
}

Quando você DEVE usar esta operação?

Use REMOVE_EMAILS sempre que precisar proteger privacidade ou limpar dados de contato:

Casos de uso

  1. Anonimização de Conteúdo: "Remover emails de reviews ou comentários antes de publicação"
  2. Conformidade LGPD: "Limpar dados pessoais de logs ou relatórios antes de análise"
  3. Preparação de Dataset: "Remover informações identificáveis de textos para treinamento de modelos"
  4. Publicação Segura: "Ocultar contatos pessoais em documentos compartilhados publicamente"

Quando NÃO usar REMOVE_EMAILS

  • Emails são Essenciais: Se os endereços fazem parte da informação principal (ex: lista de contatos)
  • Extração Necessária: Use um extrator de emails ao invés, se precisar capturar os endereços
  • Validação de Email: Use validador específico se o objetivo é verificar formato, não remover

Parâmetros Detalhados

inputVariable (string, obrigatório)

O que é: Nome da variável que contém o texto a ser limpo.

Padrão: "raw_content"

Flow completo para testar:

{
  "name": "Teste Remove Emails",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Definir Texto",
        "parameters": {
          "variableName": "raw_content",
          "variableValue": "Entre em contato: jose@empresa.com ou suporte@sistema.com.br para mais informações"
        }
      }
    },
    {
      "id": "cleaner_1",
      "type": "content_cleaner",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Remover Emails",
        "parameters": {
          "inputVariable": "raw_content",
          "removeEmails": true,
          "outputVariable": "cleaned_content",
          "returnStats": true,
          "statsVariable": "cleaning_stats"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Mostrar Resultado",
        "parameters": {
          "message": "Texto limpo: {{cleaned_content}}\n\nEmails removidos: {{cleaning_stats.emailsRemoved}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "cleaner_1" },
    { "source": "cleaner_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: O sistema deve retornar "Texto limpo: Entre em contato: ou para mais informações" e "Emails removidos: 2"

removeEmails (boolean, opcional)

O que é: Ativa ou desativa a remoção de emails. Por padrão está ATIVADA (true).

Padrão: true

Flow completo para testar:

{
  "name": "Teste Preservar Emails",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Definir Texto",
        "parameters": {
          "variableName": "raw_content",
          "variableValue": "Contato: contato@empresa.com"
        }
      }
    },
    {
      "id": "cleaner_1",
      "type": "content_cleaner",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "NÃO Remover Emails",
        "parameters": {
          "inputVariable": "raw_content",
          "removeEmails": false,
          "outputVariable": "cleaned_content"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Mostrar Resultado",
        "parameters": {
          "message": "Texto: {{cleaned_content}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "cleaner_1" },
    { "source": "cleaner_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: O sistema deve preservar o email e retornar "Texto: Contato: contato@empresa.com"

Parâmetros

Campo Tipo Obrigatório Descrição
inputVariable string Sim Variável contendo o texto a limpar (padrão: "raw_content")
removeEmails boolean Não Remove emails do texto (padrão: true)
outputVariable string Não Variável para armazenar resultado (padrão: "cleaned_content")
returnStats boolean Não Retornar estatísticas detalhadas (padrão: false)
statsVariable string Não Variável para armazenar estatísticas

Exemplo 1: Anonimização de Comentários LGPD

Objetivo: Remover emails de comentários de usuários antes de armazenar para análise

JSON para Importar

{
  "name": "Anonimizar Comentários LGPD",
  "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": "Receber Comentário",
        "parameters": {
          "message": "Digite o comentário do cliente:",
          "variableName": "user_comment"
        }
      }
    },
    {
      "id": "cleaner_1",
      "type": "content_cleaner",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Remover Dados Pessoais",
        "parameters": {
          "inputVariable": "user_comment",
          "removeEmails": true,
          "removePhones": true,
          "outputVariable": "anonymous_comment",
          "returnStats": true,
          "statsVariable": "privacy_stats"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar Anonimização",
        "parameters": {
          "message": "✅ COMENTÁRIO ANONIMIZADO (LGPD)\n\n📝 Texto limpo:\n{{anonymous_comment}}\n\n🔒 Dados removidos:\n• Emails: {{privacy_stats.emailsRemoved}}\n• Telefones: {{privacy_stats.phonesRemoved}}\n\n✅ Seguro para armazenamento"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "cleaner_1" },
    { "source": "cleaner_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Digite o comentário do cliente:
Usuário: Ótimo atendimento! Me respondam no email maria.silva@gmail.com ou liguem no (11) 98765-4321
Sistema: ✅ COMENTÁRIO ANONIMIZADO (LGPD)

📝 Texto limpo:
Ótimo atendimento! Me respondam no email  ou liguem no

🔒 Dados removidos:
• Emails: 1
• Telefones: 1

✅ Seguro para armazenamento

Exemplo 2: Limpeza de Texto para Publicação

Objetivo: Preparar artigo removendo emails antes de publicar em site público

JSON para Importar

{
  "name": "Preparar Artigo para Publicação",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Artigo Original",
        "parameters": {
          "variableName": "draft_article",
          "variableValue": "Para dúvidas técnicas, contate tech@empresa.com.br. Nossa equipe de vendas está em vendas@empresa.com. Este artigo foi escrito por autor@blog.com."
        }
      }
    },
    {
      "id": "cleaner_1",
      "type": "content_cleaner",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Remover Contatos",
        "parameters": {
          "inputVariable": "draft_article",
          "removeEmails": true,
          "removeExtraSpaces": true,
          "outputVariable": "published_article",
          "returnStats": true,
          "statsVariable": "publication_stats"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Verificar Emails",
        "parameters": {
          "condition": "{{publication_stats.emailsRemoved}} > 0"
        }
      }
    },
    {
      "id": "message_removed",
      "type": "message",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Avisar Remoção",
        "parameters": {
          "message": "⚠️ {{publication_stats.emailsRemoved}} emails foram removidos do artigo por segurança.\n\n📄 Artigo pronto:\n{{published_article}}"
        }
      }
    },
    {
      "id": "message_ok",
      "type": "message",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Artigo Limpo",
        "parameters": {
          "message": "✅ Artigo já estava limpo, sem emails.\n\n📄 Pronto para publicação:\n{{published_article}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "cleaner_1" },
    { "source": "cleaner_1", "target": "condition_1" },
    { "source": "condition_1", "target": "message_removed", "label": "true" },
    { "source": "condition_1", "target": "message_ok", "label": "false" },
    { "source": "message_removed", "target": "end_1" },
    { "source": "message_ok", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: ⚠️ 3 emails foram removidos do artigo por segurança.

📄 Artigo pronto:
Para dúvidas técnicas, contate . Nossa equipe de vendas está em . Este artigo foi escrito por .

Exemplo 3: Proteção Anti-Spam em Reviews

Objetivo: Remover emails deixados por usuários tentando fazer spam em reviews

JSON para Importar

{
  "name": "Anti-Spam em Reviews",
  "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": "Receber Review",
        "parameters": {
          "message": "Digite a avaliação do produto:",
          "variableName": "product_review"
        }
      }
    },
    {
      "id": "cleaner_1",
      "type": "content_cleaner",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Detectar Spam",
        "parameters": {
          "inputVariable": "product_review",
          "removeEmails": true,
          "removeUrls": true,
          "outputVariable": "clean_review",
          "returnStats": true,
          "statsVariable": "spam_stats"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "É Spam?",
        "parameters": {
          "condition": "{{spam_stats.emailsRemoved}} > 0 || {{spam_stats.urlsRemoved}} > 0"
        }
      }
    },
    {
      "id": "message_spam",
      "type": "message",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Bloquear Spam",
        "parameters": {
          "message": "🚫 REVIEW BLOQUEADA - SPAM DETECTADO\n\n• Emails encontrados: {{spam_stats.emailsRemoved}}\n• URLs encontradas: {{spam_stats.urlsRemoved}}\n\nReviews não devem conter informações de contato."
        }
      }
    },
    {
      "id": "message_approved",
      "type": "message",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Aprovar Review",
        "parameters": {
          "message": "✅ Review aprovada!\n\n⭐ Avaliação:\n{{clean_review}}\n\nObrigado pelo feedback!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "cleaner_1" },
    { "source": "cleaner_1", "target": "condition_1" },
    { "source": "condition_1", "target": "message_spam", "label": "true" },
    { "source": "condition_1", "target": "message_approved", "label": "false" },
    { "source": "message_spam", "target": "end_1" },
    { "source": "message_approved", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Digite a avaliação do produto:
Usuário: Produto excelente! Para comprar mais barato, me contate em ofertas@spam.com
Sistema: 🚫 REVIEW BLOQUEADA - SPAM DETECTADO

• Emails encontrados: 1
• URLs encontradas: 0

Reviews não devem conter informações de contato.

Resposta do Node

{
  "success": true,
  "data": {
    "cleaned_content": "Texto sem emails",
    "stats": {
      "originalLength": 120,
      "cleanedLength": 95,
      "reductionPercentage": "20.83%"
    },
    "cleaning_stats": {
      "originalLength": 120,
      "cleanedLength": 95,
      "emailsRemoved": 2,
      "urlsRemoved": 0,
      "phonesRemoved": 0,
      "emojisRemoved": 0,
      "specialCharsRemoved": 0,
      "numbersRemoved": 0,
      "processingTime": 3
    }
  },
  "executionTime": 3,
  "logs": [
    "Cleaned content using balanced mode",
    "Original: 120 chars → Cleaned: 95 chars",
    "Removed 2 emails"
  ]
}

Boas Práticas

SIM:

  • Sempre remover emails ao lidar com dados públicos ou compartilhados
  • Combinar com removePhones para anonimização completa de dados de contato
  • Usar returnStats para auditar conformidade com LGPD
  • Aplicar antes de armazenar comentários ou reviews em bancos de dados

NÃO:

  • Remover emails de listas de contatos legítimas onde são informação principal
  • Esquecer de notificar usuários que emails foram removidos (transparência LGPD)
  • Aplicar em formulários de cadastro onde email é campo obrigatório

Dicas

💡 Dica 1: Use em conjunto com removePhones para compliance total com LGPD em dados de usuários

💡 Dica 2: Verifique emailsRemoved > 0 para detectar tentativas de spam em reviews ou comentários

💡 Dica 3: O regex reconhece todos os formatos padrão de email, incluindo subdomínios e caracteres especiais válidos

💡 Dica 4: Para logs de auditoria LGPD, sempre habilite returnStats: true e armazene quantos dados foram removidos

Próximo Node

REMOVE_URLS - Remove URLs do texto → REMOVE_PHONES - Remove números de telefone do texto → REMOVE_EMOJIS - Remove emojis e símbolos especiais