Penjelasan teknis di balik Semesta (Robot SID Core) Β· robot.product-sid.us/semesta
Terakhir diperbarui: 22 September 2026
Ringkas: Semesta adalah portal web untuk menjalankan otomasi SID Core (rename akun resign, buat/ubah role, voucher/diskon, export data, dll) tanpa lewat Telegram. Semua logic-nya bukan aplikasi baru β ini cuma "wajah kedua" dari kumpulan script sid-core-automation yang sama persis dipakai bot @sobatproductbot.
1. Apa itu Robot Semesta
Semesta (nama produk yang tampil di UI, judul tab browser: "Semesta β Robot SID Core") adalah web UI internal buat tim yang perlu menjalankan otomasi administratif ke core.sid.id β misalnya bersihkan akun karyawan resign, bikin/ubah role & permission, kelola voucher/diskon, atau export data (organisasi, role, program, lokasi belajar) ke Google Sheets β tanpa harus chat lewat bot Telegram.
Ini bukan sistem baru yang ditulis dari nol untuk web. Semesta cuma menambahkan lapisan UI browser di atas kumpulan script Node.js yang sudah ada (sid-core-automation), dengan safety rail (dry-run wajib, konfirmasi, riwayat) yang sama seperti versi bot.
2. Arsitektur β 2 pintu, 1 mesin
Ada dua "pintu masuk" berbeda ke mesin otomasi yang sama:
Tim yang biasa kerja lewat Telegram (mis. /resign, /role, /editrole)
π₯οΈ Web β Robot Semesta
robot.product-sid.us/semesta (repo sidops-web)
Tim yang gak pakai/gak mau Telegram, butuh tampilan lebih visual (console log, riwayat, banner env)
Keduanya cuma menjalankan file .js yang sama persis di folder /home/product/sid-core-automation (VPS Contabo) sebagai child process β bukan duplikasi logic. Kalau ada bug/perbaikan di script-nya, otomatis kepakai di kedua pintu.
53 script per September 2026 β resign, role (create/update/rename), voucher/diskon/campaign, program (peserta/PIC/kelompok), organisasi, platform, lokasi belajar, dll
Dependency inti:googleapis (baca/tulis Google Sheets sebagai "database" input & output) + dotenv
Integrasi ke SID Core: panggil REST API api.sid.id langsung pakai fetch + Bearer token JWT β bukan browser automation (lihat bagian 4)
Web UI (sidops-web)
Backend: Node.js + Express (app.js), PM2 process sidops-web, port 3180 (bind ke 127.0.0.1 saja, publiknya lewat Caddy)
Config-driven: daftar aksi (script/label/deskripsi/timeout/butuh-konfirmasi) dan link sheet terkait didefinisikan sekali di array ACTIONS/SHEETS di backend β frontend murni render dinamis dari /api/actions, gak ada id aksi yang di-hardcode di HTML/JS frontend
Login ke core.sid.id dilindungi Cloudflare Turnstile. Semua tool yang meng-attach browser lewat CDP (Chrome DevTools Protocol) β Playwright, Puppeteer, chrome-devtools MCP, dan sejenisnya β secara otomatis men-set navigator.webdriver = true di halaman yang dibuka. Turnstile mendeteksi flag ini dan langsung memblokir verifikasi, walaupun yang mengetik password adalah manusia beneran, bukan bot.
Karena itu, pendekatan "login otomatis via browser lalu klik-klik UI" tidak dipakai di project ini. Kalau ada kebutuhan baru yang kepikiran solusinya "buka browser headless terus login", itu kemungkinan besar akan mental duluan di Turnstile.
Solusi yang dipakai: script memanggil REST API asli (api.sid.id) secara langsung memakai Bearer token JWT yang diambil manual dari tab Network DevTools milik sesi browser yang sudah login (session manusia asli) β tidak ada proses "login" yang disimulasikan sama sekali oleh script.
5. Auth & token
SID_CORE_TOKEN (JWT) berlaku Β±1 jam, diambil manual dari DevTools tiap sesi kerja β belum ada mekanisme auto-refresh.
Di web (Semesta): token disimpan di memori server, per sesi browser β tidak pernah ditulis ke disk atau log. Modal token juga mendeteksi environment (Production core.sid.id vs Staging core.staging.sid.id) dari token itu sendiri, dan menampilkan banner peringatan besar sebelum tombol Eksekusi supaya operator tidak salah target env.
Akses Google Sheets pakai service account terpisah (bukan token user), Editor/Viewer sesuai kebutuhan tiap sheet, semuanya di dalam satu folder Drive "AUTOMATION".
Aksi yang mengubah data production selalu lewat alur Dry-Run β baca hasil β Eksekusi β tombol Eksekusi baru aktif setelah Dry-Run sukses (window 10 menit).
6. Deploy & isolasi VPS
Hal
Detail
Lokasi mesin otomasi
/home/product/sid-core-automation
Lokasi web UI
/home/product/sidops-web
Owner
product:product (bukan project personal β dipakai/di-maintain bareng tim)
Proses
PM2 sidops-web (port 3180, localhost-only) + bot @sobatproductbot jalan di container Docker terpisah (repo sobatproduct), memount folder sid-core-automation secara read-only
Reverse proxy
Caddy, config di /etc/caddy/conf.d/robot.caddy
7. Gotcha yang perlu diketahui
Permission folder sidops-web: user ican (anggota grup product) bisa overwrite file yang sudah ada, tapi tidak bisa membuat file baru di folder itu (izin grup cuma r-x, bukan rwx) β termasuk git commit (butuh menulis .git/index.lock). File baru harus lewat staging + sudo tee (ada rule NOPASSWD khusus untuk folder public/), atau dikerjakan dari sesi user product langsung.
Local dev copy jauh tertinggal. Salinan lokal di Mac (~/projects/sid-core-automation) tidak pernah disinkron β semua kerja dilakukan langsung di VPS (tidak ada git remote). Jangan percaya daftar script di dokumentasi lama; cek langsung ls /home/product/sid-core-automation/*.js di VPS untuk daftar terbaru.