Ada kalanya kita ingin mengecek seberapa banyak pulsa yang tersisa di nomor simcard kita atau sekedar ingin tahu masa aktifnya. Jika Anda menggunakan handphone, ini sangat mudah dilakukan. Jika misalnya Anda adalah pelanggan XL, Anda hanya perlu men-dial nomor 123, nantinya Anda akan dituntun mesin penjawab telepon untuk mengetahui jumlah pulsa dan masa aktif nomor seluler Anda. Cara lain adalah dengan mengetikkan kode *123# [enter/OK] melalui keypad handphone, maka Anda akan mendapat balasan berupa teks di layar handphone yang berisi informasi jumlah pulsa dan masa aktif nomor Anda.
Cara yang kedua ini disebut juga dengan  shorcode USSD (Unstructured Supplementary Service Data). USSD ini merupakan salah fitur yang dimiliki teknologi GSM yang memungkinkan user/customer untuk berinteraksi dengan USSD gateway di sisi operator melalui kanal (channel) signaling (SDCCH), jadi tidak mempengaruhi/mengurangi kapasitas TCH (Traffic Channel) yang digunakan untuk kanal suara (voice attempt). Berbeda pula dengan SMS yang menduduki dedicated channel dan bersifat transaksional, USSD ini bersifat session oriented yang dibatasi oleh waktu. Jadi jika anda menggunakan fitur ini, waktu Anda akan dibatasi dan akan diputus oleh sistem jika Anda terlalu lama memberi respon. Jika Anda penasaran dengan fitur USSD, cobalah untuk mengakses tiap-tiap menu jika Anda menekan kode *123# (jika Anda pelanggan XL).
Nah, bagaimana dengan program yang akan kita buat? Kita tahu bahwa sebagian besar modem 3G (atau modem GPRS) yang beredar tidak memiliki fitur mendukung panggilan suara (telepon). Jadi satu-satunya cara bagi modem tipe ini adalah dengan menggunakan teknologi USSD untuk mengetahui sisa pulsa dan masa aktif nomor. Berikut ini adalah contoh program sederhana untuk melakukan pengecekan pulsa melaiui USSD. Inti dari program yang akan kita buat adalah memanfaatkan at command AT+CUSD. Command ini berfungsi untuk mengirimkan shorcode USSD kepada operator dengan syntax :
AT+CUSD=<n>,<str>,<dcs> |
Dengan parameter-parameter sebagai berikut :
Parameter | Nilai | deskripsi |
<n> | 0 | disable result code (jawaban) USSD gateway operator (default setting) |
1 | enable result code (jawaban) USSD gateway operator | |
2 | Terminate USSD dialogue (mengakhiri session USSD) | |
<str> | String/karakter USSD (contoh: *123#) | |
<dcs> | integer | Cell Broadcast Data Coding Scheme |
Setelah Anda mengirim command USSD ke operator, Anda akan mendapat salah satu ‘jawaban’ (result code) sebagai berikut :
+CUSD=<m> |
Dengan opsi dari nilai <m> adalah sebagai berikut
0 | Tidak ada langkah lanjutan yang diperlukan |
1 | Ada info/langkah lanjutan yang diperlukan |
2 | Dialog USSD berakhir |
3 | Ada respon dari client I/O USSD |
4 | Operasi/pilihan USSD tidak ada/tidak didukung |
5 | Network time out |
Setelah kita mengetahhui sintaks penggunaan command AT+CUSD, marilah kita mulai pemrogramannya dengan Delphi. Penting untuk Anda ketahui bahwa akan lebih memudahkan Anda dalam mengolah jawaban/result code dari USSD, jika Anda menginisialisasi modem dalam mode teks, yakni dengan command AT+CMGF=1
Seperti biasa buatlah program Delphi baru, dan aturlah komponen-komponen berikut dalam sebuah form. Kemudian settinglah properties tiap-tiap komponen seperti pada contoh berikut ini:
Komponen | Properties | nilai |
Button1 | Caption | setting |
Button2 | Caption | Open |
Button3 | Caption | Cek pulsa |
Memo1 | ||
Edit1 | ||
Label1 | Caption | Pulsa : |
Label2 | Caption | USSD : |
Comport1 |
Kemudian isikan source code berikut ke masing-masing Button1, Button2 sebagai berikut
procedure TForm1.Button1Click(Sender: TObject); begin comport1.ShowSetupDialog; end;
procedure TForm1.Button2Click(Sender: TObject); begin if ComPort1.Connected then begin ComPort1.Close; button2.Caption:='Open'; end  else  begin ComPort1.Open; button2.Caption:='Close'; ComPort1.WriteStr('at+cmgf=1'+#13#10); ComPort1.WriteStr('at+cscs="GSM"'+#13#10);  end; end;
Button1 digunakan untuk memanggil jendela pengaturan comport, sedangkan button2 digunakan untuk membuka koneksi dengan comport.
Selanjutnya, isikan button3 (‘Cek pulsa’) dengan source code sebagai berikut:
procedure TForm1.Button3Click(Sender: TObject); begin memo1.Clear; edit1.clear; ComPort1.WriteStr('at+cusd=1,"*123#",15'+#13#10); end;
Button3 ini digunakan untuk mengirimkan shortcode USSD ke operator untuk melakukan pengecekan pulsa. Perhatikan pemakaian command ‘AT+CUSD’ di atas.
Dan berikut adalah baris program untuk handling result code dari USSD yang kita kirimkan. Baris program ini kita simpan di event ‘OnChange’ milik komponen Memo1.
procedure TForm1.Memo1Change(Sender: TObject); var a,b:integer; s:string; begin if (pos ('+CUSD',memo1.Text) <> 0) and (pos ('Pulsa',memo1.Text) <> 0) then  begin a:=pos ('P',memo1.Text); b:=pos ('.',memo1.Text); s:=copy (memo1.Text,a,b-a+1); edit1.Text:=s; end; end;
Jangan lupa untuk menyisipakan program handling data serial yang masuk ke komponen Comport1 (melalui phisycal serial port/virtual serial port over USB) dengan baris program berikut di event ‘OnRxChar’ milik komponen comport1 sebagai berikut:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); var Str: String; begin ComPort1.ReadStr(Str, Count); Memo1.Text := Memo1.Text + Str; end;
Sekarang mari kita coba program yang sudah kita buat tadi, beginilah hasilnya.
Selamat mencoba dan happy programming.
Catatan : Cara menentukan virtual serial port untuk modem 3G, silahkan dibaca di sini. Jika Anda membutuhkan modem 3G yang support AT Command, silahkan belanja disini
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
Wah Thanks Banget. Tapi kang, saya mau tanya lagi, Gimana program buat khusus STK (SIM TOOL KIT) kemarin saya coba pake pengembangan program dari akang tapi gagal terus. tulisannya NOT SUPPORT. Bisa buatin contoh untuk program STK?. kira2 bisa ngga supaya modem menjadi support. STK.
bisa dong
mas ym e njenengan opo ya.
mas modem huawei type E173 support +CUSD?
kok error terus ya?
cara ngetes nya piye?
Selamat Hari Raya Idul Fitri ya kang… kang yang dipake modem apan sih…? kok saya pake delphi menggunakan USSD tetapi tidak ada respon terus.. apa ada yang salah dalam setting modem saya. modem yang saya gunakan huawei E169, misal saya pake perintah “*123#”,15 tidak ada respon sama sekali, jika saya pake perintah “*123*1*1*1#”,15 tetap tidak ada respon di program delphi seperti di atas, tapi ada balasan dari operator dalam bentuk sms bahwa saya mengikuti paket tertentu. berarti ini menunjukkan perintah tersebut bekerja tapi saya tidak melihat hasilnya secara visual dari program yang dibuat. jadi pada intinya pada pembuatan program tersebut… Read more »
coba ulangi beberapa kali mas, server ussd-gateway operator kadang over load hingga menyebabkan time out operation.
STK (SIM Tool Kit)
yang terdapat STK Kartu XL, Indosat, Axis,
Menu Layanan Data (XL)
Menu Mtronil/i-Sev (Indosat)
Menu Axis-epulsa (axis)
Keypad yang membaca menu2 pada handphone
AT+CKPD=]
AT+CKPD=[
AT+CKPD=^
AT+CKPD=V
AT+CKPD=>
AT+CKPD=<
HP Siemens
terima kasih infonya, tp sy koreksi dikit. Untuk command at+ckpd adalah utk meng-emulasi penekanan keypad hp, bukan utk membaca menu hp
Salam kenal.. Share yang luar biasa==> SUPERrr… MODE=ON Maaf mas saya mohon pencerahan. Saya dah coba buat applikasi kirim sms, terima sms dan cek pulsa.. semuanya gagal mas. Hanya ComExample saja yang berhasil. Saya menggunakan HP Sonyericson K510i sebagai modem, sudah terinstal (saya yakin sudah terinstal dengan benar sebab mampu mengeksekusi perintah AT command dari aplikasi ComExample dan memberikan SN yang sesuai dengan nomor EMAI) *hasil dari app terima sms dan cek pulsa Memo1 at+cmgf=1 +CMS ERROR: 303 dari aplikasi kirim sms tidak ada hasil sama sekali. Apakah kesalahan ini ada pada HP yang saya gunakan ? dan bagaiman solusinya?… Read more »
utk troubleshoot bisa gunakan hyperterminal / 7G terminal. Dari program tsb masukkan at command secara manual utk mengetahui command mana yg error. Kalo cms error 303 artinya ‘operation not supported’ artinya device tidak mengenal at command tsb. Sepertinya hape-nya tidak support mode text (at+cmgf=1 artinya memerintahkan modem bekerja pd mode text). Coba ganti at+cmgf=0 msh error ga? kalo ga error berarti mmg hape-nya hanya bisa nekerja di mode PDU (at+cmgf=0). Mas coba ganti device dg modem 3G/modem GPRS (mis: wavecom) jk ingin menggunakan mode text
maaf mas saya dah coba bikin aplikasi ini tapi pada saat sy run kok error seperti ini
[Error] File not found: ‘CPortTrmSet.DFM’
[Error] File not found: ‘CPortImg.res’
[Error] File not found: ‘CPortSetup.DFM’
itu error yg muncul mohon petunjuknya gan?
mas, file tsb ada di installer komponen cport. copykan file tersebut satu folder dg project Anda
Mas…jika mau ngirim sms texk melebihi dari 160 karakter gimana..mohon pencerahannya..
Salam Sukses…
bisa pake mode long sms
+CUSD: 0,”00500075006C007300610020006B0061006D0075002000520070003200300034003000200061006B00740069006600200073002E0064002000320033002F00300035002F0032003000310034002E002000410079006F002000630065006B002000700075006C007300610020006B0061006D00750020006D0065006C0061006C0075006900200068007400740070003A002F002F006E00650074002E00610078006900730077006F0072006C0064002E0063006F002E00690064002E00200049006E0066006F003800330038″,72
kq keluar kaya gni y? bisa kasih solusi
itu format pdu mas, silahkan cari function pdu2text utk mengubahnya mjd teks yg bisa terbaca
apakah ini juga format PDU mas?
+CUSD: 0,”CD70D80C0ABAC96190B8CCAEB741F4B2BC1D9ED7D72072981D6E83B04C10545E6EA7EB6D17889A769FD761FA3AEC06C1CBEDF03A9C0EBB414137390C5A974152F8AD0663C16030D0BCCC0EB7C3201B485C6787DDA0BA9B5E5F83DA65B73A4C4E83E06576D87D3E87DD202C13049597DBE97ADB054ABACD6F1D0817BBB914″,15
cara membedakan format PDU, ASCII dan ucs2 gmn?
sepertinya uc2
Terima kasih share nya pak, sangat bermanfaat buat saya, kalau boleh tau code yang dibawah ini buat apa yah ?
if (pos(‘CUSD+1 …..
Kemudian pos itu variabel atau apa yah ?
Terima kasih
at+cusd utk memerintahkan modem spy mengirim kode USSD ke operator, jk sudah dpt respon dr server/gateway USSD operator, modem akan mengirim response code +CUSD:1. ‘Pos’ dalam delphi mrp function utk mencari substring, dari sebuah variabel string.
Makasih pak penjelasannya, kalau boleh tau script functionnya kaya gimana yah pak,
pos (substring_yg_dicari,string_induk). jika substring yg dicari ketemu, function pos akan mengembalikan sebuah nilai yg berisi posisi substring di string_induk. Jika tdk ketemu nilainya akan 0
mas, mau tanya, knp yah kadang suka ada sms masuk tp kebacanya jadi @?£òù ?@f@@£P
¡0@j£@$@æ@a@8¥?å¡0@¡@?ì ?@l@?¥p
@?@f£Hì@ò@s@?¥¡Å¡2@X£òù@?@ @,¥?
@9@R£hù@ò@r@?¥¡Å¡:@d£òù¡? @(¥?ø@2@R£pù, apa ada yg salah dari converter pdu nya ato gimana yah, thx.
bisa jadi sih, coba pake mode teks aja : at+cmgf=1
masalahnya kalo mode teks, blm nemu buat kalo nerima sms yg panjanganya lebih dari 160 karakter 🙂
mas kok ERROR ya bacaannya.
saya pake modem huwaei kartu XL.
saat cek pulsa munculnya ERROR mas.
mohon bantuannya.. X(
coba baca artikel ini mas http://saptaji.com/2013/02/16/handling-ussd-untuk-modem-huawei-e220-e1552-dan-yang-setipe/ . Siapa tau membantu
Sangat membantu..!!
hehehe
makasih y mas.
Mas ajie, saya mau nanya neh mas ada sorce code untuk set otomatis port yang aktif dan menampilkan pesan kalau kita sedang menggunakan port tersebut
sementara ini belum punya 🙂
saya coba pakai hp kok error aja ya ?
apa harus ada settingan khusus ?
sy coba pake modem huawei e173, kartu nya simpati, tapi gk bisa…
munculnya gini di memo :
at+cusd=1,”*888#”,15
ERROR
+CGREG: 1, 1CC1, 2E02BCD
^RSSI:18
^RSSI:15
+CGREG: 1, 1CC1, 2E07D5C
coba cek di sini mas http://saptaji.com/2013/02/16/handling-ussd-untuk-modem-huawei-e220-e1552-dan-yang-setipe/
semoga membantu
mas, tampilan CUSSD (cek pulsa *123# XL) di saya kok tidak rapi, nomor tidak urut spt tampilan mas aji punya.
why?
seperti apa mas?
seperti ini :
+CUSD: 1,”Pulsa 35461 s/d 17May14. Mau RBT GEISHA,3rb/7hr? RBT lain *123*1818#1 Mau
2 Internet3 Pkt Super Hemat4 Pkt Nelpon5 Bola Rp1M6 mPulsa7 MyInfo”,15
OK
jedi pilihan angkanya brdempetan, tidak berurutan kebawah dari ke cil ke besar
sebenarnya ga ada masalah mas, yg penting info teksnya keluar
kalo pengen bisa berurutan ke bawah bagaimana mas?
teks itu datangnya dari operator mas, kita tidak bisa setting. Paling habis kita terima teks-nya di kotak memo, kita olah sendiri supaya berurutan
USSD untuk STK gmn mas ?
prinsipnya sama aja, yg beda command-nya aja
commandnya apa aja mas buat STK ?
semua HP / modem bisa ?
bisa aja asal support at command
ada contoh commandnya mas ?
cb aja ketik ‘at’ di hyperterminal/putty, ntar ada balesan ‘ok’ ga?
OK mas hasilnya.
kemarin baca2 commandnya STGI / STGR.
tapi saya coba hasilnya error
Mas tanya,,
Source Code Function PDUTextnya dimana ,, boleh di share
Kenapa ane ada bacaan gini gan ^CSNR:-90,
maaf newbie
itu bawaan software modem yg mengaktifkan pembacaan kuat sinyal modem secara terus menerus
klo ngambil kata di edit pulsa gmn caranya,,,
contoh split string nya kayak apa pak…
mas .. arti error pada : CME 100 apa yaa >
kalo lihat di-datasheet, artinya ‘unknown’ mas. Harus dilihat case by case
maaf mas mau tanya, knp ya pas konke port respone nya gini
OK
COMMAND NOT SUPPORT
trus kalau jalanin ussd +CME ERROR: 100
ada beberapa modem yg tidak support perintah ussd dlm mode text. Contohnya modem huawei yg hanya support mode PDU dlm format GSM7/septet. Bisa dibaca lebih detail di artikel ini : http://saptaji.com/2013/02/16/handling-ussd-untuk-modem-huawei-e220-e1552-dan-yang-setipe/
Mas, saya pake modem huawei e153 dan dia seperti modem e220 dan e1552, hasilnya cuma OK dan tidak ada Result hasil pulsanya
Mas kalau saya tertarik membuat program USSD sederhana, itu pakai program apa ya?kira2 buku yang mana yg saya pakai?
pake program delphi
buku yg ini –> https://www.tokopedia.com/raftech/buku-membuat-sms-gateway-dengan-delphi-7
mas Aji, salam kenal…
saya Sughema dari Cirebon
Saya minta petunjuk kode arduino (IDE) untuk cek pulsa
kodenya bgm? trus diletakkan dimana (void setup atau void loop)
library yg dibutuhkan apa aja
Terimakasih sebelumnya…
pada intinya utk cek pulsa digunakan at comman at+cusd aja mas, contoh kalo operatornya XL kodenya jadi at+cusd=*123#
oh iya, maaf…
kode cek pulsa tersebut merupakan kode tambahan menu, dari proyek kontrol rellay dengan sim800l
sehingga nantinya akan saya sisipkan pada kode kode yang lain
mas koding cek pulsa klo pake sim800l dan arduino bagaimana?
sama, pake at+cusd aja
Modem saya Huawei e153 kok respon.nya “error'” ya ?? Saya coba di modem wavecom 1306b juga sama .. trims ..
silahkan search di blog ini untuk modem huawei dan wavecom, caranya beda