engine-whatsapp berinteraksi dengan empat service eksternal. Tidak ada OpenAI, Redis, atau JWT seperti di engine-bot — service ini lebih sederhana.
Peta service
| Service | Konfigurasi | Dipakai untuk | Lokasi pemanggilan |
|---|---|---|---|
| WhatsApp (Baileys) | — | Sesi, kirim/terima pesan, event | service/whatsappService.ts, service/incomingMessageService.ts |
| MongoDB | MONGO_URL | Device, chat_inbox, chat_histories | config/database.ts, semua service |
| Backend Dazo | WEBHOOK_URL | Terima webhook pesan masuk & status ACK | utils/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.
| Aspek | Nilai |
|---|---|
| Versi | 7.0.0-rc.9 (release candidate) |
| Auth state | useMultiFileAuthState — multi-file di session/auth/<instanceId>/ |
| Cache | makeCacheableSignalKeyStore |
| Logger | Pino (child per sesi) |
| QR | qrcode (base64 data URL), qrcode-terminal (terminal fallback, dimatikan) |
| Browser identity | ['MyWhatsApp', 'Chrome', '1.0.0'] |
| Link preview | link-preview-js (getLinkPreview) |
| Media download | downloadContentFromMessage |
MongoDB
| Environment | Database | Host |
|---|---|---|
| lokal (default) | dazo | 127.0.0.1:27017 |
| remote | dari MONGO_URL | connection 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:
| Kejadian | report | Payload |
|---|---|---|
| Pesan masuk | false | Pesan baru dari WhatsApp (text/image/video/document/audio/location) |
| Update status pesan | true | Status 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:
// 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
┌──────────────────┐
│ 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
| Area | Lokasi |
|---|---|
| Bentuk payload webhook | src/utils/helper.ts — sendWebhook |
WEBHOOK_URL | .env — base URL backend Dazo |
| Event Socket.IO | src/service/socketService.ts, src/service/notificationService.ts |
Field instanceId konsistensi | folder session/auth/, key Map, room Socket.IO, kolom id device |
Langkah berikutnya
- Keamanan? Baca Security.
- Detail webhook payload? Baca Webhook Reference.
- Known issues? Baca Tech Debt.