Keamanan
Cara AdOps menangani data Anda
AdOps menyimpan Meta access token Anda di servernya sendiri dan memakainya untuk memanggil Graph API atas nama Anda. Setiap permintaan ke API AdOps membutuhkan bearer token, definisi aturan dan catatan eksekusi tersimpan di MongoDB, dan memutus koneksi Facebook menghapus token tersimpan dalam satu tindakan.
Halaman ini menjelaskan mekanisme yang ada hari ini. Ia tidak menjanjikan apa pun tentangnya, dan tidak mengklaim sertifikasi, audit independen, maupun angka uptime.
Akses
Siapa yang bisa menjangkau akun Anda?
Satu skema autentikasi, dua peran, dan default yang menutup endpoint baru alih-alih membukanya.
- Bearer token pada tiap permintaan
- Login menerbitkan JSON Web Token berisi id pengguna, username, roles, dan status akun, dengan masa berlaku 24 jam. Sebuah guard yang didaftarkan secara global memverifikasi token itu pada tiap permintaan lalu memuat data penggunanya.
- Rute publik ditandai eksplisit
- Hanya rute yang ditandai publik yang melewati guard: login, pendaftaran, konfirmasi email, callback pembayaran, dan health check. Selebihnya membutuhkan token secara default.
- Dua peran: USER dan ADMIN
- Tiap akun membawa array roles. Endpoint daftar untuk aturan, custom metric, dan invoice memaksa kueri ke id akun pemanggilnya sendiri kecuali pemanggilnya ADMIN, dan dashboard membaca token yang sama untuk membatasi kontrol khusus admin.
- Aturan password saat mendaftar
- Password harus 8 sampai 128 karakter dan memuat huruf besar, huruf kecil, angka, serta simbol, dengan field konfirmasi yang harus sama. Email konfirmasi membawa token 64 karakter dan cooldown kirim ulang 60 detik.
- Status akun membatasi produk
- Sebuah akun berstatus TRIAL, ACTIVE, atau SUSPEND. Akun yang di-suspend tetap menyimpan datanya tetapi melihat kunci di atas Rules, Custom Metrics, Ad Accounts, Activity, dan Integrations sampai invoice-nya dibayar.
Meta token
Di mana Meta access token Anda berada.
Menghubungkan Facebook menyimpan satu access token pada record pengguna Anda di server AdOps. Setiap panggilan Graph API yang dibuat AdOps untuk Anda — membaca campaign, membaca Insights, mengubah budget, menjeda campaign — dikirim dengan token itu pada header Authorization. Tidak ada kredensial bersama: aturan Anda berjalan dengan otorisasi Facebook milik Anda sendiri.
Proses menghubungkan memverifikasi tokennya lebih dulu. AdOps memanggil endpoint /me milik Meta untuk memastikan tokennya bekerja dan mengambil nama profil, email, serta foto yang ditampilkan di layar Integrations, jadi token yang salah atau kedaluwarsa gagal saat dihubungkan, bukan diam-diam beberapa hari kemudian.
Endpoint profil dan status koneksi mengembalikan flag terhubung beserta metadata non-sensitif itu — id, nama, email, foto, tanggal terhubung, tanggal verifikasi terakhir — bukan tokennya.
Memutus koneksi, dari layar Integrations dan lewat konfirmasi, menghapus seluruh record ad account milik akun Anda serta menyetel token tersimpan, flag terhubung, dan metadata profil Facebook menjadi null dalam satu panggilan yang sama.
Ad account yang ditemukan dari Meta disimpan dalam keadaan nonaktif. Sebuah aturan tidak bisa menargetkan ad account, dan tidak ada spend yang dibaca darinya, sampai akun itu Anda aktifkan secara eksplisit.
- Disimpan
- Di sisi server pada record pengguna Anda
- Dikirim ke
- Meta Graph API sebagai bearer header, atas nama Anda
- Token sesi AdOps
- 24 jam masa berlaku JWT
- Putus koneksi
- Satu tindakan menghapus ad account, membersihkan token
Penyimpanan
Yang disimpan AdOps di MongoDB.
API pengelolaan dan dua layanan eksekusi berbagi satu database MongoDB. Ini isi yang ditinggalkan sebuah akun yang aktif dipakai.
| Catatan | Isinya |
|---|---|
| Definisi aturan | Nama, ad account target, pre-filter, task beserta kondisi dan aksinya, jadwal, serta waktu eksekusi berikutnya dan terakhir. |
| Hasil eksekusi | Satu dokumen per campaign, per task, per eksekusi: aksinya, apakah tereksekusi, parameter aksinya, nilai sebelum dan sesudah, tiap kondisi beserta angka hasilnya, waktu tiap langkah, dan waktu eksekusi berikutnya yang diizinkan. |
| Catatan batch | Satu per pengiriman: aturannya, ad account-nya, waktu mulai dan selesai, berapa item yang diproses dan terpengaruh, serta status eksekusinya. |
| Metadata ad account | Id akun, nama akun, flag aktif, dan snapshot spend beserta mata uang dan rentang tanggalnya. |
| Definisi custom metric | Id spreadsheet, nama sheet, kolom pencarian, dan kolom nilai yang dibaca sebuah metric. |
| Baris spreadsheet yang di-cache | Baris terakhir yang dibaca dari tiap Google Sheet, dikunci berdasarkan file id dan nama sheet, dipakai ketika pengambilan langsung gagal. |
| Record akun | Nama lengkap, username, email, status konfirmasi, roles, status, tanggal uji coba, nama perusahaan, industri, dan rentang budget iklan bulanan — serta Meta access token. |
| Record error | Nama fungsi, pesan error yang sudah dinormalkan, stack, parameter permintaan dan respons API, jumlah kemunculan, serta waktu pertama dan terakhir terjadi. |
| Log generasi AI | Untuk tiap generasi aturan oleh AI: permintaannya, responsnya, waktu respons, skor confidence, dan aturan yang menaunginya. |
| Record email, pembayaran, dan invoice | Email terkirim beserta template dan statusnya; panggilan payment gateway beserta body permintaan dan responsnya; invoice beserta jumlah, jatuh tempo, dan statusnya. |
Satu-satunya data campaign yang dibaca AdOps dari Meta adalah nama entitas dan waktu pembuatannya, ditambah angka agregat Insights yang diminta kondisi Anda. AdOps tidak membaca maupun menyimpan materi kreatif iklan, daftar audiens, atau data pelanggan.
Data contoh Kegagalan
Cara AdOps mencatat kegagalannya sendiri.
Error ditulis ke database bersama, bukan hanya ke konsol. Sebelum disimpan, pesannya dinormalkan: timestamp, UUID, alamat IP, id ad account, dan deretan sepuluh angka atau lebih diganti dengan penanda, sehingga kesalahan yang sama selalu terbaca sama.
Error kemudian dikelompokkan berdasarkan nama fungsi ditambah pesan yang sudah dinormalkan itu, dengan sidik jari MD5 disimpan di sebelahnya. Kemunculan berulang menambah penghitung dan memperbarui waktu terakhir terjadi alih-alih menambah baris baru, dan tiap kelompok menyimpan 10 sampel parameter permintaan serta 10 sampel respons API terakhir. Error yang sudah ditandai selesai lalu muncul lagi otomatis dibuka kembali.
Semua penulisan yang dilakukan AdOps ke Graph API melewati satu pembungkus, jadi perubahan budget, jeda, atau penggantian nama yang gagal tercatat lengkap dengan body permintaannya dan respons error dari Meta. Kalau jalur deduplikasinya sendiri gagal, satu catatan biasa tetap ditulis — masalah pencatatan tidak menghentikan worker.
Operasional
Bagaimana AdOps dijalankan.
Fakta deployment, dipilih berdasarkan apa yang bisa dilakukan satu kesalahan.
- Layanan dalam container
- Layanan eksekusi dikirim sebagai image multi-stage di atas node:22-alpine, memasang dependensi produksi saja pada stage terakhir dan berjalan sebagai pengguna non-root, dengan tini sebagai proses init dan PM2 yang mengelola prosesnya.
- Baca dan tulis dipisah ke layanan berbeda
- Dispatcher yang menentukan aturan mana yang jatuh tempo hanya mengirim permintaan baca ke Graph API. Semua penulisan — budget, status, nama, duplikasi — terjadi di worker, proses yang berbeda.
- Rem tingkat platform
- Sebuah flag environment diperiksa di awal tiap sapuan dispatch. Kalau nilainya bukan true, sapuan langsung berhenti dan tidak ada aksi iklan otomatis yang dijalankan di mana pun.
- Pengulangan antrean dan koneksi
- Job diulang dengan backoff eksponensial mulai 1 detik, MongoDB menyambung ulang sampai 3 percobaan berjarak satu detik, dan Redis menyambung ulang dengan backoff maksimum 2 detik.
- Panggilan keluar dibatasi
- Klien HTTP worker memakai timeout 30 detik, begitu pula pengambilan Google Sheets. Dependensi yang menggantung berakhir sebagai error yang tercatat, bukan eksekusi yang macet.
Data contoh Batas
Yang tidak diklaim halaman ini.
AdOps tidak memegang sertifikasi SOC 2, ISO 27001, atau yang setara, dan halaman ini tidak mengklaimnya. Tidak ada hasil penetration test pihak ketiga yang dipublikasikan. Tidak ada angka uptime yang dipublikasikan, dan tidak ada yang tersirat.
Tidak ada satu pun di halaman ini yang merupakan jaminan. Kewajiban kontraktual AdOps tertulis di Syarat Layanan dan Perjanjian Pemrosesan Data; kalau dokumen itu dan halaman ini berbeda, dokumen itulah yang berlaku.
Kalau ada pernyataan di sini yang menentukan keputusan Anda, minta kami menunjukkan mekanismenya sebelum Anda menyandarkan diri padanya.
Pelaporan
Melaporkan celah keamanan.
Kalau Anda menemukan masalah keamanan di AdOps, kirim detailnya ke support@adops.id lewat email.
Yang perlu disertakan
- Apa yang Anda temukan, dan di mana.
- Langkah untuk mereproduksinya.
- Dampak yang menurut Anda ditimbulkannya.
- Id akun, aturan, atau permintaan yang terkait.
Mohon uji hanya pada akun Anda sendiri. Jangan menjalankan uji denial-of-service, jangan mengirim trafik pemindaian otomatis, dan jangan mengakses data milik orang lain.
Hubungkan satu ad account dan lihat apa yang terjadi.
Ad account masuk dalam keadaan nonaktif, aturan dimulai sebagai draft, dan tiap eksekusi menulis catatan. Anda bisa melihat seluruh jalurnya dengan satu akun menyala dan satu aturan live.