Spam Tespiti
Discuse spam tespiti, metni bir güven skoru ile spam ya da spam değil şeklinde sınıflandırır. Metni check_spam etkinleştirilmiş olarak POST https://api.discuse.com/api/v2/check adresine gönderin ve sonucu results.spamfinder içinden okuyun. Basit anahtar kelime filtrelerinin kaçırdığı tanıtım amaçlı spamleri, dolandırıcılık girişimlerini ve bot kaynaklı gürültüyü yakalar.
Spam tespiti neleri yakalar?
Model, engelleme listelerini aşan yüksek hacimli kalıplar üzerinde eğitilmiştir:
- Tanıtım amaçlı spam ve istenmeyen reklamlar
- Dolandırıcılık ve kimlik avı mesajları
- Bot tarafından üretilmiş ve kopyala-yapıştır içerikler
Tek bir label (spam veya ham gibi) ve bir confidence skoru döndürür; böylece ne kadar katı davranacağınıza siz karar verebilirsiniz.
Spam kontrolünü nasıl çalıştırırım?
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
}
}'
Yanıt formatı
{
"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
}
}
Spam sonucu hangi alanları döndürür?
| Alan | Tür | Anlamı |
|---|---|---|
text |
string | Sınıflandırılan metin |
label |
string | Model sınıflandırması (örn. spam, ham) |
confidence |
number | Modelin etikete duyduğu güven (0.0–1.0) |
is_spam |
bool | Ham model kararı — label == spam, eşikten bağımsız |
hit |
bool | Eşiğe duyarlı karar — is_spam VE confidence ≥ projenizin spam eşiği |
is_spam ve hit farkı
is_spam ham karardır: model, ne kadar emin olduğundan bağımsız olarak metni spam şeklinde etiketlemiştir. hit ise buna ek olarak güven skorunun projeniz için yapılandırılmış spam eşiğini aşmasını gerektirir. Moderasyon eylemlerini is_spam yerine hit üzerine kurun; böylece düşük güvenli bir spam etiketi, sınırda kalan bir mesajın cezalandırılmasına yol açmaz.
Güven skorunu nasıl yorumlamalıyım?
confidence, modelin label konusunda ne kadar emin olduğunu gösterir:
- 0.0 – 0.3: çok düşük — büyük olasılıkla meşru.
- 0.3 – 0.5: düşük — sınırda.
- 0.5 – 0.7: orta — şüpheli.
- 0.7 – 0.9: yüksek — büyük olasılıkla spam.
- 0.9 – 1.0: çok yüksek — neredeyse kesinlikle spam.
Önerilen eşikler
Projenizin spam eşiğini, platformunuzun toleransına göre belirleyin:
const SPAM_THRESHOLDS = {
strict: 0.5, // professional platforms, financial services
standard: 0.7, // social media, forums
permissive: 0.85 // creative platforms, open communities
};
Kullanım alanları
Yorum bölümleri
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' };
}
Kullanıcı kaydı
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}
Mesajlaşma platformları
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 };
}
Diğer kontrollerle birlikte kullanma
Spam kontrolünü duygu analizi ve dil tespitiyle birlikte tek bir istekte çalıştırın:
{
"content": {
"text": "Check out this amazing deal! Click here: example.com/offer"
},
"settings": {
"check_spam": true,
"check_sentiment": true,
"check_language": true
}
}
Yanıt, results.spamfinder, results.sentiment ve results.language değerlerini birlikte içerir.
En iyi uygulamalar
Kademeli yanıtlar kullanın
İkili engelle/izin ver yaklaşımı yerine güven skoruna göre dallanın:
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';
}
Tekrarlayan ihlalcileri takip edin
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);
}
Güvenilir kullanıcıları beyaz listeye alın
Yanlış pozitifleri azaltmak ve kotadan tasarruf etmek için doğrulanmış veya yüksek güvenilirliğe sahip hesaplarda spam kontrolünü atlayın:
function shouldCheckSpam(user) {
if (user.isVerified) return false;
if (user.trustScore > 0.9) return false;
return true;
}
Kullanım limitleri
Spam tespiti, duygu analizi kotanızdan kullanılır:
| Plan | Aylık Analiz | Notlar |
|---|---|---|
| Basic | 1,000 | Spam + duygu analizini içerir |
| Gold | 5,000 | Spam + duygu analizini içerir |
| Platinum | 15,000 | Spam + duygu analizini içerir |
| Ultimate | 30,000 | Spam + duygu analizini içerir |
Önbelleğe alınmış yanıtlar kotanızdan düşmez.
Entegrasyon örnekleri
Express.js middleware
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
Sonraki adımlar
- Metin Analizi - spam kontrolünü duygu skorlama ile birleştirin
- Dil Tespiti - içerik dilini tespit edin ve zorunlu tutun
- Hızlı Başlangıç Kılavuzu - ilk API anahtarınızı alın