Commit 43b2bd8712272759328e65296c1094004e2b2d3a
1 parent
c622bef69c
Exists in
master
Terminate if undefined pin
Showing 3 changed files with 245 additions and 2 deletions Side-by-side Diff
config.sample.json
... | ... | @@ -0,0 +1,230 @@ |
1 | +{ | |
2 | + "handler_name": "MKIOS-TEST", | |
3 | + "pull_interval_ms": 300, | |
4 | + "partner": { | |
5 | + "pin": "1212", | |
6 | + "modem": { | |
7 | + "dev": "/home/adhisimon/ttyUSB0ksa" | |
8 | + } | |
9 | + }, | |
10 | + "products": [ | |
11 | + "_TST1", | |
12 | + "_DUMMY5", | |
13 | + "_DUMMY10", | |
14 | + "TSEL5", | |
15 | + "TSEL10", | |
16 | + "TSEL15", | |
17 | + "TSEL20", | |
18 | + "TSEL25", | |
19 | + "TSEL40", | |
20 | + "TSEL50", | |
21 | + "TSEL100", | |
22 | + "TSEL150", | |
23 | + "TSEL200" | |
24 | + | |
25 | + ], | |
26 | + "remote_products": { | |
27 | + "TST1": "*777*<DESTINATION>*5*<PIN>#,5000", | |
28 | + "DUMMY5": "*369*3*<DESTINATION>*5*<PIN>#,5000", | |
29 | + "_DUMMY10": "*369*3*<DESTINATION>*10*<PIN>#,10000", | |
30 | + "_DUMMY5": "*369*2*<DESTINATION>*1*101*<PIN>#,2GBCOMBO", | |
31 | + "DUMMY10": "*777*<DESTINATION>*025*<PIN>#,10000", | |
32 | + "TSEL5": "*777*<DESTINATION>*5*<PIN>#,5000", | |
33 | + "TSEL10": "*777*<DESTINATION>*10*<PIN>#,10000", | |
34 | + "TSEL15": "*777*<DESTINATION>*10*<PIN>#,15000", | |
35 | + "TSEL20": "*777*<DESTINATION>*020*<PIN>#,20000", | |
36 | + "TSEL25": "*777*<DESTINATION>*025*<PIN>#,25000", | |
37 | + "TSEL40": "*777*<DESTINATION>*040*<PIN>#,40000", | |
38 | + "TSEL50": "*777*<DESTINATION>*050*<PIN>#,50000", | |
39 | + "TSEL100": "*777*<DESTINATION>*0100*<PIN>#,100000", | |
40 | + "TSEL150": "*777*<DESTINATION>*0150*<PIN>#,150000", | |
41 | + "TSEL200": "*777*<DESTINATION>*0200*<PIN>#,200000" | |
42 | + | |
43 | + }, | |
44 | + "ussd_parser": { | |
45 | + "destination": [ | |
46 | + { "pattern": "Transaksi ke (\\d+) pada" }, | |
47 | + { "pattern": "Pembelian 1 buah voucher <.+?> senilai <\\d+> untuk <(\\d+)" }, | |
48 | + { "pattern": "Transaksi bulk <\\d+ IDR> untuk <\\d+" } | |
49 | + ], | |
50 | + "product": [ | |
51 | + { "pattern": "senilai SimPATI: (\\d+) " }, | |
52 | + { "pattern": "senilai <\\d+> untuk"}, | |
53 | + { "pattern": "Transaksi bulk <(\\d+) IDR>"} | |
54 | + ], | |
55 | + "sn": [ | |
56 | + { "pattern": "SN <(\\d+)>"} | |
57 | + ], | |
58 | + "rc": [ | |
59 | + { "pattern": "berhasil", "rc": "00"}, | |
60 | + { "pattern": "Nomer tidak ditemukan", "rc": "14" }, | |
61 | + { "pattern": "Nomer tdk ditemukan", "rc": "14" }, | |
62 | + { "pattern": "dalam blacklist", "rc": "14" }, | |
63 | + | |
64 | + { "pattern": "sistem sedang sibuk", "rc": "90" }, | |
65 | + { "pattern": "tidak dapat mengisi", "rc": "40" }, | |
66 | + { "pattern": "telah melebihi batas pembelian", "rc": "40" }, | |
67 | + { "pattern": "tidak dapat membelikan", "rc": "40" }, | |
68 | + { "pattern": "tidak bisa mengulang", "rc": "40" }, | |
69 | + { "pattern": "tidak dapat mendaftar paket", "rc": "40" }, | |
70 | + { "pattern": "yg anda miliki telah habis", "rc": "40" }, | |
71 | + { "pattern": "nomor yang anda isi telah terkunci", "rc": "14" }, | |
72 | + { "pattern": "tidak dapat kami proses", "rc": "40" }, | |
73 | + { "pattern": "sisa pulsa dari pengisian pulsa telah melewati batas limit", "rc": "40" }, | |
74 | + { "pattern": "kode akses tidak sesuai dengan tipe kartu", "rc": "40" }, | |
75 | + { "pattern": "belum bisa diproses", "rc": "40" }, | |
76 | + { "pattern": "tidak memungkinkan untuk diisi ulang pada saat ini", "rc": "40" }, | |
77 | + { "pattern": "stock voucher yang diminta tidak mencukupi", "rc": "12" }, | |
78 | + { "pattern": "tidak dapat dilakukan", "rc": "40" }, | |
79 | + { "pattern": "Nmr plg ditolak", "rc": "14" }, | |
80 | + { "pattern": "Nmr expired atau over limit", "rc": "14" }, | |
81 | + { "pattern": "Nmr plg exp atau pulsa over", "rc": "14" }, | |
82 | + { "pattern": "Pulsa over kuota", "rc": "40" }, | |
83 | + { "pattern": "Nmr plg exp", "rc": "14" }, | |
84 | + { "pattern": "Kode Paket yang Anda masukkan tidak tersedia", "rc": "12" }, | |
85 | + | |
86 | + { "pattern": "Maaf,", "rc": "40" }, | |
87 | + { "pattern": "Gagal", "rc": "40" }, | |
88 | + { "pattern": "gagal", "rc": "40" } | |
89 | + ], | |
90 | + "stock": { | |
91 | + "product": [ | |
92 | + { "pattern": "Stok anda (.+?)=" } | |
93 | + ], | |
94 | + "balance": [ | |
95 | + { "pattern": "Stok anda .+?=(\\d+)" } | |
96 | + ] | |
97 | + } | |
98 | + }, | |
99 | + "sms_parser": { | |
100 | + "allowed_sender": [ | |
101 | + "MKIOS", | |
102 | + "3636" | |
103 | + ], | |
104 | + "destination": [ | |
105 | + { "pattern": "Isi ulang paket Flash (\\d+) pd .+? .+? berhasil. Voucher senilai Rp\\.\\d+\\. Nomor seri \\d+"}, | |
106 | + { "pattern": "Isi ulang (\\d+) pd", "prefix": "0" }, | |
107 | + { "pattern": "Transaksi ke (\\d+) pada", "prefix": "0" }, | |
108 | + { "pattern": "Pembelian 1 buah voucher <.+?> senilai <\\d+> untuk <(\\d+)", "prefix": "0" }, | |
109 | + { "pattern": "Transaksi bulk <\\d+ IDR> untuk <\\d+", "prefix": "0" } | |
110 | + ], | |
111 | + "product": [ | |
112 | + { "pattern": "Isi ulang paket Flash \\d+ pd .+? .+? berhasil. Voucher senilai Rp\\.(\\d+)\\. Nomor seri \\d+"}, | |
113 | + { "pattern": "Voucher SimPATI senilai (.+?)\\." }, | |
114 | + { "pattern": "senilai SimPATI: (\\d+) " }, | |
115 | + { "pattern": "senilai <\\d+> untuk"}, | |
116 | + { "pattern": "Transaksi bulk <(\\d+) IDR>"} | |
117 | + ], | |
118 | + "trx_date": [ | |
119 | + { "pattern": "Isi ulang paket Flash \\d+ pd (.+?) .+? berhasil. Voucher senilai Rp\\.\\d+\\. Nomor seri \\d+"}, | |
120 | + { "pattern": "Isi ulang \\d+ pd\\s+(.+?) \\d" }, | |
121 | + { "pattern": "Transaksi ke \\d+ pada\\s+(.+?) \\d" } | |
122 | + ], | |
123 | + "sn": [ | |
124 | + { "pattern": "Nomor seri (\\d+)"}, | |
125 | + { "pattern": "SN (\\d+)"}, | |
126 | + { "pattern": "SN <(\\d+)>"} | |
127 | + ], | |
128 | + "rc": [ | |
129 | + { "pattern": "berhasil", "value": "00"}, | |
130 | + { "pattern": "Nomer tidak ditemukan", "value": "14" }, | |
131 | + { "pattern": "dalam blacklist", "value": "14" }, | |
132 | + { "pattern": "gagal", "value": "40"} | |
133 | + ], | |
134 | + "stock": { | |
135 | + "product": [ | |
136 | + { "pattern": "stock Anda saat ini (.+?)=" }, | |
137 | + { "pattern": "Sisa stok (.+?)=" }, | |
138 | + { "pattern": "Stok anda (.+?)=" }, | |
139 | + { "pattern": "voucher (bulk) anda yang tersedia:"}, | |
140 | + { "pattern": "Stok Anda setelah pengisian adalah <\\d+ (IDR)>."} | |
141 | + ], | |
142 | + "balance": [ | |
143 | + { "pattern": "stock Anda saat ini .+?=(\\d+)" }, | |
144 | + { "pattern": "Sisa stok .+?=(\\d+)" }, | |
145 | + { "pattern": "Stok anda .+?=(\\d+)" }, | |
146 | + { "pattern": "voucher bulk anda yang tersedia:\\s+(\\d+) IDR" }, | |
147 | + { "pattern": "Stok Anda setelah pengisian adalah <(\\d+) IDR>." } | |
148 | + ], | |
149 | + "multistock": { | |
150 | + "must_have_pattern": "Stok voucher Anda yang tersedia: SimPATI", | |
151 | + "pattern": "V\\d+=\\d+", | |
152 | + "flags": "g", | |
153 | + "separator": "=" | |
154 | + } | |
155 | + } | |
156 | + }, | |
157 | + "remote_product_alias": { | |
158 | + "bulk": "BULK", | |
159 | + "IDR": "BULK", | |
160 | + "1rb": "1000", | |
161 | + "5rb": "5000", | |
162 | + "10rb": "10000", | |
163 | + "15rb": "15000", | |
164 | + "20rb": "20000", | |
165 | + "25rb": "25000", | |
166 | + "40rb": "40000", | |
167 | + "50rb": "50000", | |
168 | + "80rb": "80000", | |
169 | + "100rb": "100000", | |
170 | + "150rb": "150000", | |
171 | + "200rb": "200000", | |
172 | + "300rb": "300000", | |
173 | + "500rb": "500000", | |
174 | + "1jt": "1000000", | |
175 | + "1K": "1000", | |
176 | + "5K": "5000", | |
177 | + "10K": "10000", | |
178 | + "15K": "15000", | |
179 | + "20K": "20000", | |
180 | + "25K": "25000", | |
181 | + "40K": "40000", | |
182 | + "50K": "50000", | |
183 | + "80K": "80000", | |
184 | + "100K": "100000", | |
185 | + "150K": "150000", | |
186 | + "200K": "200000", | |
187 | + "300K": "300000", | |
188 | + "500K": "500000", | |
189 | + "1000K": "1000000", | |
190 | + "1": "1000", | |
191 | + "5": "5000", | |
192 | + "10": "10000", | |
193 | + "15": "15000", | |
194 | + "20": "20000", | |
195 | + "25": "25000", | |
196 | + "40": "40000", | |
197 | + "50": "50000", | |
198 | + "80": "80000", | |
199 | + "100": "100000", | |
200 | + "150": "150000", | |
201 | + "200": "200000", | |
202 | + "300": "300000", | |
203 | + "500": "500000", | |
204 | + "1000": "1000000", | |
205 | + "V1": "1000", | |
206 | + "V5": "5000", | |
207 | + "V10": "10000", | |
208 | + "V15": "15000", | |
209 | + "V20": "20000", | |
210 | + "V25": "25000", | |
211 | + "V40": "40000", | |
212 | + "V50": "50000", | |
213 | + "V80": "80000", | |
214 | + "V100": "100000", | |
215 | + "V150": "150000", | |
216 | + "V200": "200000", | |
217 | + "V300": "300000", | |
218 | + "V500": "500000", | |
219 | + "V1000": "1000000" | |
220 | + }, | |
221 | + "control_panel": { | |
222 | + "listen_port": "37201", | |
223 | + "url": "http://localhost:37201/" | |
224 | + }, | |
225 | + "apiserver": { | |
226 | + "port": "37202", | |
227 | + "apikey": "ccc558f508c289078f7d652458921aad66cf9b1b", | |
228 | + "url": "http://localhost:37202/apikey/ccc558f508c289078f7d652458921aad66cf9b1b" | |
229 | + } | |
230 | +} |
lib/partner-mkios.js
... | ... | @@ -12,6 +12,11 @@ const matrix = require('komodo-sdk/matrix'); |
12 | 12 | |
13 | 13 | const modemDashboard = require('./modem-dashboard'); |
14 | 14 | |
15 | +if (!config || !config.partner || !config.partner.pin) { | |
16 | + logger.warn('Undefined PIN'); | |
17 | + process.exit(1); | |
18 | +} | |
19 | + | |
15 | 20 | matrix.modem = {}; |
16 | 21 | matrix.not_ready = true; |
17 | 22 | matrix.stock = {}; |
... | ... | @@ -29,7 +34,15 @@ let last_trx_id = null; |
29 | 34 | |
30 | 35 | modem.on('open', function() { |
31 | 36 | logger.info('Modem opened'); |
32 | - modem.sendUSSD('*776*' + config.partner.pin + '#', function() {}); | |
37 | + | |
38 | + const ussd_command = '*776*' + config.partner.pin + '#'; | |
39 | + db.run("INSERT INTO ussd VALUES (?, ?, 'OUT', ?, ?)", moment().format('YYYY-MM-DD HH:mm:ss'), moment().format('YYYY-MM-DD'), matrix.modem.imsi, 'AT+CUSD=1,"' + ussd_command + '",15', function(err) { | |
40 | + if (err) { | |
41 | + logger.warn('Error inserting ussd command (stock check) to local database', {err: err}); | |
42 | + } | |
43 | + }); | |
44 | + | |
45 | + modem.sendUSSD(ussd_command, function() {}); | |
33 | 46 | }) |
34 | 47 | |
35 | 48 | modem.on('imsi', function(imsi) { |
pid.txt