This commit is contained in:
2026-05-14 11:54:38 +07:00
parent ec0befdb5e
commit b0ce866a2f
4 changed files with 1378 additions and 10 deletions

View File

@@ -3,4 +3,5 @@ BOT_API_SECRET=your_super_secret_bot_key
BACKEND_URL=http://localhost:3001/api BACKEND_URL=http://localhost:3001/api
BOT_MODE=PROD BOT_MODE=PROD
TRANSACTION_TYPES=SERVICE,JOB TRANSACTION_TYPES=SERVICE,JOB
COUNT_PER_TYPE=1 COUNT_PER_TYPE=1
DATA_SOURCE=AI

View File

@@ -1,4 +1,5 @@
import os import os
import json
from openai import OpenAI from openai import OpenAI
from dotenv import load_dotenv from dotenv import load_dotenv
@@ -10,18 +11,91 @@ client = OpenAI(
api_key=os.getenv("OPENROUTER_API_KEY"), api_key=os.getenv("OPENROUTER_API_KEY"),
) )
# Load data pool
with open('bot_data_pool.json', 'r') as f:
data_pool = json.load(f)
DATA_SOURCE = os.getenv("DATA_SOURCE", "AI").upper()
def generate_from_pool():
"""Mengambil data secara acak langsung dari data pool (Tanpa AI)"""
import random
name1 = random.choice(data_pool['names'])
name2 = random.choice(data_pool['names'])
while name2 == name1:
name2 = random.choice(data_pool['names'])
title = random.choice(data_pool['service_titles'])
addr1 = random.choice(data_pool['addresses'])
addr2 = random.choice(data_pool['addresses'])
return {
"akun1": {
"nama_lengkap": name1,
"email": f"{name1.lower().replace(' ', '.')}@gmail.com",
"nama_bisnis": name1,
"deskripsi_bisnis": f"Penyedia jasa {title} profesional dan terpercaya.",
"lokasi": {
"lat": str(-6.2088 + (random.random() * 0.1)),
"lng": str(106.8456 + (random.random() * 0.1)),
"alamat": addr1,
"radius": "50"
},
"identitas": {
"tipe": "KTP",
"nomor": str(random.randint(1000000000000000, 9999999999999999))
}
},
"akun2": {
"nama_lengkap": name2,
"email": f"{name2.lower().replace(' ', '.')}@gmail.com"
},
"layanan": {
"judul": title,
"deskripsi": f"Saya menawarkan layanan {title} dengan hasil kualitas terbaik. Pengalaman sudah lebih dari 3 tahun di bidang ini.",
"harga": random.choice([50000, 75000, 100000, 150000, 200000, 500000])
},
"review": {
"rating": "5",
"komentar": random.choice([
"Sangat puas dengan hasilnya!",
"Kerja cepat dan rapi, mantap.",
"Sangat direkomendasikan untuk jasa ini.",
"Komunikasi baik dan hasil sesuai ekspektasi.",
"Terima kasih banyak, sangat membantu."
])
}
}
def generate_bot_data(): def generate_bot_data():
""" """Menghasilkan data bot berdasarkan DATA_SOURCE (AI atau POOL)"""
Generate realistic Indonesian persona and service data using OpenRouter.
""" if DATA_SOURCE == "POOL":
prompt = """ return generate_from_pool()
Kamu adalah pembuat data realistis untuk platform Microjob/Gig Economy di Indonesia.
Buat 1 set data dalam format JSON yang berisi: # Jika mode AI
prompt = f"""
Anda adalah asisten AI yang bertugas men-generate data JSON untuk simulasi marketplace jasa (Microjob).
GUIDELINE PENAMAAN (Wajib Diikuti):
- Nama Orang: Gunakan referensi seperti {data_pool['names'][:10]}... (Hanya nama asli orang Indonesia).
- Nama Bisnis: HARUS sama dengan Nama Lengkap orang tersebut (Jangan gunakan tambahan 'Design', 'Solusi', dll).
- Judul Layanan: Gunakan pola seperti {data_pool['service_titles'][:5]}...
- Judul Job: Gunakan pola seperti {data_pool['job_titles'][:5]}...
- Alamat: Gunakan referensi pola seperti {data_pool['addresses'][:5]}...
Aturan Tambahan:
1. JANGAN gunakan nama artis, tokoh publik, atau selebriti.
2. JANGAN ada kata 'bot' di data manapun.
3. Output harus valid JSON.
Struktur JSON:
{ {
"akun1": { "akun1": {
"nama_lengkap": "Nama asli orang Indonesia yang realistis (Hanya nama orang, misal: Budi Santoso, Siti Aminah)", "nama_lengkap": "Nama asli orang Indonesia yang realistis. JANGAN gunakan nama artis, tokoh publik, atau selebriti (Hanya nama orang biasa, misal: Budi Santoso, Siti Aminah)",
"email": "Email pribadi realistis berdasarkan nama", "email": "Email pribadi realistis berdasarkan nama",
"nama_bisnis": "Nama brand jasa profesional (misal: Budi Design, CV Sejuk Jaya)", "nama_bisnis": "Gunakan nama orang saja (Hanya nama, jangan gunakan tambahan 'Solusi Digital', 'Design', 'Jasa', dll)",
"deskripsi_bisnis": "Deskripsi singkat tentang keahlian atau layanan yang ditawarkan", "deskripsi_bisnis": "Deskripsi singkat tentang keahlian atau layanan yang ditawarkan",
"lokasi": { "lokasi": {
"lat": "Latitude acak di area perkotaan Indonesia (misal: Jakarta, Bandung, atau Surabaya)", "lat": "Latitude acak di area perkotaan Indonesia (misal: Jakarta, Bandung, atau Surabaya)",
@@ -35,7 +109,7 @@ def generate_bot_data():
} }
}, },
"akun2": { "akun2": {
"nama_lengkap": "Nama asli pembeli Indonesia yang realistis (Hanya nama orang)", "nama_lengkap": "Nama asli pembeli Indonesia yang realistis. JANGAN gunakan nama artis atau selebriti (Hanya nama orang biasa)",
"email": "Email pribadi realistis berdasarkan nama" "email": "Email pribadi realistis berdasarkan nama"
}, },
"layanan": { "layanan": {

1210
bot_data_pool.json Normal file

File diff suppressed because it is too large Load Diff

83
generate_pool.py Normal file
View File

@@ -0,0 +1,83 @@
import json
import random
def generate_pool():
# 1. Names Generator (Combining First & Last Names)
first_names_male = [
"Agus", "Budi", "Bambang", "Eko", "Hendra", "Iwan", "Joko", "Lukman", "Mulyadi", "Rian",
"Rudi", "Slamet", "Taufik", "Wawan", "Yadi", "Zaki", "Ade", "Bagus", "Cahyo", "Darmawan",
"Erlangga", "Fadilah", "Galih", "Hafiz", "Ikhsan", "Junaedi", "Kiki", "Lutfi", "Maman", "Nanang"
]
first_names_female = [
"Siti", "Dewi", "Rina", "Maya", "Sari", "Indah", "Anita", "Putri", "Ratna", "Nina",
"Linda", "Desi", "Siska", "Amelia", "Yanti", "Ratna", "Nina", "Indah", "Anita", "Putri",
"Rara", "Fany", "Novi", "Aulia", "Fitri", "Hana", "Tika", "Wulan", "Yulia", "Kiki"
]
last_names = [
"Santoso", "Setiawan", "Nugroho", "Kurniawan", "Saputra", "Fauzi", "Hidayat", "Permana", "Pratama", "Wibowo",
"Rahman", "Budiman", "Sunandar", "Wahyuni", "Rahma", "Lestari", "Wijaya", "Fitriani", "Saputri", "Setyawati",
"Hidayah", "Puspita", "Kusuma", "Utami", "Marlina", "Fitriani", "Anwar", "Hasan", "Utomo", "Kosasih"
]
names = set()
all_first = first_names_male + first_names_female
while len(names) < 600:
full_name = f"{random.choice(all_first)} {random.choice(last_names)}"
names.add(full_name)
# 2. Addresses Generator (Combining Streets, Numbers, Cities)
streets = [
"Jl. Jenderal Sudirman", "Jl. MH Thamrin", "Jl. Gatot Subroto", "Jl. Rasuna Said", "Jl. Kebon Sirih",
"Jl. Imam Bonjol", "Jl. Diponegoro", "Jl. S. Parman", "Jl. Arteri Pondok Indah", "Jl. Prof. Dr. Satrio",
"Jl. Kemang Raya", "Jl. Pluit Indah", "Jl. Boulevard Raya", "Jl. Daan Mogot", "Jl. Hayam Wuruk",
"Jl. Braga", "Jl. Setiabudi", "Jl. Dago", "Jl. Asia Afrika", "Jl. Pasteur", "Jl. Cihampelas",
"Jl. Tunjungan", "Jl. Darmo", "Jl. Basuki Rahmat", "Jl. Gubeng", "Jl. Mayjen Sungkono",
"Jl. Malioboro", "Jl. Kaliurang", "Jl. Solo", "Jl. Gejayan", "Jl. Parangtritis",
"Jl. Pemuda", "Jl. Gajah Mada", "Jl. Pandanaran", "Jl. Simpang Lima", "Jl. Sunset Road",
"Jl. Legian", "Jl. Slamet Riyadi", "Jl. Pajajaran", "Jl. Ir. H. Juanda", "Jl. Margonda Raya",
"Jl. Ahmad Yani", "Jl. Veteran", "Jl. Kartini", "Jl. Teuku Umar", "Jl. Pattimura",
"Jl. Sam Ratulangi", "Jl. Urip Sumoharjo", "Jl. Dr. Sutomo", "Jl. MT Haryono"
]
cities = [
"Jakarta Selatan", "Jakarta Pusat", "Jakarta Barat", "Jakarta Utara", "Bandung",
"Surabaya", "Yogyakarta", "Semarang", "Solo", "Bogor", "Depok", "Bekasi", "Tangerang",
"Denpasar, Bali", "Medan", "Makassar", "Palembang", "Pekanbaru", "Banjarmasin", "Pontianak"
]
addresses = set()
while len(addresses) < 550:
addr = f"{random.choice(streets)} No. {random.randint(1, 200)}, {random.choice(cities)}"
addresses.add(addr)
# 3. Service Titles Generator
actions = ["Service", "Cuci", "Perbaikan", "Pasang", "Desain", "Penulisan", "Les", "Pijat", "MUA", "Fotografi", "Kursus", "Pelatihan", "Jasa", "Sewa", "Pembuatan", "Maintenance", "Audit", "Konsultasi", "Edit", "Setup"]
objects = ["AC", "Kulkas", "Mesin Cuci", "Listrik", "Pompa Air", "TV", "Laptop", "PC", "CCTV", "Website", "Logo", "Konten", "Video", "Banner", "Karpet", "Sofa", "Taman", "Motor", "Mobil", "Gaun", "Kamera", "Server", "VPN", "SEO", "Iklan", "Rumah", "Kantor", "Kos", "Water Heater", "Kanopi"]
descriptors = ["Jakarta", "Panggilan", "Terdekat", "Profesional", "Murah", "Cepat", "Terpercaya", "Bergaransi", "24 Jam", "Handal"]
service_titles = set()
while len(service_titles) < 550:
svc = f"{random.choice(actions)} {random.choice(objects)} {random.choice(descriptors)}"
service_titles.add(svc)
# 4. Job Titles Generator
job_prefixes = ["Dicari", "Butuh", "Cari", "Dibutuhkan", "Memerlukan", "Loker", "Lowongan", "Open Order", "Cepat:", "Urgent:"]
job_titles = set()
while len(job_titles) < 550:
job = f"{random.choice(job_prefixes)} {random.choice(objects)} {random.choice(descriptors)}"
job_titles.add(job)
data_pool = {
"names": sorted(list(names)),
"addresses": sorted(list(addresses)),
"service_titles": sorted(list(service_titles)),
"job_titles": sorted(list(job_titles))
}
with open('d:/DEVELOPMENT/MICROJOB/bot/bot_data_pool.json', 'w') as f:
json.dump(data_pool, f, indent=2)
print(f"Pool generated successfully: {len(names)} names, {len(addresses)} addresses, {len(service_titles)} services, {len(job_titles)} jobs.")
if __name__ == "__main__":
generate_pool()