engine-bot memanggil enam service eksternal. URL dan kredensial di-hardcode di config/env.js, bukan dari secret manager.
Peta service
| Service | Konstanta | Dipakai untuk | Lokasi pemanggilan |
|---|---|---|---|
| OpenAI | env.apiKey | Orchestration, specialist agents, vision, transcription, welcome, intent | controllers/, subagents/, utils/util.js, service/intent.js |
| MongoDB | config/db.js | Tenant, customer, product, cart, order, settings, logs | semua |
| Redis/BullMQ | (implicit) | Delayed follow-up jobs | scheduler/workerService.js, scheduler/worker/worker.js |
| RajaOngkir/Komerce | env.apiKey_RajaOngkirV2 | Ongkir domestik dan tracking | service/ongkir.js |
| DazoApp/DOKU | env.base_url | Instant payment checkout + status | service/order.js |
| Messaging API | env.TOKEN_SEND_MESSAGE, env.BASE_URL_SEND_MESSAGE | Kirim text/image WhatsApp | scheduler/worker/worker.js, controllers/webhookController.js |
OpenAI
Engine Bot memakai OpenAI untuk:
| Komponen | Model | Path |
|---|---|---|
| Main orchestrator | gpt-4o | controllers/mainController.js |
| Customer service agent | gpt-4o-mini | subagents/subagents-orders.js |
| Admin agent | gpt-5.4 | subagents/subagents-orders.js |
| Logistics agent | gpt-5.4 | subagents/subagents-orders.js |
| Payment agent | gpt-5.4 | subagents/subagents-payment.js |
| Booking agent | gpt-4o-mini | subagents/subagents-booking.js |
| Image description/proof | gpt-5.4 | utils/util.js |
| Audio transcription | gpt-4o-transcribe | utils/util.js |
| Intent detector | configured in source | service/intent.js |
| Address formatter | gpt-4o-mini | service/address.js |
| Product formatter | gpt-4o-mini | service/product.js |
| Order formatter | gpt-4o-mini | service/order.js |
| Follow-up refinement | gpt-4o-mini | scheduler/FollowUpMessages.js |
| Welcome generator | gpt-4o-mini | controllers/mainController.js |
| AI testing endpoint | gpt-4o-mini | controllers/aiAgentController.js |
Cost tracking
Main orchestrator memasang callback token dan menyimpan hasil ke log_request_openai. Welcome generator juga mencatat token/cost. Belum tercakup penuh: specialist agents, intent detection, vision, audio transcription, follow-up AI refinement. log_request_openai bukan total biaya OpenAI end-to-end. Lihat AI Models.
MongoDB
| Environment | Database | Host |
|---|---|---|
local | dazo | 127.0.0.1:27017 |
| lainnya | dazodev | remote (kredensial hardcoded) |
Detail di Database.
Redis/BullMQ
| Komponen | Nilai |
|---|---|
| Queue name | followUpAi |
| Job name | send_message |
| Job ID | ${wa_customer}_${store_id} |
| Delay | sending_time * 60 * 1000 (menit → ms) |
| Worker concurrency | 10 |
Producer: scheduler/workerService.js. Worker: scheduler/worker/worker.js.
Graceful degradation
Jika Redis tidak tersedia:
- Core chatbot tetap berjalan.
- MongoDB/order/payment flow tetap dapat berjalan.
- Follow-up baru dilewati dan hanya dicatat di log.
- Worker tidak memproses delayed jobs.
Producer dan worker berhenti retry setelah lebih dari tiga retry attempts. Redis health client tidak retry setelah initial failure. Automatic recovery tanpa process restart tidak dijamin. Lihat Follow-up Scheduler.
RajaOngkir/Komerce
| Endpoint | Fungsi |
|---|---|
env.base_url_rajaOngkir + ... | Ongkir domestik |
| Komerce tracking | Tracking resi |
Dipanggil via service/ongkir.js. API key dari env.apiKey_RajaOngkirV2.
DazoApp/DOKU — instant payment
Engine Bot tidak memanggil DOKU langsung. Engine Bot memanggil DazoApp, DazoApp memanggil DOKU.
| Tanggung jawab | Sistem |
|---|---|
| Percakapan, pilih metode, request checkout, cek status, kirim WhatsApp | Engine Bot |
| Create checkout, simpan payment metadata/status, terima webhook DOKU | DazoApp |
| Payment page dan payment processing | DOKU |
Create checkout
POST {env.base_url}api/payment/engine-bot/create-checkout
Content-Type: application/jsonEngine Bot hanya memerlukan success dan checkout_url. Request timeout: 10 detik.
Check status
POST {env.base_url}api/payment/engine-bot/check-status/{order_number}Status yang ditangani: paid, pending, expired, failed.
Payment notification callback
DazoApp memanggil Engine Bot:
POST {ENGINE_BOT_URL}/api/webhook/payment-notificationLihat Payment Webhook.
Messaging API
| Konstanta | Nilai |
|---|---|
env.TOKEN_SEND_MESSAGE | Token untuk messaging API |
env.BASE_URL_SEND_MESSAGE | https://api.dazo.dev/v1/send_message_admin |
Dipanggil dari worker (scheduler/worker/worker.js) dan webhook controller (controllers/webhookController.js) untuk mengirim text/image WhatsApp.
Dependency diagram
┌──────────────────┐
│ dazoapp (Laravel)│
│ JWT issuer │
└────────┬─────────┘
│ Bearer <jwt>
▼
┌──────────────────┐
│ backend-go │
│ Fiber :8081 │
└────────┬─────────┘
│ POST /api/chatbot-api
▼
┌──────────────────┐
│ engine-bot │
│ Express :1313 │
└──┬────────┬──────┘
│ │
OpenAI │ │ Mongoose
▼ ▼
┌──────────────┐ ┌──────────────┐
│ OpenAI API │ │ MongoDB │
│ gpt-4o/5.4 │ │ dazo │
└──────────────┘ └──────────────┘
▲
│ shared collections
│ (products, agents, settings)
┌──────────────┐
│ dazoapp │
│ (writer) │
└──────────────┘
┌──────────────┐ ┌──────────────┐
│ Redis + │ │ RajaOngkir │
│ BullMQ │ │ /Komerce │
│ (followUpAi)│ └──────────────┘
└──────┬───────┘
│
▼
┌──────────────┐ ┌──────────────┐
│ Worker │ │ DazoApp + │
│ (worker.js) │────────▶│ DOKU │
└──────┬───────┘ └──────────────┘
│
▼
┌──────────────┐
│ Messaging │
│ API │
│ (WhatsApp) │
└──────────────┘Yang TIDAK boleh diubah tanpa koordinasi
| Area | Lokasi |
|---|---|
jwtSecret | config/env.js — wajib sync dengan dazoapp + backend-go |
base_url, urlEngine, urlApi | config/env.js — URL service |
TOKEN_SEND_MESSAGE, BASE_URL_SEND_MESSAGE | config/env.js — messaging API contract |
apiKey_RajaOngkirV2 | config/env.js — RajaOngkir |
| DazoApp payment endpoints | api/payment/engine-bot/create-checkout, check-status/{order_number} |
| Webhook callback | POST /api/webhook/payment-notification |
Langkah berikutnya
- Cara kerja agent? Baca Agent Architecture.
- Cara follow-up mengirim? Baca Follow-up Scheduler.
- Detail instant payment? Baca Instant Payment.