Rabu, 13 Oktober 2010

Script Bantuan SMSTools Inject ke Database (SMSTools)

SMS Gateway adalah sebuah alat yang bekerja dengan menggunakan media SMS dan dihubungkan ke database dan proses tertentu. Dengan demikian SMS gateway akan selalu memerlukan database sebagai bahan materi, untuk proses autoresponder, autobroadcast dan lain sebagainya. Berbagai Engine SMS Gateway seperti Gammu, dan Gnokii telah menyediakan fasilitas langsung untuk berhubungan dengan database. Namun beberapa engine lain seperti SMS Tools tidak menyediakan fasilitas itu. Dia hanya menyediakan fasilitas untuk masuk ke dalam sebuah direktori /var/spool/sms/incoming yang penamaannya dilakukan secara sedikit acak. Nah, bagi para developer SMS Gateway berbasis SMS Tools, tidak perlu khawatir, karena script ini akan sangat membantu. Hal pertama yang perlu dilakukan adalah:

1. Membuat tabel inbox dengan field :

`id`, (int, autoincrement)
`SenderNumber`, (varchar)
`SMSC`,(varchar)
`SentDate`,(DateTime)
`ReceivedDate`,(DateTime)
`Subject`,(Varchar)
`Alphabeth`,(Varchar)
`UdhData`,(Varchar)
`Udh`,(Varchar)
`SMS`,(Text)
`Processed`, (enum : False, True)

2. Membuat satu direktori pada /var/spool/sms/ dengan nama moved, dan buatlah permission agar PHP/Apache dapat menuliskan ke dalam direktori tersebut.

3. Buatlah sebuah file bernama parse.log pada /var/log/ dan set-lah chmod dan chown agar apache dapat menuliskan dalam file tersebut

4. Letakkan tertulis di bawah dalam sebuah direktori, misal diberi nama ini.php, dan letakkan dalam crontab anda, baris berikut

*/2 * * * * * php /path/ke/file/ini.php

dimana setiap dua menit sekali akan dilakukan eksekusi file ini oleh PHP

<?php

/*Generated by Bimosaurus*/
/*Silakan dibuat cron yang dijalankan tiap dua menit atu satu menit sekali*/

// */2 * * * * * php /path/ke/file/ini.php

*/


$dir              = "/var/spool/sms";
$income_dir       = $dir . "/incoming/";
$moved_income_dir = $dir . "/moved/";
/*moved dir silakan dibuat sendiri, dan pastikan seluruh /var/spool/sms/ dapat dimanipulasi oleh php...
gunakan chown -R dan/atau chmod -R untuk mengubah permissionnya
*/

/*Silakan buat database untuk menampung sms yang telah diparsing*/

$dbname   = "sms";//sesuaikan dengan db
$dbuser   = "sms";//sesuaikan dengan db
$password = "sms";//sesuaikan dengan db

$inTemp   = "inTemp";
$outTemp  = "outTemp";


/*buka file satu persatu dan dipindahkan sekalian*/


while ((($file = readdir($income_dir)) !== false)&&($file!="..")&&($file!="."))
  {

    while(! feof($file))
    {
    $fget=fgets($file);
    $o=explode(": ",$fget);
        if((substr($o[0],0,4)=="From") && (substr($o[0],0,9) != "From_SMSC")){
        $FROM=$o[1];
        }
    elseif(substr($o[0],0,9)=="From_SMSC"){
        $SMSC=$o[1];
    }
        elseif(substr($o[0],0,4)=="Sent"){
        $SENT=$o[1];
    }
    elseif(substr($o[0],0,8)=="Received"){
        $RECEIVED=$o[1];
    }
        elseif(substr($o[0],0,7)=="Subject"){
        $SUBJECT=$o[1];
    }
        elseif(substr($o[0],0,8)=="Alpabeth"){
        $ALPH=$o[1];
    }
        elseif(substr($o[0],0,8)=="UDH-DATA"){
        $UDHD=$o[1];
    }
        elseif(substr($o[0],0,8)=="UDH"){
        $UDH=$o[1];
    }
        elseif((substr($o[0],0,1)!=" ") && (substr($o[0],0,4)!="From") && (substr($o[0],0,9)!="From_SMSC") && (substr($o[0],0,4)!="Sent") && (substr($o[0],0,8)!="Received") && (substr($o[0],0,7)!="Subject") && (substr($o[0],0,8)!="Alpabeth") && (substr($o[0],0,8)!="UDH-DATA") && (substr($o[0],0,3)!="UDH")){
    $MESSAGE=$o[0];
        }
    }
 

    fclose($file);
        rename(($dir ."". $income_dir ."". $file ),($dir ."". $moved_dir ."". $file));
        $report = "Pengubahan file ". $file ." ke database SUKSES";
        exec("echo $report >>/var/log/pars.log" , $ret);
}

fclose($dir);

/*Memindahkan isi File hasil penerimaan SMS kedalam database*/
/*
FROM = SenderNumber = Pengirim
SMSC = Center yang mengirim
SentDate = tanggal dikirim
ReceivedDate = Tanggal diterima
Subject = DITERIMA OLEH MODEM ke berapa
UDHDAta= jika data tersebut menerima SMS Ganda maka akan ada ID disini
UDH = Pembcaaan bahwa header tterserbut memiliki sms lebih dari satu
SMS = SMS
Processed = Indikator telah diproses oleh aplikasi lanjut belum
*/

$qinsert="INSERT INTO `inbox` (`SenderNumber`,`SMSC`,`SentDate`,`ReceivedDate`,`Subject`,`Alphabeth`,`UdhData`,`Udh`,`SMS`,`Processed`) VALUES ('$FROM','$SMSC','$SENT','$RECEIVED','$SUBJECT','$ALPABETH','$UDHD','$UDH','$MESSAGE','false')";
mysql_query($qinsert);
//echo "YAAAA";


?>

Begitulah kira-kira, maka file ini akan berjalan sebagai berikut:

Jika terdapat SMS Masuk, maka akan masuk dalam satu file baru di dalam direktori /var/spool/sms/incoming. Kemudian oleh file PHP diatas akan dipindhkan ke direktori moved, dan selanjutnya akan diproses parsing masuk ke dalam database. PHP akan selalu mencari file di incoming sesuai dengan interval yang kita set pada crontab. JIka ada, berarti terdapat sms baru, dan akan diproses.

SMSTools memang tidak support dengan database (entah yang terbaru), namun ketangguhan SMSTools adalah lebih tangguh dan stabil dibandingkan dengan engine yang lain.

Sekian, Semoga dapat membantu

Bimosaurus

5 komentar:

  1. aku mbiyen juga ndak pernah mudeng kok heheheh, ini juga hanya sebagai catatan yang semoga berguna kelak bagi saya dan temen temen.. saya juga kenal ini dari pengalaman, tidak dari pendidikan apapun.. jadi perlu membagikan ini dan menuliskan ini sekedar mengingat saja ...

    BalasHapus
  2. yen aku ngomong mudheng ki genah yen nggombal .... wkekekekekek *diedit, durung komplit kesusu ndudul*

    BalasHapus