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 { ListmsgList; //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:
Tampilan aplikasi ketika dirunning dan berjalan dengan baik |
Tampilan aplikasi ketika ada telepon masuk (telepon akan otomatis di tutup oleh aplikasi) |
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.
cara setting modem ny gmna
BalasHapusUbah di kode ini:
HapusSerialModemGateway gateway = new SerialModemGateway("modem.com4", "COM8", 115200, "Wavecom", "Fastrack");
Dengan modem yang digunakan
mas mau tanya, agar sms nya langsung masuk ke database gmn tanpa harus membaca sms di modem dan baca sms nya tidak berulang - ulang..
BalasHapusterima kasih
Tambahkan fungsi menyimpan pesan ke database pada bagian ini
Hapuspublic 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);
}
}
Mas saat run program kenapa selalu membaca ulang sms yang ada di modem. . trus berulang2 membaca nya. .
Hapusgmn caranya agar tidak berulang2
Aplikasi membaca berulang2, karena pesan/sms dalam modem tidak dihapus, tambahkan method hapus pada class di komen atas
Hapusmohon bantuannya mas, sintak hapus sms di modem di java
Hapusgateway.deleteMessage(msg);
Hapussip keren. . .makasih mas. .
HapusGan klo mau menggunakan multiple modem caranya gimana ya?
BalasHapusGampang gan, buat beberapa instance gateway
HapusSerialModemGateway 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);
saya dapet error Exception in thread "Thread-3" java.lang.ExceptionInInitializerError
BalasHapusat 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
Library COMM nya belom tidak ditemukan
HapusPermisi mas mau tanya,
BalasHapusmisalkan smslib digunakan untuk notifikasi pada email bagaimana caranya
Kombinasikan dengan library http, library untuk meng-handle operasi http
Hapusmas saya mau nanyak,,,,"saya udah download prpgram sms gateway dgn java netbeans, saya udah setting modem a,
BalasHapusdan waktu saya running data modem a smua terbaca, tapi pas saya kirim pesan a tidak mau masuk ke database,,
mohon bantuan a mas..
terimakasih..
Di cek pada class ini public class InboundNotification
Hapusudah di sesuaikan semua a gan,,,
Hapuscuma 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....
Sudah ada aplikasi sms gateway yang sudah lengkap dengan database silahkan download
Hapussaat ada pesan masuk notice nya begini mas:
HapusException 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?
agan mengakses content yang gak ada pada array
HapusKomentar ini telah dihapus oleh pengarang.
BalasHapusmau tanya mas, kalo saat ada sms masuk yang muncul hanya no sms dan isi sms nya saja caranya gmna ya mas,, trims...
BalasHapusedit saja di kodenya, pesan menggunakan Class Messages, nah pake aja kelas ini untuk memunculkan data yang kita inginkan
Hapusmas mau tanya , klo pembuatan sms gateway pake java netbeans harus memakai win 32-bit gabisa pake win 64-bit?
BalasHapusBisa, gunakan library untuk yang 64
Hapusmuncul error. solusinya gmana
BalasHapusERROR: String index out of range: -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
BalasHapusThe GSM modem does not support the PDU protocol
Dan modem langsung hang total. Kira2 mengatasi error ini gmn ya ?
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
BalasHapusThe GSM modem does not support the PDU protocol
Dan modem langsung hang total. Kira2 mengatasi error ini gmn ya ?
Ganti modem, usahakan pakai modem yang support smslib, yang paling stabil pakai wavecom
HapusKomentar ini telah dihapus oleh pengarang.
BalasHapuskalo biar bisa multiple gateway bagaimana ya? inisialisasi di serialmodem nya bagaimana? mohon bantuannya
BalasHapusKomentar ini telah dihapus oleh pengarang.
BalasHapusmohon bantuannya gan, listing sms pakai grup, mengunakan java gan?
BalasHapusmas jika pakai multi modem,, hanya satu yg jalan , tidak berbarengan,,, itu kenapa ya
BalasHapus???