Skip to main content
Dokumentasi
Pusat Pembelajaran

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

Tautan Cepat

Panduan Mulai Cepat

Untuk memoderasi konten dengan Discuse, kirim POST ke https://api.discuse.com/api/v2/check dengan header X-API-Key dan body JSON yang berisi teks, URL gambar, atau URL file yang ingin Anda periksa. Respons akan mengembalikan rincian per kategori dan satu flag has_violations. Panduan ini akan memandu Anda melakukan panggilan pertama, memahami format respons, dan menangani error dasar — semuanya sekitar lima menit dari awal hingga selesai.

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

  1. Akun Discuse (daftar di discuse.com)
  2. API key dari dashboard Anda
  3. Alat untuk membuat permintaan HTTP (cURL, Postman, atau kode aplikasi Anda)

Langkah 1: Dapatkan API Key Anda

Setelah mendaftar, buka dashboard Anda dan temukan bagian API Keys. Klik "Create New Key" untuk membuat API key baru. Simpan key ini dengan aman - key ini memberikan akses ke akun dan kuota penggunaan Anda.

Setiap key Discuse diawali dengan prefiks disc_, misalnya:

disc_aB3dEf6GhIjKlMnOpQrStUvWxYz012345-_6789

Langkah 2: Buat Panggilan API Pertama Anda

Cara paling sederhana untuk menguji API adalah dengan permintaan analisis teks. Berikut contoh dasar menggunakan cURL:

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": "Hello, this is a test message to analyze!"
    }
  }'

Langkah 3: Pahami Responsnya

Permintaan yang berhasil akan mengembalikan respons JSON berisi hasil analisis:

{
  "has_violations": false,
  "cached": false,
  "results": {
    "hits": false,
    "sentiment": {
      "is_negative": false,
      "is_toxic": false,
      "score": 0.03,
      "toxic": 0.02,
      "profanity": 0.01,
      "threat": 0.00,
      "insult": 0.03,
      "hit": false
    },
    "spamfinder": {
      "label": "ham",
      "confidence": 0.08,
      "is_spam": false,
      "hit": false
    },
    "language": {
      "language": "en",
      "confidence": 0.98
    }
  },
  "usage": {
    "api_requests_used": 42,
    "api_requests_limit": 1000,
    "api_requests_remaining": 958
  }
}

processing_time_ms hanya disertakan saat pengukuran waktu diaktifkan di pengaturan proyek Anda, dan message hanya diisi pada respons ketika kuota terlampaui — jadi keduanya tidak ditampilkan dalam contoh di atas.

Penjelasan Field Respons

Field Deskripsi
has_violations Boolean: true jika ada pemeriksaan yang diaktifkan menandai konten (mencerminkan results.hits)
cached Apakah hasil ini disajikan dari cache (tetap dihitung sebagai satu permintaan terhadap kuota)
results.hits Flag hit keseluruhan di semua pemeriksaan
results.sentiment Skor toksisitas dari 0.0 (aman) hingga 1.0 (sangat toksik), beserta flag keputusan is_toxic/hit
results.spamfinder Keputusan spam: label, confidence, is_spam (mentah) dan hit (mempertimbangkan ambang batas)
results.language Kode language yang terdeteksi dan confidence
usage Jumlah permintaan API, batas, dan sisa kuota Anda untuk periode penagihan saat ini

Langkah 4: Analisis Gambar

Untuk memeriksa gambar terkait konten NSFW, sertakan URL gambar dalam permintaan Anda:

curl -X POST https://api.discuse.com/api/v2/check \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "content": {
      "image_urls": ["https://example.com/image.jpg"]
    },
    "settings": {
      "check_images": true
    }
  }'

Langkah 5: Gabungkan Beberapa Pemeriksaan

Anda dapat menganalisis teks dan gambar sekaligus dalam satu permintaan:

{
  "content": {
    "text": "Check out this amazing photo!",
    "image_urls": ["https://example.com/photo.jpg"]
  },
  "settings": {
    "check_sentiment": true,
    "check_spam": true,
    "check_images": true,
    "check_language": true
  }
}

Contoh Integrasi

JavaScript/Node.js

async function checkContent(text) {
  const response = await fetch('https://api.discuse.com/api/v2/check', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.DISCUSE_API_KEY
    },
    body: JSON.stringify({
      content: { text }
    })
  });

  return response.json();
}

// Usage
const result = await checkContent('Hello world!');
if (result.has_violations) {
  console.log('Content flagged:', result.message);
}

Python

import requests
import os

def check_content(text):
    response = requests.post(
        'https://api.discuse.com/api/v2/check',
        headers={
            'Content-Type': 'application/json',
            'X-API-Key': os.environ['DISCUSE_API_KEY']
        },
        json={
            'content': {'text': text}
        }
    )
    return response.json()

# Usage
result = check_content('Hello world!')
if result['has_violations']:
    print(f"Content flagged: {result['message']}")

Apakah caching dihitung terhadap kuota saya?

Discuse menyimpan hasil dalam cache untuk konten yang identik selama beberapa menit. Saat respons kembali dengan "cached": true, hasil tersebut disajikan dari cache, sehingga respons lebih cepat dan pemeriksaan tidak dijalankan ulang. Permintaan tetap dihitung sebagai satu permintaan API terhadap kuota Anda, tetapi Anda tidak ditagih ulang untuk pemindaian per fitur yang mendasarinya (gambar, antivirus). Caching terutama membantu ketika konten yang sama dikirim berulang kali dalam rentang waktu singkat.

Bagaimana cara menangani error?

Pemeriksaan yang berhasil mengembalikan HTTP 200. Key yang gagal, batas laju, atau permintaan yang tidak valid akan mengembalikan status non-2xx. Perhatikan bahwa habisnya kuota bukanlah error HTTP: ketika kuota periode penagihan Anda habis, API tetap mengembalikan 200 dengan has_violations: false dan message yang menjelaskan bahwa kuota telah terlampaui — periksa field message dan usage, jangan hanya mengandalkan kode status.

try {
  const response = await fetch('https://api.discuse.com/api/v2/check', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': apiKey
    },
    body: JSON.stringify({ content: { text } })
  });

  if (!response.ok) {
    if (response.status === 401 || response.status === 403) {
      throw new Error('Invalid or unauthorized API key');
    } else if (response.status === 429) {
      throw new Error('Rate limit exceeded - slow down requests');
    }
    throw new Error(`API error: ${response.status}`);
  }

  const result = await response.json();

  // Quota exhaustion is returned as a 200 with a message, not an error status.
  if (result.message && result.usage && result.usage.api_requests_remaining === 0) {
    console.warn('Quota exceeded:', result.message);
  }

  return result;
} catch (error) {
  console.error('Content check failed:', error);
  throw error;
}

Langkah Berikutnya

Sekarang setelah Anda membuat panggilan API pertama, jelajahi sumber daya berikut:

Ditulis oleh Tim Discuse · Terakhir diperbarui June 2026

Artikel Terkait

Apa Itu Moderasi Konten?

Memahami dasar-dasar moderasi konten dan mengapa hal ini penting untuk platform Anda

Autentikasi dan Kunci API

Cara mengautentikasi permintaan dan mengelola kunci API Anda dengan aman

Kode Error dan Respons

Status HTTP, respons quota-exhausted 200, dan cara menangani error API dengan benar