D
Engineering

External Services

Enam service eksternal — OpenAI, MongoDB, Redis/BullMQ, RajaOngkir/Komerce, DazoApp/DOKU, Messaging API. URL dan kredensial hardcoded di config/env.js, bukan secret manager.

engine-bot memanggil enam service eksternal. URL dan kredensial di-hardcode di config/env.js, bukan dari secret manager.

Peta service

ServiceKonstantaDipakai untukLokasi pemanggilan
OpenAIenv.apiKeyOrchestration, specialist agents, vision, transcription, welcome, intentcontrollers/, subagents/, utils/util.js, service/intent.js
MongoDBconfig/db.jsTenant, customer, product, cart, order, settings, logssemua
Redis/BullMQ(implicit)Delayed follow-up jobsscheduler/workerService.js, scheduler/worker/worker.js
RajaOngkir/Komerceenv.apiKey_RajaOngkirV2Ongkir domestik dan trackingservice/ongkir.js
DazoApp/DOKUenv.base_urlInstant payment checkout + statusservice/order.js
Messaging APIenv.TOKEN_SEND_MESSAGE, env.BASE_URL_SEND_MESSAGEKirim text/image WhatsAppscheduler/worker/worker.js, controllers/webhookController.js

OpenAI

Engine Bot memakai OpenAI untuk:

KomponenModelPath
Main orchestratorgpt-4ocontrollers/mainController.js
Customer service agentgpt-4o-minisubagents/subagents-orders.js
Admin agentgpt-5.4subagents/subagents-orders.js
Logistics agentgpt-5.4subagents/subagents-orders.js
Payment agentgpt-5.4subagents/subagents-payment.js
Booking agentgpt-4o-minisubagents/subagents-booking.js
Image description/proofgpt-5.4utils/util.js
Audio transcriptiongpt-4o-transcribeutils/util.js
Intent detectorconfigured in sourceservice/intent.js
Address formattergpt-4o-miniservice/address.js
Product formattergpt-4o-miniservice/product.js
Order formattergpt-4o-miniservice/order.js
Follow-up refinementgpt-4o-minischeduler/FollowUpMessages.js
Welcome generatorgpt-4o-minicontrollers/mainController.js
AI testing endpointgpt-4o-minicontrollers/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

EnvironmentDatabaseHost
localdazo127.0.0.1:27017
lainnyadazodevremote (kredensial hardcoded)

Detail di Database.

Redis/BullMQ

KomponenNilai
Queue namefollowUpAi
Job namesend_message
Job ID${wa_customer}_${store_id}
Delaysending_time * 60 * 1000 (menit → ms)
Worker concurrency10

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

EndpointFungsi
env.base_url_rajaOngkir + ...Ongkir domestik
Komerce trackingTracking 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 jawabSistem
Percakapan, pilih metode, request checkout, cek status, kirim WhatsAppEngine Bot
Create checkout, simpan payment metadata/status, terima webhook DOKUDazoApp
Payment page dan payment processingDOKU

Create checkout

http
POST {env.base_url}api/payment/engine-bot/create-checkout
Content-Type: application/json

Engine Bot hanya memerlukan success dan checkout_url. Request timeout: 10 detik.

Check status

http
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:

http
POST {ENGINE_BOT_URL}/api/webhook/payment-notification

Lihat Payment Webhook.

Messaging API

KonstantaNilai
env.TOKEN_SEND_MESSAGEToken untuk messaging API
env.BASE_URL_SEND_MESSAGEhttps://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

text
                  ┌──────────────────┐
                  │  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

AreaLokasi
jwtSecretconfig/env.js — wajib sync dengan dazoapp + backend-go
base_url, urlEngine, urlApiconfig/env.js — URL service
TOKEN_SEND_MESSAGE, BASE_URL_SEND_MESSAGEconfig/env.js — messaging API contract
apiKey_RajaOngkirV2config/env.js — RajaOngkir
DazoApp payment endpointsapi/payment/engine-bot/create-checkout, check-status/{order_number}
Webhook callbackPOST /api/webhook/payment-notification

Langkah berikutnya