Engine Bot menjadwalkan follow-up pesan WhatsApp via Redis + BullMQ. Producer mengenqueue delayed job, worker memproses dengan re-check order/payment sebelum mengirim.
Processes
Produksi membutuhkan dua process:
node app.js # HTTP server + producer
node scheduler/worker/worker.js # follow-up worker (consumer)Redis dan BullMQ
| Komponen | Nilai |
|---|---|
| Queue name | followUpAi |
| Job name | send_message |
| Job ID | ${wa_customer}_${store_id} |
| Delay | sending_time * 60 * 1000 (menit → ms) |
Satuan sending_time | menit |
| Worker concurrency | 10 |
Producer
- Path:
scheduler/workerService.js - Job ID:
${wa_customer}_${store_id} - Satu delayed/waiting job per customer/store diganti oleh schedule baru — job lama di-overwrite.
Worker
- Path:
scheduler/worker/worker.js - Concurrency: 10
- Re-check payment/proof sebelum pengiriman — bila order sudah
paidataucancelled, job dilewati. - Kirim text terlebih dahulu, lalu optional image.
Follow-up Configuration
Config berada di agents.followup (lihat Agents Schema):
call_to_order
ask_product_qty
ask_shipping_address
ask_shipping_method
ask_payment_method
confirm_order
payment_reminderSetiap config memiliki:
| Field | Tipe | Fungsi |
|---|---|---|
message | string | Mustache template |
is_generate_ai | boolean | optional AI rewrite via gpt-4o-mini |
sending_time | number | Delay dalam menit |
image | string | optional attachment URL |
fileName | string | Template file reference |
Graceful Degradation
Jika Redis tidak tersedia saat scheduling:
- 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.
Health Check
curl http://localhost:1313/healthResponse:
{
"status": "ok",
"service": "engine-bot",
"redis": {
"healthy": true,
"message": "Redis is available - follow-up messages enabled",
"timestamp": "..."
},
"timestamp": "..."
}Failure Runbook
Redis Down
- Cek
/healthdan log[REDIS]/[WORKER]. - Pulihkan Redis service.
- Restart app dan worker karena retry memiliki batas.
- Verifikasi producer dapat menambah job dan worker menyelesaikannya.
- Cek pending orders yang kehilangan follow-up saat outage.
Worker Down
- Cek PM2 process
worker-followupai(production) /worker-followupai-dev(staging). - Restart worker sesuai environment.
- Cek queue delayed/waiting/failed di Redis.
- Verifikasi messaging API (
BASE_URL_SEND_MESSAGE) reachable.
MongoDB Down
- Cek MongoDB langsung —
/healthtidak mendeteksinya. - Pulihkan koneksi sebelum menerima traffic.
- Restart app jika startup sebelumnya gagal.
- Audit partial order writes karena checkout belum transactional.
DazoApp Payment Down
- Nonaktifkan
instant_paymentpada store settings bila outage panjang. - Pertahankan metode lain yang aman dan aktif.
- Cek timeout/error log
[INSTANT_PAYMENT]. - Rekonsiliasi order pending setelah DazoApp pulih.
Deployment Caveats
- Workflow memakai
npm install --legacy-peer-deps; lockfile saat ini di-ignore. - Step install workflow tidak menetapkan
working-directoryke project deployment. - Automated tests belum tersedia.
- Syntax check manual:
node --check <file>.
Lihat CI/CD untuk detail workflow.
Langkah berikutnya
- Cara order mengalir? Baca Order Flow.
- Detail config agents? Baca Agents Schema.
- Known issues scheduler? Baca Tech Debt.