Skip to main content

Membuat SMS Gateway Dengan Java dan Mysql (Making SMS GATEWAY with Java and Mysql) part1

source code bisa didownload disini mirror1

SMS (Short Messaging Services) Data SMS (Short Messaging Services) yang kita kirim atau yang kita terima sebenarnya memiliki format tersendiri untuk dapat diterjemahkan oleh sebuah mobile phone. Format atau mode yang dipakai untuk mengirim dan menerima SMS sebenarnya ada dua yaitu mode text dan mode PDU (Protocol Data Unit). Akan tetapi, sistem mode text tidak didukung oleh semua operator GSM maupun terminal.

1. Text Mode Mode ini adalah cara termudah untuk mengirim pesan. Pada mode teks pesan yang kita kirim tidak dilakukan konversi. Teks yang dikirim tetap dalam bentuk aslinya dengan panjang mencapai 160 (7 bit default alphabet) atau 140 (8 bit) karakter. Sesungguhnya, mode teks adalah hasil encode yang direpresentasikan dalam format PDU. Kelemahannya, kita tidak dapat menyisipkan gambar dan nada dering ke dalam pesan yang akan dikirim serta terbatasnya tipe encoding.

2. PDU (Protocol Data Unit) Mode PDU mode adalah format message dalam heksadesimal octet dan semi-desimal octet dengan panjang mencapai 160 (7 bit default alphabet) atau 140 (8 bit) karakter. Kelebihan menggunakan mode PDU adalah kita dapat melakukan encoding sendiri yang tentunya harus pula didukung oleh hardware dan operator GSM, melakukan kompresi data, menambahkan nada dering dan gambar pada pesan yang dikirim. Beberapa tipe encoding yang umum digunakan adalah “PCCP437”, “PCDN”, “8859-1”, “IRA” dan “GSM”. Kita juga dapat menambahkan header ke dalam pesan yang akan dikirim, seperti timestamp, nomor SMSC dan meta-informasi lainnya. 2.1.1 Sistem Kerja SMS Pada saat kita mengirim pesan SMS dari handphone (mobile originated) pesan tersebut tidak langsung dikirim ke handphone tujuan (mobile terminated), akan tetapi dikirim terlebih dahulu ke SMS Center (SMSC), baru kemudian pesan tersebut diteruskan ke handphone tujuan.


Gambar 1
Dengan adanya SMSC ini dapat mengetahui status dari pesan SMS yang telah dikirim, apakah telah sampai atau gagal diterima oleh handphone tujuan. Apabila handphone tujuan dalam keadaan aktif dan dapat menerima pesan SMS yang dikirim, ia akan mengirim kembali pesan konfirmasi ke SMSC yang menyatakan bahwa pesan telah diterima. Kemudian SMSC mengirimkannya kembali status tersebut kepada si pengirim. Jika handphone dalam keadaan mati, pesan yang dikirimkan akan disimpan pada SMSC sampai period-validity terpenuhi. 2.1.2 Koneksi ke SMSC Untuk dapat mengirim dan menerima pesan, kita harus melakukan koneksi ke SMSC. Ada beberapa cara untuk melakukan koneksi ke SMSC antara lain : · Menggunakan terminal baik berupa GSM modem atau handphone. Cara ini adalah yang paling mudah tetapi memiliki kekurangan antara lain jumlah pesan yang dikirim per menit sangat terbatas (sekitar 6-10 pesan per menit). Untuk mengantisipasi hal ini biasanya digunakan lebih dari satu terminal.

· Koneksi langsung ke SMSC Dengan melakukan koneksi langsung ke SMSC kita dapat mengirim pesan dalam jumlah banyak, dapat mencapai sekitar 600 SMS per menit bergantung pada kapasitas dari SMSC itu sendiri. Untuk melakukan koneksi ke SMSC diperlukan protocol penghubung. Protocol yang umum digunakan adalah UCP, SMPP, CIMD2, OIS dan TAP. Masing–masing operator GSM menyediakan tipe protocol yang berbeda-beda.

· Menggunakan software Bantu Saat ini banyak vendor telekomunikasi menawarkan software bantu untuk melakukan koneksi ke SMSC, dari yang bersifat freeware, open source sampai dengan yang komersial. Pemilihan koneksi ke SMSC biasanya disesuaikan dengan jumlah pesan SMS yang akan dikirim. Gambar dibawah ini menunjukkan skema tipe koneksi ke SMSC.


2.1.3 Mode Pengiriman dan Penerimaan SMS dengan PDU

Data yang mengalir ke atau dari SMS-Center harus berbentuk PDU (Protokol Data Unit). PDU berisi bilangan-bilangan heksadesimal yang mencerminkan bahasa I/O. PDU berisi atas beberapa header. Header untuk kirim SMS ke SMS-Center berbeda dengan SMS yang diterima dari SMS-Center.

A. PDU untuk kirim SMS ke SMS-Center Terdapat delapan header untuk mengirim SMS, yaitu : 1. Nomor SMS-Center Header pertama ini terbagi atas tiga subheader, yaitu :
a. Jumlah pasangan Heksadesimal SMSC dalam bilangan heksa
b. National/International code
* untuk National, kode subheader-nya yaitu 81
* untuk International, kode subheader-nya yaitu 91
c. No SMS-Center-nya sendiri, dalam pasangan heksa dibalik-balik. Jika tertinggal satu angka heksa yang tidak memiliki pasangan, angka tersebut akan dipasangkan dengan huruf F didepannya. Contoh : untuk nomor SMSC Excelcom 62818445009 dapat diubah menjadi
a. 07 --> ada 7 pasang
b. 91 --> 1 pasang
c. 26-18-48-54-00-F9 --> 6 pasang
Digabung menjadi : 07912618485400F9
1. Telkomsel 62811000000 07912618010000F0
2. Satelindo 62816125 059126181652
3. Exelcom 62818445009 07912618485400F9
4. Indosat-M3 62855000000 07912658050000F0


2. Tipe SMS
Untuk SEND tipe SMS = 1. Jadi bilangan heksanya adalah 01.
3. Nomor Referensi SMS
Nomor referensi ini dibiarkan dulu 0, jadi bilangan heksanya adalah 00. Nanti akan diberikan nomor referensi otomatis oleh ponsel atau alat SMS gateway.
4. Nomor Ponsel Penerima

a. Jumlah bilangan desimal nomor ponsel yang dituju dalam bilangan heksa.
b. National/International code * untuk National, kode subheader-nya yaitu 81 * untuk International, kode subheader-nya yaitu 91

c. Nomor ponsel yang dituju, dalam pasangan Heksa dibalik-balik. Sama dengan cara penulisan subheader SMSC.

Contoh : untuk nomor ponsel yang dituju = 628129573337 dapat diubah menjadi
a. 0C à ada 12 angka
b. 91 c. 26-18-92-75-33-73 Digabung menjadi 0C91 261892753373

5. Bentuk SMS, antara lain : 0 à 00 à dikirim sebagai SMS
1 --> 01 --> dikirim sebagai telex
2 -->02 --> dikirim sebagai fax 6. Skema Encoding Data I/O Ada dua skema, yaitu :

a. Skema 7 bit à ditandai dengan angka 0 -->00
b. Skema 8 bit à ditandai dengan angka lebih besar dari 0 à diubah ke heksa Kebanyakan ponsel atau SMS gateway yang ada di pasaran sekarang menggunakan skema 7 bit.


7. Jangka Waktu Sebelum SMS Expired
Agar SMS kita pasti terkirim sampai ke ponsel penerima, sebaiknya kita tidak memberikan batasan waktu validnya.

8. Isi SMS
Header ini terdiri atas dua subheader, yaitu :

a. Panjang isi (jumlah huruf dari isi)
Misalnya : untuk kata “hello” --> ada 5 huruf --> 05
b. Isi berupa pasangan bilangan heksa

· Untuk ponsel/SMS gateway berskema encoding 7 bit, jika kita mengetikkan suatu huruf dari keypad-nya, berarti kita telah membuat 7 angka 1/0 berurutan.

Ada dua langkah yang harus dilakukan untuk mengkonversi isi SMS, yaitu :
1. mengubah menjadi kode 7 bit, contoh kata “hello”

bit 7 1
h -->110 1000
e -->110 0101
l --> 110 1100
l --> 110 1100
o --> 110 1111

mengubah kode 7 bit menjadi 8 bit, yang diwakili oleh pasangan heksa. E 8

h 1 110 1000 3 2
e 00 11 0010 9 B
l 100 1 1011 F D
l 1111 1101 0 6
o 0000 0 110

Dengan demikian kata “hello” hasil konversinya E8329BFD06
Menggabungkan kedelapan header untuk mengirim kata “hello” ke ponsel nomor 628129573337 lewat SMS-Center Excelcom, tanpa membatasi jangka waktu valid, maka PDU lengkapnya adalah : 07912618485400F901000C9126189275337300000E8329BFD06



Bersambung.............................


Technorati Profile

Comments

  1. Wah tambah keren ae javane, kapan2 saya di ajari ya.
    Oh ya pren sekarng wis gak ngajar ya

    ReplyDelete
  2. @mbahsomo, biasa aja mas! masih ngajar kok cuma hari jumat mlm aja!

    ReplyDelete
  3. Sip ni Post juga ya di bosojava.blogspot.com

    ReplyDelete
  4. mas kok source code nya susah di unduh yah? gagal terus,, ada alternative lain gak selain di share lewat ziddu,,,pliss ya mas,,,ditanggepi komen sy,,

    ReplyDelete
  5. @Rany, Mohon maaf mbak! saya akan siapkan link baru.

    ReplyDelete
  6. Thank's a lot ya mas Rachmad,, udah bisa di unduh filenya,,

    ReplyDelete
  7. mas,ada cara lain ga? pengiriman pesan yg bsa merestart HP,tlng ksh tau dong?.snlmnya tank's ya?

    ReplyDelete
  8. hai rany bleh tau g?.km dr mna?.

    ReplyDelete
  9. @andri, Untuk yang tu jangan de! ntar seluruh HP temen kamu restart semua!!!!

    ReplyDelete
  10. Mas, file nya pas di download ga bisa di ekstrak, rusak, ada yg corup, boleh minta yg baru ga

    ReplyDelete
  11. Mas, saya ingin tanya seumpama dibuat menjadi autoreplay agar dapat menerima inputan dari pengirim yang format inputan seperti beberapa kali objek yang dibatasi dengan koma(misal buku1,buku2) bagaimana??
    Mohon Bantuannya
    Thanks

    ReplyDelete
  12. Mudah saja mas tinggal parser aja isi sms nya. misal separator yang dipake untuk pemisa pesan " , " (koma). contoh pesan = "buku1,buku2";

    java.util.regex.Pattern pattern = Pattern.compile(","); --> kalo . ya tinggal diganti dengan "."

    String[] hasil = pattern.split(pesan.trim());

    hasil[0] berisi buku1
    hasil[1] berisi buku2
    nah tinggal di olah sesuai kebutuhan.

    ReplyDelete
  13. Thanks mas saya coba dulu.
    Trus pada baris 154-159 spt kirimAT("AT" + "\15", 1250); // Apakah terminal telah siap
    kirimAT("AT+CMGF=0" + "\15", 1250); // Menetapkan Format PDU Mode

    apakah maksud "\15",1250 kok bisa langsung print OK??

    Terima Kasih

    ReplyDelete
  14. "\15" --> utuk mengeksekusi at command, sprt menekan enter. sdgng 1250 merupakan delai untk menunggu hingga at briktnya di eksekusi. lama trgntung respon hardware

    ReplyDelete
  15. Mas dari kondisi diatas, bagaimana jika orang tidak harus sms 2 buku tetapi 1 atau sampai 3 buku dan lebih. bagaimana mana mas karena cara diatas hanya bisa sms 2 buku atau 1 buku tergantung array hasil nya??
    Sebelumnya Terima Kasih Banyak.

    ReplyDelete
  16. Yup, jumlah buku tergantung array hasil dari parser isi sms. tinggal kamu buatin fungsi yang mengelola isi sms yang jumlahnya lebih dari satu.

    ReplyDelete
  17. Nah itu mas saya coba dengan for itu jika buku saya beri harga yang sama atau tidak saya beri harga yang nantinya bisa menotalnya. tetapi jika saya beri harga berbeda saya yang tidak bisa mas. Fungsi apa mas yang digunakan??
    Terima Kasih

    ReplyDelete
  18. Mas, bgus2 tutorialnya... tapi kapan kelanjutannya, bisa buat skripsi ini mas...!!!

    ReplyDelete
  19. manstep mas ijin nyedot mas he he

    ReplyDelete
  20. to d4rw1$7 thx, iya ni masih belum sempet nyelesain kelanjutanya. do'ain aja biar cepet kelar

    to boy, silahkan mas, semoga bisa lebih bermanfaat

    ReplyDelete
  21. mas minta tutornya yg jelas. trus kenapa di net beans saya banyak yg merah, apa ada class yg harus di tambahkan ?

    ReplyDelete
  22. @atas ane : Bener tuh mas,, kenapa banyak yang merah? apa ada package yg kurang ya? Di lanjutin lagi dunx mas, lagi butuh banget nih buat kirim sms...

    ReplyDelete
  23. TS nya ngilang nih,, help me please...

    ReplyDelete
  24. Insy nanti saya lanjutin.
    to all yang merah dibagian apa? uda di tambah lib COMMAPI?
    to mas daus kesulitanya apa?

    ReplyDelete
  25. waaah....bgus bgt ni programnya..kpn dilanjutin lg,,,,ky'a dsource code'a ada y dikurangi....

    ReplyDelete
  26. mas yang berhub dengan .net di koneksi db masih merah2 knp y?thx

    ReplyDelete
  27. postgresql-8.1-405.jdbc2ee.jar
    jasperreports-2.0.2.jar
    commons-logging-api-1.0.2.jar
    Soft_Pengisian_Pulsa_All_Op-lib
    commons-collections-2.1.jar

    waktu aq resolve reference problem yg diatas lum ditemukan?gmn itu

    ReplyDelete
  28. Exception in thread "main" java.lang.NullPointerException
    at sms_rac_v3.proses_sms.setTerminal(proses_sms.java:120)
    at sms_rac_v3.proses_sms.prosesMulai(proses_sms.java:877)
    at sms_rac_v3.simpan_kirim.(simpan_kirim.java:28)
    at sms_rac_v3.Main.main(Main.java:27)


    gw da coba smua stel terakhir error gini, knp ya?

    ReplyDelete
  29. Semua pertanyaan tidak ada yg jawab?

    ReplyDelete
  30. mas rachmad, link nya sdh di delete.. wah saya telat tahu blog ini.. bisa minta tolong di upload lagi atau mungkin buat rekan2 yg sempat download bisa saya minta tolong utk dikirimkan via email ke enopippo@yahoo.com

    terima kasih banyak..

    ReplyDelete
  31. mas,,ada error seperti ini kenapa yach?
    mohon bantuannya..
    Exception in thread "main" java.lang.NullPointerException
    at sms_rac_v3.proses_sms.setTerminal(proses_sms.java:120)
    at sms_rac_v3.proses_sms.prosesMulai(proses_sms.java:877)
    at sms_rac_v3.simpan_kirim.(simpan_kirim.java:28)
    at sms_rac_v3.Main.main(Main.java:27)

    ReplyDelete
  32. mas file nya g bisa di download.,, minta pencerahan mas lagi mau bikin sms gateway dengan java mas.,.,.,
    kl bisa kirimin linknya ke ferdy_kruak@yahoo.co.id

    trima kasih mas

    ReplyDelete
  33. Mas Rachmad, saya minta tolong setelah
    Setelah saya Download trus jalankan program sms gateway ini (semua library sdh dilengkapi + g ada pesan error), ternyata saya harus mencocokkan port yang digunakan dengan HP. Semisal HP saya Nokia N70 biasanya pake porr COM12 / port serial. Tapi kenapa setelah saya jalankan dan saat program mencari port. malah muncul pesan java.lang.null exception
    Mohon pencerahannya ya mas.Gimana cara menghubungkannya dengan HP
    Saya benar- benar butuh program ini.

    ReplyDelete
  34. maaf neh bang,,

    untuk database nya blum ya???itu pake MySql atau PostgreSql si bang?

    butuh sangat neh bang,,buat bahan referensi saya,,
    help me in : hakkoon87@gmail.com
    terima kasih

    ReplyDelete
  35. sama dengan mas tama error nya kayak gitu!!!!

    ReplyDelete
  36. @Anonymous,
    Untuk error
    -------------
    " Exception in thread "main" java.lang.NullPointerException
    at sms_rac_v3.proses_sms.setTerminal(proses_sms.java:120)
    at sms_rac_v3.proses_sms.prosesMulai(proses_sms.java:877)
    at sms_rac_v3.simpan_kirim.(simpan_kirim.java:28)
    at sms_rac_v3.Main.main(Main.java:27) "
    -------------
    ini disebabkan karena konfigurasi Commapi belum sempurna sehingga program tidak dapat mengidentifikasi port yang ada pada komputer

    Solusinya, install commapi dengan sempurna

    ReplyDelete
    Replies
    1. mas,kalau untuk kirim lebih 160 karakter solusinya bagaimana?

      Delete
    2. gimana mas cara menginstal COmmapinya ane masih bingung

      Delete
  37. mas, kok saya g bisa ngejalanin programnya ya..
    mohon bantuannya,,

    ReplyDelete
  38. huummmm....siiipp GAN....mau coba ahh,,,ane jg lagi buat,,,,hehehe,,,,

    ReplyDelete
  39. pak saya mau tanya

    kalo dengan sms gateway menggunakan java ini bisa memungkin untuk di integrasikan dengan aplikasi chatting tidak??

    ReplyDelete
  40. mana sambungannya ???

    ReplyDelete
  41. Mas link'a tidak bisa di download baik yang rapid dan ziddu

    ReplyDelete
  42. gan, sya tuh baru newbie,maunya step stepnya -_-

    ReplyDelete
  43. Assalamualaikum,

    Mas eror seperti ini apa ya kira2 ?
    Koneksi Berhasil !
    Server Sedang melakukan pencarian Port
    Port : COM3 Sedang digunakan
    Penyambungan ke Terminal Gagal .........
    Terjadi kesalahan pada : javax.comm.PortInUseException: Port currently owned by Unknown Windows Application
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at sms_rac_v3.proses_sms.setTerminal(proses_sms.java:104)
    at sms_rac_v3.proses_sms.prosesMulai(proses_sms.java:861)
    at sms_rac_v3.simpan_kirim.(simpan_kirim.java:23)
    at sms_rac_v3.simpan_kirim$4.run(simpan_kirim.java:187)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:642)
    at java.awt.EventQueue.access$000(EventQueue.java:85)
    at java.awt.EventQueue$1.run(EventQueue.java:603)
    at java.awt.EventQueue$1.run(EventQueue.java:601)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:612)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    BUILD SUCCESSFUL (total time: 10 seconds)

    ReplyDelete
  44. Mas ini kalau saya pakai modem bisa kan ?

    ReplyDelete
    Replies
    1. pake modem bs..
      asal aplikasi modemnya jgn di nyalakan biar port nya g di pake.

      Delete
  45. Tank's ref nya Mas Rachmad..
    Saya blh tnya untuk timing smsnya yg paling cpt gmn?
    untuk setting yg lbh cpt dari ini gmn?
    sendAT("AT+CMGS=" + (PDU[0].length() / 2) + "\15", 500);
    sendAT("00" + PDU[0], 2500); // Kirim Pesan Format pdu
    sendAT("\032", 2500); // Ctrl + Z
    Thread.sleep(3500);
    klo saya buat lbh cpt pasti error tidak terkirim smsnya.
    soalnya program yg saya buat untuk sms char lebih dari 160 dan sekali kirim ada 40 an sms... terimakasih.

    ReplyDelete
  46. malam mas, saya kok sms masuknya baru bisa terbaca kalau habis di run ya? habis di run kalau kirim sms ga tampil. terimakasih

    ReplyDelete
  47. sama, punyaku juga gitu kalau pas di run aja smsnya baru bisa masuk. mohon pencerahanya

    ReplyDelete
    Replies
    1. sudah solve nih, AT+CNMI nya di buat 2,1,2,2,1 terus di public simpan_kirim tambahkan:


      java.util.TimerTask task = new java.util.TimerTask() {
      @Override
      public void run() {
      apl.repeat();
      }
      };
      java.util.Timer timer = new java.util.Timer();
      timer.schedule(task, java.util.Calendar.getInstance().getTime(), 10000);


      di proses_sms tambahin method :
      public void repeat(){
      kirimAT("AT+CMGL=0" + "\15", 1250);

      }

      jadi tiap 10 detik dia ngecek ada sms masuk atau enggak

      dan pastikan com yang digunakan yang ada kata UI.

      CMIIW

      Delete
    2. This comment has been removed by the author.

      Delete
    3. ada revisi:
      at cnmi nya: 2,1,2,1,0

      dan di public void repeat:
      kirimAT("AT+CMGL=0" + "\15", 10000);

      Delete
  48. kalo mau nambahin auto respon codingnya gmna ya?
    maklum baru mendalami sms gateway

    ReplyDelete
  49. format kirim sms-nya gmana pak..untuk balas otomatisnya.....aku uda berhasil download softwarenya.

    ReplyDelete
  50. untuk balasan otomatis gmana pak.... minta source codenya...pak

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
  51. yang masih punya source codenya tolong kirimin dong ke email : kesatria.utama15@gmail.com. trmksh

    ReplyDelete

Post a Comment

Popular posts from this blog

Menampilkan Bilangan prima sebanyak N bilangan

Cara simpel aja kok untuk tampilin bilangan prima, nah langsung aja ke codenya: public class BilanganPrima{ /**Main method*/ public static void main(String[] args) { int jumBilPrima; int counter = 1; // Counter penghitung jumlah bilangan Prima int bilangan = 2; // Bilangan yang akan diperiksa, apakah // merupakan bilangan prima atau bukan. // Variabel ini diinisialisasi dengan 2 // karena merupakan bilangan Perima pertama. // Selanjutnya bilangan ini akan diupdate // dengan bilangan berikutnya (3,4,5,..) boolean testPrima = true; // Kondisi yang akan menyatakan // suatu bilangan sebagai Prima // atau bukan. System.out.println("\nPROGRAM MENCARI N BILANGAN PRIMA " + "PERTAMA"); System.out.println("----------------------------

Pemrograman Database Dengan Java dan Ms.Access

Download source code disini mirror1 Download data base disini mirror1 1. Membuat database dengan Access Tahapan dalam membuat database: 1. Buka Ms.Access anda 2. Pilih menu File --> New --> Blank Database 3. Pilih lokasi penyimpanan pada drive C: (anda boleh mengganti tempat penyimpanan sesuai dengan keingginan anda) 4. Buat Folder baru dengan nama Java-access 5. setelah folder tercipta, anda buat folder baru dengan nama database dalam forlder tsb. 6. Ubah file Name dengan data.mdb 2. Mendesign Tabel Untuk membuat table double klik pada Create table in Design View, seperti gambar diatas. a. tabel tbUser - ID (AUTONUMBER, PRIMARYKEY) - uSERNAME (TEXT 20) - PASSWORD (TEXT 20) b. tabel tbBarang - KODE_BRG (TEXT 6, PRIMARYKEY) - NAMA (TEXT 30) - HARGA (NUMBER) - JUMLAH (NUMBER) c. tabel tbTrans - KODE_TRANS (TEXT 10, PRIMARYKEY) - TANGGAL (DATE/TIME (SHORT DATE)) - USER (TEXT 20) d. tabel tbTransDetail - KODE_TRANS (TEXT 10) - KODE_BRG (TEXT 6) - JUMLA