Engine Bot memakai hierarchical multi-agent architecture. HTTP controller menyiapkan context tenant dan customer, main orchestrator memilih specialist agent, lalu specialist menjalankan LangChain tools yang membaca atau mengubah MongoDB dan API eksternal.
WhatsApp/API client
-> Express auth dan request buffer
-> mainController.botFunction
-> context loader dan intent detector
-> main orchestrator
-> specialist agent
-> domain tools/service
-> MongoDB atau external API
-> response formatter
-> optional BullMQ follow-upRuntime Components
| Komponen | Path | Tanggung jawab |
|---|---|---|
| HTTP server | app.js | Express, CORS, Socket.IO, MongoDB startup, Redis health, routes |
| Routes | routes/chatbotRoutes.js | Seluruh endpoint /api dan JWT middleware |
| Main controller | controllers/mainController.js | Buffer, dedup, context, orchestration, response, scheduling |
| Main prompt | prompt/main-agent.md | Aturan routing ke specialist agent |
| Order agents | subagents/subagents-orders.js | Customer service, admin, logistics |
| Payment agent | subagents/subagents-payment.js | Metode bayar, konfirmasi, status instant payment |
| Booking agent | subagents/subagents-booking.js | Facade booking; tool backend belum diimplementasikan |
| Order tools | tools/order/tools.js | Cart, checkout, address, shipping, payment, complaint |
| Domain services | service/ | Query, formatting, order lifecycle, external API |
| Follow-up producer | scheduler/workerService.js | Generate dan enqueue delayed job |
| Follow-up worker | scheduler/worker/worker.js | Re-check order dan kirim pesan WhatsApp |
Request Lifecycle
verifyTokenmemeriksa allowlist IP atau JWT.functionRouteBotmemvalidasistore_id,customer_id, danagent_id.- Request identik dalam 10 detik didedup memakai in-memory map.
- Pesan cepat dari customer sama digabung berdasarkan
time_reply. botFunctionmemuat customer, agent, store, dan maksimal 10 history messages.- Audio ditranskripsi; gambar dideskripsikan dan dapat masuk proof-of-payment flow.
- Active order dan
followup_stepdibaca untuk menentukan context dan routing. - Saat konfirmasi alamat memenuhi fast path,
checkShippingCostdipanggil tanpa main orchestrator. - Di luar order follow-up, katalog, QnA, dan intent dimuat.
- Main orchestrator memanggil satu specialist tool berdasarkan prompt.
- Output JSON dibersihkan, gambar Markdown dipisahkan, token main orchestrator dicatat.
- Follow-up job dijadwalkan bila aturan order/intent terpenuhi.
Specialist Agents
Customer Service
Tool wrapper: customer_service_department.
| Aspek | Nilai |
|---|---|
| Model | gpt-4o-mini |
| Temperature | 0.5 |
| Prompt | prompt/order/customer-service.md |
Fungsi: FAQ dan informasi toko, katalog dan stok produk, complaint, constraint customer.
Admin
Tool wrapper: admin_department.
| Aspek | Nilai |
|---|---|
| Model | gpt-5.4 |
| Temperature | 0 |
| Prompt | prompt/order/admin.md |
Fungsi: tambah/hapus cart, tampilkan context cart, checkout cart menjadi order, perubahan produk/varian/quantity melalui order tools.
Logistics
Tool wrapper aktual: logistics_departemen.
| Aspek | Nilai |
|---|---|
| Model | gpt-5.4 |
| Temperature | 0 |
| Prompt | prompt/order/logistics-agent.md |
Fungsi: parse dan validasi alamat, hitung ongkir, simpan pilihan kurir/service, tracking resi.
Payment
Tool wrapper: payment_department.
| Aspek | Nilai |
|---|---|
| Model | gpt-5.4 |
| Temperature | 0 |
| Prompt | prompt/order/payment.md |
Fungsi: tampilkan dan simpan metode pembayaran, konfirmasi order, buat checkout instant payment, cek status instant payment.
Booking
Tool wrapper aktual: booking_departement.
| Aspek | Nilai |
|---|---|
| Model | gpt-4o-mini |
| Temperature | 0 |
| Prompt | prompt/booking/booking.md |
Agent dan prompt tersedia, tetapi seluruh fungsi di tools/booking/tools.js mengembalikan pesan belum diimplementasikan. Jangan menganggap booking production-ready.
Model Mapping
| Komponen | Model | Temperature | Path |
|---|---|---|---|
| Main orchestrator | gpt-4o | 0 | controllers/mainController.js |
| Customer service agent | gpt-4o-mini | 0.5 | subagents/subagents-orders.js |
| Admin agent | gpt-5.4 | 0 | subagents/subagents-orders.js |
| Logistics agent | gpt-5.4 | 0 | subagents/subagents-orders.js |
| Payment agent | gpt-5.4 | 0 | subagents/subagents-payment.js |
| Booking agent | gpt-4o-mini | 0 | subagents/subagents-booking.js |
| Image description/proof | gpt-5.4 | API default | utils/util.js |
| Audio transcription | gpt-4o-transcribe | N/A | utils/util.js |
| Intent detector | configured in source | N/A | service/intent.js |
| Address formatter | gpt-4o-mini | 0.1 | service/address.js |
| Product formatter | gpt-4o-mini | 0 | service/product.js |
| Order formatter | gpt-4o-mini | 0 | service/order.js |
| Follow-up refinement | gpt-4o-mini | source default | scheduler/FollowUpMessages.js |
| Welcome generator | gpt-4o-mini | 0.8 | controllers/mainController.js |
| AI testing endpoint | gpt-4o-mini | 0.1 | controllers/aiAgentController.js |
Main Orchestrator Settings
parallel_tool_calls: falseresponse_format: { type: "json_object" }- History maksimal 10 messages
- Tool wrappers dibangun per request
- Active order hint ditambahkan untuk routing logistics/payment
Main Orchestrator Prompt
prompt/main-agent.md — aturan routing:
ATURAN ROUTING (PANGGIL SALAH SATU):
- customer_service_department : Sapaan, cari produk, FAQ, komplain
- admin_department : Keranjang, pilih varian/jumlah, checkout
- logistics_departemen : Alamat, cek ongkir, pilih kurir, lacak resi
- payment_department : Metode pembayaran, konfirmasi pesanan
- booking_departement : Reservasi event (stub)Orchestrator adalah router — dilarang menjawab dengan pengetahuan bawaan. Setelah specialist agent selesai, orchestrator format output ke JSON:
{
"answer": "String balasan natural tanpa markdown (100% isi dari sub-agent).",
"images": [
{ "caption": "Nama Produk", "image": ["URL"] }
]
}Context Strategy
Data selalu dimuat:
- Customer, agent, store
- Kategori dan tipe produk
- Rekening bank
- Nama customer service
- Active order
Data berat hanya dimuat di luar order follow-up:
- Katalog produk penuh
- QnA agent
- OpenAI intent detection
- Produk promo dan termurah
Order follow-up yang memicu lightweight context
| Checkpoint | Konteks |
|---|---|
ask_shipping_address | lightweight |
ask_shipping_method | lightweight |
ask_payment_method | lightweight |
confirm_order | lightweight |
payment_reminder | lightweight |
Context Controls
- QnA dipotong maksimal 3.500 karakter.
- Katalog penuh dilewati selama active order follow-up.
- Intent detection dilewati selama active order follow-up.
- Product special/cheapest hanya dimuat bila intent memiliki entity.
Conversation State
Persistent business state berada di MongoDB melalui order, cart, dan followup_step. History percakapan berasal dari request client dan dipotong menjadi 10 messages. thread_id diberikan ke LangChain, tetapi code tidak memasang persistent checkpointer.
In-memory state:
userBuffer: message batchinglastRequestPerCustomer: duplicate guard
Keduanya hilang saat restart dan tidak dibagi antar multiple instances.
Prompt Loading
Prompt Markdown dibaca dari filesystem melalui readMdPromptFile/promptWithContext saat agent dibangun. Perubahan prompt berlaku pada request berikutnya; restart tidak diwajibkan oleh loader saat ini.
Response Formatting
Main orchestrator diminta menghasilkan JSON dengan answer dan images. Controller tetap memiliki fallback untuk raw text dan ekstraksi syntax gambar Markdown. Hanya URL gambar yang lolos aturan extractAndCleanImages yang dipindahkan ke response images.
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
Karena itu, log_request_openai bukan total biaya OpenAI end-to-end.
Perubahan Model
Saat mengganti model:
- Uji tool calling untuk seluruh specialist agent.
- Uji JSON output main orchestrator.
- Uji address extraction dan variant matching.
- Uji payment confirmation tanpa mengandalkan output model sebagai sumber kebenaran finansial.
- Perbarui tabel di atas dan pricing callback bila masih dipakai.
Langkah berikutnya
- Cara order mengalir? Baca Order Flow.
- Cara follow-up mengirim? Baca Follow-up Scheduler.
- Known issues agent? Baca Tech Debt.