Contoh Polling dan Auto Reply SMS Gateway dengan NowSMS dan PHP

Kira-kira satu tahun yang lalu, saya sebagai salah satu panitia Dies Natalis Sekolah Tinggi Ilmu Statistik mendapat tugas untuk membuat aplikasi SMS Gateway. Aplikasi ini digunakan untuk melakukan polling terhadap band pilihan mahasiswa. Tidak ada salahnya aplikasi polling ini saya bagi di sini supaya bisa dijadikan bahan pembelajaran bagi yang ingin membangun SMS Gateway. Polling yang saya buat termasuk dalam kategori sederhana. Tidak ada menu administrator, hanya tampilan web dengan menggunakan bahasa pemrograman PHP disertai grafik yang memanfaatkan FushionChart.

Untuk aplikasi SMS-nya sendiri, saya mengguakan NowSMS dengan konsekuensi trial 30 hari. Yah, karena memang acaranya hanya 1 hari, saya rasa cukup. Lagipula untuk ruang lingkup internal mahasiswa juga tidak terlalu banyak traffic-nya. Jika Anda sudah bisa menginstal dan mengkonfigurasi modem ke dalam aplikasi NowSMS, bisa langsung membaca tutorial programming-nya.

Supaya lebih jelas, silahkan download project apikasi web polling SMS melalui link di bawah ini:

Download Project

1. Persiapan project

Anda akan menemukan database SQL yang harus diimport dulu ke dalam database MySQL. Gunakan MySQL Query Browser atau phpMyAdmin untuk memprosesnya. Akan terbentuk database dengan nama ‘chart’ beserta beberapa tabel di dalamnya. Kemudian letakkan project ke dalam root aplikasi web. Jika menggunakan XAMPP, letakkan di dalam folder htdocs. Sesuaikan user dan password database melalui file fungsi.php. Pastikan apache dan mysql sudah dijalankan. Kemudian akses melalui web browser. Misalkan project anda taruh dalam folder ‘polling’, maka akses http://localhost/polling/tampilan.php. Jika konfigurasi sudah benar akan terlihat grafik yang menunjukkan presentase dukungan masing-masing band.

Saya menggunakan ajax untuk menampilkan nama band di sisi kanan. Oleh karena itu, ada engine jQuery yang saya pakai untuk mempermudah proses ajax. Lebih jelasnya, bisa Anda lihat di dalam file tampilan.php.

Sebagai tampilan grafik, saya memanfaatkan fushion chart. Sebagai data provider, saya meng-generate file XML menggunakan php. File generator ini bisa Anda lihat dalam file data.php. Di bagian atas terdapat tipe xml yang dideklarasikan oleh PHP. Kemudian hasil generate ini digunakan fushion chart untuk menampilkan grafik. Proses ini dillakukan terus menerus setiap 10 detik sekali. Proses ini bisa dilihat dalam file tampilan.php dalam tag script:

function updateChart(){
	var chartObj = getChartFromId("chart1Id");
	chartObj.setDataURL("http://localhost/chart/data.php");
	$('#peringkat').load('peringkat.php',function(){});
	setTimeout("updateChart()",10000);
}

$(document).ready(function() {
	$('#peringkat').load('peringkat.php',function(){});
	setTimeout("updateChart()",10000);
});

DI bagian body juga kita siapkan script untuk membentuk grafik, yaitu dalam tag script:

var chart1 = new FusionCharts("./js/FusionCharts/Column3D.swf", "chart1Id", "648", "400", "0", "1");
chart1.setDataURL("http://localhost/chart/data.php");
chart1.render("chart1div");

2. Persiapan File Penerima SMS

Untuk sms gateway, kita mutlak harus membuat file untuk memproses sms yang masuk. Pengolahan dalam aplikasi ini menggunakan PHP yang ditulis dalam file penerima.php. Ada proses validasi sedikit. Kemudian setelah proses dilakukan, dikirim balik SMS kepada pengirim yang berisi informasi apakah SMS-nya sudah benar atau masih salah. File ini menggunakan fungsi-fungsi dalam file fungsi.php. Di file fungsi ini, dilakukan akses dan query ke database. Perhatikan fungsi kirim yang terdapat dalam file fungsi.php. FUngsi tersebut telah disediakan NowSMS dan kita tinggal menggunakan saja. Sebelum saya menggunakan ini, proses pengiriman sms cukup sulit karena menggunakan url. Apalagi jika mengirim lebih dari 1 sms dalam 1 proses yang sulit diterapkan jika hanya menggunakan fungsi header php. Namun, dengan fungsi ini, pengiriman berulang-ulang dalam 1 proses mudah dilakukan. Berikut adalah script PHP dalam file penerima.php

include("fungsi.php");

$sukses = "Terima Kasih";
$error = "GAGAL";

if(pernahkirim($no)) exit;

$no = trim($_GET['no']);
$isi = trim($_GET['isi']);

while(strpos($isi, "  "))
{
	$isi = ereg_replace("  "," ", $isi);
}

$sms = explode(" ",$isi);

if(count($sms)!=2) {
	kirim($no, $error);
	exit;
}

if(eregi('[A-Za-z]',$sms[1]) or $sms[1]>countBand()) {
	kirim($no, $error);
	exit;
}

if(insert($no,$sms[1])) kirim($no, $sukses);
else kirim($no, $error);
exit;

3. Persiapan konfigurasi NowSMS

Install NowSMS hingga keluar windows berikut. Note: pastikan kondisi modem telah tersambung dan sedang tidak dipakai aplikasi bawaan modem!

Kemudian, klik tombol Add untuk mengkonfigurasi modem dan akan muncul windows berikut:

Pilih jenis GSM Phone or Modem, kemudian klik OK. Pilih modem yang akan digunakan:

Klik Test and Add modem. Tunggu hingga ada pesan koneksi modem sukses seperti gambar di bawah ini:

Kemudian klik tombol Properties. Isikan nomor HP yang terdapat dalam modem dan checklist Receive SMS Messages dan klik OK:

Pindah ke tab 2-way dan isikan parameter sebagai berikut.Check dulu pilihan Process Received SMS Messages. Kemudian isi SMS Command Prefix dengan simbol *, isi nomor HP seperti step sebelumnya. Dan yang terpenting isi field Command to Execute direct langsung menuju file penerima.php. Tambahkan parameter SENDER dan FULLSMS supaya nomor sms pengirim dan isi smsnya dapat ditangkap aplikasi dan dilempar ke dalam aplikasi penerima.php. Untuk contoh ini, isi Command dengan: http://localhost/polling/penerima.php?no=@@SENDER@@&isi=@@FULLSMS@@. Jangan lupa klik tombol Add.

Klik OK. Kemudian aktifkan service SMS gateway dengan cara pindah ke tab service dan check pilihan Run as a service. Tunggu beberapa saat hingga Status All Connection OK.

SMS Gateway siap digunakan. Untuk mempelajari cara kerja program bisa Anda lihat dalam file penerima.php. Oiya, untuk mengirim SMS, formatnya yaitu BAND <ID BAND>. ID BAND diganti sesuai id masing-masing band dalam tabel database. Untuk kata Band belum saya validasi, jadi kata apa saja bisa masuk. Untuk memvalidasi-nya silahkan difilter variabel $sms[0].

farid

Selamat datang dan salam kenal. Penulis merupakan lulusan Sekolah Tinggi Ilmu Statistik Jakarta jurusan Komputasi Statistik. Menekuni pemrograman web khususnya PHP dengan Yii Framework. Penggemar musik instrumen dan film Doraemon. Berasal dari Kota Lumpia Semarang dan pernah bertugas menjadi Staf Produksi dan IPDS di BPS Kabupaten Melawi. Sejak tahun 2016, mulai bertugas sebagai Staf Pengolahan Data di BPS Provinsi Kalimantan Barat

You may also like...

  • Sujiwo

    Mas, kalo databasenya online bisa gak ya mas??
    Tolong pencerahannya mas. Matur Nuwun… :)

    • farid

      Bisa saja.

      Kalo web server dgn sms server satu server atau dlm satu jaringan bisa dilakukan dgn cara di atas. Tapi kalau terpisah, perlu ada sedikit strategi. Misalkan web server disewa dr layanan hosting, sedangkan sms server di pc sendiri. Buat saja file di dalam hosting yg mengeksekusi insert data dari url. Nah, url ini yg diakses oleh server sms gateway jika ada sms masuk. Misal, buat sebuah file insert_data.php dengan parameter no hp dan isi smsnya. Jadi file diakses dari url http://www.mydomain.com/insert_data.php?no=085xxx&sms=xxxxx yg dipanggil oleh sms server (ada aplikasi php juga di sini yg memanggil url di atas setiap ada sms masuk).

      Syarat: koneksi internet lancar dan harus ada rule untuk mengecek/sinkronisasi data sms di web server dan sms server.

  • Sujiwo

    Jadi, di Command Text to Execute nya tetap akses ke localhost ya mas?? bisa ga klo kita langsung akses ke domain. misal kita buat disana http://www.mydomain.com/read_sms.php?no=@@SENDER@@&isi=@@FULLSMS@@

    • farid

      Bisa juga sih. Tapi kalau pas ada sms, koneksi kebetulan mati, sms gak kesimpen di db. Sebenarnya bikin di localhost untuk jaga2 menyimpan sms di database lokal. Nantinya bisa disynchronize. Kalau yakin koneksi stabil sih, ga masalah. Apalagi kalau server webnya punya sendiri.

  • new

    kok balasannya GAGAL terus yaaa….

  • sichand

    mas, tloong donk kok balasanya GAGAL terusss…. tolongg banget

    terimaksih

  • Zaharuddin Net

    Emang GAGAL Mulu, query gak bisa masuk Database (function insert) belum berfungsi.

  • fauzi nugraha

    bisa bisa, tapi setelah dikirm pollingan nya gak masuk ke database min,
    gmna cara nya, ketika di poling langsung perubahan polling nya bertambah ??
    tolong yaa min

  • Ari Setiadi

    gan saya udah berhasil percobaan di atas tapi ada kendala.. :
    1. Server Ngereply terus sms dr 88331 https://uploads.disquscdn.com/images/a403baf5008583c03ac89deec3675ad0c05f0bc7f0fd3ae86330c24592d14f1f.png (2017-07-25 19:14:52,88331,Text,Kamu tidak memiliki permintaan Collect SMS untuk dijawab,08585355xxxx)
    2. adakah cara memblokir sms dari nomor tertentu
    3. format sms yang tidak bisa bebas contohnya :
    format : IDPELANGI maka sms harus sesuai format yaitu kapital, jika menggunakan huruf kecil maka server menolak..

    mohon pencerahaanya.. terimakasih