Skip to main content
Documentação
CENTRO DE APRENDIZAGEM

Domine a moderação de conteúdo com guias completos, tutoriais e documentação da API

Links rápidos

Detecção de spam

A detecção de spam da Discuse classifica um texto como spam ou não, com uma pontuação de confiança. Envie o texto para POST https://api.discuse.com/api/v2/check com check_spam ativado e leia o veredito em results.spamfinder. Ela identifica spam promocional, golpes e ruído gerado por bots que filtros simples por palavras-chave deixam passar.

O que a detecção de spam identifica?

O modelo é treinado nos padrões de alto volume que escapam das listas de bloqueio:

  • Spam promocional e publicidade não solicitada
  • Mensagens de golpe e phishing
  • Conteúdo gerado por bots e copiado/colado

Ele retorna um único label (como spam ou ham) e uma pontuação de confidence, para que você possa decidir o nível de rigor.

Como faço uma verificação de spam?

curl -X POST https://api.discuse.com/api/v2/check \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "content": {
      "text": "CONGRATULATIONS! You won $10,000! Click here to claim: bit.ly/fake"
    },
    "settings": {
      "check_spam": true
    }
  }'

Formato da resposta

{
  "has_violations": true,
  "cached": false,
  "message": "Spam content detected",
  "results": {
    "hits": true,
    "spamfinder": {
      "text": "CONGRATULATIONS! You won $10,000! Click here to claim: bit.ly/fake",
      "label": "spam",
      "confidence": 0.97,
      "is_spam": true,
      "hit": true
    }
  },
  "usage": {
    "api_requests_used": 8,
    "api_requests_limit": 5000,
    "api_requests_remaining": 4992
  }
}

Quais campos o resultado de spam retorna?

Campo Tipo Significado
text string O texto que foi classificado
label string Classificação do modelo (ex.: spam, ham)
confidence number Confiança do modelo no rótulo (0.0–1.0)
is_spam bool Veredito bruto do modelo — label == spam, sem considerar o limite
hit bool Decisão que considera o limite — is_spam E confidence ≥ o limite de spam do seu projeto

is_spam vs hit

is_spam é o veredito bruto: o modelo rotulou o texto como spam independentemente do nível de confiança. hit também exige que a confiança ultrapasse o limite de spam configurado no seu projeto. Baseie ações de moderação em hit, não em is_spam, para que um rótulo de spam com baixa confiança não puna uma mensagem no limite.

Como interpreto a pontuação de confiança?

confidence reflete o grau de certeza do modelo em relação ao seu label:

  • 0.0 – 0.3: muito baixa — provavelmente legítimo.
  • 0.3 – 0.5: baixa — no limite.
  • 0.5 – 0.7: moderada — suspeito.
  • 0.7 – 0.9: alta — muito provavelmente spam.
  • 0.9 – 1.0: muito alta — quase certamente spam.

Limites recomendados

Defina o limite de spam do seu projeto de acordo com a tolerância da sua plataforma:

const SPAM_THRESHOLDS = {
  strict: 0.5,      // professional platforms, financial services
  standard: 0.7,    // social media, forums
  permissive: 0.85  // creative platforms, open communities
};

Casos de uso

Seções de comentários

async function moderateComment(comment) {
  const result = await checkSpam(comment.text);
  const spam = result.results.spamfinder;

  if (spam.hit) {
    if (spam.confidence > 0.9) {
      return { action: 'reject', reason: 'spam_detected' };
    }
    return { action: 'review', reason: 'possible_spam' };
  }
  return { action: 'approve' };
}

Cadastro de usuários

def validate_registration(user_data):
    bio = user_data.get('bio')
    if bio:
        result = check_spam(bio)
        if result['results']['spamfinder']['hit']:
            return {'approved': False, 'reason': 'Spam content detected in profile'}
    return {'approved': True}

Plataformas de mensagens

async function filterMessage(message, sender) {
  const result = await checkSpam(message.text);
  const spam = result.results.spamfinder;

  if (spam.hit) {
    await incrementSpamCount(sender.id);
    const spamCount = await getSpamCount(sender.id);
    if (spamCount > 3) {
      await banUser(sender.id, 'repeated_spam');
    }
    return { delivered: false, reason: 'Message filtered as spam' };
  }
  return { delivered: true };
}

Combinação com outras verificações

Execute a verificação de spam junto com sentimento e idioma em uma única solicitação:

{
  "content": {
    "text": "Check out this amazing deal! Click here: example.com/offer"
  },
  "settings": {
    "check_spam": true,
    "check_sentiment": true,
    "check_language": true
  }
}

A resposta então traz results.spamfinder, results.sentiment e results.language juntos.

Boas práticas

Use respostas graduais

Em vez de uma decisão binária de bloquear/permitir, ramifique com base na confiança:

function handleSpamResult(spam) {
  if (!spam.hit) return 'allow';
  if (spam.confidence > 0.95) return 'silent_delete';
  if (spam.confidence > 0.8)  return 'block_notify';
  if (spam.confidence > 0.6)  return 'flag_for_review';
  return 'apply_friction';
}

Acompanhe reincidentes

async function assessUser(userId, spam) {
  if (spam.hit) {
    await incrementUserSpamScore(userId, spam.confidence);
  }
  const userScore = await getUserSpamScore(userId);
  if (userScore > 10.0) await autoSuspendUser(userId);
  else if (userScore > 5.0) await flagForManualReview(userId);
}

Coloque usuários confiáveis na lista de permissões

Pule a verificação de spam para contas verificadas ou de alta confiança para reduzir falsos positivos e economizar cota:

function shouldCheckSpam(user) {
  if (user.isVerified) return false;
  if (user.trustScore > 0.9) return false;
  return true;
}

Limites de uso

A detecção de spam consome a sua cota de análise de sentimento:

Plano Análises mensais Observações
Basic 1,000 Inclui spam + sentimento
Gold 5,000 Inclui spam + sentimento
Platinum 15,000 Inclui spam + sentimento
Ultimate 30,000 Inclui spam + sentimento

Respostas em cache não contam contra a sua cota.

Exemplos de integração

Middleware Express.js

const spamFilter = async (req, res, next) => {
  if (req.body.text) {
    const result = await checkSpam(req.body.text);
    if (result.results.spamfinder.hit) {
      return res.status(400).json({
        error: 'spam_detected',
        message: 'Your message was flagged as spam'
      });
    }
  }
  next();
};

app.post('/api/comments', spamFilter, createComment);

Python Flask

from functools import wraps
from flask import request, jsonify

def spam_filter(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        text = request.json.get('text')
        if text:
            result = check_spam(text)
            if result['results']['spamfinder']['hit']:
                return jsonify({
                    'error': 'spam_detected',
                    'message': 'Your message was flagged as spam'
                }), 400
        return f(*args, **kwargs)
    return decorated

@app.route('/api/comments', methods=['POST'])
@spam_filter
def create_comment():
    pass

Próximos passos

Escrito por Equipe Discuse · Última atualização em June 2026

Artigos relacionados

Análise de texto e detecção de sentimento

Detecte spam, toxicidade, palavrões e analise o sentimento em conteúdo de texto

Detecção de NSFW em imagens

Detecte e filtre automaticamente imagens inadequadas e conteúdo adulto

Verificação antivírus de arquivos

Proteja sua plataforma contra malware, vírus e arquivos maliciosos