Memebuat SMS Gateway dengan Kannel


Tanpa BABIBU di sini ane mau share cara bikin SMS Gateway pake Kannel. Distro linux yg ane pake Ubuntu. Bisa pake versi mane aje. Langkah – langkahnya kek gini:

1. Install kannel

apt-get install kannel

2. Setting kannel

File yg kudu di setting /etc/kannel/kannel.conf

settingnya kek gini (sesuaiin sama keperluan agan):

# group core kudu harus wajib ada gan
group = core

# port buat HTTP administratin gan
admin-port = 13000
admin-port-ssl = false

#ni password buat HTTP administration gan
admin-password = passwordAgan
status-password = passwordAgan

# ni buat srikiti aja gan. cuma ngijinin ip localhost sama LAN aja (misal IP LAN kite 192.168.1.0/24) buat HTTP administration ntar (keterangan di bawah).
admin-deny-ip = “*.*.*.*”
admin-allow-ip = “127.0.0.1;192.168.1.*”
smsbox-port = 13001
smsbox-port-ssl = false
box-deny-ip = “*.*.*.*”
box-allow-ip = “127.0.0.1;192.168.1.*”

#semua log kita taro di file yang sama gan biar kaga ribet
log-file = “/var/log/kannel/kannel.log”

# log-level tu buat ngatur apa aja yng kudu di log gan. pilihanye 0 – 4, 0 = debug, 1= info, 2 = warning, 3 = error, 4 = panic
log-level = 1
access-log = “/var/log/kannel/kannel.log”
access-log-clean = true
access-log-format = %t %l [SMSC:%i] [from:%p] [to:%P] [msg:%b]
store-dump-freq = 10
dlr-storage = internal
sms-resend-freq = 60
sms-resend-retry = -1

# ni group buat devicenyanya gan
group = smsc
smsc = at
smsc-id = simpati
modemtype = auto

#sesuaiin sama device agan. dulu ane pake gsm modem nyang pcmcia ntu gan. agan bisa pake HP. colok lewat usb. trus buat tau devicenya di mount dimane begitu agan colok tu device agan ketik “dmesg” di terminal. ntar bakalan muncul tu gan dia di mount dimane.
device = /dev/ttyUSB2

#speed di comment aja gan biar otomatis sesuaiin sama speed-nya modem

#speed = 9600
keepalive = 60

#nomor agan
my-number = +6282110050459
log-file = “/var/log/kannel/kannel.log”
log-level = 1

# ni setingan smsbox-nya gan.
group = smsbox
bearerbox-host = localhost
sendsms-port = 13013
log-file = “/var/log/kannel/kannel.log”
log-level = 1
access-log = “/var/log/kannel/kannel.log”
access-log-clean = true

# nomor agan lagi

global-sender = +6282110050459

#ni group buat user sms gan
group = sendsms-user
username = smsuser
password = smspass

# ni maksudnye biar sms bisa nyambung gan. jadi misal lebih dari 1 sms (lebih dari 160 karakter) dianggep 1 sms utuh. ga dipecah -pecah.
concatenation = true

# max-messages maksudnye berapa banyak sms yang bisa dikirim sama user ini per sekali ngirim. kalo 10 itu berarti tiap ngirim sms bisa sampe 160 x 10 karakter gan. agan pasti tau kan kalo 1 sms tu 160 karakter. kenyataannya kalo kita set 10 ga nyampe 1600 karakter gan. ane pernah coba cuma bisa sampe 1520 karakter kalo ga salah.

max-messages = 10

#ni bagian yang penting gan buat handle incoming sms, agan tinggal masukin keyword yang mau diproses trus url buat handle tu sms. output dari url tadi yang bakal jadi reply sms. ada beberapa parameter yang agan bisa kirim ke url %a = isi semua sms, %k = keyword atawa kata pertama sms tsb, %q = nomor pengirim, %t = waktu ngirim sms dengan format yyyy-mm-dd, %s = kata kedua sms tsb, %r = kata ketiga sms dan seterusnya, %Q = nomor penerima sms. Jadi misal kek gini sms yang masuk kek gini gan “reg bagas semarang 10 april 1987”. kalo dijabarin bakalan %k = reg, %s = bagas, %r = semarang 10 april 1987, %a = reg bagas semarang 10 april 1987. buat lebih jelasnya agan bisa liat get url
group = sms-service
keyword = reg
get-url = “http://localhost/sms.php?pengirim=%q&keyword=%k&nama=%s&ttl=%r&isisms=%a&waktu=%t”
max-messages = 1

group = sms-service

# default maksudnya sms yang ga cocok sama keyword manapun
keyword = default

# ntar pengirim bakalan dapet balesan “keyword ga cocok”
text = “Keyword ga cocok”

#misal agan pengen sms yg ga cocok keywordnya ga dapet balesan tinggal set max-messages = 0
max-messages = 1

# kita includin setingan modem gan. ada beberapa setingan modem di file /etc/kannel/modems.conf. trus group smsc (lihat di atas) modemtype kita kasih auto aja gan. biar milih ndiri. atau kalau gagal kita tentuin type-nya berdasarkan yang ada di file modems.conf.
include = “/etc/kannel/modems.conf”

isi /etc/kannel/modems.conf kek gini gan:

# Modems configuration
#
# Example and default values
#
# group = modems
# id = “my-id”
# name = “my-name”
# detect-string = “MODEM”
# detect-string2 = “” [Default]
# init-string = “AT+CNMI=1,2,0,0,0” [Default]
# speed = 9600 [Default]
# enable-hwhs = “AT+IFC=2,2” [Default]
# need-sleep = false [Default]
# no-pin = false [Default]
# no-smsc = false [Default]
# sendline-sleep = 100 [Default, miliseconds]
# keepalive-cmd = “AT” [Default]
# broken = false [Default]
# message-storage = “SM”
# enable-mms = false [Default]

# If modemtype=auto, try everyone and defaults to this one
group = modems
id = generic
name = “Generic Modem”

group = modems
id = wavecom
name = Wavecom
detect-string = “WAVECOM”

group = modems
id = premicell
name = Premicell
detect-string = “PREMICEL”
no-pin = true
no-smsc = true

group = modems
id = siemens_tc35
name = “Siemens TC35”
detect-string = “SIEMENS”
detect-string2 = “TC35”
init-string = “AT+CNMI=1,2,0,1,1”
speed = 19200
enable-hwhs = “AT\\Q3”
need-sleep = true

group = modems
id = siemens_m20
name = “Siemens M20”
detect-string = “SIEMENS”
detect-string2 = “M20”
speed = 19200
enable-hwhs = “AT\\Q3”
keepalive-cmd = “AT+CBC;+CSQ”
need-sleep = true

group = modems
id = siemens_sl45
name = “Siemens SL45”
detect-string = “SIEMENS”
detect-string2 = “SL45”
init-string = “AT+CNMI=1,2,2,2,1”
keepalive-cmd = “AT+CBC;+CSQ”
speed = 19200
enable-hwhs = “AT\\Q3”
need-sleep = true
message-storage = “SM”

group = modems
id = nokiaphone
name = “Nokia Phone”
detect-string = “Nokia Mobile Phone”
need-sleep = true
keepalive-cmd = “AT+CBC;+CSQ”
enable-mms = true

group = modems
id = falcom
name = “Falcom”
detect-string = “Falcom”
#no-smsc = true

group = modems
id = ericsson_r520m
name = “Ericsson R520m”
detect-string = “R520m”
init-string = “AT+CNMI=3,2,0,0”

group = modems
id = ericsson_t68
name = “Ericsson T68”
detect-string = “T68”
init-string = “AT+CNMI=3,3”
keepalive-cmd = “AT+CBC;+CSQ”
broken = true

group = modems
id = sonyericsson_gr47
name = “Sony Ericsson GR47”
detect-string = “GR47”
message-storage = “ME”
# use this init-string for non sim-buffering
init-string = “AT+CNMI=3,2,0,0”
# use this init-string for sim-buffering
#init-string = “AT+CNMI=3,1,0,0”
reset-string = “ATZ”
broken = true

group = modems
id = alcatel
name = “Alcatel”
detect-string = “Alcatel”
init-string = “AT+CNMI=3,2,0,0”

group = modems
id = sonyericsson_T630-T628
name = “Sony Ericsson T630-T628?
init-string = “AT+CNMI=2,3,2,0,0;+CMGF=0?
keepalive-cmd = “AT+CBC;+CSQ;+CMGF=0?
broken = true

group = modems
id = sonyericsson_p1i
name = “Sony Ericsson P1i”
detect-string = “Sony Ericsson P1i”
init-string = “ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0”
message-storage = “SM”
reset-string = “ATZ”
broken = true

1 lagi gan yang kudu di setting. edit file /etc/default/kannel. trus agan komen yang WAPBOX, ilangin komen yang SMSBOX. biar SMSBOX bisa jalan pas booting gan. disini kita ga pake WAPBOX. Hampir lupa gan. biar kannel bisa akses tu device, perlu ngedit file /etc/group gan. cari kata dialout. trus tambahin kannel disitu penampakannya kek gini gan:

dialout:x:20:bagas,kannel

3. Testing

Kalo udah tinggal di test dah gan. start dulu kannel-nya pake “/etc/init.d/kannel start” lewat terminal. jangan lupa gan. harus sebagai root. tau kan gan caranye masuk root di ubuntu? pake sudo su. Perhatiin log-nya gan di /var/log/kannel/kannel.log. bisa pake “tailf /var/log/kannel/kannel.log” lewat terminal. pastiin ga ada error. trus cek sms gateway dah running pa blm. caranya ketik kek gini di terminal:

links -dump “http://localhost:13000/status.html?password=passwordAgan”

kalo di ubuntu agan belum ada links install dulu gan pake a”pt-get install links”. 13000 tu port admin yg udah kita setting di group core. trus status.html tu kita liat status-nya dalam format html. passwordAgan tu pasword-admin yg udah kita tentuin di group core. perhatiin outputnya gan. liat bagian status. harusnya “running”. kalo status running & ga ada error di log saatnya test kirim & terima sms gan. pertama kita coba kirim sms dulu. lewat terminal kita bisa coba pake command:

links -dump http://localhost:13013/cgi-bin/sendsms?username=smsuser&password=smspass&to=085641799816&text=Hello+world

sedikit penjelasan gan. 13013 tu sendsms-port yang kita setting di group smsbox, trus username ama password tu yang udah kita seting di group sendsms-user, to tu ya nomor tujaun. text tu isi smsnye gan. sambil perhatiin log-nye. ntar tiap sms yang keluar atau masuk (incoming & outgoing sms) bakal kecatet di log. kalau sms kekirim selamat gan. trus test selanjutnye test terima sms gan. kite coba setingan group sms-service jalan ape kaga. kita test kirim sms kayak yang di contoh gan. “reg budi semarang 13 januari 1983” misalnya. ntar pasti dpt balesan gan. eh, iya. sebelumnye kite buat script php buat handle sms-service. jadi kita kudu install web server (apache, php) di gateway tadi. contoh file-nya kek gini gan. sesuai sama setingan di atas kita kasih nama sms.php.

<?php

// kite ambil parameter nyang dikirim gan. selanjutnye bisa agan proses. bisa agan masukin database kalau agan mau. disini ane cuma kasih contoh simple aja gan.

$keyword = $_GET[‘keyword’];

$nama = $_GET[‘nama’];

$ttl = $_GET[‘ttl’];

$waktu = $_GET[‘waktu’];

$pengirim = $_GET[‘pengirim’];

$isisms = $_GET[‘isisms’];

// misal kita mau bales kek gini gan

$reply = “Makasih udah daftar. Berikut data agan:\n”;

$reply .= “Nama: $nama \n”;

$reply .= “TTL: $ttl \n”;

$reply .= “sms agan dikirim pada: $waktu\n”;

$reply .= “nomor hp agan: $pengirim”;

// output dari echo ini gan yang bakal jadi balesan

echo $reply;

// ntar outptnya kurang lebih bakal kek gini gan:

/**

* Makasih udah daftar. Berikut data agan:

*Nama: budi

*TTL: semarang 13 januari 1983

*sms agan dikirim pada: 2011-04-27 11:21:36

*nomor hp agan:+6285641799816

*/

?>

trus agan coba sms bebas. ga usah pake keyword reg. ntar pasti dpt balesan “Keyword ga cocok” kalo setingan agan udah bener. Sebenernya masih banyak fitur dan setingan yang bisa digali gan. disini ane cuma share dasarnya doank.

Kalo udah bisa, agan tinggal bikin user interfacenya dah. bisa pake PlaySMS. dulu ane pake itu. selalu perhatiin log gan!!! selamat mencoba!!! jangan lupa sharing gan kalo ada masalah.

Perintah Terjadwal Menggunakan Crontab


Cron adalah sebuah daemon untuk menjalankan perintah terjadwal. Utilitas ini sangat berguna jika kita ingin menjalankan suatu program atau perintah yang waktunya sudah kita jadwalkan seperti misalnya back up database yang artikelnya sudah saya terbitkan sebelumnya, atau untuk menghapus file temporary.

Perintah Crontab

Perintah crontab adalah sebagai berikut:

crontab -u [nama_user] { -e | -l -r }

Keterangan:

  • -u : user yang menjalankan cron (optional). Jika tidak di set maka di user saat ini yang digunakan
  • -e : edit crontab
  • -l : list atau daftar crontab
  • -r : remove atau menghapus crontab

Contoh penggunaan perintah tersebuta adalah sebagai berikut:

crontab -u bagas -l —> menampilkan list crontab user bagas

crontab -l —> menampilkan list crontab user saat ini

crontab -u bagas —> mengedit crontab user bagas

crontab -r bagas —> menghapus crontab user bagas

Saat kita menggunakan perintah “crontab -e” (tanpa tandapetik) maka akan muncul editor yang di dalamnya terdapat list perintah terjadwal untu user terkait. Jika Anda belum pernah menambahkan apapun pada crontab file ini biasanya kosong.

Penulisan Crontab

Ketentuan mengedit crontab urutannya adalah sebagai berikut:

m h dom mon dow command

Keterangan:

  • m : minute (menit), diisi 0 – 59 atau * untuk tidak memakai parameter ini
  • h : hour (jam), diisi 0-23 atau * untuk tidak memakai parameter ini
  • dom : day of month (tanggal), diisi 0-31 atau * untuk tidak memakai parameter ini
  • mon : month (bulan), diisi 1-12 atau * untuk tidak memakai parameter ini
  • dow : day of week (hari), diisi 0-6 dimana 0 = minggu, 1= senin, dst atau * untuk tidak memakai parameter ini
  • command (perintah), diisi perintah yang akan dieksekusi. Bisa perintah dasar linux atau bisa juga kumpulan perintah dalam suatu file yang bisa dieksekusi sebagaimana contoh pada artikel saya tentang back up database.
  • Parameter m,h,dom,mon,dow dapat juga digantikan dengan cukup menuliskan @hourly (menjalankan perintah tiap jam), @daily (menjalankan perintah setiap hari jam 00:00),  @weekly (menjalankan perintah tiap hari minggu jam 00:00), atau @monthly (menjalankan perintah tiap awal bulan jam 00:00).
  • Parameter m,h,dom,mon bisa juga dituliskan dengan format “*/n” (tanpa tanda petik) dimana n adalah numeric.
  • Parameter m,h,dom,mon,dow bisa juga ditulis lebih dari 1 dengan separator koma (“,”).

Parameter Waktu

Untuk lebih memperjelas tulisan ini saya akan coba jelaskan beberapa format parameter waktu yaitu parameter m (minute), h (hour), dom (day of month), mon (month), dan dow (day of week).

Format @waktu. Nilai yang sesuai adalah @hourly, @daily, @weekly, @monthly.

Contoh :

@monthly rm /home/someuser/tmp/*

Contoh Crontab

Dibawah ini adalah beberapa contoh penulisan crontab:

@hourly rm /home/someuser/tmp/*

@daily rm /home/someuser/tmp/*

@weekly rm /home/someuser/tmp/*

@monthly rm /home/someuser/tmp/*

30 0 1 1,6,12 * rm /home/someuser/tmp/*

Disable Email

Secara default crontab akan mengirimkan email kepada user account yang menjalankan cronjob. Jika Anda tidak menginginkannya tambahkan baris berikut pada akhir baris cronjob:

> /dev/null 2>&1

Contoh:

@monthly rm /home/someuser/tmp/* > /dev/null 2>&1

Membuat Log

Berikut adalah contoh jika Anda ingin membuat file log dari cronjob yang dijalankan:

@monthly rm /home/someuser/tmp/* > /home/someuser/cronlog/hapus_temporary_file.log

Demikian sedikit tentang crontab mudah – mudahan bisa berguna bagi pembaca.