Lewati ke konten utama

API Proyek

Buat dan kelola proyek pemantauan, periksa jumlah konten yang terkumpul, dan hasilkan ringkasan.

Path dasar: /api/project

Semua endpoint memerlukan:

Authorization: Bearer <access_token>

Penamaan identifier dan kolom

API menggunakan gaya penulisan yang berbeda antara permintaan dan respons:

  • permintaan pembuatan: categoryId, startDate, endDate;
  • respons proyek: categoryid, start_date, end_date, updatedAt;
  • API terkait: keyword_id, keywordId, dan keywordID.

Ringkasan endpoint

MetodePathTujuan
GET/api/projectMenampilkan daftar proyek
POST/api/projectMembuat proyek
DELETE/api/project?id=<id>Menghapus proyek
GET/api/project/content-count?id=<id>Menghitung konten yang terkumpul
PATCH/api/project/listen-statusMengaktifkan atau menonaktifkan listening
POST/api/project/generate-summary/{keywordID}Menghasilkan ringkasan AI
GET/api/project/summary/{keywordID}Mengambil ringkasan yang tersimpan

Menampilkan daftar proyek

GET /api/project

Kembalikan daftar proyek dengan pagination berbasis halaman.

Parameter query:

ParameterTipeWajibDefaultDeskripsi
pageintegerTidak1Nomor halaman
limitintegerTidak10Jumlah item per halaman; batas maksimum 100

Respons berhasil — 200 OK:

{
"data": [
{
"id": "project_id",
"group": "Acme July Monitoring",
"keyword": "acme",
"exclude": "",
"islisten": 1,
"updatedAt": "2026-07-20T08:35:00Z",
"categoryid": "umum",
"start_date": "2026-07-01",
"end_date": "2026-07-31",
"type": "manual"
}
],
"total": 1,
"page": 1,
"limit": 10,
"totalPages": 1
}

Respons lainnya: 500 untuk error internal server.

curl \
"$SOCIOVITE_API_URL/api/project?page=1&limit=10" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>'

Membuat proyek

POST /api/project

Buat satu proyek pemantauan.

Body permintaan: application/json

KolomTipeWajibBatasan
groupstringYa2–100 karakter
keywordstringYa2–255 karakter
categoryIdstringYaLihat nilai yang diizinkan di bawah
startDatestringYaSwagger tidak mendefinisikan format tanggal
endDatestringTidakTanggal akhir opsional; Swagger tidak mendefinisikan format tanggal
typestringYamanual atau auto
excludestringTidakMaksimal 1.000 karakter
Format penulisan keyword

Field keyword dapat menggunakan operator and dan or. Contoh format yang dapat digunakan:

  • kopi and kapal api
  • kopi or kapal api
  • kopi and kapal api or kopi kapal api

Pertahankan penulisan operator sesuai contoh agar ekspresi keyword dapat diproses dengan benar.

Nilai categoryId yang diizinkan dan tercantum dalam deskripsi operasi:

sosial-budaya
ideologi
politik
ekonomi
pertahanan-keamanan
semua
umum
olahraga
sosial
budaya
teknologi
hiburan
kesehatan
pendidikan
agama

Contoh permintaan:

{
"categoryId": "umum",
"endDate": "2026-07-31",
"exclude": "acme university",
"group": "Acme July Monitoring",
"keyword": "acme",
"startDate": "2026-07-01",
"type": "manual"
}

endDate bersifat opsional:

  • Jika endDate tidak dikirim atau bernilai null, proses scraping akan terus berjalan selama proyek masih aktif.
  • Jika endDate diisi, proses scraping akan berhenti setelah mencapai tanggal yang ditentukan.

Tanggal dalam contoh ini menggunakan format YYYY-MM-DD.

Respons berhasil — 201 Created:

{
"message": "Group successfully added",
"data": {
"id": "project_id",
"group": "Acme July Monitoring",
"keyword": "acme",
"exclude": "acme university",
"islisten": 0,
"updatedAt": "2026-07-20T08:35:00Z",
"categoryid": "umum",
"start_date": "2026-07-01",
"end_date": "2026-07-31",
"type": "manual"
}
}

Simpan data.id. Endpoint pengelolaan proyek menerimanya sebagai id; alur aplikasi saat ini juga menggunakannya untuk parameter yang dinamai sebagai ID keyword, dengan memperhatikan catatan identifier di atas.

Respons lainnya:

StatusArti
400Body permintaan tidak valid atau kolom wajib tidak lengkap
500Error internal server
curl -X POST \
"$SOCIOVITE_API_URL/api/project" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>' \
-H 'Content-Type: application/json' \
-d '{
"categoryId": "umum",
"endDate": "2026-07-31",
"exclude": "acme university",
"group": "Acme July Monitoring",
"keyword": "acme",
"startDate": "2026-07-01",
"type": "manual"
}'

Menghapus proyek

DELETE /api/project

Hapus proyek berdasarkan ID.

Parameter query:

ParameterTipeWajib
idstringYa

Respons berhasil — 200 OK:

{
"message": "Project deleted successfully"
}

Respons lainnya:

StatusArti
400id wajib tidak diberikan
401Autentikasi pengguna diperlukan
404Proyek tidak ditemukan
500Error internal server
curl -X DELETE \
"$SOCIOVITE_API_URL/api/project?id=project_id" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>'

Mengambil jumlah konten

GET /api/project/content-count

Hitung konten yang terkumpul untuk suatu proyek, dengan filter sumber media sosial opsional.

Parameter query:

ParameterTipeWajibDeskripsi
idstringYaID proyek
sosmedIdstringTidakID sumber media sosial

Nilai sosmedId yang didukung:

  • twitter
  • facebook
  • youtube
  • tiktok
  • instagram
  • news

Respons berhasil — 200 OK:

{
"data": 4
}

Respons lainnya:

StatusArti
400id wajib diberikan
404Proyek tidak ditemukan
500Error internal server
curl \
"$SOCIOVITE_API_URL/api/project/content-count?id=project_id&sosmedId=social_media_id" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>'

Memperbarui status listening

PATCH /api/project/listen-status

Aktifkan atau nonaktifkan listening untuk suatu proyek.

Body permintaan: application/json

KolomTipeWajibBatasan
idstringYaMaksimal 100 karakter
islistenintegerYa1 untuk listening, 0 untuk tidak listening
{
"id": "project_id",
"islisten": 1
}

Respons berhasil — 200 OK:

{
"id": "project_id",
"group": "Acme July Monitoring",
"keyword": "acme",
"exclude": "",
"islisten": 1,
"updatedAt": "2026-07-20T08:35:00Z",
"categoryid": "umum",
"start_date": "2026-07-01",
"end_date": "2026-07-31",
"type": "manual"
}

Respons lainnya:

StatusArti
400Parameter tidak valid atau tidak diberikan
404Grup yang dituju tidak ditemukan
500Error internal server
curl -X PATCH \
"$SOCIOVITE_API_URL/api/project/listen-status" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>' \
-H 'Content-Type: application/json' \
-d '{
"id": "project_id",
"islisten": 1
}'

Menghasilkan ringkasan

POST /api/project/generate-summary/{keywordID}

Minta layanan AI menghasilkan ringkasan untuk sebuah ID keyword.

Parameter path:

ParameterTipeWajib
keywordIDstringYa

Body permintaan: Tidak ada

Respons berhasil — 200 OK:

{
"status": "success",
"keyword_id": "keyword_id",
"result": {
"summary": "Summary of the collected mentions.",
"metrics": {
"sentiment_distribution": {
"negative": 2,
"neutral": 4,
"positive": 8
}
}
}
}

Key di dalam sentiment_distribution berupa string dinamis dengan jumlah bertipe integer.

Respons lainnya:

StatusArti
400ID keyword tidak diberikan
500Error internal server
curl -X POST \
"$SOCIOVITE_API_URL/api/project/generate-summary/keyword_id" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>'

Mengambil ringkasan

GET /api/project/summary/{keywordID}

Ambil ringkasan yang sebelumnya telah dihasilkan.

Parameter path:

ParameterTipeWajib
keywordIDstringYa

Respons berhasil — 200 OK:

{
"id": "summary_id",
"ai_summary": "Summary of the collected mentions.",
"sentiment_distribution": "{\"neutral\":4,\"negative\":2,\"positive\":8}",
"created_at": "2026-07-20T09:00:00Z",
"keyword_id": "keyword_id"
}

Respons lainnya:

StatusArti
400ID keyword tidak diberikan
404Ringkasan tidak ditemukan
500Error internal server
curl \
"$SOCIOVITE_API_URL/api/project/summary/keyword_id" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>'

Bentuk respons error

Error proyek menggunakan model bersama:

{
"success": false,
"error": "Invalid request",
"message": "A required parameter is missing"
}