Skip to main content
Documentation
Centre d’apprentissage

Maîtrisez la modération de contenu grâce à des guides complets, des tutoriels et une documentation API

Liens rapides

Détection du spam

La détection du spam de Discuse classe un texte comme spam ou non, avec un score de confiance. Envoyez le texte à POST https://api.discuse.com/api/v2/check avec check_spam activé, puis récupérez le verdict dans results.spamfinder. Elle repère les spams promotionnels, les arnaques et le bruit généré par des bots que les simples filtres par mots-clés laissent passer.

Que détecte la détection du spam ?

Le modèle est entraîné sur les schémas à fort volume qui échappent aux listes de blocage :

  • Spam promotionnel et publicité non sollicitée
  • Messages d’arnaque et de phishing
  • Contenus générés par des bots et copiés-collés

Il renvoie un seul label (comme spam ou ham) ainsi qu’un score de confidence, afin que vous puissiez choisir le niveau de sévérité approprié.

Comment lancer une vérification 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
    }
  }'

Format de réponse

{
  "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
  }
}

Quels champs le résultat de spam renvoie-t-il ?

Champ Type Signification
text string Le texte qui a été classé
label string Classification du modèle (par ex. spam, ham)
confidence number Confiance du modèle dans le libellé (0,0–1,0)
is_spam bool Verdict brut du modèle — label == spam, sans tenir compte du seuil
hit bool Décision tenant compte du seuil — is_spam ET confidence ≥ le seuil de spam de votre projet

is_spam vs hit

is_spam correspond au verdict brut : le modèle a étiqueté le texte comme spam, quel que soit son niveau de confiance. hit exige en plus que la confiance dépasse le seuil de spam configuré pour votre projet. Déclenchez les actions de modération sur hit, et non sur is_spam, afin qu’un libellé spam à faible confiance ne pénalise pas un message limite.

Comment interpréter le score de confiance ?

confidence indique le degré de certitude du modèle concernant son label :

  • 0,0 – 0,3 : très faible — probablement légitime.
  • 0,3 – 0,5 : faible — limite.
  • 0,5 – 0,7 : modéré — suspect.
  • 0,7 – 0,9 : élevé — très probablement du spam.
  • 0,9 – 1,0 : très élevé — presque certainement du spam.

Seuils recommandés

Définissez le seuil de spam de votre projet en fonction de la tolérance de votre plateforme :

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

Cas d’utilisation

Sections de commentaires

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' };
}

Inscription des utilisateurs

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}

Plateformes de messagerie

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 };
}

Combiner avec d’autres vérifications

Exécutez la détection du spam avec l’analyse de sentiment et la détection de langue dans une seule requête :

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

La réponse contient alors results.spamfinder, results.sentiment et results.language ensemble.

Bonnes pratiques

Utilisez des réponses graduées

Au lieu d’un blocage/autorisation binaire, adaptez l’action selon la confiance :

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';
}

Suivez les récidivistes

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);
}

Mettez en liste blanche les utilisateurs de confiance

Ignorez la vérification de spam pour les comptes vérifiés ou à haut niveau de confiance afin de réduire les faux positifs et d’économiser votre quota :

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

Limites d’utilisation

La détection du spam consomme votre quota d’analyse de sentiment :

Offre Analyses mensuelles Notes
Basic 1 000 Inclut spam + sentiment
Gold 5 000 Inclut spam + sentiment
Platinum 15 000 Inclut spam + sentiment
Ultimate 30 000 Inclut spam + sentiment

Les réponses mises en cache ne sont pas décomptées de votre quota.

Exemples d’intégration

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

Prochaines étapes

Rédigé par Équipe Discuse · Dernière mise à jour June 2026

Articles associés

Analyse de texte et détection du sentiment

Détectez le spam, la toxicité, les grossièretés et analysez le sentiment dans le contenu textuel

Détection NSFW des images

Détectez et filtrez automatiquement les images inappropriées et le contenu pour adultes

Analyse antivirus des fichiers

Protégez votre plateforme contre les malwares, les virus et les fichiers malveillants