D
Engineering

Order Flow

Alur checkout fisik dan digital — product inquiry ke payment reminder. Fast path konfirmasi alamat. Manual proof flow (risiko auto-paid). Instant payment flow via DazoApp/DOKU. Follow-up checkpoint dan status.

Engine Bot menangani checkout e-commerce penuh — dari inquiry produk, cart, alamat, ongkir, pembayaran, hingga follow-up terjadwal. Ada dua varian: physical dan digital.

Tenant Scope

Semua cart/product/order query terikat store_id. Cart checkout hanya memakai cart milik customer aktif. Lihat Multi-tenant.

Product dan Cart

Produk mendukung:

  • physical dan digital
  • Harga normal dan sale
  • Multiple variants dengan SKU, stock, harga, weight, image
  • Shipping dimensions dan origin
  • attachment_link pada snapshot digital product

Cart (models/carts.js) menyimpan:

  • wa_customer
  • store_id
  • product_id
  • optional variant_id
  • quantity
  • type_product
  • custom UUID id

Checkout Flow

text
product inquiry
  -> addToCarts
  -> cart items
  -> initiateOrChangeProductOrder(id_carts)
  -> create/update Orders
  -> create/update Order_Items snapshots
  -> physical: ask_shipping_address
  -> digital: ask_payment_method

Mixed physical dan digital cart ditolak oleh order service saat checkout.

Physical Order Flow

text
ask_shipping_address
  -> checkAddressCustomer
  -> address disimpan dan dikonfirmasi
  -> checkShippingCost
  -> RajaOngkir + custom courier
  -> ask_shipping_method
  -> getServicesShipping
  -> shipping disimpan
  -> ask_payment_method
  -> getPaymentMethod
  -> confirm_order
  -> confirmOrder
  -> payment_reminder

Fast path — konfirmasi alamat

Controller memiliki fast path: balasan konfirmasi alamat seperti sudah benar, benar, oke, atau lanjut langsung menjalankan checkShippingCost bila address fields lengkap. Fast path tidak melewati main orchestrator.

Digital Order Flow

text
checkout
  -> ask_payment_method
  -> getPaymentMethod
  -> confirm_order
  -> confirmOrder
  -> payment_reminder
  -> payment success
  -> attachment_link dikirim ke customer

Follow-up State

Checkpoint valid di setOrderFollowup:

CheckpointButuh order?
call_to_order❌
ask_product_qty❌
ask_shipping_address✅
ask_shipping_method✅
ask_payment_method✅
confirm_order✅
payment_reminder✅

Dua checkpoint pertama tidak membutuhkan order. Sisanya mengikuti order aktif.

Order Status

Nilai yang aktif di code:

FieldNilai
statuspending, process, cancel
payment_statusunpaid, paid
followup_stepcheckpoint di atas
proof_pending_verificationmenahan reminder tertentu

Payment Methods

Metode berasal dari settings.shipping.payment_method:

CodeMetode
bank transferTransfer manual ke rekening
codCash on delivery
qrQRIS
instant_paymentDazoApp + DOKU checkout

Label dan code berasal dari settings. Saat instant payment aktif, payment agent menyembunyikan bank transfer dan QRIS — COD tetap dapat ditampilkan bila aktif.

Manual Proof Flow

text
image URL
  -> fetch dan MIME check
  -> base64
  -> OpenAI vision description
  -> proofTransactionHandler
  -> addProofTransaction
  -> nominal dibandingkan dengan total order
  -> payment/order state diperbarui

Target: semua manual proof masuk proof_pending_verification; hanya payment gateway, rekonsiliasi bank, atau admin terautentikasi yang boleh menandai paid.

Instant Payment Flow

text
confirmOrder
  -> DazoApp create-checkout
  -> checkout URL dikirim ke customer
  -> DOKU memproses pembayaran
  -> DazoApp update order
  -> DazoApp callback Engine Bot
  -> Engine Bot kirim WhatsApp notification
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

Engine Bot tidak memanggil DOKU langsung. Detail contract ada di Instant Payment.

text
customer memilih instant_payment
  -> payment agent menyimpan metode
  -> confirmOrder
  -> confirmOrderProccessInstantPayment
  -> DazoApp create checkout
  -> checkout URL dikirim
  -> customer membayar di DOKU
  -> DazoApp update database
  -> DazoApp callback Engine Bot
  -> Engine Bot cancel follow-up
  -> Engine Bot load order/store/device
  -> Engine Bot send WhatsApp success message

Untuk produk digital, callback/status response menampilkan attachment_link dari order item snapshot bila tersedia. Produk fisik menerima pesan proses packing.

Error mapping

KondisiEngine Bot behavior
Timeout/ETIMEDOUTMinta customer mencoba lagi atau hubungi admin
HTTP 422Data order tidak valid
HTTP 404Order tidak ditemukan
HTTP 5xxSistem payment bermasalah
Invalid responseGeneric payment error

Rollback operasional

Rollback paling kecil: nonaktifkan instant_payment di settings.shipping.payment_method untuk store terdampak. Metode lain tetap mengikuti settings. Jangan menghapus order instant payment yang sudah terbentuk — rekonsiliasi status dengan DazoApp/DOKU.

Data Integrity Rules

Invariant yang seharusnya dipertahankan:

  • Semua cart/product/order query terikat store_id.
  • Cart checkout hanya memakai cart milik customer aktif.
  • Quantity integer positif.
  • Variant wajib berasal dari product yang dipilih.
  • order.total_price sama dengan jumlah item snapshot, belum termasuk shipping bila code pemanggil menambah shipping terpisah.
  • Order dan order items berubah secara atomic.
  • Payment status paid hanya berasal dari sumber terverifikasi.

Langkah berikutnya