D
Setup

Local Development

Cara menjalankan engine-whatsapp lokal — single process app.ts via tsx, tanpa hot-reload. Saat boot otomatis restore semua sesi di session/auth/. Tidak ada worker terpisah. Verifikasi via endpoint API.

engine-whatsapp berjalan sebagai satu proses di lokal: src/app.ts via tsx. Tidak ada worker terpisah (berbeda dari engine-bot yang butuh app + worker).

Prasyarat

Sudah selesai Setup Environment? Pastikan:

  • .env ada dengan MONGO_URL menunjuk ke MongoDB aktif
  • MongoDB lokal berjalan di 127.0.0.1:27017 (DB dazo)
  • WEBHOOK_URL di-set ke backend Dazo yang aktif, atau biarkan mengandung webhook-test untuk mode dummy
  • Folder session/auth/ kosong (belum ada sesi) atau berisi sesi yang ingin di-restore

Menjalankan app

bash
npm run dev

Script ini menjalankan tsx src/app.ts. Server listen di port 5002 (dari config.port).

Output saat start:

text
🚀 Server Berjalan di http://localhost:5002
📡 Mode: Single Process Multi-Device
Mongodb Connected

Restore sesi saat boot

Saat server.listen sukses, app.ts memanggil WhatsAppService.init():

ts
// src/app.ts:44
WhatsAppService.init();

init() memindai session/auth/, lalu menyalakan ulang setiap sesi dengan jeda 2 detik antar sesi:

ts
for (const instanceId of sessionFolders) {
  await this.startSession(instanceId);
  await new Promise((resolve) => setTimeout(resolve, 2000));
}

Verifikasi

Tidak ada endpoint /health. Verifikasi via API:

bash
# Cek server merespons
curl "http://localhost:5002/api/device-info?instance=test-uuid"
# Expected: {"success":true,"data":{"id":"test-uuid","status":"NOT_FOUND","isConnected":false,...}}

Membuat sesi baru

bash
# 1. Buat sesi
curl -X POST http://localhost:5002/api/new \
  -H "Content-Type: application/json" \
  -d '{"instance":"0c1a968c-7918-4c29-a524-0ad7c445ee7f"}'
# Expected: {"success":true,"message":"Sesi berhasil diinisialisasi..."}

# 2. Ambil QR (bisa juga lewat Socket.IO event qrcode)
curl "http://localhost:5002/api/qrcode?instance=0c1a968c-..."
# Expected: {"data":{"qrcode":"data:image/png;base64,...","status":"QR_READY"}}

# 3. Scan QR dengan WhatsApp di HP
# 4. Cek status
curl "http://localhost:5002/api/device-info?instance=0c1a968c-..."
# Expected: status: "open", isConnected: true

Detail endpoint di API Reference.

Socket.IO — test realtime

Server Socket.IO di port yang sama (5002), CORS terbuka (*).

js
// Contoh client
const socket = io("http://localhost:5002");

socket.emit("join_instance", "0c1a968c-...");
socket.on("device_status", (s) => console.log(s.status));
socket.on("qrcode", ({ qr }) => render(qr));
socket.on("message_upsert", (m) => console.log("Pesan masuk:", m.data));

Detail event di Realtime Events.

PM2 (opsional)

Tidak ada ecosystem.config.js di repo. PM2 opsional untuk menjalankan lokal:

bash
pm2 start npm --name engine-whatsapp-dev -- run dev
# atau setelah build:
pm2 start dist/app.js --name engine-whatsapp-dev

Testing endpoint

Kirim pesan

bash
curl -X POST http://localhost:5002/api/send-message \
  -H "Content-Type: application/json" \
  -d '{
    "instance": "0c1a968c-...",
    "number": "628123456789",
    "message": "Halo dari engine-whatsapp!",
    "pesan_id": "msg-1",
    "role": "cs",
    "data": "{}"
  }'

Webhook mode dummy

Jika WEBHOOK_URL mengandung webhook-test, pengiriman webhook dilewati. Berguna untuk test kirim pesan tanpa backend Dazo aktif:

bash
# .env
WEBHOOK_URL=http://localhost:3000/webhook-test

Setelah mengubah kode TypeScript

Tidak ada test suite. Jalankan minimal:

bash
npx tsc --noEmit    # verifikasi tipe — WAJIB, harus exit 0

Yang tidak bisa diuji lokal

FiturKeterbatasan
Webhook ke backendButuh backend-go/dazoapp reachable di WEBHOOK_URL (atau pakai webhook-test)
Receive pesan masukButuh device WhatsApp aktif yang ter-scan QR
Socket.IO ke frontendBisa connect, tapi frontend Dazo adalah konsumen eksternal — verifikasi event shape
Facebook PixelPOST /api/submit-pixel butuh access_token valid dari Facebook

Log

Pino menulis ke ./wa-logs.txt (file destination) dan stdout. Level dari LEVEL_LOG:

bash
# Tail log real-time
Get-Content wa-logs.txt -Wait
# atau
tail -f wa-logs.txt

Langkah berikutnya