İçerik moderasyon API’si nasıl entegre edilir?
Bir moderasyon API’sini sisteminize bağlamak tek bir istekle başlar. Asıl iş, sonucu nerede bekleyeceğinize, içeriği nasıl göndereceğinize ve kararı kimin vereceğine karar vermektir. Bu rehber adımları Detectivision API’siyle anlatır.
Kısa cevap
Bir içerik moderasyon API’sini mevcut sisteminize hızlıca bağlamak için beş kararı önceden verin: hangi anahtarı ve izni kullanacağınızı, içeriği yayından önce mi sonra mı denetleyeceğinizi, sonucu anında mı yoksa webhook ile mi alacağınızı, görseli dosya, base64 ya da bağlantı olarak mı göndereceğinizi ve bayrak kalkınca kararı kimin vereceğini. Detectivision’da bunların her biri tek bir alanla seçilir; aşağıdaki adımlar sırayla gider.
1. Anahtar: hangi izinle?
Her istek Api-Key başlığında bir API anahtarı taşır ve yalnızca HTTPS ile çağrılır. Anahtarları panelin API Keys ekranında oluşturursunuz. Anahtarın tamamı yalnızca oluşturulduğu anda gösterilir; o anda saklayın.
| İzin | Ne yapabilir |
|---|---|
read | Yalnızca okuma: bir isteği geri okumak, bayrakları listelemek. Kontrol çalıştıramaz. |
write | Her şey: kontrol çalıştırmak, aksiyon almak, canlı yayın oturumu başlatıp durdurmak ve okumak. |
restricted | Hiçbir şey. Bir anahtarı silmeden durdurmak için kullanılır. |
Bir anahtara son kullanma tarihi de verebilirsiniz. Anahtarı sunucunuzda tutun; tarayıcıya ya da mobil uygulamanın içine koymayın.
2. İlk istek nasıl görünür?
Bir yorumu denetlemek için tek bir çağrı yeter:
curl https://api.detectivision.ai/api/v1/moderation \
-H "Api-Key: $DETECTIVISION_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "text_moderation",
"input": "Satıcı tam bir salak, ürün iki haftadır gelmedi.",
"mode": "detect",
"metadata": { "commentId": "c_981" }
}'
Cevapta flagged, en az bir bayrak kalktığında true olur. flags kalkan bayrakları güven puanlarıyla, checked bakılan bayrakları, usage harcanan ve kalan krediyi verir. metadata alanına koyduğunuz yorum ya da kullanıcı numarası (en çok 16 KB) cevapta, panelde ve her webhook’ta değişmeden geri gelir; sonucu kendi kaydınıza böyle bağlarsınız.
3. Sonucu anında mı, arka planda mı almalı?
İki yol var ve ikisi aynı API’dedir:
- Anında cevap (varsayılan). İstek, kontrol bitene kadar bekler ve sonucu döner. Profil fotoğrafı gibi gösterilmeden önce karar gereken içerik için kullanın.
- Arka planda (
"async": true). API hemen202ve isteğin numarasıyla cevap verir; kontrol kısa süre sonra yapılır ve sonuç webhook ile gelir. Arka planda yapılan kontrol, anında cevabın yarı fiyatınadır. Sohbet mesajları, yorumlar ve toplu yüklemeler için uygundur.
Bir hesapta aynı anda en çok 50 arka plan kontrolü bekleyebilir; fazlası 429 ve Retry-After başlığıyla geri döner, sonuç geldikçe yenisini gönderin. Webhook kurmadan da sonucu GET /api/v1/moderation/{id} ile sorgulayabilirsiniz.
4. Webhook’ları nasıl güvenle alırım?
Panelin Webhooks ekranında bir adres ekler ve hangi olayları alacağınızı seçersiniz. Her olay, adresin gizli anahtarıyla imzalanmış bir HTTPS POST olarak gelir; mesajlar Standard Webhooks belirtimine uyar, bu yüzden onun kütüphaneleriyle doğrulanabilir.
| Olay | Ne zaman gelir |
|---|---|
moderation.completed | Bir kontrol bitti (completed ya da partial). |
moderation.flagged | Bir kontrol bitti ve en az bir bayrak kaldırdı. |
moderation.failed | Bir arka plan kontrolü sonuçsuz bitti; başarısız kontrol ücretsizdir. |
moderation.action | Bir moderatör ya da sisteminiz bir isteğe aksiyon aldı. |
Her mesajın webhook-id başlığı denemeden denemeye değişmez: bir mesajı yalnızca bir kez işlemek için bunu kullanın. webhook-signature başlığındaki HMAC-SHA256 imzayı, JSON’u ayrıştırmadan önce ham gövde üzerinde doğrulayın. Beş gün boyunca her denemede başarısız olan bir adres kapanır; panelden yeniden açabilirsiniz.
5. Görseli nasıl göndermeli: dosya, base64 ya da bağlantı?
| Yol | Nasıl | Ne zaman |
|---|---|---|
| Bağlantı | input alanında, oturum açmadan erişilebilen bir http ya da https adresi; imzalı bağlantılar geçerli oldukları sürece çalışır | Görsel zaten bir depolamadaysa |
| Dosya | multipart/form-data gövdesinin file alanında | Görsel sunucunuzda ve bir bağlantısı yoksa |
| Base64 | input alanında data:image/jpeg;base64,… biçiminde | İstemciniz yalnızca JSON gönderebiliyorsa; gövde üçte bir büyür |
Görsel en çok 10 MB, 40 megapiksel ve kenarı 10.000 pikseldir; JPEG, PNG, WebP, BMP ve GIF kabul edilir. Video dosya olarak en çok 20 MB, bağlantıyla en çok 100 MB gider. Metin 1 ile 10.000 karakter arasıdır. Görsel indirilir, denetlenir ve saklanmaz; arka plan isteğinin görseli yalnızca kontrolü yapılana kadar bekler.
6. Bayrak kalkınca kararı kim verir?
Detectivision her içeriği bayraklarıyla cevaplar; yayınlamak, bekletmek ya da silmek, kurallarınıza göre sisteminizde uygulanır. Akışı şöyle kurun:
- Kuralı koyun. Bir bayrak 0,5 güven puanından itibaren kalkar. İşe
flaggedve bayrak adlarıyla başlayın; gerekirse her bayrak için kendi çizginizi çekin, örneğin belirsiz sonuçları bir insana gönderin. - Bilinmeyeni temiz saymayın.
uncheckeddoluysa o bayraklara o anda bakılamamıştır: sonuçpartialolur ve ücret alınmaz. Bu bayrakları bilinmiyor sayın, kontrolü sonra tekrarlayın. - Moderatörler panelden devralsın. Panelin Logs ekranı ücretlendirilen kontrolleri ve bekleyen arka plan isteklerini listeler; bir moderatör bir kontrolü açınca bayraklarını, metadata’nızı ve aksiyonlarınızı görür, her aksiyon mesajının sisteminize ulaşıp ulaşmadığını da orada izler. Onayla ya da Engelle gibi kendi aksiyonlarınızı tanımlarsınız; bir moderatör birini seçince sisteminize
moderation.actionwebhook’u gider ve işlemi sisteminiz yapar. - Ya da kendi panelinizden. Aksiyonları yazma izni olan bir anahtarla
POST /api/v1/moderation/{id}/actionsçağrısıyla da alabilirsiniz.
7. Kodu yazmadan önce Playground’da deneyin
Panelin Playground ekranında kendi metninizi, görselinizi, videonuzu ya da canlı yayınınızı denetleyip sonucu görürsünüz. Hesabınızın bayrakları her tür için orada listelenir; seçtiğiniz bayraklar Code görünümündeki isteğe flags olarak girer ve gösterilen fiyat onlara göre değişir. Video ve Live Stream sekmelerinde takip (Tracking) anahtarını da açabilirsiniz. Playground’daki kontroller de moderation.completed webhook’unu tetikler (source: playground), böylece webhook adresinizi gerçek bir istek yazmadan deneyebilirsiniz.
8. Hangi limitlere ve hatalara hazırlanmalı?
- Dakikalık limit. Bir anahtarla ve bir adresten dakikada en çok 1.200 çağrı.
- Kredi biterse. Bir türün bakiyesi kontrolün fiyatından azsa API
400 insufficient_quotadöner; hiçbir şey ücretlendirilmez. Her cevaptakiusage.remainingile bakiyeyi izleyin. - Büyük dosya. 10 MB’ı aşan görsel ya da 20 MB’ı aşan video dosyası
413 payload_too_largealır; büyük videoyu bağlantıyla gönderin. - Yanlış bayrak. Hesabınızda olmayan bir bayrak
400 invalid_flagsile, ücret alınmadan reddedilir.
9. Maliyet nasıl hesaplanır?
Her içerik türünün ayrı kredisi vardır ve bir kontrol kendi türünün kredisini kullanır. Sonuç webhook ile gelirse metin başlayan her 2.500 karakter için bir kredi, görsel bir kredi, video ise denetlenen karelerin başlayan her 60’ı için bir kredi kullanır; anında cevap bunun iki katıdır. Hatalar ve kısmi sonuçlar ücretsizdir. Basic planla 10.000 metin, 10.000 görsel ve 300 video kredisi gelir ve plan iki ay ücretsizdir. Planlar ve fiyatlar fiyatlandırma sayfasında (İngilizce).
Canlı yayınlar oturumla denetlenir ve dakika üzerinden ödenir; ayrıntılar canlı yayın moderasyonu sayfasında.
10. Kodlama asistanıyla bağlamak
Bir kodlama asistanıyla çalışıyorsanız API’nin OpenAPI 3.1 tanımı /openapi.json adresindedir; asistanınız uç noktaları, alanları ve hataları oradan okuyabilir. Adım adım kurulum için hızlı başlangıç dokümanı (İngilizce) ilk istekten webhook’a kadar gider.
Sık sorulanlar
Webhook kurmadan sonuç alabilir miyim?
Evet. Arka planda gönderdiğiniz bir isteği GET /api/v1/moderation/{id} ile sorgulayın: istek beklerken queued, denetlenirken processing döner, bitince cevabın kendisini verir. Birkaç saniyede bir sorgulamak yeter; çok sayıda istekte webhook daha iyi bir yoldur.
Birden fazla içeriği nasıl gönderirim?
Her içerik ayrı bir istektir: bir metin, bir görsel ya da bir video. Bir ilanın fotoğraflarını ve metnini aynı anda ayrı istekler olarak gönderin, hepsine aynı numarayı metadata ile koyun ve sonuçları bu numarayla birleştirin.
Bayrak listesini koda yazmalı mıyım?
Hayır. GET /api/v1/flags hesabınızın gönderebileceği bayrakları listeler; uygulamanız açılırken okuyun. Listede olmayan bir bayrak, ücret alınmadan 400 invalid_flags ile reddedilir.
API anahtarım sızarsa ne yapmalıyım?
Panelden o anahtarı silin ve yenisini oluşturun. Bir anahtarı silmeden durdurmak için iznini restricted yapabilirsiniz; o anahtarla gelen her istek reddedilir.
Hangi dilleri destekliyor?
Metin moderasyonu İngilizce, İspanyolca, Portekizce, Fransızca, Almanca, İtalyanca, Türkçe, Arapça, Rusça, Hintçe, Çince ve Japoncada çalışır.
Kendi sunucularımızda çalıştırabilir miyiz?
Enterprise planda evet: kendi donanımınızda kurulum, görsel ve video için özel model eğitimi, canlı yayın için özel modeller ve size göre fiyat. Ayrıntılar için fiyatlandırma sayfasındaki iletişim adresinden bize yazın.
Yorum, sohbet mesajı, ilan metni ve kullanıcı adlarını sekiz bayrakla denetleyin: küfür, hakaret, nefret söylemi, ırkçılık, cinsiyetçilik ve daha fazlası.
İlan fotoğrafı, başlık, açıklama, yorum ve mesajları tek API ile denetleyin: cinsel içerik, şiddet, nefret, dolandırıcılık görselleri, küfür ve hakaret.
Flört uygulamanızda profil fotoğraflarını, biyografileri ve sohbet mesajlarını tek API ile denetleyin: çıplaklık, taciz, nefret ve dolandırıcılık, 12 dilde.
Canlı yayınları ve kameraları yayın sürerken denetleyin: RTSP, RTMP, HLS, SRT ya da kamera kareleri; görüntü ve konuşma bayraklarınıza göre denetlenir.
Get started with the Detectivision content moderation API: create an API key, run your first image moderation check and read its result in minutes.