Lanjut ke konten
Samkarsa Logbook

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.

Backend,Fix,Database,WhatsApp2mnt baca

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:

  1. Bot Suppressed Auto-Reply: Nomor pengirim yang sudah terdaftar di whitelist terdeteksi sebagai “Non-whitelisted”, sehingga bot menahan balasan otomatis ke customer.
  2. Push Notifikasi Blonjo Tidak Muncul: Webhook dari BiZETO ke Sajen API mengalami connection refused pada 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, '')::uuid agar aman untuk tipe data UUID.
  • Mengumpulkan seluruh kandidat variasi nomor pengirim (raw LID, clean JID, stem, format 08..., format 62..., dan @s.whatsapp.net).
  • Melakukan query resolusi mapping nomor telepon (jid_pn) dari tabel jid_mappings secara otomatis untuk akun berformat LID.
// Kumpulkan kandidat nomor dan resolve mapping LID -> PN
var 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 SenderAlt dan JID pasangan (LID vs Phone Number) pada setiap pesan masuk.
  • Mengevaluasi status whitelist dari kedua sisi (senderJID dan chatJID).

  • ✅ Test Query Database: Query IsWhitelisted untuk LID 25666875576351@lid terverifikasi mengembalikan exists = true (t).
  • ✅ Test Webhook Sajen: Request simulasi pesanan dari container bizeto_backend ke sajen_backend_api:8005 berhasil dengan status 201 Created ({"status":"success","notification_id":2}).
  • ✅ Deployment VPS: Binary bizeto-server berhasil di-build, di-deploy, dan container bizeto_backend berjalan sehat (healthy).