Implementasi Kannel dengan modem Wavecom di Linux OpenSuSE 11.2

  • 403 views
Uploaded on

Untuk bagian SMS Alert, kamu bisa menyiapkan server khusus dengan menggunakan IP Public dan koneksi perangkat yang dibutuhkan agar secara luas bisa diakses dari sisi bisnis.

Untuk bagian SMS Alert, kamu bisa menyiapkan server khusus dengan menggunakan IP Public dan koneksi perangkat yang dibutuhkan agar secara luas bisa diakses dari sisi bisnis.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
403
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
11
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. IMPLEMENTASI SMS GATEWAY DENGAN KANNEL DAN MODEM WAVECOM Hary Cahyono wordpress.com, tifosilinux Email : hary.cahyono@waki.mobi h4ry.oop@gmail.com Begitu banyak referensi mengenai smsgateway dengan berbagai third party yang digunakannya, dengan hobi didunia Linux/UNIX dan niat menambah referensi implementasi dengan kannel, maka saya iseng membuat tulisan ini. Now being developed further by the open source community, namely the Kannel Group. Keyword : Guide Kannel
  • 2. Pendahuluan Sudah terlalu banyak referensi yang memuat Linux beserta kannel sebagai SMS GATEWAY nya. Sekarang saya coba membagi seperti apa sih implementasinya jika perusahaan/ corporate atau bahkan personal menginginkan business dengan Linux beserta Kannel. Ekspektasi nya selalu diarahkan kepada hal yang sifatnya untuk pemanfaatan ke arah positif. Mampu meraih optimalisasi business walaupun tetap membawa lisensi GPL. Membuat business mudah dalam melakukan analisis dan membuat Decision. Konfigurasi Kannel Semuanya dirancang bangun diatas sistem Linux OpenSuSE 11.2 Emerald dan menggunakan modem WAVECOM dimana saya hanya akan memberikan point-point nya saja karena sudah banyak referensi jika kita mencoba mencari di luar sana. Pasti tidak akan memenuhi kebutuhan informasi kamu :) oleh karena itu saya coba mencantumkan alamat email diatas. Biasanya kita rujuk ke path /etc/kannel/ namun akan berbeda jika kamu melakukan kompilasi secara custom pada --prefix=/<path_directory>/ , berikut konfigurasi yang saya gunakan: # Custom Config, Initiated by Hary on tifosilinux.com # :) Check these out # # In case we are using WAVECOM as a modem to implementing this topologys : [public user, HP]<---- >([SMSC, Telco]<--send sms-->[Modem or HP])<---->[Kannel SMS Gateway]<---->[Database Server or Content Server] # We have to know 3 points of Kannel which is important to configure like mandatory (m), optional (o), and conditional (c), then # As we know it have 3 things to understand : bearerbox as connection handler between smsbox and(to) smsc, smsbox as management function on kannel sms gateway, and wapbox as wap as connection # Four group + 1 group modem required by group 'core' such as Group smsbox, smsc, sendsms-user, smsservice, and modem # Divided by 4 log-level to describes, 0 : Level debug, 1 : info, 2 : warning, 3 : error, 4 : panic # # Noted : Kannel SMS Gateway can be control/ managed by HTTP interface, like http://localhost:<admin- port>/shutdown?password=<admin-password> # Which is the <password> on url above could be changed with status, suspend, resume, start-smsc, and stop-
  • 3. smsc group = core admin-port = 13000 admin-password = harysmatta status-password = probolinggo admin-deny-ip = "*.*.*.*" admin-allow-ip = "127.0.0.1" smsbox-port = 13003 #wapbox-port = 13004 # Not needed wap right now box-deny-ip = "*.*.*.*" box-allow-ip = "127.0.0.1" log-file = "/var/log/kannel/kannel.log" log-level = 1 access-log = "/var/log/kannel/kannel.access" #unified-prefix = "+358, 00358, 0, +, 00" #white-list = "http://localhost/whitelist.txt" store-file = "/var/log/kannel/kannel.store" group = smsbox bearerbox-host = 127.0.0.1 sendsms-port = 13013 sendsms-chars = "0123456789 +-" log-file = "/var/log/kannel/smsbox.log" log-level = 0 access-log = "/var/log/kannel/sms-access.log" global-sender = +6281100000 # blacklist = "http://localhost/sms/blacklist.txt" group = smsc smsc = at host = 127.0.0.1 smsc-id = test #modemtype = auto modemtype = wavecom device = /dev/ttyUSB0 speed = 115200 #validityperiod = 167 #keepalive = 10 # pin = 1314 # <== used by GSM sim-buffering = true sms-center = +6281100000 my-number = +6285311761918 #my-number = +6281316764465 # Mobile phone configuration group = modems id = WAVECOM name = wavecom detect-string = WAVECOM
  • 4. #detect-string = AT # Use this if u're set modemtype as automatic on group smsc init-string = "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0" #init-string = "AT+CMEE=2;+CNMI=3,1,0,0,0" #init-string = "AT+CNMI=2,1,2,2,0 #keepalive-cmd = "AT+CBC;+CSQ" #message-storage = "sm" ############################### [IF] SMS Connection with SMPP as a protocol ############################################# # group = smsc (m) # # smsc = smpp (m) # # host = 10.195.7.8 # Thisi is using VPN managed by vpn box in order to connect to telco ipaddress_server SMS CENTER # # port = 4322 # # receive-port = 4322 # This is port including IP in order to connect to telco # # smsc-username = "passinds" # Provided by telco # # smsc-password = "smpassdf" # Provided by telco # # system-type = "TCP" # # interface-version = 33 # # address-range = "9790" # CP / Content Provider's Shortcode provided by telco # ####################################################################################### ################################## group = sendsms-user username = telkomsel password = telkomsel max-messages = 5 concatenation = true # --- SERVICES --- # -- Find these with your own docs from telco -- # added new parameters : # %k --> keyword # %p --> User Number Sender # %P --> User Number Receiver # %t --> Time sender # %T --> transactionid # %D --> meta-data, forwarded from Operator (XL request) group = sms-service keyword = default #keyword = reg # get-url = "http://192.168.0.102:39790/mo/index.php?smscid=%i&msisdn=%p&to=%P&sms= %a&trx_date=%t&tid=%T&meta=%D" # (c) URL came from program or # script will be execute if the keyword match with text gateway received by. Using GET method in URL <=== The highest one of hierarchy response text # Parameter get-url dibawah akan mengembalikan reply couldn't fetch content #get-url = "http://localhost/playsms/plugin/gateway/kannel/geturl.php?t=%t&q=%q&a=%a" #get-url = "http://localhost/mo/getting.php?text=%b&sender=%p"
  • 5. get-url = "http://localhost/mo/gettings.php?sender=%p&to=%P&text=%b&time=%t" #get-url = "http://localhost/mo/received.php?sender=%p&text=%b" max-messages = 3 #text = 'Pendaftaran Mahasiswa Baru' ###group = sms-service ###keyword = INFO # post-url = # as same as get-url with different method POST <=== The highest one of hierarchy response text ###file = /home/hary/info.txt # Kannel helps you to store delivery reports group = mysql-connection id = mydlr id = dlr-db host = localhost username = kannel password = kannel database = kannels max-connections = 1 group = dlr-db id = dlr-db table = dlr field-smsc = smsc field-timestamp = ts field-source = source field-destination = destination field-service = service field-url = url field-status = status field-mask = mask field-boxc-id = boxc #group = sms-service #keyword = Reg #text = "Selamat anda terdaftar di layanan info IT. Dan tidak dapat berhenti berlangganan. :):) CS : 08569042489" Dari konfigurasi diatas, sistem mengabaikan hashtag dan kita bisa membacanya sebagai sebuah informasi. Semua konfigurasi dan MSISDN “BEBAS UNTUK DILIHAT :)”. Didalam informasi tersebut, saya juga memberikan gambaran bagaimana jika shortcode yang digunakan untuk kepentingan business corporate, jadinya tidak dengan menggunakan msisdn pribadi (kamu bisa lihat-lihat di fitur busness di laman http://tifosilinux.wordpress.com). Tinggal disesuaikan pada parameter :
  • 6. global-sender = +6281100000, dan sms-center = +6281100000 Karena saya menggunakan operator telkomsel, maka pusat dari pesan saya rujuk ke +6281100000 dan +6281100000 untuk global-sender yang artinya, setiap nomor yang diterima ke user (sebagai balasan dari sms MT yang telah dikirim) akan menggunakan nomor +6281100000. Kemudian, pada group sms-service kita bisa melakukan aktifasi jika menginginkan sistem melakukan reply secara otomatis. Tinggal kita masukkan keyword dan text nya sebagai reply atas keyword yang telah dikirim dari si sender. Kannel sebagai receiver juga dapat melakukan custom reply pada get-url (bisa juga menggunakan post-url dsb) dimana keyword tertentu yang telah di hardcode atau ter-register sebelumnya akan melakukan reply sesuai trigger yang telah di register. Syaratnya set keyword ke nilai default terlebih dahulu. Dalam hal melakukan dailypush (dimana user ter register dahulu didalam sistem basis data untuk kemudian dikirimkan MT SMS (ter charge ataupun tidak)), kita perlu menyiapkan parameter URI berikut : "http://127.0.0.1:13013/cgi-bin/sendsms? username=telkomsel&password=telkomsel&to=085695042489&text=Isi+SMS+yang+i ngin+dikirim" Untuk hubungan langsung Kannel ke MySQL guna meyimpan DLR (Delivery Report) tidak akan saya bahas dan kamu bisa mendapatkan referensinya sendiri di internet. Jika setting dan test berhasil, kamu akan mendapati logging-logging sebagai berikut :
  • 7. Simulasi Transaksi Sekarang kita coba memperjelas hal ini dengan membuat scripting yang 'amat sangat' sederhana dengan PHP dan koneksi MySQL. Konsepnya begini: Sebagai penyelia konten terhadap client, kita memutuhkan sebuah tools yang dapat melakukan registrasi services atau layanan beserta nilai charging, isi konten, serta deskripsi dari layanan tersebut. Didalam sistem butuh sebuah trigger guna mencocokkan antara layanan dengan nilai charging. Untuk script bisa kamu download di tifosilinux.wordpress.com, berikut screenshot nya : Jika sudah mengerti arahnya, kita amati script get-url untuk mendapatkan reply sms sesuai dengan yang diharapkan. File mengacu pada parameter get-url yang digunakan. Tempatkan script sesuai document root kamu; <?php // Inititated by Harysmatta mysql_connect("localhost", "kannel", "kannel"); mysql_select_db("kannels"); //http://localhost/mo/gettings.php?sender=%p&to=%P&text=%b&time=%t //http://localhost/mo/gettings.php?sender=09230232&to=1212232&text=DOA&time=091282912 $msgfrom = $_GET['sender']; $msgto = $_GET['to']; $msgtimestamp = $_GET['time']; $svc_keyword = $_GET['text']; //Or you can using : //$svc_keyword = $HTTP_GET_VARS['text'];
  • 8. // Avoiding these nested query if u can ;) $price_mapping = "select b.charging_value as price from charging b where b.id in(select c.charging_id from service_charging_mapping c where c.service_id = (select a.id from service a where a.service_name = '$svc_keyword' ))"; $key_price_mapping = mysql_query($price_mapping); while($result1 = mysql_fetch_array($key_price_mapping)){ $price = $result1['price']; } // 'Mobile Originating' like $inserting_MO = mysql_query("insert into tbl_msgtransacts (MSGFROM, MSGTO, MSGDATA, PRICE, MSGTIMESTAMP, SUBJECT, OPERATOR) values('$msgfrom', '$msgto', '$svc_keyword', '$price', '$msgtimestamp', 'MO;PULL;TEXT', 'TSEL')"); $keyword_query = "select description from service where service_name = '$svc_keyword'"; $key_query=mysql_query($keyword_query); while($result2=mysql_fetch_array($key_query)){ $msgdata = "Congrats : ".$result2['description'].""; echo "Congrats : ".$result2['description'].""; } // 'Mobile Terminating' like $inserting_MT = mysql_query("insert into tbl_msgtransacts (MSGFROM, MSGTO, MSGDATA, PRICE, MSGTIMESTAMP, SUBJECT, OPERATOR) values('$msgto', '$msgfrom', '$msgdata', '$price', '$msgtimestamp', 'MT;PULL;TEXT', 'TSEL')"); Sesuaikan koneksi ke MySQL kamu, sebenarnya bisa menggunakan PDO jika DB Type yang digunakan berlainan jenis. Script akan mengambil variabel pada url kemudian melakukan pengecekkan pada tabel-tabel yang digunakan saat inserting service (disarankan kamu membuat service register terlebih dahulu seperti screenshoot diatas). Script akan mencocokkan price sesuai dengan keyword (dalam hal ini kita analogikan sebagai service) dan akan melakukan inserting as a MO and MT. Kita bahkan bisa menambahkan status ataupun Closereason dari setiap message, namun belum sempat saya lakukan. Dan bisa saja kamu memperluas konsep diatas. Kita bisa melihat setiap transaksi diatas pada table tbl_msgtransacts yang kita siapkan sebelumnya, berikut screenshoot nya:
  • 9. Silahkan kamu buat sendiri MO Traffic sebagai tools complement transaksi diatas ;) SMS Alert Ibaratkan begini, kita seorang business analyst.. dan melakukan sebuah perencanaan pada setiap Content Provider untuk menjalankan campaign sebagai activity sales nya. Kita menjalankan sebuah aplikasi dari vendor dimana mulai dari menentukan tipe layanan yang dijalankan, range waktu hingga telco mana yang dipilih, namun satu hal.. tidak ada notifikasi pesan ke Account Engineer (AE) sebagai perwakilan CP dan System Administrator serta Monitoring Team nya. Bahwa telah dijalankan sebuah campaign dengan range waktu tertentu dan di setiap telco dan CP mana saja campaign telah berjalan hingga selesai. Jadi yang kita harapkan ada sebuah aktifitas tambahkan untuk mengirimkan notifikasi ke System Administrator serta Monitoring Team. Sebuah analogi kembali saya coba perlihatkan:
  • 10. Karena hal ini berkaitan dengan mengirimkan pesan notifikasi dan sedikit banyak menentukan dalam membuat keputusan bisnis, maka kita perlu membuat priviliges berupa sebuah session. File-file yang dibutuhkan adalah trigger.sh, triggering.sh, cekpswd.php, login.html, logout.php, sign.php, sorry.html, green.png, red.png, exec1 s.d. exec9.sh serta SendSMS.php. Tentu file-file tersebut penamaannya bisa disesuaikan. Oke, diperjelas.. contoh sample hierarki direktorinya sebagai berikut: /var/www/html/SendSMS.php /var/www/html/support/cekpswd.php /var/www/html/support/login.html /var/www/html/support/logout.php /var/www/html/support/sign.php /var/www/html/support/sorry.html /var/www/html/support/green.png /var/www/html/support/red.png /home/hary/script/trigger.sh /home/hary/script/triggering.sh /home/hary/script/exec1-9.sh Sebagai catatan, saya tidak akan memberikan detail DB dan table-table yang digunakan hingga field-field nya, namun kamu bisa memenuhi kebutuhan tersebut
  • 11. dengan membaca script. Kemudian kita breakdown isi setiap script; <Login.html> <html> <head> <title>Login dulu</title> </head> <body> <article style='width:40%;float:left;margin:0 30%;' /> <b>Login untuk user yang sudah terdaftar sebelumnya </b> <pre> <form name="frmLogIn" METHOD="post" ACTION="/support/cekpswd.php"> Username : <INPUT TYPE="text" NAME="uname"> Password : <INPUT TYPE="password" NAME="pswd"> <INPUT TYPE="submit" VALUE="Submit"> </form> </pre> </body> </html> Script menggunakan method post pada attribute nya dan menggunakan nama frmLogin dimana membutuhkan file cekpswd.php guna pengecekkan. <cekpswd.php> <?php /* * Session started by HarysMatta on tifosilinux.wordpress.com * */ session_start(); $uname = $_POST['uname']; $pswd = sha1($_POST['pswd']); $host = "localhost"; $user = "root"; $pwd = ''; $db = 'login'; $sql = "select * from member where uname='$uname'"; $conn = @mysql_connect($host, $user, $pwd) or die("Koneksi gagal : " . mysql_error()); mysql_select_db($db); $qry = mysql_query($sql) or die("Query salah : " . mysql_error()); $num = mysql_num_rows($qry); $row = mysql_fetch_array($qry); if ($num==0 OR $pswd!=$row['pswd']){ header("Location: /support/sorry.html"); } else{ $_SESSION['login']=1; header("Location: http://localhost/SendSMS.php"); } ?> Disinilah session kita buka menggunakan fungsi session_start(); dan melakukan pengecekkan jika username dan password sudah di insert secara manual atau belum. Dengan segala detail nya mulai dari koneksi dan pengambilan value dari method POST yang digunakan, jika login berhasil akan di redirect ke halaman http://localhost/SendSMS.php <SendSMS.php>
  • 12. <?php session_start(); if(!isset($_SESSION['login'])){ include("/var/www/html/support/login.html"); } else{ mysql_connect("localhost", "kannel", "kannel"); mysql_select_db("kannels"); echo "<html> <head> <title>TifosiLinux Wordpress</title> </head> <body>"; echo "<article style='width:40%;float:left;margin:0 30%;' />"; echo "<div style='border: 2px solid green; height: 370px; padding: 5px; text-align: left; width: 430px;'> <form method='post' action='SendSMS.php'> <table border=0 width=430px> <tr> <td> <b>CP 3Tinggi</b><br> <input type='checkbox' value='ProXL1' name='ProXL1'>ProXL<br> <input type='checkbox' value='Indosat1' name='Indosat1'>Indosat<br> <input type='checkbox' value='TSEL1' name='TSEL1'>Telkomsel<br><br> <b>CP Passindonesia</b><br> <input type='checkbox' value='ProXL2' name='ProXL2'>ProXL<br> <input type='checkbox' value='Indosat2' name='Indosat2'>Indosat<br> <input type='checkbox' value='TSEL2' name='TSEL2'>Telkomsel<br><br> <b>CP YattaEra</b><br> <input type='checkbox' value='ProXL3' name='ProXL3'>ProXL<br> <input type='checkbox' value='Indosat3' name='Indosat3'>Indosat<br> <input type='checkbox' value='TSEL3' name='TSEL3'>Telkomsel<br><br> </td> <td> <b>Duration of Campaign</b><br> <select name='hour'> <option selected='selected'>Hour</option>"; for($d=0; $d<=24; $d+=1){ echo "<option value=$d>$d</option>"; } echo "</select>hour <select name='minute'> <option selected='selected'>Minute</option>"; for($c=1; $c<=60; $c+=1){ echo "<option value=$c>$c</option>"; } echo "</select>minute/s <br><br><b>Status</b><br>"; echo "<iframe src='http://localhost/support/sign.php' height='120' width='120'></iframe>"; echo "</td> </tr> </table> "; /* For Example */ if (isset($_POST['ProXL1'])) { // echo $_POST['ProXL1'].'<br />'; shell_exec("/home/hary/script/exec1.sh"); } if (isset($_POST['ProXL2'])) { // echo $_POST['ProXL2'].'<br />'; shell_exec("/home/hary/script/exec2.sh"); } if (isset($_POST['ProXL3'])) { // echo $_POST['ProXL3'].'<br />'; shell_exec("/home/hary/script/exec3.sh"); } if (isset($_POST['Indosat1'])) {
  • 13. // echo $_POST['Indosat1'].'<br />'; shell_exec("/home/hary/script/exec4.sh"); } if (isset($_POST['Indosat2'])) { shell_exec("/home/hary/script/exec5.sh"); } if (isset($_POST['Indosat3'])) { // echo $_POST['Indosat3'].'<br />'; shell_exec("/home/hary/script/exec6.sh"); } if (isset($_POST['TSEL1'])) { // echo $_POST['TSEL1'].'<br />'; shell_exec("/home/hary/script/exec7.sh"); } if (isset($_POST['TSEL2'])) { // echo $_POST['TSEL2'].'<br />'; shell_exec("/home/hary/script/exec8.sh"); } if (isset($_POST['TSEL3'])) { // echo $_POST['TSEL3'].'<br />'; shell_exec("/home/hary/script/exec9.sh"); } /* For Example */ //if ($_POST['hour'] != "Hour" && $_POST['minute'] != "Minute") if ($_POST['hour'] != "Hour" && $_POST['minute'] != "Minute") { $HOUR = $_POST['hour']; $MINUTE = $_POST['minute']; mysql_query("TRUNCATE TABLE `kannels`.`trigger`"); mysql_query("INSERT INTO `kannels`.`trigger` (`id`, `hour`, `minute`, `status`, `laststatus`) VALUES (NULL, '$HOUR', '$MINUTE', 'isActive', 'set')"); echo "Schedule has been set<br>"; } else { echo "<b>Noted : </b>Schedule & Duration of Campaign can't be empty<br>"; } echo "<input type='submit' value='Submit' name='submit'> <a href='http://localhost/support/logout.php'>Logout</a></div> </body> </html>"; Iframe digunakan untuk menampilkan status secara realtime dengan menggunakan file sign.php dengan META refresh untuk melihat kondisi campaign. Gunakan file green.png untuk status aktif dan red.png ketika status finish. Status dipicu oleh isi dari table trigger pada field status dan laststatus. Shell script yang bertugas untuk melakukan action nya, yakni trigger.sh yang kita set pada cronjobs untuk pengecekkan setiap saat. Kemudian script ini akan otomatis melakukkan update waktu cronjobs untuk file triggering.sh <trigger.sh> #!/bin/bash # Setup this script with all wildcards : * * * * * /home/hary/script/trigger.sh check=`mysql -hlocalhost -ukannel -p'kannel' kannels -e "select laststatus from kannels.trigger order by id desc limit 1" | grep -v "laststatus"` if [[ $check == "set" ]];
  • 14. then menit=`crontab -l | grep 'triggering.sh' | awk '{print $1}'` jam=`crontab -l | grep 'triggering.sh' | awk '{print $2}'` hour=`mysql -hlocalhost -ukannel -p'kannel' kannels -e "select hour from kannels.trigger order by id desc limit 1" | grep -v "hour"` minute=`mysql -hlocalhost -ukannel -p'kannel' kannels -e "select minute from kannels.trigger order by id desc limit 1" | grep -v "minute"` final_minute=`date --date='+'$minute' minutes' +"%M"` final_hour=`date --date='+'$hour' hour' +"%H"` sed -i 's/'$menit' '$jam' * * * /home/hary/script/triggering.sh/'$final_minute' '$final_hour' * * * /home/hary/script/triggering.sh/' /var/spool/cron/tabs/root mysql -hlocalhost -ukannel -p'kannel' kannels -e "UPDATE kannels.trigger set laststatus='unset' where laststatus='set'" fi <triggering.sh> #!/bin/bash #number1=085695042489 number2=081316764465 time=`date +"%H:%M"` #links -dump "http://127.0.0.1:13013/cgi-bin/sendsms?username=telkomsel&password=telkomsel&to=$number1&text=Info+: +Campaign+has+been+stop+at+$time+a+clock" links -dump "http://127.0.0.1:13013/cgi-bin/sendsms?username=telkomsel&password=telkomsel&to=$number2&text=Info+: +Campaign+has+been+stop+at+$time+a+clock" mysql -hlocalhost -ukannel -p'kannel' kannels -e "UPDATE kannels.trigger set status='isDie' where status='isActive'" Kita juga membutuhkan file-file exec sebagai action apabila value dari POST sesuai dengan kondisi, file menggunakan parameter url untuk mengirimkan pesan. <exec1.sh – exec9.sh> #!/bin/bash #number1=085695042489 number2=081316764465 hour=`mysql -hlocalhost -ukannel -p'kannel' kannels -e "select hour from kannels.trigger order by id desc limit 1" | grep -v hour` minute=`mysql -hlocalhost -ukannel -p'kannel' kannels -e "select minute from kannels.trigger order by id desc limit 1" | grep -v minute` #links -dump "http://127.0.0.1:13013/cgi-bin/sendsms?username=telkomsel&password=telkomsel&to=$number1&text=Info+: +telco+ProXL+di+3Tinggi+sedang+campaign" links -dump "http://127.0.0.1:13013/cgi-bin/sendsms?username=telkomsel&password=telkomsel&to=$number2&text=Info+: +telco+Telkomsel+di+3Tinggi+sedang+campaign+untuk+$hour+jam+$minute+minute" echo 'date +"%H:%M:%S"' >> /tmp/LOGGING.txt #links -dump "http://127.0.0.1:13013/cgi-bin/sendsms?username=telkomsel&password=telkomsel&to=$number1&text=Info+: +telco+Telkomsel+di+3Tinggi+sedang+campaign" Isi message diatas bisa dirubah sesuai kebutuhan. <sorry.html> <HTML> <HEAD> <TITLE> Sorry </TITLE> </HEAD> <BODY> <article style='width:40%;float:left;margin:0 30%;' /> <b> Username ato password anda ndak bener</b><br>
  • 15. <a href="http://localhost/support/login.html"> Back </a> </BODY> </HTML> <logout.php> <? /* * Session started by HarysMatta on tifosilinux.wordpress.com * */ session_start(); unset($_SESSION['login']); session_destroy(); header("Location: /support/login.html"); ?> Script pada file logout.php diatas akan melepas session yang sebelumnya telah terbentuk. <sign.php> <?php mysql_connect("localhost", "kannel", "kannel"); mysql_select_db("kannels"); echo "<META HTTP-EQUIV='REFRESH' CONTENT='3;URL=http://localhost/support/sign.php'>"; $stat="select status from kannels.trigger order by id desc limit 1"; $hasil1=mysql_query($stat); $hasil2=mysql_fetch_array($hasil1); if($hasil2['status'] != "isActive") { echo "<img src='http://localhost/support/red.png'></img>"; } else{ echo "<img src='http://localhost/support/green.png'></img>"; } Akhirnya kita bisa lihat kondisi pada tiga screenshoot dibawah ini:
  • 16. Referensi Kannel cvs-20030901 User’s Guide, Open Source WAP and SMS gateway Andreas Fink Chairman & CTO, Global Networks Inc. andreas@fink.org, http://www.smsrelay.com, http://www.gni.ch, Bruno Rodrigues, bruno.rodrigues@litux.org, http://litux.org/bruno *) Semuanya ditulis diatas sistem Linux OpenSuSE 11.2 Emerald, OpenOffice 3.1.1, dia v 0.97. dan Okular v 0.9.5