UP
    Latest News

(SMS Gateway PHP MYSQL) Source Code Membuat SMS Gateway Auto Reply Mengunakan PHP MYSQL Plus GAMMU

Kali ini saya akan berbagi pengetahuan tentang bagaimana cara membuat Membuat SMS Gateway Auto Reply Mengunakan PHP MYSQL Plus GAMMU. Pada posting sebelumnya saya sudah pernah membahas ini, dan mungkin bisa jadi tambahan bahan pelajaran anda nantinya.
Kali ini kita masih tetap mengunakan Gammu sebagai software bantuan kita dalam membuat sms gateway auto replay. Dalam kasus ini kita akan mengangkat studi kasus yaitu tentang nilai mahasiswa.

Adapun jalan ceritanya adalah sebagai berikut:


"kita ibaratkan kita telah memiliki data nilai matakuliah Kalkulus mahasiswa. Dan untuk melihat nilainya, si mahasiswa tinggal mengirim pesan melalui SMS dengan format ‘NILAI<spasi>NIM‘ dan dikirim ke nomor HP tertentu. Selang beberapa waktu si mahasiswa tadi akan mendapat SMS balasan berisi nilai matakuliah Kalkulus yang diperolehnya secara otomatis. Gimana, sudah paham kan".

Sebelum kita bahas lebih lanjut mengenai pembuatan scriptnya, terlebih dahulu kita harus mengetahui ide pembuatan script auto reply SMS dengan Gammu ini. Tentu kita sudah ketahui bersama bahwa setiap kali SMS yang diterima oleh Gammu, maka SMS tersebut akan masuk ke dalam tabel ‘INBOX‘ yang ada di database MySQL. Lantas.. mungkin Anda bertanya, bagaimana cara membedakan mana SMS yang telah diproses dan yang belum diproses (baru saja masuk)? Jawabannya adalah terletak pada field yang bernama ‘Processed‘. Begitu ada SMS masuk, maka secara default nilai pada field ini adalah ‘false‘. Nah… Bila ditemukan record SMS yang bernilai ‘false’ ini maka kita bisa proses dengan menggunakan script tertentu. Kemudian setelah data SMS tersebut diproses kita harus segera mengubah nilainya menjadi ‘true‘ untuk membedakan mana SMS yang telah diproses dengan yang belum.

Proses di atas ini harus dilakukan setiap saat. Anda dapat menggunakan script PHP atau script apapun untuk memproses data SMS yang masuk ke dalam INBOX ini. Bila Anda menggunakan script PHP, maka Anda perlu membuat script auto refresh yang secara otomatis berjalan pada selang interval waktu tertentu. Proses auto refresh ini bertujuan untuk mengecek ada tidaknya SMS baru yang masuk sekaligus memprosesnya.
Pertama kita siapkan dahulu data nilai Kalkulus mahasiswa beserta tabelnya.

CREATE TABLE `nilaikalkulus` ( `nim` varchar(10), `nilai` int(11), PRIMARY KEY (`nim`) );
INSERT INTO `nilaikalkulus` VALUES ('M0197001', '80');
INSERT INTO `nilaikalkulus` VALUES ('M0197002', '79');
INSERT INTO `nilaikalkulus` VALUES ('M0197003', '86');

Catatan :
Tabel di atas Anda bisa buat pada satu database yang sama dengan tabel-tabel bawaannya Gammu atau bisa juga berbeda.


Selanjutnya, kita buat script PHP untuk pemrosesannya. dan pastikan bahwa keyword dari perintah SMS yang dikirimkan adalah sesuai dengan format. Untuk memastikan bahwa keyword dari perintah itu benar, Anda harus membuat parsing terlebih dahulu. Jika format perintah benar maka SMS akan diproses untuk mengirimkan nilainya. Namun jika tidak sesuai, maka tetap diproses dengan mengirimkan pesan kesalahan dalam bentuk SMS pula.
Hal terpenting… jangan samapi lupa mengubah status ‘processed’ menjadi ‘true’ pada setiap SMS yang telah diproses di dalam tabel INBOX nya.

Berikut Source Code untuk membuat auto reply, lengkap saya sertakan penjelasannya dalam bentuk komentar.

<?php  

//koneksi ke mysql dan db nya
mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

// query untuk membaca SMS yang belum diproses
$query = "SELECT * FROM inbox WHERE Processed = 'false'";
$hasil = mysql_query($query);
while ($data = mysql_fetch_array($hasil)) {

// membaca ID SMS
$id = $data['ID'];

// membaca no pengirim
$noPengirim = $data['SenderNumber'];

// membaca pesan SMS dan mengubahnya menjadi kapital
$msg = strtoupper($data['TextDecoded']);  

// proses parsing  
// memecah pesan berdasarkan karakter
$pecah = explode(" ", $msg);  

// jika kata terdepan dari SMS adalah 'NILAI' maka cari nilai Kalkulus
if ($pecah[0] == "NILAI") {

// baca NIM dari pesan SMS
$nim = $pecah[1];  

// cari nilai kalkulus berdasar NIM
$query2 = "SELECT nilai FROM nilaikalkulus WHERE nim = '$nim'";
$hasil2 = mysql_query($query2);  

// cek bila data nilai tidak ditemukan
if (mysql_num_rows($hasil2) == 0)
{
$reply = "NIM tidak ditemukan";
}
else {

// bila nilai ditemukan
$data2 = mysql_fetch_array($hasil2);
$nilai = $data2['nilai'];
$reply = "Nilai Kalkulus Anda: ".$nilai;
}
 else
{
$reply = "Maaf perintah salah";  
}

// membuat SMS balasan  
$query3 = "INSERT INTO outbox(DestinationNumber, TextDecoded, CreatorID) VALUES  ('$noPengirim', '$reply', 'Gammu')"; $hasil3 = mysql_query($query3);  

// ubah nilai 'processed' menjadi 'true' untuk setiap SMS yang telah diproses  
$query3 = "UPDATE inbox SET Processed = 'true' WHERE ID = '$id'";
$hasil3 = mysql_query($query3);

}

?>

Mungkin sebagian dari anda bertanya, mengapa untuk proses parsing di atas pesan SMS nya perlu dibuat huruf kapital dengan strtoupper(). Jawabannya adalah : karena supaya ada keseragaman bentuk pesan. Karena terkadang SMS dikirim dengan huruf kapital semua, kecil semua atau campuran. Bila tidak seragam, maka sulit dalam proses memparsingnya, karena string ‘NILAI’ dengan ‘nilai’ itu berbeda sehingga bila ditulis huruf kecil semua nantinya bisa dianggap perintah salah. Nah.. supaya seragam, maka setiap SMS yang masuk kita buat kapital semua saja.
Keterangan:
Cara pengiriman pesan balasan pada script di atas, saya menggunakan teknik insert data pada tabel OUTBOX dengan query SQL.
Selanjutnya supaya script di atas berjalan secara otomatis mengecek SMS yang masuk, Anda harus buat auto refresh dalam selang beberapa detik.
sms.php

SMS server running

<?php  

//koneksi ke mysql dan db nya
mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");  

// query untuk membaca SMS yang belum diproses
$query = "SELECT * FROM inbox WHERE Processed = 'false'";
$hasil = mysql_query($query);
while ($data = mysql_fetch_array($hasil)) {

// membaca ID SMS
$id = $data['ID'];  

// membaca no pengirim
$noPengirim = $data['SenderNumber'];  

// membaca pesan SMS dan mengubahnya menjadi kapital
$msg = strtoupper($data['TextDecoded']);  

// proses parsing  
// memecah pesan berdasarkan karakter
$pecah = explode(" ", $msg);  

// jika kata terdepan dari SMS adalah 'NILAI' maka cari nilai Kalkulus
if ($pecah[0] == "NILAI") {

// baca NIM dari pesan SMS
$nim = $pecah[1];  

// cari nilai kalkulus berdasar NIM
$query2 = "SELECT nilai FROM nilaikalkulus WHERE nim = '$nim'";
$hasil2 = mysql_query($query2);  

// cek bila data nilai tidak ditemukan
if (mysql_num_rows($hasil2) == 0)
{
$reply = "NIM tidak ditemukan";
}
else
{

// bila nilai ditemukan
$data2 = mysql_fetch_array($hasil2);
$nilai = $data2['nilai'];
$reply = "Nilai Kalkulus Anda: ".$nilai;
} }
else
{
$reply = "Maaf perintah salah";
}
// membuat SMS balasan  
$query3 = "INSERT INTO outbox(DestinationNumber, TextDecoded) VALUES  ('$noPengirim', '$reply')"; $hasil3 = mysql_query($query3);  

// ubah nilai 'processed' menjadi 'true' untuk setiap SMS yang telah diproses  
$query3 = "UPDATE inbox SET Processed = 'true' WHERE ID = '$id'";
$hasil3 = mysql_query($query3);
}
?>

Sebenarnya untuk memproses SMS dan memberikan auto reply, selain dengan auto script menggunakan auto refresh seperti di atas, Anda dapat pula menggunakanTRIGGER di MySQL nya. Namun.. bagi yang belum terbiasa membuatnya seperti saya, mungkin agak repot, apalagi bila panjang text auto reply nya di atas 160 karakter.
Script di atas sudah diuji coba dan berjalan dengan lancar di modem Wavecom Fastrack.


Selamat Mencoba.

No comments:

Post a Comment