BiZETO & Sajen: Fix Whitelist UUID Resolution, Auto-Reply, & Blonjo Push Notification
Perbaikan PostgreSQL UUID syntax error pada lookup whitelist, integrasi mapping WhatsApp LID ke nomor telepon, serta koreksi port webhook notifikasi pesanan ke Sajen API & Blonjo UI.
Pada pengujian end-to-end pesan pesanan masuk melalui WhatsApp (“Pesanan Minyak hemart 1 Segtiga biru 1kg 1 Gula pasir 1”), ditemukan dua isu kritis:
- Bot Suppressed Auto-Reply: Nomor pengirim yang sudah terdaftar di whitelist terdeteksi sebagai “Non-whitelisted”, sehingga bot menahan balasan otomatis ke customer.
- Push Notifikasi Blonjo Tidak Muncul: Webhook dari BiZETO ke Sajen API mengalami
connection refusedpada port 8000.
| Komponen | Penyebab Masalah | Dampak |
|---|---|---|
| Database Whitelist | Klausa SQL w.tenant_id = '' pada kolom PostgreSQL bertipe UUID memicu error 22P02: invalid input syntax for type uuid: "". |
Query DB.QueryRow gagal dan fallback mengembalikan false (seluruh pengirim dianggap non-whitelist). |
| WhatsApp Multi-Device LID | WhatsApp mengirim pesan dengan format LID (25666875576351@lid), bukan MSISDN reguler (62812...). |
Pencarian nomor HP stem tidak cocok jika mapping LID ke PN tidak di-resolve secara dinamis. |
| Sajen Webhook URL | Endpoint default di order_detector.go mengarah ke port internal 8000. |
Container sajen_backend_api berjalan di port 8005, memicu connection refused. |
- Mengganti perbandingan string kosong dengan
NULLIF($1, '')::uuidagar aman untuk tipe data UUID. - Mengumpulkan seluruh kandidat variasi nomor pengirim (raw LID, clean JID, stem, format
08..., format62..., dan@s.whatsapp.net). - Melakukan query resolusi mapping nomor telepon (
jid_pn) dari tabeljid_mappingssecara otomatis untuk akun berformat LID.
// Kumpulkan kandidat nomor dan resolve mapping LID -> PNvar mappedPN string_ = DB.QueryRow(` SELECT jid_pn FROM jid_mappings WHERE (tenant_id = NULLIF($1, '')::uuid OR tenant_id IS NULL) AND (jid_lid = $2 OR jid_lid = $3 OR jid_lid = $4) LIMIT 1`, tenantID, jid, cleanJID, rawNum).Scan(&mappedPN)- Mengarahkan default endpoint Sajen API ke
http://sajen_backend_api:8005/api/v1/notifications/orders. - Membersihkan format nomor telepon pelanggan sebelum dikirimkan ke webhook agar Blonjo UI menampilkan nomor yang ramah pengguna.
- Menangkap dan menyimpan pemetaan
SenderAltdan JID pasangan (LID vs Phone Number) pada setiap pesan masuk. - Mengevaluasi status whitelist dari kedua sisi (
senderJIDdanchatJID).
- ✅ Test Query Database: Query
IsWhitelisteduntuk LID25666875576351@lidterverifikasi mengembalikanexists = true(t). - ✅ Test Webhook Sajen: Request simulasi pesanan dari container
bizeto_backendkesajen_backend_api:8005berhasil dengan status201 Created({"status":"success","notification_id":2}). - ✅ Deployment VPS: Binary
bizeto-serverberhasil di-build, di-deploy, dan containerbizeto_backendberjalan sehat (healthy).