Skip to main content
Dokumentasi
Pusat Pembelajaran

Kuasai moderasi konten dengan panduan lengkap, tutorial, dan dokumentasi API

Tautan Cepat

Deteksi Spam

Deteksi spam Discuse mengklasifikasikan teks sebagai spam atau bukan, disertai skor keyakinan. Kirim teks ke POST https://api.discuse.com/api/v2/check dengan check_spam diaktifkan, lalu baca hasilnya dari results.spamfinder. Fitur ini menangkap spam promosi, penipuan, dan gangguan buatan bot yang sering terlewat oleh filter kata kunci sederhana.

Apa saja yang dideteksi oleh deteksi spam?

Model ini dilatih pada pola bervolume tinggi yang mampu lolos dari daftar blokir:

  • Spam promosi dan iklan tanpa izin
  • Pesan penipuan dan phishing
  • Konten buatan bot serta konten salin-tempel

Fitur ini mengembalikan satu label (seperti spam atau ham) beserta skor confidence, sehingga Anda bisa menentukan seberapa ketat aturan yang ingin diterapkan.

Bagaimana cara menjalankan pemeriksaan 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 respons

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

Field apa saja yang dikembalikan oleh hasil spam?

Field Type Meaning
text string Teks yang diklasifikasikan
label string Klasifikasi model (mis. spam, ham)
confidence number Tingkat keyakinan model terhadap label (0.0–1.0)
is_spam bool Keputusan mentah model — label == spam, tanpa memperhitungkan ambang batas
hit bool Keputusan yang memperhitungkan ambang batas — is_spam DAN confidence ≥ ambang batas spam proyek Anda

is_spam vs hit

is_spam adalah keputusan mentah: model memberi label spam pada teks, terlepas dari seberapa yakin model tersebut. hit juga mensyaratkan confidence melewati ambang batas spam yang dikonfigurasi untuk proyek Anda. Gunakan hit sebagai dasar tindakan moderasi, bukan is_spam, agar label spam dengan confidence rendah tidak menghukum pesan yang masih berada di area abu-abu.

Bagaimana cara menafsirkan skor confidence?

confidence menunjukkan seberapa yakin model terhadap label yang diberikan:

  • 0.0 – 0.3: sangat rendah — kemungkinan besar sah.
  • 0.3 – 0.5: rendah — berada di batas abu-abu.
  • 0.5 – 0.7: sedang — mencurigakan.
  • 0.7 – 0.9: tinggi — sangat mungkin spam.
  • 0.9 – 1.0: sangat tinggi — hampir pasti spam.

Ambang batas yang direkomendasikan

Tetapkan ambang batas spam proyek Anda sesuai tingkat toleransi platform:

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

Kasus penggunaan

Kolom komentar

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

Pendaftaran pengguna

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}

Platform perpesanan

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

Menggabungkan dengan pemeriksaan lain

Jalankan pemeriksaan spam bersama sentimen dan bahasa dalam satu permintaan:

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

Responsnya kemudian memuat results.spamfinder, results.sentiment, dan results.language secara bersamaan.

Praktik terbaik

Gunakan respons bertingkat

Alih-alih hanya memblokir/mengizinkan secara biner, buat cabang berdasarkan confidence:

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

Lacak pelanggar berulang

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

Masukkan pengguna tepercaya ke whitelist

Lewati pemeriksaan spam untuk akun terverifikasi atau akun dengan tingkat kepercayaan tinggi guna mengurangi positif palsu dan menghemat kuota:

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

Batas penggunaan

Deteksi spam menggunakan kuota analisis sentimen Anda:

Plan Monthly Analyses Notes
Basic 1,000 Mencakup spam + sentimen
Gold 5,000 Mencakup spam + sentimen
Platinum 15,000 Mencakup spam + sentimen
Ultimate 30,000 Mencakup spam + sentimen

Respons yang di-cache tidak dihitung terhadap kuota Anda.

Contoh integrasi

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

Langkah berikutnya

Ditulis oleh Tim Discuse · Terakhir diperbarui June 2026

Artikel Terkait

Analisis Teks dan Deteksi Sentimen

Deteksi spam, toksisitas, kata-kata kasar, dan analisis sentimen dalam konten teks

Deteksi NSFW pada Gambar

Deteksi dan filter gambar tidak pantas serta konten dewasa secara otomatis

Pemindaian Antivirus File

Lindungi platform Anda dari malware, virus, dan file berbahaya