Cara Mengajar PayPing Memahami Bank Anda
PayPing Lite beroperasi sepenuhnya di luar talian (offline). Aplikasi ini langsung tidak memerlukan kebenaran internet dan tidak pernah menghantar notifikasi anda ke mana-mana pelayan awan (cloud). Untuk menukar notifikasi bank dan e-dompet kepada suara pengumuman ringgit yang pantas, PayPing menggunakan parser ungkapan nalar (regular expressions) yang deterministik.
Terdapat dua cara untuk menambah sokongan bagi bank atau e-dompet baharu:
- Penjana Visual Dalam Aplikasi (Disyorkan): Tekan pada notifikasi yang diterima di telefon anda dan biarkan PayPing membina peraturan secara automatik.
- Definisi JSON (Untuk Pengguna Lanjutan & Komuniti): Tulis peraturan regex mudah alih yang boleh dikongsi ke dalam pustaka parser.
1. Aliran Visual Berpandu Dalam Aplikasi
Apabila PayPing Lite menerima notifikasi daripada aplikasi perbankan yang belum dikenali, ia disimpan secara selamat di dalam tab Perlu Semakan (Needs Review) tanpa meneka secara melulu.
- Buka PayPing Lite dan pilih tab Perlu Semakan.
- Tekan notifikasi yang ingin diajar kepada PayPing.
- Pilih "Bina parser daripada notifikasi ini".
-
Sorot jumlah wang: Paparan aplikasi akan menunjukkan teks notifikasi. Cukup sekadar menekan atau memilih jumlah wang (contoh:
RM 45.20). PayPing akan menjana corak pengekstrakan secara automatik. -
Pilih arah transaksi:
- Duit Masuk (Money In): Pindahan DuitNow diterima, bayaran QR diterima, gaji atau deposit tunai.
- Duit Keluar (Money Out): Transaksi kad debit/kredit, bayaran QR dibuat, pembayaran bil.
- Maklumat / Abaikan (Info): Kod OTP/TAC, promosi diskaun, amaran keselamatan log masuk.
- Uji pada rekod sejarah terkini: PayPing akan menguji peraturan baharu terhadap notifikasi terdahulu daripada aplikasi yang sama untuk memastikan tiada padanan palsu (false positive).
- Tekan Simpan Parser. Notifikasi seterusnya akan diproses dan diumumkan secara bersuara serta-merta.
2. Skema JSON Parser
Setiap parser di dalam pustaka ini merupakan dokumen JSON lengkap yang mematuhi schemaVersion: 1.
{
"schemaVersion": 1,
"id": "mybank",
"name": "My Bank Malaysia",
"version": 1,
"author": "Penyumbang Komuniti",
"description": "Parser untuk notifikasi terima pindahan dan caj kad My Bank.",
"androidPackages": ["com.mybank.app"],
"iosAppNames": ["My Bank Mobile"],
"rules": [
{
"id": "mybank.received.v1",
"priority": 200,
"match": {
"title": "duit diterima|duitnow received",
"body": "dipindahkan ke akaun anda"
},
"direction": "in",
"confidence": "high",
"extract": {
"amount": "(?:RM|MYR)\s*(?[\d,]+\.?\d{0,2})",
"counterparty": "daripada\s+(?.+?)(?:\s+pada|\.|$)",
"reference": "ref(?:erens)?\s*(?:no)?:?\s*(?[A-Z0-9]+)"
}
}
]
}
Medan Utama Peraturan (Rules)
-
id: Pengenalpasti unik bertitik mengikut format<id-bank>.<nama-peraturan>.v<versi>(contoh:hsbc.card-charged.v1). -
priority: Nombor integer (contoh:200). Peraturan dengan nombor lebih tinggi akan dinilai terlebih dahulu. Letakkan peraturan khusus (seperti caj kad kredit tertentu) lebih tinggi daripada peraturan umum. -
match: Objek yang mengandungi corak regex pilihantitledanbody. Jika kedua-duanya dinyatakan, kedua-duanya mesti sepadan. Padanan tidak sensitif huruf besar/kecil (case-insensitive). -
direction:"in"(wang masuk),"out"(wang keluar), atau"info"(bukan kewangan seperti OTP atau promosi). -
confidence:"high"untuk transaksi sah yang perlu direkod dan disebut;"none"untuk notifikasi yang tidak boleh direkodkan sebagai transaksi kewangan. -
extract: Corak pengekstrakan yang menggunakan kumpulan bernama (named capture groups):(?<amount>...): Jumlah angka transaksi (digit, koma, dan titik perpuluhan).(?<currency>...): Mata wang pilihan (lalai kepadaMYRjika tidak dinyatakan).(?<counterparty>...): Nama peniaga atau nama penghantar/penerima.(?<reference>...): Nombor rujukan transaksi.
3. Peraturan Ketat untuk Regex yang Selamat
Memandangkan PayPing Lite beroperasi di latar belakang telefon pintar (Android Hermes/V8 dan iOS JavaScriptCore/Swift), pelaksanaan regex mestilah 100% konsisten, selamat dan pantas:
Panduan Keselamatan Enjin Regex
-
DILARANG Menggunakan Lookbehind: Lookbehind positif
(?<=...)dan negatif(?<!...)dilarang sama sekali. Enjin peranti berbeza mengendalikan lookbehind secara tidak seragam dan boleh menyebabkan aplikasi terhenti (crash). Gunakan kumpulan awalan bukan tangkapan(?:awalan)bersama kumpulan bernama. -
DILARANG Pengulangan Bersarang (Nested Quantifiers): Jangan sekali-kali menggandakan penentu kuantiti seperti
(a+)+atau(.*)*. Ini boleh menyebabkan kegagalan catastrophic backtracking (ReDoS) yang membekukan telefon. - Had Masa 50 Milisaat: Sebarang penilaian regex yang melebihi 50ms akan dibatalkan secara automatik oleh enjin parser PayPing demi menjimatkan bateri dan kelancaran sistem.
- Had 4,000 Aksara: Teks notifikasi yang melebihi 4,000 aksara akan dipendekkan secara automatik sebelum diproses.
-
Sintaks Kumpulan Bernama: Sentiasa gunakan format standard
(?<nama>...).
4. Contoh Transaksi Sebenar
Contoh A: Wang Masuk (Pindahan DuitNow Diterima)
Teks Notifikasi: You've received RM 120.00 in your A/C from AHMAD BIN ALI on 24/10/2026.
{
"id": "sample.duitnow-in.v1",
"priority": 200,
"match": {
"body": "You've received .* in your A/C"
},
"direction": "in",
"confidence": "high",
"extract": {
"amount": "You've received\s+(?RM|MYR)?\s*(?[\d,]+\.?\d{0,2})",
"counterparty": "from\s+(?.+?)(?:\s+pada|\.|$)"
}
}
Hasil: Arah adalah in, jumlah adalah 12000 sen (RM 120.00), pihak lawan adalah AHMAD BIN ALI.
Contoh B: Wang Keluar (Caj Kad Kredit)
Teks Notifikasi: MYR950.00 was charged to your credit card ending 1681 at MYDIN MART on 21/09/25.
{
"id": "hsbc.card-charged.v1",
"priority": 200,
"match": {
"body": "was charged to your (?:supp )?credit card"
},
"direction": "out",
"confidence": "high",
"extract": {
"amount": "(?RM|MYR)\s*(?[\d,]+\.?\d{0,2})",
"counterparty": "at (?.+?) on \d"
}
}
Hasil: Arah adalah out, jumlah adalah 95000 sen (RM 950.00), pihak lawan adalah MYDIN MART.
Contoh C: Penapis Negatif (Abaikan Notifikasi Promosi)
Teks Notifikasi: Tawaran Khas! Nikmati pulangan tunai RM 20.00 bersama rakan niaga kami hari ini.
{
"id": "sample.promo-filter.v1",
"priority": 300,
"match": {
"body": "pulangan tunai bersama|baucar diskaun|nikmati ganjaran"
},
"direction": "info",
"confidence": "none"
}
Hasil: Arah adalah info dengan keyakinan none. PayPing Lite tidak akan merekod atau membaca promosi ini.
5. Cara Menghantar Parser Baharu atau Sampel Notifikasi
Bantu kami memperluaskan pustaka parser komuniti! Sumbangan parser dan sampel notifikasi bank amat dialu-alukan:
- Padamkan maklumat sensitif (Anonymise): Gantikan nama sebenar dengan nama samaran (contoh: "SITI AMINAH"), padamkan nombor akaun/kad penuh (contoh: "ending 1234"), dan ubah sedikit jumlah wang.
- Buka Templat Sumbangan Parser di GitHub.
- Isikan nama bank, ID pakej aplikasi, dan teks contoh notifikasi.
- Penyelenggara akan menyemak, mencipta ujian automatik di dalam
parser-library/fixtures-real, dan menyertakannya ke dalam keluaran rasmi seterusnya.