Integrasikan analisis kesantunan ke platform Anda
Satu endpoint JSON yang dapat dipanggil dari LMS (Moodle, Canvas, Google Classroom add-on), WordPress, chatbot, atau backend aplikasi sekolah.
Base URL: https://belajarsantun.id/api/v1
Model: setiap request dijalankan oleh ketiga model penelitian, 3 kelas (Tidak Santun · Netral · Santun). F1-macro pada 382 data uji berlabel manusia: XLM-RoBERTa 0,6556 · BERT multilingual 0,5644 · XLNet 0,6281.
Autentikasi
Daftar akun, verifikasi email, lalu buat API key di menu API Keys. Kirim key pada setiap request melalui header Authorization:
Authorization: Bearer 1|AbCdEf... Content-Type: application/json Accept: application/json
POST /analyze
Menganalisis satu teks (maks. 2.000 karakter). Umpan balik pedagogis disertakan secara default; kirim "include_feedback": false untuk respons ringkas.
POST /api/v1/analyze
{ "text": "Kak, boleh minta tolong jelasin lagi? Makasih ya 🙏" }
200 OK
{
"data": {
// --- label utama (model "primary_model", default XLM-RoBERTa) ---
"label_id": 2,
"label": "santun",
"label_name": "Santun",
"confidence": 0.9132,
"probabilities": { "tidak_santun": 0.0201, "netral": 0.0667, "santun": 0.9132 },
"primary_model": "xlmr",
"ambiguous": false, // true jika model utama ragu ATAU ketiga model tidak sepakat
"agreement": true, // ketiga model memberi label yang sama?
"votes": { "tidak_santun": 0, "netral": 0, "santun": 3 },
// --- hasil SETIAP model penelitian ---
"models": {
"xlmr": { "label": "santun", "confidence": 0.9132, "probabilities": {...},
"name": "XLM-RoBERTa", "checkpoint": "xlm-roberta-base", "f1_macro_gold": 0.6586 },
"bert": { "label": "santun", "confidence": 0.8410, ..., "name": "BERT multilingual" },
"xlnet": { "label": "santun", "confidence": 0.7795, ..., "name": "XLNet" }
},
"ensemble": { "label": "santun", "confidence": 0.8446, ..., "validated": false },
"feedback": { "title": "...", "message": "...", "tips": ["..."] }
},
"meta": {
"primary_model": "xlmr",
"models": { "xlmr": {...}, "bert": {...}, "xlnet": {...} },
"ensemble_validated": false,
"model_version": "2026.09-gold382",
"latency_ms": 118.4,
"model_latency_ms": { "xlmr": 44.1, "bert": 38.0, "xlnet": 36.3 },
"count": 1,
"disclaimer": "..."
}
}
Setiap request selalu diproses oleh ketiga model penelitian (BERT multilingual, XLM-RoBERTa, XLNet), dan hasil masing-masing dikembalikan di data.models. Field di level atas data berasal dari model utama agar integrasi sederhana (mis. moderasi komentar) cukup membaca data.label.
ambiguous: true berarti keyakinan model utama di bawah ambang (0.55) atau ketiga model tidak sepakat. Tampilkan hasil sebagai bahan diskusi, bukan keputusan otomatis. ensemble.validated: false berarti ensemble belum divalidasi pada set uji emas.
POST /analyze/batch
Hingga 50 teks per request. Cocok untuk memeriksa forum diskusi atau komentar secara massal. Setiap teks dihitung terhadap kuota harian.
POST /api/v1/analyze/batch
{ "texts": ["Makasih infonya!", "Dasar ga guna"], "include_feedback": false }
200 OK
{ "data": [ { "label": "santun", ... }, { "label": "tidak_santun", ... } ], "meta": { "count": 2, ... } }
Endpoint lain
| Endpoint | Auth | Keterangan |
|---|---|---|
GET /usage | Ya | Pemakaian hari ini, kuota, info key |
GET /guide | Tidak | Materi Belajar Santun (strategi, teknik, 6 prinsip, kuis) dalam JSON untuk LMS |
GET /labels | Tidak | Daftar label dan ID-nya |
GET /health | Tidak | Status layanan (200 / 503) |
Kode error & rate limit
| 401 | API key tidak ada, salah, atau kedaluwarsa |
| 403 | Email belum diverifikasi, key tanpa hak "analyze", atau akun ditangguhkan |
| 422 | Validasi gagal (teks kosong/terlalu panjang); detail di field "errors" |
| 429 | Melebihi 60 request/menit per key atau kuota 5.000 teks/hari per akun. Lihat header Retry-After |
| 503 | Layanan model sedang tidak tersedia, coba lagi dengan backoff |
Contoh kode
curl -X POST https://belajarsantun.id/api/v1/analyze \
-H "Authorization: Bearer $BERORNET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Makasih ya udah bantuin!"}'
Plugin WordPress
Plugin BerorNet Politeness menyediakan:
- Shortcode
[berornet_checker]: kotak cek kesantunan untuk halaman/artikel sekolah. - Moderasi komentar: komentar terdeteksi Tidak Santun otomatis ditahan untuk ditinjau admin.
- API key disimpan di server WordPress (disarankan via konstanta di
wp-config.php) dan tidak pernah dikirim ke browser.
Unggah folder berornet-politeness ke wp-content/plugins/, aktifkan, lalu isi pengaturan di Settings → BerorNet.
LMS / Moodle
Pola integrasi yang disarankan: backend LMS memanggil /analyze/batch saat posting forum dibuat (mis. lewat event observer \mod_forum\event\post_created di Moodle), menyimpan label, lalu menampilkan umpan balik ke siswa dan ringkasan ke guru. Jangan memanggil API langsung dari browser siswa.
Praktik aman
- Simpan API key sebagai secret di server (environment variable / secret manager), bukan di repositori atau JavaScript publik.
- Gunakan satu key per integrasi agar bisa dicabut terpisah; key memiliki masa berlaku.
- Hormati
429danRetry-After; gunakan exponential backoff untuk503. - Hasil adalah prediksi. Jangan gunakan sebagai satu-satunya dasar sanksi terhadap siswa.
- Jika key bocor, segera cabut di menu API Keys. Mengganti kata sandi juga mencabut semua key.