[SMS Gateway] Membaca SMS pada Modem (SMSLib) | Tempat Belajar dan Berbagi Pengetahuan Java dan PHP
Home » , , , » [SMS Gateway] Membaca SMS pada Modem (SMSLib)

[SMS Gateway] Membaca SMS pada Modem (SMSLib)

Dipostingkan Oleh Ridwan Labs pada Selasa, 02 April 2013 - Diupdate Pada: 4/02/2013

Ok, ini lanjutan dari seri SMS Gateway. SMS Gateway tidak terlepas adanya kegiatan menerima dan mengirimkan SMS. Nah untuk memahami cara aplikasi dalam membaca SMS pada aplikasi SMS Gateway, berikut ini saya membuatkan sebuah project java untuk menerima SMS.

Lakukan pengaturan library seperti pada tutorial Pengaturan Java Library untuk SMS Gateway menggunakan SMSLib, atau kalau tidak mau repot mendownload library-library nya , silahkan download kode sumbernya terlebih dahulu (ada dibagian bawah tutorial).

Dalam project saya sudah sertakan library penunjang.

File-file jarnya, digunakan sebagai library pada project, dan yang lainnya silahkan copykan sesuai dengan foldernya.
Dalam project hanya terdapat 1 Class, berikut kode yang terdapat didalammnya:

package javadanphp.smsgateway;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.smslib.AGateway;
import org.smslib.AGateway.GatewayStatuses;
import org.smslib.AGateway.Protocols;
import org.smslib.ICallNotification;
import org.smslib.IGatewayStatusNotification;
import org.smslib.IInboundMessageNotification;
import org.smslib.IOrphanedMessageNotification;
import org.smslib.InboundMessage;
import org.smslib.InboundMessage.MessageClasses;
import org.smslib.Message.MessageTypes;
import org.smslib.SMSLibException;
import org.smslib.Service;
import org.smslib.modem.SerialModemGateway;

public class ReadMessage {

    public void mulaiService() throws Exception {
        List msgList;
        //Setting notifikasi/pemberitahuan pesan
        //jika ada pesan masuk maka class/fungsi ini akan dijalankan
        InboundNotification inboundNotification = new InboundNotification();
         //Setting notifikasi/pemberitahuan panggilan
        //jika ada panggilan masuk maka class/fungsi ini akan dijalankan
        CallNotification callNotification = new CallNotification();
        //Setting notifikasi/pemberitahuan perubahan status gateway
        //Jika status gateway berubah, bisa jadi berhenti, eroor dll, maka class ini akan dijalankan
        GatewayStatusNotification statusNotification = new GatewayStatusNotification();
        
        OrphanedMessageNotification orphanedMessageNotification = new OrphanedMessageNotification();
        
        //menjalankan service
        try {
            System.out.println("APLIKASI: Membaca pesan dari modem.");
            System.out.println("-----------------------------------");
            
            // Inisialisasi Gateway/Pengaturan modem GSM modem.
            SerialModemGateway gateway = new SerialModemGateway("modem.com4", "COM8", 115200, "Wavecom", "Fastrack");
            
            gateway.setProtocol(Protocols.PDU);
            
            // menggunakan modem sebagai penerima pesan
            gateway.setInbound(true);
            
            // menggunakan modem sebagai pengirim pesan
            gateway.setOutbound(true);
            
            // mengatur sim Pin (jika sim menggunakan pin, jika tidak masukan 0000)
            gateway.setSimPin("0000");
            
            // Setting notifikasi yang telah di inisialisasi sebelumnya kedalam gateway
            Service.getInstance().setInboundMessageNotification(inboundNotification);
            Service.getInstance().setCallNotification(callNotification);
            Service.getInstance().setGatewayStatusNotification(statusNotification);
            Service.getInstance().setOrphanedMessageNotification(orphanedMessageNotification);
            
            // Menambahkan gateway ke service
            Service.getInstance().addGateway(gateway);
            
            // Memulai Servce
            Service.getInstance().startService();
            
            
            // Mengambil beberap informasi penting dari modem
            System.out.println();
            System.out.println("Detail Informasi Modem:");
            System.out.println("  Pembuat: " + gateway.getManufacturer());
            System.out.println("  Model: " + gateway.getModel());
            System.out.println("  Serial No: " + gateway.getSerialNo());
            System.out.println("  SIM IMSI: " + gateway.getImsi());
            System.out.println("  Signal: " + gateway.getSignalLevel() + " dBm");
            System.out.println("  Baterai: " + gateway.getBatteryLevel() + "%");
            System.out.println();
            
            //Mulai Membaca pesan
            msgList = new ArrayList<>();
            Service.getInstance().readMessages(msgList, MessageClasses.ALL);
            if(msgList.isEmpty()){
            for (InboundMessage msg : msgList) {
                System.out.println(msg);
            }
            }else{
                System.out.println("Saat ini, tidak ada pesan dalam modem");
            }
            //Jika pesan sudah dibaca dan ditampilkan semuanya, service akan masuk pada mode tunggu
            System.out.println("---------------------------------------------");
            System.out.println();
            System.out.println("Mode Tunggu - tekan  untuk menghentikan service.");
            System.in.read();
        } catch (SMSLibException | IOException | InterruptedException e) {
            System.out.println("ERROR: " + e.getMessage());
        } finally {
            Service.getInstance().stopService();
        }
    }

    public class InboundNotification implements IInboundMessageNotification {

        @Override
        public void process(AGateway gateway, MessageTypes msgType, InboundMessage msg) {
            if (msgType == MessageTypes.INBOUND) {
                System.out.println(">>>Pesan masuk pada gateway/modem: " + gateway.getGatewayId());
            } else if (msgType == MessageTypes.STATUSREPORT) {
                System.out.println(">>>Laporan pengiriman pesan dari gateway: " + gateway.getGatewayId());
            }
            System.out.println("PESAN:");
            System.out.println(msg);
        }
    }

    public class CallNotification implements ICallNotification {

        @Override
        public void process(AGateway gateway, String callerId) {
            System.out.println(">>>Ada panggilan masuk: " + gateway.getGatewayId() + " : " + callerId);
        }
    }

    public class GatewayStatusNotification implements IGatewayStatusNotification {

        @Override
        public void process(AGateway gateway, GatewayStatuses oldStatus, GatewayStatuses newStatus) {
            System.out.println(">>>Perubahan status gateway " + gateway.getGatewayId() + ", dari: " + oldStatus + " menjadi: " + newStatus);
        }
    }

    public class OrphanedMessageNotification implements IOrphanedMessageNotification {

        @Override
        public boolean process(AGateway gateway, InboundMessage msg) {
            System.out.println(">>>Pesan Orphaned diterima dari gateway: " + gateway.getGatewayId());
            System.out.println(msg);
            // Masih dalam tahap test (keterangan dari SMSLIB)
            System.out.println("PESAN:");
            return false;
        }
    }

    public static void main(String args[]) {
        ReadMessage app = new ReadMessage();
        try {
            app.mulaiService();
        } catch (Exception e) {
            System.out.println("ERROR: " + e.getMessage());
        }
    }
}

Nah berikut hasil running kode diatas:
Membaca SMS pada Modem Aplikasi SMS Gateway dengan Java menggunakan SMSLib
Tampilan aplikasi ketika dirunning dan berjalan dengan baik
Membaca SMS pada Modem Aplikasi SMS Gateway dengan Java menggunakan SMSLib
Tampilan aplikasi ketika ada telepon masuk (telepon akan otomatis di tutup oleh aplikasi)
Membaca SMS pada Modem Aplikasi SMS Gateway dengan Java menggunakan SMSLib
Tampilan aplikasi ketika ada SMS masuk

Download projectnya:
 


Silahkan berikan feedback jika ada yang kurang dimengerti.

Terima kasih sudah meluangkan waktu untuk mengunjungi blog ini.
Share this article :

35 komentar:

  1. cara setting modem ny gmna

    BalasHapus
    Balasan
    1. Ubah di kode ini:
      SerialModemGateway gateway = new SerialModemGateway("modem.com4", "COM8", 115200, "Wavecom", "Fastrack");


      Dengan modem yang digunakan

      Hapus
  2. mas mau tanya, agar sms nya langsung masuk ke database gmn tanpa harus membaca sms di modem dan baca sms nya tidak berulang - ulang..
    terima kasih

    BalasHapus
    Balasan
    1. Tambahkan fungsi menyimpan pesan ke database pada bagian ini

      public class InboundNotification implements IInboundMessageNotification {

      @Override
      public void process(AGateway gateway, MessageTypes msgType, InboundMessage msg) {
      if (msgType == MessageTypes.INBOUND) {
      System.out.println(">>>Pesan masuk pada gateway/modem: " + gateway.getGatewayId());
      } else if (msgType == MessageTypes.STATUSREPORT) {
      System.out.println(">>>Laporan pengiriman pesan dari gateway: " + gateway.getGatewayId());
      }
      System.out.println("PESAN:");
      System.out.println(msg);
      }
      }

      Hapus
    2. Mas saat run program kenapa selalu membaca ulang sms yang ada di modem. . trus berulang2 membaca nya. .
      gmn caranya agar tidak berulang2

      Hapus
    3. Aplikasi membaca berulang2, karena pesan/sms dalam modem tidak dihapus, tambahkan method hapus pada class di komen atas

      Hapus
    4. mohon bantuannya mas, sintak hapus sms di modem di java

      Hapus
  3. Gan klo mau menggunakan multiple modem caranya gimana ya?

    BalasHapus
    Balasan
    1. Gampang gan, buat beberapa instance gateway
      SerialModemGateway gateway = new SerialModemGateway(...);
      SerialModemGateway gateway1 = new SerialModemGateway(...);
      SerialModemGateway gateway2 = new SerialModemGateway(...);

      trus tinggal tambhin gateway ke service
      Service.getInstance().addGateway(gateway);
      Service.getInstance().addGateway(gateway1);
      Service.getInstance().addGateway(gateway2);

      Hapus
  4. saya dapet error Exception in thread "Thread-3" java.lang.ExceptionInInitializerError
    at org.smslib.modem.SerialModemDriver.connectPort(SerialModemDriver.java:69)
    at org.smslib.modem.AModemDriver.connect(AModemDriver.java:114)
    at org.smslib.modem.ModemGateway.startGateway(ModemGateway.java:189)
    at org.smslib.Service$1Starter.run(Service.java:277)
    Caused by: java.lang.RuntimeException: CommPortIdentifier class not found
    at org.smslib.helper.CommPortIdentifier.(CommPortIdentifier.java:76)
    ... 4 more

    BalasHapus
  5. Permisi mas mau tanya,
    misalkan smslib digunakan untuk notifikasi pada email bagaimana caranya

    BalasHapus
    Balasan
    1. Kombinasikan dengan library http, library untuk meng-handle operasi http

      Hapus
  6. mas saya mau nanyak,,,,"saya udah download prpgram sms gateway dgn java netbeans, saya udah setting modem a,
    dan waktu saya running data modem a smua terbaca, tapi pas saya kirim pesan a tidak mau masuk ke database,,
    mohon bantuan a mas..

    terimakasih..

    BalasHapus
    Balasan
    1. Di cek pada class ini public class InboundNotification

      Hapus
    2. udah di sesuaikan semua a gan,,,
      cuma masih tetap aja enggak bisa,,

      mohon bantuan script a mungkin ada yang keliru,,,
      kalu bisa bantuan script a sampai penyimpanan ke database a gan,,

      makasih....

      Hapus
    3. Sudah ada aplikasi sms gateway yang sudah lengkap dengan database silahkan download

      Hapus
    4. saat ada pesan masuk notice nya begini mas:

      Exception in thread "SMSLib-AsyncMessageProcessor : Modem.COM3" java.lang.StringIndexOutOfBoundsException: String index out of range: -12
      at java.lang.String.substring(String.java:1911)
      at org.smslib.modem.ModemGateway.readMessagesPDU(ModemGateway.java:527)
      at org.smslib.modem.ModemGateway.readMessages(ModemGateway.java:206)
      at org.smslib.modem.AModemDriver$AsyncMessageProcessor.run(AModemDriver.java:891)

      salah a di mana ya mas?

      Hapus
    5. agan mengakses content yang gak ada pada array

      Hapus
  7. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  8. mau tanya mas, kalo saat ada sms masuk yang muncul hanya no sms dan isi sms nya saja caranya gmna ya mas,, trims...

    BalasHapus
    Balasan
    1. edit saja di kodenya, pesan menggunakan Class Messages, nah pake aja kelas ini untuk memunculkan data yang kita inginkan

      Hapus
  9. mas mau tanya , klo pembuatan sms gateway pake java netbeans harus memakai win 32-bit gabisa pake win 64-bit?

    BalasHapus
  10. muncul error. solusinya gmana
    ERROR: String index out of range: -12

    BalasHapus
  11. Artikel nya sangat bagus, saya sudah berhasil membuat program sms gateway pake smslib dengan menggunakan modem zoglab dan baudrate di 115200, setelah berjalan sekian jam dengan menerima sekian sms dan mereply sms tersebut secara otomatis, terkadang muncul error seperti ini

    The GSM modem does not support the PDU protocol

    Dan modem langsung hang total. Kira2 mengatasi error ini gmn ya ?

    BalasHapus
  12. Artikel nya sangat bagus, saya sudah berhasil membuat program sms gateway pake smslib dengan menggunakan modem zoglab dan baudrate di 115200, setelah berjalan sekian jam dengan menerima sekian sms dan mereply sms tersebut secara otomatis, terkadang muncul error seperti ini

    The GSM modem does not support the PDU protocol

    Dan modem langsung hang total. Kira2 mengatasi error ini gmn ya ?

    BalasHapus
    Balasan
    1. Ganti modem, usahakan pakai modem yang support smslib, yang paling stabil pakai wavecom

      Hapus
  13. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  14. kalo biar bisa multiple gateway bagaimana ya? inisialisasi di serialmodem nya bagaimana? mohon bantuannya

    BalasHapus
  15. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  16. mohon bantuannya gan, listing sms pakai grup, mengunakan java gan?

    BalasHapus
  17. mas jika pakai multi modem,, hanya satu yg jalan , tidak berbarengan,,, itu kenapa ya
    ???

    BalasHapus

Cari Artikel



 
Support : Admin
Copyright © 2013. Tempat Belajar dan Berbagi Pengetahuan Java dan PHP - All Rights Reserved
Template Created by Creating Website Modified by CaraGampang.Com
Proudly powered by Blogger