IMPLEMENTASI SMS GATEWAY DENGAN KANNEL DAN MODEM WAVECOM
Hary Cahyono wordpress.com, tifosilinux Email :
[email protected] [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:
/shutdown?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;
// 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 dulu <article style='width:40%;float:left;margin:0 30%;' /> Login untuk user yang sudah terdaftar sebelumnya <pre>
Script menggunakan method post pada attribute nya dan menggunakan nama frmLogin dimana membutuhkan file cekpswd.php guna pengecekkan.
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
http://localhost/SendSMS.php <SendSMS.php>
berhasil
akan
di
redirect
ke
halaman
TifosiLinux Wordpress "; echo "<article style='width:40%;float:left;margin:0 30%;' />"; echo "