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

Posted on

Kali ini saya akan berbagi pengetahuan mengenai bagaimana cara membangun Membangun SMS Gateway Auto Reply Mengunakan PHP MYSQL Plus GAMMU. Di posting sebelumnya saya telah pernah membahas ini, dan mungkin dapat jadi tambahan bahan pembelajaran kamu nantinya.
Kali ini kita masih tetap mengunakan Gammu selaku sistem bantuan kita pada membangun sms gateway auto replay. Pada kasus ini kita akan mengangkat studi kasus yaitu mengenai nilai mahasiswa.

Adapun jalan ceritanya yakni selaku berikut:

“kita ibaratkan kita telah mempunyai data nilai matakuliah Kalkulus mahasiswa. Dan bagi melihat nilainya, si mahasiswa tinggal mengirim pesan via 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, telah paham kan”.

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

Proses di atas ini mesti dilakukan setiap ketika. Sahabat dapat menggunakan script PHP atau script apapun bagi memproses data SMS yang masuk ke pada INBOX ini. Bila Sahabat menggunakan script PHP, karenanya Sahabat perlu membangun script auto refresh yang secara otomatis berjalan di selang interval waktu tertentu. Proses auto refresh ini bertujuan bagi mengecek ada tidaknya SMS baru yang masuk sekaligus memprosesnya.
Pertama-tama kita siapkan dahulu data nilai Kalkulus mahasiswa dan juga 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 Sahabat dapat bikin di satu database yang sama dengan tabel-tabel bawaannya Gammu atau dapat pun berbeda.

Berikutnya, kita bikin script PHP bagi pemrosesannya. dan pastikan bahwa keyword dari command SMS yang dikirimkan yakni sesuai dengan format. Bagi memastikan bahwa keyword dari command itu benar, Sahabat mesti membangun parsing terlebih dahulu. Seandainya format command benar karenanya SMS akan diproses bagi mengirimkan nilainya. Namun apabila tak sesuai, karenanya tetap diproses dengan mengirimkan pesan kesalahan pada format SMS pula.
Hal terpenting… jangan samapi lupa mengubah status ‘processed’ menjadi ‘true’ di setiap SMS yang telah diproses di pada tabel INBOX nya.

Berikut Source Code bagi membangun auto reply, komplit saya sertakan penjelasannya pada format komentar.

<?php  

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

// query bagi 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 menurut karakter
$pecah = explode(” “, $msg);  

// apabila kata terdepan dari SMS yakni ‘NILAI’ karenanya 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 tak ditemukan
if (mysql_num_rows($hasil2) == 0)
{
$reply = “NIM tak ditemukan”;
}
else {

// bila nilai ditemukan
$data2 = mysql_fetch_array($hasil2);
$nilai = $data2[‘nilai’];
$reply = “Nilai Kalkulus Sahabat: “.$nilai;
}
 else
{
$reply = “Maaf command salah”;  
}

// membangun SMS balasan  
$query3 = “INSERT INTO outbox(DestinationNumber, TextDecoded, CreatorID) VALUES  (‘$noPengirim’, ‘$reply’, ‘Gammu’)”; $hasil3 = mysql_query($query3);  

// ubah nilai ‘processed’ menjadi ‘true’ bagi setiap SMS yang telah diproses  
$query3 = “UPDATE inbox SET Processed = ‘true’ WHERE ID = ‘$id'”;
$hasil3 = mysql_query($query3);

}

?>

Mungkin sebahagian dari kamu bertanya, kenapa bagi proses parsing di atas pesan SMS nya perlu dibangun huruf kapital dengan strtoupper(). Jawabannya yakni : karena supaya ada keseragaman format pesan. Karena terkadang SMS dikirim dengan huruf kapital segala, kecil segala atau campuran. Bila tak seragam, karenanya sulit pada proses memparsingnya, karena string ‘NILAI’ dengan ‘nilai’ itu berbeda sehingga bila ditulis huruf kecil segala nantinya dapat dianggap command salah. Nah.. supaya seragam, karenanya setiap SMS yang masuk kita bikin kapital segala saja.
Keterangan:
Cara pengiriman pesan balasan di script di atas, saya menggunakan teknik insert data di tabel OUTBOX dengan query SQL.
Berikutnya supaya script di atas berjalan secara otomatis mengecek SMS yang masuk, Sahabat mesti bikin auto refresh pada 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 bagi 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 menurut karakter
$pecah = explode(” “, $msg);  

// apabila kata terdepan dari SMS yakni ‘NILAI’ karenanya 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 tak ditemukan
if (mysql_num_rows($hasil2) == 0)
{
$reply = “NIM tak ditemukan”;
}
else
{

// bila nilai ditemukan
$data2 = mysql_fetch_array($hasil2);
$nilai = $data2[‘nilai’];
$reply = “Nilai Kalkulus Sahabat: “.$nilai;
} }
else
{
$reply = “Maaf command salah”;
}
// membangun SMS balasan  
$query3 = “INSERT INTO outbox(DestinationNumber, TextDecoded) VALUES  (‘$noPengirim’, ‘$reply’)”; $hasil3 = mysql_query($query3);  

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

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

Selamat Mencoba.

Leave a Reply

Your email address will not be published. Required fields are marked *