D
Engineering

External Services

Empat service eksternal — WhatsApp/Baileys, MongoDB, Backend Dazo (webhook target), Facebook Graph API (pixel). Tidak ada OpenAI/Redis/JWT. URL dari .env, bukan secret manager.

engine-whatsapp berinteraksi dengan empat service eksternal. Tidak ada OpenAI, Redis, atau JWT seperti di engine-bot — service ini lebih sederhana.

Peta service

ServiceKonfigurasiDipakai untukLokasi pemanggilan
WhatsApp (Baileys)—Sesi, kirim/terima pesan, eventservice/whatsappService.ts, service/incomingMessageService.ts
MongoDBMONGO_URLDevice, chat_inbox, chat_historiesconfig/database.ts, semua service
Backend DazoWEBHOOK_URLTerima webhook pesan masuk & status ACKutils/helper.ts — sendWebhook
Facebook Graph API—Kirim pixel event (v19.0)service/notificationService.ts — submitPixel

WhatsApp (Baileys)

Engine WhatsApp memakai @whiskeysockets/baileys v7.0.0-rc.9 — library multi-device WhatsApp yang tidak membutuhkan browser.

AspekNilai
Versi7.0.0-rc.9 (release candidate)
Auth stateuseMultiFileAuthState — multi-file di session/auth/<instanceId>/
CachemakeCacheableSignalKeyStore
LoggerPino (child per sesi)
QRqrcode (base64 data URL), qrcode-terminal (terminal fallback, dimatikan)
Browser identity['MyWhatsApp', 'Chrome', '1.0.0']
Link previewlink-preview-js (getLinkPreview)
Media downloaddownloadContentFromMessage

MongoDB

EnvironmentDatabaseHost
lokal (default)dazo127.0.0.1:27017
remotedari MONGO_URLconnection string dari tim

Detail di Database.

Backend Dazo — webhook target

Engine mengirim POST ke {WEBHOOK_URL}/callback_message untuk dua kejadian, dibedakan oleh field report:

KejadianreportPayload
Pesan masukfalsePesan baru dari WhatsApp (text/image/video/document/audio/location)
Update status pesantrueStatus ACK (pending/sent/delivered/viewed/played)

Aturan penting:

  • Jika backend membalas { result: false }, engine mencatat warning dan tidak meng-emit event Socket.IO.
  • Emit socket terjadi setelah webhook sukses, di dalam sendWebhook() — bukan di pemanggilnya.
  • Bentuk payload webhook adalah kontrak lintas-service — jangan ubah tanpa koordinasi backend.

Detail payload di Webhook Reference.

Facebook Graph API — pixel

POST /api/submit-pixel memicu pengiriman event ke Facebook Graph API v19.0:

ts
// src/service/notificationService.ts — submitPixelFunction
const pixel_uri = `https://graph.facebook.com/v19.0/${data.code}/events`;

const data_post = {
  data: [{
    action_source: 'chat',
    event_id: data.event_name,
    event_name: data.event_name,
    event_time: Math.floor(Date.now() / 1000),
    event_source_url: 'https://dazo.id',
    user_data: { ph: data.nohp }
  }],
  access_token: data.access_token
};

await axios.post(pixel_uri, data_post, options);

access_token datang dari payload request (pixel_data JSON string array), bukan dari .env atau config.

Dependency diagram

text
                    ┌──────────────────┐
                    │  dazoapp         │
                    │  (Laravel)       │
                    │  device writer    │
                    └────────┬─────────┘
                             │ devices, admin_devices
                             ▼
                    ┌──────────────────┐
                    │  engine-whatsapp │
                    │  Express :5002   │
                    │  Socket.IO :5002 │
                    └──┬────────┬──────┘
                       │        │
       Baileys         │        │  Mongoose
                      ▼        ▼
         ┌──────────────┐  ┌──────────────┐
         │  WhatsApp     │  │  MongoDB     │
         │  (multi-device)│  │  dazo        │
         └──────────────┘  └──────────────┘
                      ▲
                      │ POST /callback_message
                      │
         ┌──────────────┐
         │  backend-go  │
         │  / dazoapp   │
         │  (webhook)   │
         └──────────────┘

         ┌──────────────┐
         │  Facebook     │
         │  Graph API   │
         │  v19.0 (pixel)│
         └──────────────┘

Yang TIDAK boleh diubah tanpa koordinasi

AreaLokasi
Bentuk payload webhooksrc/utils/helper.ts — sendWebhook
WEBHOOK_URL.env — base URL backend Dazo
Event Socket.IOsrc/service/socketService.ts, src/service/notificationService.ts
Field instanceId konsistensifolder session/auth/, key Map, room Socket.IO, kolom id device

Langkah berikutnya