Pular para conteúdo

REMOVE_PHONES - Remoção de Números de Telefone

O que é esta operação?

A operação REMOVE_PHONES do Content Cleaner é responsável por identificar e remover números de telefone em diversos formatos (brasileiros e internacionais) de um texto.

Por que esta operação existe?

Números de telefone são dados pessoais sensíveis que precisam de proteção. A operação REMOVE_PHONES existe para:

  1. Conformidade LGPD: Remover dados de contato pessoal de textos antes de armazenamento público
  2. Proteção de Privacidade: Ocultar telefones em comentários, reviews ou mensagens compartilhadas
  3. Anti-Spam: Prevenir coleta de números por bots para telemarketing ou fraudes
  4. Anonimização de Dados: Preparar datasets removendo informações identificáveis

Como funciona internamente?

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

  1. Recebe o texto: Obtém o conteúdo da variável especificada em inputVariable
  2. Aplica regex de telefones: Reconhece formatos brasileiros e internacionais com ou sem símbolos
  3. Conta ocorrências: Registra quantos números foram encontrados para estatísticas
  4. Remove os números: Substitui todos os telefones encontrados por string vazia
  5. Atualiza estatísticas: Incrementa o contador phonesRemoved nas estatísticas
  6. Retorna resultado: Armazena o texto limpo na variável de saída

Código interno (content-cleaner-executor.service.ts:231-237):

// Remove phone numbers (Brazilian and international formats)
if (config.removePhones !== false) {
  const phoneRegex = /(\+?\d{1,3}[-.\s]?)?\(?\d{2,4}\)?[-.\s]?\d{3,5}[-.\s]?\d{4}/g;
  const matches = cleaned.match(phoneRegex);
  stats.phonesRemoved = matches ? matches.length : 0;
  cleaned = cleaned.replace(phoneRegex, '');
}

Quando você DEVE usar esta operação?

Use REMOVE_PHONES sempre que precisar proteger dados de contato telefônico:

Casos de uso

  1. Anonimização LGPD: "Remover telefones de formulários antes de análise estatística"
  2. Moderação de Comentários: "Filtrar números de telefone deixados por usuários em reviews"
  3. Proteção Anti-Spam: "Evitar coleta de números por scrapers em conteúdo público"
  4. Limpeza de Datasets: "Preparar textos removendo informações de contato para treinamento de modelos"

Quando NÃO usar REMOVE_PHONES

  • Telefones são Essenciais: Se os números fazem parte da informação principal (ex: catálogos de serviços)
  • Extração Necessária: Use um extrator ao invés, se precisar capturar os números
  • Validação de Telefone: 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 Telefones",
  "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: (11) 98765-4321 ou ligue +55 21 3456-7890 para atendimento"
        }
      }
    },
    {
      "id": "cleaner_1",
      "type": "content_cleaner",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Remover Telefones",
        "parameters": {
          "inputVariable": "raw_content",
          "removePhones": 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\nTelefones removidos: {{cleaning_stats.phonesRemoved}}"
        }
      }
    },
    {
      "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: Contato: ou ligue para atendimento" e "Telefones removidos: 2"

removePhones (boolean, opcional)

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

Padrão: true

Parâmetros

Campo Tipo Obrigatório Descrição
inputVariable string Sim Variável contendo o texto a limpar (padrão: "raw_content")
removePhones boolean Não Remove telefones 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: Proteção LGPD em Atendimento

Objetivo: Remover telefones de transcrições de atendimento antes de armazenar

JSON para Importar

{
  "name": "Anonimizar Transcrição 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": "Transcrição",
        "parameters": {
          "message": "Cole a transcrição do atendimento:",
          "variableName": "transcript"
        }
      }
    },
    {
      "id": "cleaner_1",
      "type": "content_cleaner",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Remover Dados Sensíveis",
        "parameters": {
          "inputVariable": "transcript",
          "removePhones": true,
          "removeEmails": true,
          "outputVariable": "safe_transcript",
          "returnStats": true,
          "statsVariable": "privacy_stats"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar Proteção",
        "parameters": {
          "message": "🔒 TRANSCRIÇÃO ANONIMIZADA\n\n📝 Texto seguro:\n{{safe_transcript}}\n\n🛡️ Dados protegidos:\n• Telefones: {{privacy_stats.phonesRemoved}}\n• Emails: {{privacy_stats.emailsRemoved}}\n\n✅ Conforme LGPD"
        }
      }
    },
    {
      "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: Cole a transcrição do atendimento:
Usuário: Cliente forneceu telefone (11) 98765-4321 e email cliente@email.com para contato
Sistema: 🔒 TRANSCRIÇÃO ANONIMIZADA

📝 Texto seguro:
Cliente forneceu telefone  e email  para contato

🛡️ Dados protegidos:
• Telefones: 1
• Emails: 1

✅ Conforme LGPD

Exemplo 2: Moderação de Comentários Anti-Spam

Objetivo: Bloquear comentários contendo números de telefone (spam)

JSON para Importar

{
  "name": "Moderação Anti-Spam Telefone",
  "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 seu comentário:",
          "variableName": "user_comment"
        }
      }
    },
    {
      "id": "cleaner_1",
      "type": "content_cleaner",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Detectar Telefones",
        "parameters": {
          "inputVariable": "user_comment",
          "removePhones": true,
          "outputVariable": "clean_comment",
          "returnStats": true,
          "statsVariable": "spam_check"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Tem Telefone?",
        "parameters": {
          "condition": "{{spam_check.phonesRemoved}} > 0"
        }
      }
    },
    {
      "id": "message_blocked",
      "type": "message",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Bloquear",
        "parameters": {
          "message": "🚫 COMENTÁRIO BLOQUEADO\n\nNúmeros de telefone não são permitidos.\nEncontramos {{spam_check.phonesRemoved}} telefone(s) no texto.\n\nPor favor, remova os números e tente novamente."
        }
      }
    },
    {
      "id": "message_approved",
      "type": "message",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Aprovar",
        "parameters": {
          "message": "✅ Comentário aprovado!\n\n💬 {{clean_comment}}\n\nObrigado pela participação!"
        }
      }
    },
    {
      "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_blocked", "label": "true" },
    { "source": "condition_1", "target": "message_approved", "label": "false" },
    { "source": "message_blocked", "target": "end_1" },
    { "source": "message_approved", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Digite seu comentário:
Usuário: Produto ótimo! Me chame no WhatsApp (11) 99999-8888 para negociar
Sistema: 🚫 COMENTÁRIO BLOQUEADO

Números de telefone não são permitidos.
Encontramos 1 telefone(s) no texto.

Por favor, remova os números e tente novamente.

Exemplo 3: Limpeza de Reviews para Análise

Objetivo: Preparar reviews removendo telefones antes de análise de sentimento

JSON para Importar

{
  "name": "Preparar Reviews para Análise",
  "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": "Review Bruto",
        "parameters": {
          "variableName": "raw_review",
          "variableValue": "Excelente serviço! Recomendo muito. Fui atendido pelo João no telefone 11 3456-7890 e foi super atencioso."
        }
      }
    },
    {
      "id": "cleaner_1",
      "type": "content_cleaner",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Limpar para Análise",
        "parameters": {
          "inputVariable": "raw_review",
          "removePhones": true,
          "removeExtraSpaces": true,
          "outputVariable": "analysis_ready_review",
          "returnStats": true,
          "statsVariable": "clean_stats"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Review Limpo",
        "parameters": {
          "message": "📊 REVIEW PREPARADO PARA ANÁLISE\n\n📝 Texto limpo:\n{{analysis_ready_review}}\n\n🔧 Limpezas aplicadas:\n• Telefones removidos: {{clean_stats.phonesRemoved}}\n• Caracteres: {{clean_stats.originalLength}} → {{clean_stats.cleanedLength}}\n\n✅ Pronto para análise de sentimento"
        }
      }
    },
    {
      "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" }
  ]
}

Saída esperada:

Sistema: 📊 REVIEW PREPARADO PARA ANÁLISE

📝 Texto limpo:
Excelente serviço! Recomendo muito. Fui atendido pelo João no telefone e foi super atencioso.

🔧 Limpezas aplicadas:
• Telefones removidos: 1
• Caracteres: 118 → 103

✅ Pronto para análise de sentimento

Resposta do Node

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

Boas Práticas

SIM:

  • Sempre combinar com removeEmails para anonimização completa de contatos
  • Usar returnStats para detectar spam (muitos telefones = suspeito)
  • Aplicar antes de armazenar dados públicos para conformidade LGPD
  • Remover telefones de reviews e comentários para proteger usuários

NÃO:

  • Remover de catálogos de serviços onde telefone é informação essencial
  • Esquecer de notificar usuários sobre remoção (transparência)
  • Aplicar em formulários de cadastro onde telefone é obrigatório

Dicas

💡 Dica 1: O regex reconhece formatos brasileiros (11) 98765-4321, internacionais +55 11 9876-5432, e simples 11987654321

💡 Dica 2: Use phonesRemoved > 0 em condições para detectar tentativas de spam em comentários

💡 Dica 3: Combine com removeEmails e removeUrls para proteção completa contra spam de contato

💡 Dica 4: Para compliance LGPD, sempre documente quantos números foram removidos usando returnStats

Próximo Node

REMOVE_EMAILS - Remove endereços de email do texto → REMOVE_URLS - Remove URLs do texto → REMOVE_EMOJIS - Remove emojis e símbolos especiais