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:
- Conformidade LGPD: Remover dados de contato pessoal de textos antes de armazenamento público
- Proteção de Privacidade: Ocultar telefones em comentários, reviews ou mensagens compartilhadas
- Anti-Spam: Prevenir coleta de números por bots para telemarketing ou fraudes
- Anonimização de Dados: Preparar datasets removendo informações identificáveis
Como funciona internamente?
Quando a operação REMOVE_PHONES é executada, o sistema:
- Recebe o texto: Obtém o conteúdo da variável especificada em
inputVariable - Aplica regex de telefones: Reconhece formatos brasileiros e internacionais com ou sem símbolos
- Conta ocorrências: Registra quantos números foram encontrados para estatísticas
- Remove os números: Substitui todos os telefones encontrados por string vazia
- Atualiza estatísticas: Incrementa o contador
phonesRemovednas estatísticas - 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
- Anonimização LGPD: "Remover telefones de formulários antes de análise estatística"
- Moderação de Comentários: "Filtrar números de telefone deixados por usuários em reviews"
- Proteção Anti-Spam: "Evitar coleta de números por scrapers em conteúdo público"
- 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
removeEmailspara anonimização completa de contatos - Usar
returnStatspara 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