Diberdayakan oleh Blogger.
-
RSS

Membuat Sendiri Kirim SMS Gratis Via Web dengan PHP dan MySQL

Artikel ini menjelaskan cara membuat sendiri aplikasi kirim SMS gratis via web. Untuk membuat fasilitas kirim SMS gratis via web, kita membutuhkan sebuah aplikasi gateway untuk mengirim SMS. Aplikasi sms gateway ini kita install di PC yang ada di rumah kita beserta modem/hp yang terhubung ke PC tersebut sebagai alat untuk mengirim SMS. PC ini harus selalu terhubung ke internet untuk berkomunikasi dengan server yang ada di hosting. Sedangkan di server hosting, kita membuat script form untuk interface user yang ingin mengirim SMS.

Ide dasar dalam pembuatannya adalah kita menggunakan semacam web service yang dibuat di server hosting untuk berkomunikasi antara PC rumah dan server hosting. Melalui web service inilah SMS akan dikirim dari server hosting ke PC rumah. Output Web service tersebut disajikan dalam bentuk XML yang isinya adalah SMS dan nomor tujuan. Data XML yang berisi SMS dan nomor tujuan inilah yang akan dibaca oleh PC rumah untuk dikirimkan melalui SMS gateway (Gammu).

Langkah pertama, menginstall Gammu sebagai SMS gateway.

Langkah kedua, buatlah script form untuk mengirim SMS. Script form ini nanti diletakkan di server hosting

sms.html

1.<form method="post" action="kirim.php">
2.No. Tujuan <input type="text" name="destination">
3.Isi SMS<br><textarea name="sms">textarea>
4.form>

Bila diperhatikan, form kirim SMS di atas nantinya akan disubmit di script kirim.php. Di dalam script kirim.php inilah nomor tujuan dan isi SMS akan disimpan dalam tabel temporary pada database server hosting. Misalkan kita beri nama tabel temporary tersebut adalah ‘outbox’. Kita bisa buat tabel ‘outbox’ ini dengan struktur sbb:

1.CREATE TABLE `outbox` (
2. `id` int(11) AUTO_INCREMENT,
3. `destinationNumber` varchar(20),
4. `sms` text,
5. PRIMARY KEY (`id`)
6.)

Field ‘id’ digunakan sebagai nomor unik penanda setiap SMS yang akan dikirim, field ‘destinationNumber’ untuk menyimpan nomor tujuan SMS, dan ‘sms’ untuk menyimpan isi SMS.


Script kirim.php

kirim.php

01.
02. // koneksi ke mysql server hosting
03. mysql_connect('dbhost', 'dbuser', 'dbpass');
04. mysql_select_db('dbname');
05.
06. // baca nomor tujuan dan isi sms dari form
07. $destNumber = $_POST['destination'];
08. $sms = $_POST['sms'];
09.
10. // query insert data sms ke tabel 'outbox'
11. $query = "INSERT INTO outbox (DestinationNumber, TextDecoded, CreatorID) VALUES ('$destNumber', '$sms', 'Gammu')";
12. mysql_query($query);
13.
14. echo "SMS sudah dikirim...";
15.?>

Setelah data sms yang dikirim tersimpan dalam tabel ‘outbox’, langkah selanjutnya kita buat script web service untuk menyajikan data sms yang tersimpan dalam tabel ‘outbox’ tersebut ke dalam bentuk dokumen XML. Misalkan kita beri nama script untuk mengenerate XML ini ‘data.php’

data.php

02.// koneksi ke mysql server hosting
03.mysql_connect('dbhost', 'dbuser', 'dbpass');
04.mysql_select_db('dbname');
05.
06.// membuat header dokumen XML
07.header('Content-Type: text/xml');
08.echo "";
09.
10.// membuat root tag untuk data XML
11.echo "";
12.
13.// query untuk membaca seluruh SMS yang ada di tabel outbox
14.$query = "SELECT * FROM outbox ORDER BY id";
15.$hasil = mysql_query($query);
16.while ($data = mysql_fetch_array($hasil))
17.{
18. // representasi data sms
19. echo "";
20. echo "".$data['id']."";
21. echo "".$data['destinationNumber']."";
22. echo "".$data['sms']."";
23. echo "";
24.}
25.echo "";
26.?>

Ketiga file di atas (sms.html, kirim.php, dan data.php) nanti diletakkan di dalam server hosting. Sampai langkah ini, kita sudah selesai bekerja di level server hosting. Langkah berikutnya adalah membuat script di sisi PC rumah.

Di dalam PC rumah, nantinya kita akan membuat script untuk membaca data sms yang tersaji dalam bentuk XML yang digenerate melalui script ‘data.php’ yang ada di server hosting. Setelah data sms ini dibaca, kemudian kita masukkan ke dalam tabel ‘outbox’ bawaannya Gammu untuk dikirim melalui hp/modem. Oya, kita perlu juga menghapus setiap data sms di server hosting yang sudah dibaca. Mengapa hal ini dilakukan? ya dong, supaya tabel ‘outbox’ nya di server hosting tidak penuh. Lantas, bagaimana cara menghapus data secara otomatis di server hosting setelah data sms nya terbaca? ya… kita gunakan CURL.

berikut ini script untuk membaca data sms dari XML nya.

bacasms.php

01.
02.// koneksi ke mysql di server localhost
03.mysql_connect('dbhost', 'dbuser', 'dbpass');
04.// nama database Gammu yang ada di localhost
05.mysql_select_db('dbname');
06.
07.// baca data XML dari server hosting yang digenerate oleh data.php
08.$dataxml = simplexml_load_file('http://namasitus/data.php');
09.foreach($dataxml->data as $data)
10.{
11. // baca field ID
12. $id = $data->id;
13. // baca nomor tujuan
14. $destination = $data->destination;
15. // baca isi sms
16. $sms = $data->sms;
17.
18. // mengirim SMS via Gammu dengan insert data ke tabel outbox Gammu
19. $query = "INSERT INTO outbox (DestinationNumber, TextDecoded) VALUES ('$destination', '$sms')";
20. mysql_query($query);
21.
22. // hapus data SMS di server hosting yang sudah terbaca berdasarkan ID
23. $curlHandle = curl_init();
24. curl_setopt($curlHandle, CURLOPT_URL, 'http://namasitus/hapus.php');
25. curl_setopt($curlHandle, CURLOPT_POSTFIELDS, 'id='.$id);
26. curl_setopt($curlHandle, CURLOPT_HEADER, 0);
27. curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
28. curl_setopt($curlHandle, CURLOPT_TIMEOUT,30);
29. curl_setopt($curlHandle, CURLOPT_POST, 1);
30. curl_exec($curlHandle);
31. curl_close($curlHandle);
32.}
33.?>

Jika web server di PC localhost belum mendukung CURL, maka lakukan setting CURL terlebih dahulu.

Eh… kalo kita liat pada script bacasms.php di atas, pada proses penghapusan data SMS yang ada di server hosting melalui CURL terdapat pemanggilan script hapus.php. Nah… script ini belum kita buat di server hosting. Script hapus.php ini nanti berfungsi untuk menghapus data sms yang ada di tabel outbox dalam database server hosting berdasarkan ID nya setelah data sms tersebut di baca oleh script bacasms.php.

hapus.php

01.
02.// koneksi ke mysql di server hosting
03.mysql_connect('dbhost', 'dbuser', 'dbpass');
04.mysql_select_db('dbname');
05.
06.// baca ID data yang akan dihapus yang dikirim via CURL dari localhost
07.$id = $_POST['id'];
08.// hapus data SMS berdasarkan ID
09.$query = "DELETE FROM outbox WHERE id = '$id'";
10.mysql_query($query);
11.
12.?>

Sekali lagi script hapus.php di atas harus ditaruh di server hosting lho ya… !!!

Selanjutnya script bacasms.php ini harus senantiasa kita jalankan melalui web browser localhost di PC rumah kita supaya bisa selalu membaca data sms yang ada di hosting lalu mengirimnya via Gammu. Lalu bagaimana supaya script bacasms.php ini bisa secara otomatis berjalan dan selalu bisa membaca data dari server hosting? Sebenarnya Anda bisa mengklik tombol REFRESH pada web browser supaya script ini bekerja, namun tentu hal ini membuat report kan? Nah… salah satu solusi dari hal ini adalah Anda bisa menjalankan autorefresh melalui AJAX yang secara otomatis merefresh script bacasms.php ini pada setiap selang n detik. Ini dia script nya…

index.php

01.<html>
02.<head>
03.<title>SMS Server Running...title>
04.<script type="text/javascript">
05.function ajax()
06.{
07. if (window.XMLHttpRequest)
08. {
09. xmlhttp=new XMLHttpRequest();
10. }
11. else
12. {
13. xmlhttp =new ActiveXObject("Microsoft.XMLHTTP");
14. }
15.
16. xmlhttp.onreadystatechange=function()
17. {
18. if (xmlhttp.readyState==4 &amp;amp;&amp;amp; xmlhttp.status==200)
19. {
20. }
21. }
22.
23. xmlhttp.open("GET","bacasms.php");
24. xmlhttp.send();
25. setTimeout("ajax()", 5000);
26.}
27.script>
28.
29.head>
30.<body onload="ajax()">
31.<h1>SMS Server Running...h1>
32.body>
33.html>

Contoh script AJAX yang ada di index.php di atas diset supaya bisa merefresh secara otomatis bacasms.php dalam interval 5 detik (5000 ms). Dengan demikian yang perlu Anda jalankan di localhost hanyalah script index.php di atas melalui browser.

Nah.. konsep di atas memungkinkan kita untuk bisa membangun aplikasi SMS gateway yang terintegrasi antara PC di server hosting dengan PC di rumah tanpa menggunakan IP public yang urusan untuk mendapatkannya sangat ribet dan mahal biayanya, atau tanpa menggunakan VPS maupun dedicated server untuk tipe hostingnya yang juga sangat mahal biayanya.

Anda dapat belajar teknik-teknik lain kaitannya dengan SMS gateway yang mengintegrasikan server hosting dengan pc rumah dengan contoh-contoh script SMS gateway yang saya buat untuk belajar.

Oya… meskipun namanya SMS gratis, tapi tidak sepenuhnya gratis. Istilah Gratis hanya bagi si pengguna atau pengirim SMS melalui web Anda, namun tidak gratis bagi si pemilik web karena harus menyisihkan sedikit biaya untuk bayar pulsa. Tapi tak apalah, anggap saja itu biaya marketing untuk lebih mengenalkan web Anda, apalagi saat ini pulsa sms sangat murah :-) Bisa pula tambahkan string pada setiap SMS yang dikirimkan dengan nama situs Anda untuk lebih memperkuat branding web Anda. Untuk hal ini silakan utak-atik sendiri ya :-)

Simpel bukan idenya??? Selamat mencoba…

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

Tehnik Dasar Mengirim SMS dengan Gammu

Artikel ini menjelaskan bagaimana teknik dasar mengirim SMS dengan Gammu baik dalam bentuk short text maupun long text. Pada bagian akhir nanti kita akan coba membuat script sederhana dengan PHP untuk mengirim pesan SMS ini yang diintegrasikan dengan Gammu melalui sebuah form.

Pada dasarnya kita bisa mengirim pesan SMS dalam 2 cara yaitu:

1. dengan menggunakan command inject yang sudah disediakan oleh Gammu,

Untuk cara pertama ini dengan menggunakan command inject yang disediakan oleh Gammu, caranya adalah masuklah ke folder/direktori Gammu Anda melalui Command Prompt di mana terdapat file bernama ‘gammu-smsd-inject‘, lalu ketikkan perintah berikut ini kemudian tekan ENTER.
gammu-smsd-inject -c pathtoconfigfile TEXT notujuan -text "pesan"

dengan parameter ‘pathtoconfigfile‘ adalah path direktori file ‘SMSDRC’ Gammu Anda.

Sebagai contoh:

gammu-smsd-inject -c c:\gammu\smsdrc TEXT +6281553311010 -text ""

Keterangan: tanda petik ganda pada command inject digunakan untuk mengapit string pesan yang akan dikirim.

Perintah di atas akan mengirimkan pesan SMS dengan maksimum panjang karakternya adalah 160.

Lantas, bagaimana jika untuk long text atau dengan panjang yang lebih dari itu? Caranya adalah dengan menggunakan pesan dalam format EMS.

gammu-smsd-inject -c pathtoconfigfile EMS notujuan -text "pesan"

Setelah Anda mengetikkan perintah di atas, maka Gammu akan segera mengirim SMS ke nomor tujuan.

2. dengan menyisipkan record dengan menggunakan query SQL ke dalam tabel ‘outbox‘.

Bila Anda ingin mengirimkan pesan dengan cara yang kedua ini, terlebih dahulu Anda harus sudah memiliki database ’sms’ dan tabel-tabel yang diperlukan oleh Gammu.

Cara kedua ini dengan menyisipkan sebuah record ke dalam tabel ‘outbox’.

Di dalam tabel ‘outbox‘ Anda akan lihat banyak sekali field, namun yang perlu diperhatikan hanyalah field ‘DestinationNumber‘ dan ‘TextDecoded‘. Field ‘DestinationNumber’ itu nanti akan diisi dengan nomor HP tujuan dan ‘TextDecoded’ diisi dengan pesan SMS yang akan dikirimkan.

Contoh:

INSERT INTO outbox(DestinationNumber, TextDecoded) VALUES ('+6281553311010', 'Test');

Cara ini hanya bisa dilakukan bila SMS nya maksimal 160 karakter saja.

Sekarang kita akan mencoba membuat script PHP sederhana untuk mengirim pesan SMS yang terintegrasi dengan Gammu ini.

Langkah pertama kita buat form untuk mengirim pesan SMS nya terlebih dahulu.


No. HP Tujuan :

Pesan :


Langkah kedua, kita buat script php untuk mengirim pesannya.

send.php


$noTujuan = $_POST['nohp'];
$message = $_POST['msg'];

exec('c:\gammu\gammu-smsd-inject.exe -c c:\gammu\smsdrc EMS '.$noTujuan.' -text "'.$message.'"');

?>

Perintah exec() dalam PHP digunakan untuk menjalankan perintah command DOS dalam hal ini adalah perintah command inject nya Gammu.

Sebelum Anda menjalankan script di atas, pastikan bahwa service Gammu telah dijalankan, dan HP sudah tertancap ke PC

Verikut ini script pengiriman SMS dengan menggunakan query INSERT

send.php


mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("sms");

$noTujuan = $_POST['nohp'];
$message = $_POST['msg'];

$query = "INSERT INTO outbox (DestinationNumber, TextDecoded) VALUES ('$noTujuan', '$message')";
$hasil = mysql_query($query);
if ($hasil) echo "SMS berhasil dikirim";
else echo "SMS gagal dikirim";

?>

Note: baik cara pertama maupun cara kedua, bila pesan SMS sudah terkirim maka secara otomatis akan tersimpan ke dalam tabel ’sentitems’ dalam database ’sms’.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS