implementasi kannel dengan modem wavecom di linux opensuse 11.2
DESCRIPTION
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.TRANSCRIPT
IMPLEMENTASI SMS GATEWAY DENGAN KANNEL
DAN MODEM WAVECOM
Hary Cahyono
wordpress.com, tifosilinux
Email : [email protected]
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
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-
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
#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"
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 :
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 :
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'];
// 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:
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:
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
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>
<?phpsession_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'])){
// 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" ]];
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=085695042489number2=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=085695042489number2=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>
<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:
Referensi
Kannel cvs-20030901 User’s Guide, Open Source WAP and SMS gateway Andreas Fink
Chairman & CTO, Global Networks Inc. [email protected], http://www.smsrelay.com,
http://www.gni.ch, Bruno Rodrigues, [email protected] , 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