Satu sumber aturan untuk semua staf AI (Akbar, Ary, Opi, Dika, Eko) dan Pak Adi: memori kita ada di mana, bentuknya apa, cara mengisi, dan cara mengambilnya. Hasil diskusi Pak Adi & Akbar 12/10/2026. Status: FINAL untuk masa uji (13/10/2026 05:35, disetujui Pak Adi). Tabel database & skrip belum dibangun; yang dibangun nanti mengikuti halaman ini. Selama masa uji: catatan tetap ditulis di berkas yang ada sekarang (skema lama), tetapi sudah mengikuti cara di halaman ini (di bagian yang tepat, arti UPDATE, PK oleh manajer). Isi lama dipindahkan ke tabel baru sekaligus saat SOP diimplementasikan. Masukan staf selama masa uji dikumpulkan manajer, perubahan hanya atas keputusan Pak Adi.
Memori yang acak-acakan merugikan dua hal:
Prinsipnya sama dengan relational database: data ditata per tabel, punya indeks, jadi mencari tidak perlu menyisir semuanya. Menulis memang sedikit lebih repot (harus ditaruh di tempat yang benar); mencari jadi murah dan cepat.
Prinsip kedua: jangan mengandalkan ingatan sesi chat. Yang diandalkan adalah memori yang tertulis di tempatnya.
Patokan tempat simpan: data yang bentuknya sama berulang-ulang & dicari per kolom → Postgres. Tulisan yang harus dibaca sebagai teks bersama kode / harus tetap terbaca walau database mati → berkas.
| # | Model | Isinya | Disimpan di | Dipakai oleh |
|---|---|---|---|---|
| 1 | Profil orang (prospek/konsumen/member) | Siapa orangnya, produk yang ia minati/beli + tahapnya, rangkuman obrolan | Postgres | CS (Ary, Opi), Akbar |
| 2 | Product knowledge (PK) | Pengetahuan untuk MENJUAL & MELAYANI: harga, isi/layanan, cara order, cara pakai, keberatan + jawaban, batas klaim, eskalasi | Postgres (angka & penjelasan) | CS, Akbar |
| 3 | Brainstorming + MAP | Untuk MEMBUAT produk. MAP = yang SUDAH dibangun, Brainstorming = yang BARU direncanakan. Begitu dibangun: masuk MAP, dihapus dari Brainstorming | Berkas MD di folder kode proyeknya | Eko, Dika, tim pembuat |
| 4 | CLAUDE.md | Karakter & aturan yang SELALU berlaku. Umum untuk semua (mis. aturan gambar, salam, jujur, tanpa janji seumur hidup). Plus satu per peran: aturan cara kerja khusus peran itu (pendek) | Berkas CLAUDE.md (otomatis termuat) | Semua |
| 5 | Akses & alat | Cara masuk server/PC, alat apa di mana, cara menyalakan ulang penjaga WA/tunnel, resep teknis panjang. TANPA isi password; hanya menunjuk tempatnya | Berkas MD kecil (sengaja bukan database: harus tetap terbaca walau database mati) | Semua |
| 6 | Papan tugas + pengingat | Pekerjaan yang SEDANG berjalan: siapa, apa, kapan, status, langkah berikut. Pengingat = tugas yang punya jam | Postgres | Semua; Akbar memantau |
| 7 | Arsip log harian | Catatan kejadian (siapa, kapan, apa). Hanya ditambah, tidak pernah dibaca utuh | Postgres | Semua (menulis), menelusuri bila perlu |
Untuk apa: supaya CS langsung tahu siapa yang sedang chat, tanpa membaca ulang semua obrolan lama. Kapan diisi: saat orang pertama kali chat (baris orang dibuat), tiap tahap berubah (orang_produk), dan tiap sesi ditutup (profil dirangkum ulang).
Contoh isi (contoh FIKTIF: Budi, kode org-0412):
| orang_produk | tahap | catatan_produk |
|---|---|---|
| org-0412 · cnc | member | Member CNC VIP sejak Agt 2026, aktif bertanya soal rules Meta. |
| org-0412 · tba | tertarik | Tanya trial Rp50rb 12/10; belum kirim bahan LP. |
Profil (versi berlaku): "Budi, jualan perlengkapan bayi di Bekasi. Member CNC sejak Agustus, paham dasar Meta Ads, suka penjelasan pakai angka. 12/10 tertarik TBA trial, keberatan: takut LP tidak sesuai brand. Janji: kirim foto produk 13/10. Gaya: santai, panggil 'Mas Budi'."
Profil = rangkuman UTUH yang ditulis ulang tiap sesi ditutup. Bukan tumpukan catatan per tanggal.
Untuk apa: semua yang perlu diketahui untuk MENJUAL & MELAYANI satu produk, baik produk sendiri (Labbaik, TBA, Magic) maupun produk klien (Otopia). Kapan diisi: saat produk mulai dijual, dan setiap ada keputusan baru soal produk dari Pak Adi/pemilik produk.
Contoh baris pk_harga (harga Otopia per UKURAN mobil, mengikuti pegangan Opi): otopia · anti-karat · medium · Rp2.250.000 · berlaku sejak … · berlaku. Pemetaan mobil → ukuran ada di pk_daftar jenis ukuran-mobil, contoh avanza → medium. Kalau harga beda per cabang, kolom lokasi diisi cabangnya.
Contoh baris pk_penjelasan:
| produk · topik | isi |
|---|---|
| otopia · definisi-anti-karat | Lapisan pelindung kolong & rangka supaya tidak berkarat; proses ±4 jam (pegangan Opi)… |
| labbaik · keberatan-sudah-ada-buku-manasik | Buku manasik tetap berguna; Labbaik melengkapi di HP: urutan langkah + doa tiap tahap, bisa dibuka saat tawaf… |
| labbaik · batas-klaim | Jangan klaim "pasti mabrur" / pengganti pembimbing; tanpa "seumur hidup". |
Harga berubah → baris lama jadi usang, baris baru ditambah (slug sama). Tidak ada lagi harga di tiga tempat.
aturan-diskon; kalau berupa angka/promo → pk_daftar jenis promo), menggantikan aturan diskon versi lama. SALAH: membuat berkas "ATURAN_DISKON_OBI.md", atau menulisnya di catatan lain, atau menempel di ekor dokumen.Untuk apa: supaya pembuat produk (Eko, Dika, atau AI lain di kemudian hari) bisa melanjutkan pekerjaan tanpa bertanya ulang. Dua berkas berpasangan di folder kode proyek: <PROYEK>_MAP.md dan <PROYEK>_BRAINSTORMING.md.
MAP = peta yang SUDAH dibangun, dibagi per modul (tampilan, database, pembayaran, dll.) dengan petunjuk "modul ini ada di file mana". Contoh potongan MAP Caang:
cfpages.go CreatePagesProject → deploy. Kuota per paket di tabel subscriptions./forgot-password → token → /reset-password; link email dibangun dari Host permintaan.BRAINSTORMING = yang BARU direncanakan. Contoh: "Catat kode error Cloudflare saat publish gagal (usul Eko 12/10, menunggu izin)". Begitu dibangun: tulis di MAP, HAPUS dari brainstorming (tanpa tanda "done").
MAP hanya mencerminkan kode yang benar-benar ada. Kalau kode dan MAP berbeda, kode yang benar dan MAP diperbarui.
Untuk apa: karakter & aturan yang harus SELALU dipegang, otomatis termuat tiap sesi. Dua tingkat:
Kalau CLAUDE.md mulai panjang, itu tanda ada isi yang seharusnya masuk PK, Akses & alat, atau papan tugas.
Untuk apa: "peta mesin": cara masuk, alat apa di mana, cara menyalakan ulang. Contoh isi:
/root/.ssh/… (path saja, bukan isinya)."tunggu_pesan.sh sebagai proses latar; jangan reload tab WA."Sengaja berkas, bukan database: kalau database/servernya bermasalah, cara masuk & memperbaikinya harus tetap bisa dibaca. Password tidak pernah ditulis.
Untuk apa: tahu siapa sedang mengerjakan apa, dan tidak ada janji yang terlewat. Contoh baris:
| tugas | siapa | dari | jatuh tempo | status |
|---|---|---|---|---|
| FU Budi, minta foto produk untuk LP trial TBA | Ary | Budi (janji) | 13/10 09.00 | baru |
| Video Belajar IoT +27 | Dika | Pak Adi | – | selesai (hasil: galeri) |
| Perbaiki pesan error publish Caang | Eko | Akbar | – | menunggu izin Pak Adi |
| Laporan harian ke Pak Adi | Akbar | Pak Adi | tiap hari 20.00 | berulang |
Begitu selesai, status = selesai (tidak dihapus, tapi tidak tampil di daftar kerja).
Untuk apa: jejak kejadian kalau suatu saat perlu ditelusuri ("kapan pelanggan X dikirimi link reset?"). Contoh baris: 12/10 15:10 · Eko · caang · org-0099 · kirim ulang link Lupa password ke email pelanggan.
Hanya ditambah. Tidak pernah dibaca semua; dicari per tanggal/orang/produk.
Satu database "kerja tim" untuk SEMUA proyek & klien. Tiap baris diberi label proyek/produk. Klien baru = tambah satu baris produk, bukan membuat database baru. Kolom detail (bebas per produk) untuk hal yang unik.
| Tabel | Kolom | Keterangan |
|---|---|---|
orang | kode_orang (tetap), nomor_wa (unik), nama, profil_umum, status, dibuat, diubah | 1 baris per orang. kode_orang dibuat sekali, TIDAK pernah berubah. Nomor & nama hanya isi. |
produk | slug_produk (tetap: labbaik, tba, cnc, otopia…), nama, jenis (buatan sendiri / klien), status | Daftar produk & klien. |
orang_produk | kode_orang, slug_produk, tahap (tanya/tertarik/order/lunas/member), catatan_produk, detail, status, berlaku_sejak, diubah_oleh | 1 baris per orang × produk. Budi member CNC + tertarik TBA = 2 baris. |
profil_versi | kode_orang, ringkasan (rangkuman utuh), status (berlaku/usang), dibuat, oleh_sesi | Rangkuman obrolan. Tiap sesi ditutup = versi baru yang MENGGANTI (versi lama tetap jadi arsip). |
| Tabel | Kolom | Keterangan |
|---|---|---|
pk_harga | slug_produk, slug_item (layanan/paket), varian (mis. ukuran mobil), lokasi (cabang, boleh kosong), harga, berlaku_sejak, berlaku_sampai, status, diubah_oleh | Satu baris = satu harga. Contoh: otopia · anti-karat · medium (ukuran mobil). Mobil → ukuran dicari di pk_daftar. |
pk_daftar | slug_produk, jenis (promo / ukuran-mobil / cabang / dll.), slug_baris, isi, detail, berlaku_sejak, berlaku_sampai, status, diubah_oleh | Daftar pendek lain yang berupa angka/fakta. |
pk_penjelasan | slug_produk, slug_topik (mis. definisi-anti-karat, keberatan-kemahalan, gaya-bahasa-bali), judul, isi (teks), visibilitas (publik / internal: jangan disebut ke pelanggan, atau jangan ditawarkan di awal), sumber, berlaku_sejak, status, diubah_oleh | Satu baris = satu topik PENDEK. Ditanya satu hal → ambil satu baris. |
| Tabel | Kolom | Keterangan |
|---|---|---|
tugas | slug_tugas (tetap), siapa (yang mengerjakan), dari (yang meminta), slug_produk, kode_orang (boleh kosong), tugas (1 kalimat), bahan, jatuh_tempo (boleh kosong), jadwal_ulang (boleh kosong), jatuh_tempo_berikutnya, sudah_diingatkan, status (baru/dikerjakan/menunggu/selesai/batal), menunggu_apa, langkah_terakhir, langkah_berikut, hasil, dibuat, diubah | Satu tabel untuk semua peran. Pengingat = tugas yang jatuh_tempo-nya ada jam. Janji FU ke konsumen = baris tugas (siapa = Ary, kode_orang terisi, jatuh_tempo = jam FU). Tugas berulang: staf menulis jadwal_ulang dengan bahasa sederhana: "harian 12:00, 17:00", "tiap jam 08:00–21:00", "mingguan Senin 09:00", "bulanan tgl 1 09:00". Alat mengubahnya ke format mesin dan mengisi jatuh_tempo_berikutnya; tiap kali alarm berbunyi, kolom itu dimajukan otomatis. Berhenti = status selesai/batal. Tugas besar (mis. 27 video) boleh dipecah jadi beberapa tugas anak per jalur/hari dengan kolom tugas_induk (slug tugas induknya). Kolom langkah_terakhir/langkah_berikut menggantikan "catatan atas" papan lama, supaya tahan compact. Tugas "bukti TF menunggu valid" mencatat sumber order (kunci CS / halaman publik), karena order halaman publik ditandai lunas oleh Pak Adi di dashboard. |
| Tabel | Kolom | Keterangan |
|---|---|---|
log | waktu, siapa, slug_produk, kode_orang, kode_grup, slug_tugas, id_lampiran, kejadian (singkat) | Hanya ditambah. Dicari per kolom (tanggal, orang, produk), tidak pernah dibaca semua. |
| Tabel | Kolom | Keterangan |
|---|---|---|
sesi | id_sesi (dari Claude), peran, kode_orang / kode_grup / slug_tugas (tepat SATU terisi, dijaga aturan database), status (aktif/ditutup), dibuka, terakhir_aktif, ditutup | Mencatat sesi chat mana yang sedang dipakai untuk orang/grup/tugas tertentu. Kolom terpisah supaya tiap kolom selalu menunjuk satu tabel yang sama. |
grup | kode_grup (tetap), wa_id grup, nama, slug_produk, tujuan grup, aturan grup, profil_grup (konteks umum), status | Grup WA (grup member, grup klien, grup cabang) diperlakukan sebagai satu "ruang" dengan sesinya sendiri. Orang di dalamnya tetap punya profil masing-masing di tabel orang. |
grup_anggota | kode_grup + kode_orang (pasangan kunci tetap), peran di grup (member/admin/klien), produk terkait, minat yang berulang, status, berlaku_sejak | Catatan TETAP orang X DI GRUP tertentu. Terpisah dari profil japri. Satu orang di 3 grup = 3 baris. |
grup_topik | kode_grup, kode_orang, topik, ringkasan singkat, status (aktif / selesai / usang), terakhir_dibahas | Topik SEMENTARA yang dibahas orang X di grup. Tidak dibahas 7 hari → skrip alarm menandai usang otomatis (0 token; angka 7 bisa diubah per grup). Usang = tidak dimuat ke sesi, tidak dihapus, bisa diaktifkan lagi. Topik berisi janji yang belum tuntas WAJIB jadi baris tugas sebelum usang. |
lampiran | id, path berkas, jenis (foto unit / bukti TF / SS iklan / PDF / hasil), keterangan, detail (JSON, isian baku per jenis, dijaga alat tulis), kode_orang / slug_tugas / (slug_produk+slug_topik): tepat SATU pemilik terisi, dibuat, oleh | Baris lampiran yang menunjuk PEMILIKNYA (bukan sebaliknya). Dicari: "lampiran milik orang X" / "lampiran tugas Y". Berkasnya sendiri di penyimpanan berkas, bukan di database. Satu pemilik boleh punya BANYAK lampiran (satu-ke-banyak): mis. satu tugas = 1 screenshot + 1 bukti TF + 27 video, semuanya baris lampiran yang menunjuk slug_tugas yang sama. Hasil pekerjaan (video jadi, gambar iklan) = lampiran jenis "hasil" milik tugasnya. Galeri/program membaca "lampiran jenis hasil milik tugas X", tidak perlu berkas daftar terpisah. Progres produksi masuk kolom langkah tugas + log. Isian baku kolom detail per jenis (diisi pembuat lampiran; isian wajib kosong → alat menolak): • hasil (Dika): judul, kode, produk, gaya, suara, durasi, link, status (publik / pribadi / tertahan + alasan), path PC 250, MD5 • bukti TF (Ary/Opi): nominal, bank tujuan, jam transfer, nomor order, sumber order (kunci CS / halaman publik), status valid • foto unit (Opi): mobil, cabang, tanggal masuk • SS iklan (Akbar/Opi): akun iklan, kampanye, tanggal Perubahan status/link lampiran (mis. tertahan → publik) diubah DI TEMPAT + dicatat di log (bukan versi baru). Lokasi berkas: penyimpanan yang sudah dipakai sekarang (hasil video/gambar: PC 250 D:\backup253\<Produk>\…, dicocokkan MD5). Berkas kerja sementara yang besar (bahan mentah, folder jalur) boleh di folder kerja dan dihapus sesudah hasil akhir tersimpan & MD5 cocok. |
usang, lalu baris baru ditambah, seperti revisi halaman WordPress. Untuk tabel yang statusnya sering berubah (tugas, orang_produk): diubah di tempat, tetapi tiap perubahan dicatat di log. Menghapus apa pun = status dihapus/batal.slug_produk, slug_item, slug_topik, slug_tugas, kode_orang. ID baris hanya penanda versi.berlaku. Satu kunci hanya boleh punya satu baris berlaku.berlaku_sejak dan diubah_oleh.Sesi dibuka per SATUAN KERJA, seperti cara Pak Adi membuka chat "Monyil 1, Monyil 2": satu masalah satu sesi.
| Peran | Satuan kerja | Ditutup saat |
|---|---|---|
| CS (Ary, Opi) | Satu ORANG (konsumen/prospek) | Orang itu diam 30 menit |
| Dika, Eko | Satu TUGAS | Tugas selesai / berhenti lama (mis. menunggu izin). Tugas panjang boleh dipecah per kelompok/hari |
| Akbar | Satu TOPIK diskusi dengan Pak Adi, atau satu tugas pengawasan | Diam 30 menit / tugas selesai |
kode_grup), aturan buka/tutup sama dengan CS (diam 30 menit).grup_anggota + grup_topik yang aktif).profil_versi = khusus japri; grup_anggota + grup_topik = apa yang orang itu sampaikan di grup tertentu. Sesi GRUP tidak pernah memuat profil japri (supaya hal pribadi tidak bocor ke grup), paling hanya tahap produk dasar. Sesi JAPRI boleh membaca catatan grup orang itu dengan label "disampaikan di grup X (publik)".kode_orang dari nomor WA (belum ada = dibuat).sesi: sesi aktif milik orang itu yang terakhir aktif < 30 menit.| Ada informasi baru tentang… | Tulis ke |
|---|---|
| Orang (kebutuhan, keberatan, rencana, sudah beli) | Model 1: orang_produk (tahap) + profil saat sesi ditutup |
| Aturan internal yang berlaku untuk SEMUA orang (mis. "boleh harga khusus, tapi jangan ditawarkan di awal") | Model 2: PK, ditandai visibilitas internal |
| Harga/perlakuan khusus untuk SATU orang (pelanggan setia, kawan dekat) | Boleh di profil orang itu ("pelanggan setia, harga spesial Rp…, sesuai konfirmasi X"), ATAU di PK dengan catatan "hanya untuk … sesuai konfirmasi khusus". Keduanya sah. |
| Janji FU / pekerjaan yang harus dilakukan | Model 6: baris tugas (dengan jam kalau ada) |
| Harga, layanan, garansi, promo, cara order, jawaban keberatan | Model 2: PK, di topik yang tepat (ditulis MANAJER; staf lain meneruskan ke manajer) |
| Bukti transfer / order yang menunggu "valid" Pak Adi | Model 6: baris tugas (status menunggu, menunggu_apa = valid Pak Adi), supaya tidak tercecer |
| Berkas bukti / hasil kerja (foto unit, bukti TF, SS iklan, PDF, video jadi) | Simpan berkasnya di penyimpanan berkas, lalu satu baris di tabel lampiran yang menunjuk pemiliknya |
| Rencana fitur / yang sudah dibangun di produk buatan sendiri | Model 3: Brainstorming / MAP proyeknya |
| Aturan cara kerja satu peran | Model 4: CLAUDE.md peran itu |
| Aturan untuk semua staf / karakter | Model 4: CLAUDE.md umum |
| Cara masuk mesin, alat, cara menyalakan ulang | Model 5: Akses & alat |
| Kejadian (untuk jejak) | Model 7: log |
UPDATE bukan menghapus isi lama lalu menggantinya dengan potongan baru. UPDATE = isi lama tetap dipakai, hanya bagian yang berhubungan dengan informasi baru yang diganti atau ditambah. Bagian lain tidak boleh hilang.
Contoh benar: topik garansi Otopia berisi 6 poin; ada keputusan baru soal masa garansi anti karat → poin "masa garansi anti karat" saja yang diganti; 5 poin lainnya tetap utuh di versi baru.
Contoh SALAH (pernah terjadi): seluruh catatan dihapus, diganti satu kalimat informasi baru, sehingga banyak catatan lama hilang.
Cara aman: (1) baca isi versi yang berlaku, (2) ubah hanya bagian yang relevan, (3) simpan sebagai versi baru utuh (versi lama tetap tersimpan sebagai arsip), (4) bandingkan: tidak ada poin lama yang hilang tanpa alasan.
Prinsip: membaca selalu lewat alat baca (skrip #4), disaring dengan kunci tetap (kode_orang, kode_grup, slug_produk, slug_topik, slug_tugas), hanya baris yang berlaku/aktif, dan dibatasi jumlahnya. Tidak pernah "ambil seluruh tabel", dan tidak pernah membaca arsip/log tanpa saringan tanggal + orang/produk.
| Kapan | Siapa yang membaca | Yang dibaca (hanya ini) |
|---|---|---|
| Sesi japri dibuka (konsumen chat, tidak ada sesi aktif) | Skrip penyambung, otomatis, sebelum Claude bekerja | orang (by nomor/wa_lid) → profil_versi berlaku → baris orang_produk → tugas terbuka milik orang itu → daftar lampiran (judul saja) → 10–15 chat terakhir dari WA → topik PK produk yang ia minati: ringkasan + topik yang cocok dengan pesan barunya |
| Sesi grup dibuka | Skrip penyambung, otomatis | grup (profil grup) → grup_anggota + grup_topik aktif si pengirim → 20–30 obrolan grup terakhir → topik PK produk grup itu. TIDAK profil japri. |
| Di tengah percakapan, ditanya hal yang belum ada di paket (mis. garansi, harga ukuran lain) | Claude (staf) memanggil alat | pk lihat <produk> <topik> → satu baris topik itu. Tidak tahu nama topiknya → pk daftar <produk> (daftar judul topik saja, seperti daftar isi), lalu ambil satu yang tepat. |
| Mau menulis/UPDATE PK atau profil | Manajer (PK) / sesi yang ditutup (profil) | Baca DULU versi yang berlaku dari kunci itu, ubah bagian yang relevan, simpan versi baru (lihat "Arti UPDATE"). |
| Dibangunkan alarm (pengingat jatuh tempo) | Staf yang dituju | Baris tugas yang membangunkan → data yang ditunjuknya (orang/grup/lampiran/topik PK) seperlunya. |
| Mulai kerja / sesi tugas dibuka (Dika, Eko) | Staf | tugas saya → tugas berstatus baru/dikerjakan/menunggu miliknya → detail satu tugas yang dikerjakan (langkah terakhir, langkah berikut, bahan, hasil). |
| Pengawasan (manajer) | Akbar / Opi | Saringan siap pakai: tugas lewat jatuh tempo · tugas "menunggu Pak Adi/owner" · tugas per staf · sesi aktif lama tidak ditutup. Bukan membaca semua baris. |
| Menelusuri kejadian ("kapan X dikirimi link?") | Siapa pun yang perlu | log, disaring tanggal + kode_orang/produk. Hanya saat benar-benar perlu. |
| Data transaksi (order, lisensi, akun) | Staf | Dibaca dari sistemnya sendiri lewat API/alat baca-saja (mis. cari_pelanggan.sh), tidak disalin ke database memori. |
Tanda bahaya: kalau untuk menjawab satu pertanyaan kamu membaca lebih dari beberapa baris atau satu topik penuh yang tidak terkait, berhenti. Berarti alat/indeksnya kurang. Laporkan ke manajer supaya topiknya dipecah, jangan membaca semuanya.
| Peran | Paling sering membaca | Paling sering menulis |
|---|---|---|
| CS (Ary, Opi) | Profil orang, PK, tugas FU miliknya | Profil (saat tutup sesi), orang_produk, tugas FU, lampiran, log. Info produk baru → teruskan ke manajer (bukan ditulis sendiri ke PK) |
| Desainer (Dika) | Tugas miliknya, PK (fakta produk untuk naskah), Akses & alat | Tugas (progres, hasil), log |
| Programmer (Eko) | Tugas miliknya, MAP/Brainstorming proyek, Akses & alat | MAP/Brainstorming, tugas, log |
| Manajer (Akbar) | Papan tugas semua staf (belum selesai / lewat jatuh tempo / menunggu Pak Adi) | Tugas, PK & CLAUDE.md (meneruskan keputusan Pak Adi yang sudah final), log |
| Manajer Otopia (Opi) | Papan tugas Otopia, profil pelanggan Otopia | PK Otopia (sesudah konfirmasi ke owner), tugas, log |
Bukan aplikasi besar. Beberapa skrip Linux kecil di server uranus (dikerjakan Eko, diawasi Akbar):
| # | Skrip | Tugasnya | Jalan kapan |
|---|---|---|---|
| 1 | Pembuat database | Membuat tabel-tabel di atas (orang, produk, orang_produk, profil_versi, pk_*, tugas, log, sesi) beserta aturan kunci tetap & soft delete. | Sekali |
| 2 | Penyambung WA → Claude (bridging) | WA masuk → cari kode orang → cari sesi aktif di tabel sesi → lanjutkan atau buat sesi baru (claude -p, diisi paket profil + produk + chat terakhir + PK) → kirim balasan. Menggabung pesan beruntun 30–60 detik. | Terus-menerus (dipicu tiap WA masuk) |
| 3 | Alarm per menit | (a) cari tugas yang jatuh tempo menit ini → taruh pesan ke kotak masuk staf yang bersangkutan; (b) cari sesi CS yang diam > 30 menit → minta rangkum profil → tutup sesi. | Tiap menit (timer sistem, 0 token) |
| 4 | Alat baca/tulis untuk staf | Perintah pendek: lihat/ubah profil orang, ambil PK per produk+topik, tambah/selesaikan tugas, tulis log. Selalu menyaring, tidak pernah menampilkan semuanya. | Dipakai staf saat bekerja |
| 5 | Halaman lihat-saja untuk Pak Adi | Melihat papan tugas, profil, PK, dan koreksi PK. | Kapan saja |
| 6 | Pemindah data lama | Memindahkan isi berkas lama (KASUS_TERBUKA, product knowledge yang tercecer, dll.) ke tabel baru; satu kali, diperiksa sebelum dipakai. | Sekali, sesudah 1–4 siap |
Uji coba (keputusan Pak Adi 13/10 06:18): (1) PUTAR ULANG offline 20–30 percakapan lama nomor Ary ke sistem baru, bandingkan dengan jawaban Ary saat itu (nyambung, tidak mengulang, patuh aturan, token per balasan); (2) BAYANGAN: sistem baru mendengar chat masuk sungguhan & menyiapkan jawaban TANPA mengirim, dibandingkan harian dengan jawaban Ary; (3) sesudah itu LANGSUNG LIVE PENUH. Mutu jawaban dinilai MANAJER (Akbar), bukan Pak Adi.
Skrip tambahan untuk ini masuk daftar skrip (bagian 11): penarik salinan tiap 5 menit + pengaturan akun database per staf.
WHERE status='berlaku'), bukan disiplin. Semua perubahan lewat SATU fungsi/alat yang menandai usang + menyisipkan versi baru dalam satu transaksi. Staf tidak pernah menulis SQL mentah.'') atau NULLS NOT DISTINCT, supaya unique index tetap menjaga.…@lid tanpa nomor → kolom wa_lid + pemetaan saat nomor diketahui (penyambung WAJIB menyimpan nomor asli begitu terlihat dari kartu kontak/order); satu orang boleh punya beberapa nomor.CHECK num_nonnulls(kode_orang, kode_grup, slug_tugas) = 1; satu sesi aktif per orang/grup (unique parsial); penyambung mengunci per orang (advisory lock) saat membuka/menutup sesi supaya dua pesan bersamaan tidak membuat dua sesi; rangkuman profil gagal → sesi TIDAK ditutup.jatuh_tempo <= now() AND belum diingatkan (bukan "menit ini"), lalu ditandai sudah diingatkan. Kalau timer terlewat atau server restart, pengingat tidak hilang dan tidak terkirim dua kali. Waktu disimpan timestamptz, ditampilkan WIB. "Kotak masuk staf" = baris di events.jsonl staf itu (format sama dengan WA masuk)./root/.secrets (bukan di Akses & alat). Batas "Opi hanya Otopia" memakai Row-Level Security.hasil <tugas> → hanya jumlah publik/tertahan; daftar lengkap hanya kalau diminta.jatuh_tempo_berikutnya (tugas sekali jalan = salinan jatuh_tempo), satu sumber. Tugas berulang yang terlewat saat server mati: diingatkan SEKALI lalu loncat ke jadwal berikutnya (tidak menumpuk); sudah_diingatkan direset tiap kali jadwal maju; jadwal_ulang yang tidak dikenali ditolak alat saat ditulis.tugas_induk ditutup MANUAL; saringan manajer menampilkan "induk yang semua anaknya selesai".grup_topik punya penanda ada_janji + slug_tugas. Skrip TIDAK menandai usang selama ada_janji benar dan belum ada tugasnya; skrip membuat tugas "tinjau janji grup X" untuk manajer/CS grup itu. Topik diberi slug_topik pendek per grup (pakai ulang yang sama kalau cocok) supaya tidak dobel beda kata.lampiran.detail per jenis juga dipaksa CHECK di database (bukan hanya alat), karena program latar menulis tanpa alat. Pasangan (slug_produk+slug_topik) dihitung satu pemilik dalam CHECK "tepat satu pemilik". Nama kolom: keterangan (bukan "judul").pk_daftar jenis "payung" (siapa, cakupan topik, sejak kapan, dari owner siapa), supaya alat bisa memeriksa "admin ini masuk payung topik ini?" tanpa mengandalkan ingatan.pk lihat). Sesi GRUP hanya menerima baris publik.log diberi kolom kode_grup + id lampiran (opsional), karena kejadian grup tidak selalu tentang satu orang.Rancangan ini diuji beberapa hari. Perubahan apa pun pada halaman ini hanya atas keputusan Pak Adi.