Pertama di Indonesia: "Murottal Al Qur'an + Terjemahan" dalam bentuk CD MP3 Original (Coba dulu FREE)
Dapatkan Script SMS Gateway PHP + MySQL

Seperti: software pengirim SMS massal, SMS survei, SMS polling, SMS quick count, SMS dakwah, Web2SMS dan masih banyak lagi... semuanya berbasis PHP & MySQL
[Info Lengkap...]



Script Auto Reply SMS Gateway dengan PHP


December 1st, 2009 | by rosihanari | Cetak Artikel Ini Cetak Artikel Ini

Setelah sekian lama tidak update blog, kangen rasanya untuk berbagi kembali pada pengunjung setia blog ini. Dalam postingan kali ini saya akan berbagi ilmu tentang bagaimana cara membuat script auto reply SMS Gateway dengan PHP dan MySQL. Topik ini sebenarnya sudah lama dinantikan oleh beberapa rekan namun baru sempat kali ini saya mewujudkannya. Maaf ya rekans…

OK deh… masih dengan menggunakan Gammu kita akan membuat contoh studi kasus yaitu tentang nilai mahasiswa. Adapun skenarionya adalah sbb: andaikan kita telah memiliki data nilai matakuliah Kalkulus mahasiswa. Nah… 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. OK paham ya skenarionya?

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.

OK… now back to the case… 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');

Oya, untuk 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. Oya.. 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 lupa mengubah status ‘processed’ menjadi ‘true’ pada setiap SMS yang telah diproses di dalam tabel INBOX nya.

Nah.. ini dia scriptnya 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 <spasi>
  $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);
}
?>

Oya… mungkin Anda bertanya, mengapa untuk proses parsing di atas pesan SMS nya perlu dibuat huruf kapital dengan strtoupper(). Ya… hal ini perlu 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. Anda dapat mempelajari kembali teknik ini serta menggunakan teknik lain dengan membaca artikel saya tentang ‘Teknik Dasar Mengirim SMS dengan Gammu‘.

Selanjutnya supaya script di atas berjalan secara otomatis mengecek SMS yang masuk, Anda harus buat auto refresh dalam selang beberapa detik.

sms.php

<html>
<head>
<!-- refresh script setiap 30 detik -->
<meta http-equiv="refresh" content="30; url=<?php $_SERVER['PHP_SELF']; ?>">
</head>
 
<body>
 
<h1>SMS server running....</h1>
 
<?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 <spasi>
  $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);
}
?>
 
</body>
</html>

Sebenarnya untuk memproses SMS dan memberikan auto reply, selain dengan auto script menggunakan auto refresh seperti di atas, Anda dapat pula menggunakan TRIGGER 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.

OK deh.. selamat mencobanya, dan silakan berkreasi sendiri ya… Anda dapat menambahkan keyword lain atau format SMS lain yang lebih dari satu.


Beberapa artikel terkait


Share this article on:

Kata kunci: auto reply sms - script sms gammu php - script sms php - sms auto reply php - sms gateway script -


Ada 82 komentar dalam artikel ini.

  1. dede says:

    terima kasih akhirnya mau berbagi tutorial/script gratis mengenai sms gateway gammu, smg menjadi amal ibadah..

  2. Mantab banget tulisannya. Matur suwun

  3. rosihanari says:

    @dhidhin haris: sama2 mas… :-) ditunggu kunjungan berikutnya..

  4. dex says:

    pak ari untuk refreshnya saya pernah memakai sampai 0.1 dan efeknya tetapi og browser saya jadi bengkak dan sempat lelet, ( saya pantau pake task manager ) tapi kecepatan auto respondingnya bisa 5 detik langsung kebalas.. apakah itu juga memperngaruhi kec pengolahan data pak ketika data yang di request sudah banyak,misal dalam 1 menit ada 30 hape yang merequest atopun dalam 1 detik ada 2 hape yang merequest secara bersamaan, mohon petunjuknya terima kasih..oh ya pak itu saya pake replaynya tidak melalui outbox..:) nuwun

  5. dex says:

    oh ya pak script ini –> url=”>
    fungsinya untuk apa.. karena saya kemarin cuma ngubah timer refreshn>ya ajah, dan tetep jalan..

  6. rosihanari says:

    @dex: url di dalam meta refresh itu gunanya untuk mengarahkan refreshnya menuju script mana? di situ saya arahkan ke PHP_SELF yang artinya diarahkan ke script itu sendiri.

  7. rosihanari says:

    @dex: what??? 0.1 detik? he 3x itu mah terlalu cepat mas… makanya jadi bengkak browsernya, bahkan konon untuk Firefox 3.0 hal itu dikira gangguan sehingga diblok. Sebaiknya agak diperlama timernya, mungkin bisa sekitar 20-30 detik. Jelas jumlah data SMS yang masuk itu mempengaruhi kecepatan pengolahan datanya, makanya kalo SMS yang masuk banyak, jangan dibuat 0.1 detik lah…

  8. Cecep says:

    Ini bgus bgt pak.. Tp saya bngung pak,sudah saya coba,tp stiap saya krm sms,d sent item statusx pasti sending error,kira2 knapa ya pak?mhon petnjukx pak…

  9. rosihanari says:

    @cecep: hp nya sudah didetect sama gammu nya belum? jika belum coba dicek lagi settingan di gammurc nya, terutama bagian port dan connection. jika sudah detect, coba dicek lagi servicenya sudah jalan belum? jika servicenya belum mau jalan (error) coba cek lagi di smsdrc nya sudah betul belum settingannya (port, connection, nama db, user koneksi ke mysql dan passwordnya). Jika service sudah jalan, kemungkinan HP anda memang tidak support sending SMS dengan gammu :-)



Tolong beri komentar donk!

Komentar Anda akan berguna untuk kemajuan blog ini.


Mohon maaf, komentar yang menggunakan email palsu atau komentar bernada negatif atau cemooh secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil dalam daftar komentar.

Dimohon jangan pula memasukkan code program dalam bentuk apapun ke dalam komentar karena akan dianggap spam.

*
Untuk membuktikan bahwa komentar Anda bukan spam, tulis kata yang muncul dalam gambar di bawah ini. Bila Anda tidak bisa membaca kata dalam gambar, klik pada gambar tersebut untuk mendengarkan suara dari kata tersebut
Click to hear an audio file of the anti-spam word