Panduan Praktis SMS Gateway (Bundled)
Click here to load reader
-
Upload
vivi-sefta-sary -
Category
Documents
-
view
87 -
download
18
description
Transcript of Panduan Praktis SMS Gateway (Bundled)
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 1 dari 43
Disusun oleh:
Rosihan Ari Yuana, S.Si, M.Kom
http://blog.rosihanari.net
TIS
Cara Mudah Membangun Aplikasi SMS Gateway dengan
Gammu SMS Engine dan PHP
(Bundled Edition)
Seri Tutorial Praktis Pemrograman Rosihan Ari Yuana
BONUS:
Easy Gammu
Installer
V2.0
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 2 dari 43
Hak cipta hanya milik Allah azza wa jalla.
Hanya karena anugerah Nya lah, ebook tutorial ini bisa terwujud melalui
tangan penulis.
Oleh karena itu, tidak berhak seseorang yang bermaksud mengedit
sebagian atau keseluruhan ebook ini tanpa seijin penulis.
Dilarang keras menyebarkan, mendistribusikan, memberikan Ebook ini
kepada orang lain TANPA SEIJIN penulis.
Jika Anda ingin menyebarkan/memberikan ILMU pada seseorang, maka
sebarkanlah/berikanlah ILMU yang telah Anda peroleh atau miliki setelah
Anda mempelajari Ebook ini.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 3 dari 43
Daftar Isi Ebook
Instalasi Gammu SMS Engine dengan Easy Gammu Installer V2.0 ......................................................... 4
Instalasi XAMPP ................................................................................................................................... 4
Instalasi Modem Wavecom.................................................................................................................. 7
Instalasi Gammu SMS Engine ............................................................................................................... 9
Test Kirim SMS................................................................................................................................... 13
Test Terima SMS ................................................................................................................................ 14
Menghentikan Service Modem Gammu ............................................................................................. 14
(Case 01) Teknik Pengiriman Short SMS ................................................................................................. 15
(Case 02) Teknik Pengiriman Long SMS .................................................................................................. 17
(Case 03) Teknik Penerimaan Short SMS ................................................................................................ 20
(Case 06) Teknik SMS Broadcast 1 ......................................................................................................... 22
(Case 08) Teknik SMS Auto Reply 1 ........................................................................................................ 25
(Case 09) Teknik SMS Auto Reply 2 ........................................................................................................ 29
(Case 10) Teknik SMS Auto Reply 3 ........................................................................................................ 32
(Case 12) Teknik SMS Auto Reply 5 ........................................................................................................ 36
(Case 13) Teknik SMS On Scheduled 1 ................................................................................................... 40
Troubleshooting Gammu ....................................................................................................................... 41
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 4 dari 43
Instalasi Gammu SMS Engine dengan Easy Gammu Installer V2.0
Easy Gammu Installer V2.0 adalah merupakan aplikasi berbasis web yang diharapkan bisa memudahkan
Anda dalam melakukan instalasi Gammu SMS Engine. Sebagaimana kita ketahui bersama bahwa
instalasi Gammu Engine secara manual sangatlah ribet dan butuh kemampuan khusus untuk
instalasinya, seperti harus memahami perintah console di command DOS/WINDOWS prompt,
menguasai perintah-perintah Gammu untuk mengecek koneksi modem, install service, hapus service
dsb. Alasan inilah yang membuat Easy Gammu Installer V2.0 ini hadir untuk Anda.
Apa bedanya dengan Easy Gammu Installer versi sebelumnya? Bedanya adalah bahwa di versi 2.0 ini
sudah ditambahkan fitur untuk instalasi multiple modem sehingga Anda bisa mensetting beberapa
modem sekaligus untuk Gammu Engine nya. Selain itu, juga penyederhanaan proses instalasi juga
dilakukan di versi V2.0 ini.
Karena Easy Gammu Installer V2.0 ini merupakan aplikasi berbasis web, maka untuk menjalankannya,
diperlukan webserver dan MySQL. Anda bisa menggunakan XAMPP, WAMP, atau APPSERV untuk
webserver dan MySQL . Berikut ini akan dijelaskan cara melakukan instalasi XAMPP, yang dalam
penjelasan ini akan dijelaskan cara instalasi XAMPP 1.7.3. Sedangkan untuk versi XAMPP di atas 1.7.3
menyesuaikan. Jika dalam komputer Anda sudah terinstall Apache + MySQL, XAMPP, WAMP atau
APPSERV maka abaikan langkah ini.
Instalasi XAMPP
1. Double klik pada file instalasi XAMPP (xampp-win32-1.7.3.exe)
2. Selanjutnya muncul tampilan berikut ini
Tentukan Destination Folder atau folder dimana XAMPP akan diinstall. Di sini menggunakan
defaultnya yaitu C:\ selanjutnya klik INSTALL.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 5 dari 43
3. Selanjutnya muncul tampilan berikut ini
Jika muncul pertanyaan-pertanyaan seperti di atas, maka langsung ENTER saja
4. Jika muncul tampilan seperti di bawah ini:
Pilih No. 1 untuk menjalankan XAMPP Control Panel nya, lalu ENTER.
5. Beri tanda centang pada bagian SVC untuk module APACHE dan MYSQL nya supaya APACHE dan
MySQL ini jalan otomatis apabila komputer dinyalakan.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 6 dari 43
6. Untuk menjalankan Webserver (Apache) dan MySQL nya, silakan klik tombol START pada
APACHE dan MYSQL nya,
Sehingga keduanya berstatus RUNNING seperti gambar berikut ini
Catatan:
Apabila module Apache tidak bisa RUNNING, kemungkinan ada aplikasi lain yang
bentrok port nya dengan Apache, biasanya aplikasi SKYPE. Maka untuk sementara jika di
komputer Anda terdapat SKYPE, harap diuninstall dahulu sebelum menjalankan
Apachenya. Jika Apache sudah berjalan, maka SKYPE bisa Anda install kembali.
Sedangkan apabila module MySQL tidak bisa RUNNING, biasanya disebabkan di
komputer Anda sebelumnya sudah terinstall MySQL sehingga bentrok servicenya.
7. Setelah proses instalasi selesai, silakan cek apakah XAMPP yang sudah diinstal dapat berjalan
dengan baik. Caranya dengan membuka browser Firefox dan ketikkan URL berikut ini
http://localhost. Jika webserver sudah bekerja dengan baik, maka akan muncul tampilan seperti
di bawah ini di browser.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 7 dari 43
Setelah proses instalasi XAMPP di atas berjalan lancar, maka setiap kali Anda hidupkan komputer service
Apache dan MySQL otomatis berjalan tanpa perlu diklik START lagi Apache dan MySQL nya secara
manual.
Instalasi Modem Wavecom
Pada bagian ini akan dijelaskan cara instalasi modem untuk SMS gateway, yang dalam hal ini adalah
modem Wavecom. Modem Wavecom yang bisa digunakan untuk Gammu SMS Engine adalah semua
tipe Wavecom dari mulai yang paling murah sampai yang termahal sekalipun, asalkan yang jenis GSM.
Untuk Wavecom CDMA tidak bisa digunakan di Gammu SMS Engine.
Sebelum mulai instalasi Modem Wavecom, pastikan antena modem yang mirip huruf L sudah dipasang
di modemnya, dan SIM card sudah pula dimasukkan ke dalam slot sim card. Slot sim card ini terletak di
dekat antena, dan untuk mengeluarkan slot sim card caranya dengan menusuk tombol kecil warna
kuning, sampai slot sim card nya keluar. Selanjutnya tempatkan sim card ke dalam slot yang keluar tadi
dan masukkan kembali ke dalam modem.
Pastikan sim card yang sudah dimasukkan ke dalam modem ini sebelumnya sudah diaktivasi ke 444, jika
sim cardnya adalah kartu perdana.
Sekarang kita mulai melakukan instalasinya.
1. Colokkan modem ke port USB komputer
2. Ekstrak file Driver-Wavecom.zip yang ada di dalam CD, dan letakkan di sembarang direktori
dalam komputer Anda.
3. Pastikan lampu indikator modem Wavecom yang berwarna merah kedip-kedip secara teratur.
Lampu indikator berkedip merupakan pertanda bahwa sinyal dari operator yang digunakan
sudah diterima oleh modem. Namun, jika lampu menyala terus atau lampu berkedip namun
tidak teratur merupakan pertanda sinyalnya belum diterima modem atau sinyalnya lemah.
Untuk hal ini, coba cari lokasi yang memungkinkan penerimaan sinyal bisa baik, atau coba
gunakan sim card dari operator yang berbeda. Sedangkan jika lampu indikator tidak menyala
sama sekali, kemungkinan modemya ada masalah/rusak.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 8 dari 43
4. Setelah modem dicolokkan ke komputer, silakan masuk ke Control Panel, lalu masuk ke Device
Manager. Di Windows 7, cukup Anda search di kotak pencarian Control Panel
Kemudian klik Device Manager
Sedangkan untuk di Windows XP, Device Manager ini terletak di Control Panel System
5. Di dalam Device Manager, akan tampak USB-Serial Controller di bagian Other Devices.
Klik kanan pada USB Serial controller tersebut, lalu pilih UPDATE DRIVER SOFTWARE
6. Kemudian pilih BROWSE MY COMPUTER FOR DRIVER SOFTWARE
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 9 dari 43
7. Arahkan ke folder tempat Anda mengekstrak driver modem Wavecom sebelumnya.
8. Klik NEXT, dan tunggu proses instalasi drivernya sampai selesai dan muncul
9. Setelah itu, di Device Manager akan muncul seperti ini:
Keterangan:
COM 9, merupakan nomor port di mana modem Wavecom ini dicolokkan pada komputer.
Nomor port ini bisa jadi berbeda-beda di setiap komputer, maupun di setiap port USB di
komputernya. Untuk selanjutnya, nomor port ini nanti akan digunakan untuk instalasi Gammu
SMS Engine.
Instalasi Gammu SMS Engine
Setelah XAMPP diinstall, dan driver modem Wavecom juga diinstall sehingga modem bisa dikenali
nomor portnya oleh komputer, sekarang kita lanjutkan ke proses instalasi Gammu SMS Engine.
1. Ekstrak file easy-gammu-installer-v2.zip yang berada di CD ke sembarang direktori di komputer.
2. Hasil ekstrak adalah sebuah folder bernama gammu. Selanjutnya pindahkan folder gammu ini
ke direktori C:/XAMPP/HTDOCS.
3. Kemudian, buka web browser (sebaiknya jangan menggunakan Internet Explorer), dan buka URL
http://localhost/gammu hingga keluar tampilan sbb:
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 10 dari 43
4. Klik LANGKAH 1 untuk mensetting database yang akan diperlukan oleh Gammu SMS Engine
5. Masukkan Username MySQL, Password MySQL dari username tersebut, dan nama database
Gammu yang akan dibuat. Khusus untuk XAMPP 1.7.3, defaultnya adalah
Username MySQL : root
Password MySQL :
Nama Database MySQL : gammu
Untuk nama database, bisa Anda ganti sendiri dengan nama lain dengan ketentuan: tidak boleh
mengandung spasi dan tanda -.
6. Klik tombol BUAT DATABASE, dan pastikan tidak muncul pesan error apapun setelah mengklik
tombol tersebut.
7. Klik LANGKAH 2
8. Isikan keterangan modem yang akan digunakan oleh Gammu SMS engine.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 11 dari 43
Keterangan:
- ID Phone/Modem : isikan nama identitas modem dengan sembarang nama. ID ini nanti akan
digunakan untuk proses pengiriman dan penerimaan modem.
- Port : isikan nomor port modem sesuai yang muncul di device manager
- Connection: isikan baud rate modem, khusus untuk modem Wavecom pilih at115200.
9. Klik SIMPAN
10. Jika modem yang ingin Anda gunakan di Gammu SMS Engine lebih dari satu, maka ulangi lagi
langkah no. 8 dan 9 sebelumnya.
11. Modem yang sudah diregisterkan di Gammu, akan tampil di bawahnya
12. Setelah semua modem ditambahkan, selanjutnya lakukan cek koneksi untuk setiap modemnya
dengan cara mengklik CEK KONEKSI (teks warna merah). Jika modem dikenali oleh Gammu,
maka indikasinya muncul informasi modemnya sbb:
Keterangan:
Jika status koneksi modem tidak muncul keterangan apa-apa, maka kemungkinan ada file
msvcr71.dll di Windows Anda yang hilang. Untuk solusinya, silakan Anda pelajari di
http://goo.gl/Covu9
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 12 dari 43
13. Setelah semua modem bisa terdeteksi dengan baik, langkah selanjutnya adalah membuat
service Gammu untuk masing-masing modem dengan cara mengklik BUAT SERVICE. Apabila
service modem ini sukses dibuat, maka akan muncul status sbb:
Keterangan:
Apabila proses pembuatan service gagal, dengan munculnya pesan Error installing service
maka silakan menurunkan level UAC terlebih dahulu (baca: http://goo.gl/AJKuM). Hal ini
biasanya terjadi di Windows 7.
14. Setelah semua service untuk tiap modem sudah sukses dibuat, maka Gammu SMS engine siap
digunakan. Untuk menjalankan Gammu, maka tinggal jalankan service modem yang telah dibuat
tadi melalui CONTROL PANEL ADMINISTRATIVE TOOLS SERVICES
Kemudian cari service Gammu nya dari daftar service yang ada. Nama service Gammu
bertuliskan Gammu SMSD Service (nama ID modem). Selanjutnya klik kanan dan pilih START,
pada service modem yang akan dijalankan.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 13 dari 43
Setelah Gammu Engine ini terinstall, maka di dalam database gammu akan ada beberapa tabel berikut
ini:
- Daemons : digunakan oleh service Gammu untuk bekerja
- Gammu : digunakan untuk menyimpan informasi versi gammu engine
- Inbox : digunakan untuk menyimpan data SMS yang masuk
- Outbox : digunakan untuk proses pengiriman SMS
- Outbox_multipart : digunakan untuk proses pengiriman long SMS
- PBK : digunakan untuk menyimpan data phonebook
- PBK_Groups : digunakan untuk menyimpan data group phonebook
- Phones : digunakan untuk menyimpan informasi modem/device
- Sentitems : digunakan untuk menyimpan data SMS yang telah melalui pengiriman
Sebaiknya Anda jangan mengubah struktur tabel-tabel tersebut, kecuali menambahkan field baru
karena akan mengakibatkan Gammu Engine tidak bisa berjalan dengan baik.
Test Kirim SMS
Setelah service modem dari Gammunya dijalankan, maka Anda bisa melakukan test kirim SMS melalui
modem yang diinginkan.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 14 dari 43
Test Terima SMS
Dapat pula Anda cek untuk terima sms. Cobalah kirim SMS melalui HP Anda ke salah satu modem yang
sudah diset sebelumnya.
Menghentikan Service Modem Gammu
Untuk menghentikan service modem Gammu tertentu, caranya cukup klik kanan pada service modem
yang akan dihentikan, lalu pilih STOP
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 15 dari 43
(Case 01) Teknik Pengiriman Short SMS
Maksud dari Short SMS di sini adalah SMS yang di dalamnya memuat karakter tidak lebih dari 160 buah.
Teknik dasar pengiriman short SMS dalam gammu engine ini sangat mudah sekali yaitu hanya dengan
menyisipkan record ke dalam tabel OUTBOX bawaan gammu.
Berikut ini beberapa field dalam tabel OUTBOX yang perlu diperhatikan ketika menyisipkan record untuk
pengiriman short SMS.
Nama Field Keterangan
DestinationNumber Nomor tujuan pengiriman SMS
TextDecoded Pesan SMS yang akan dikirimkan
Class Jika diisi 0 maka SMS yang dikirim berupa SMS
Flash, jika diisi -1 maka yang dikirim berupa SMS
normal. Jika tidak diisi, secara default akan diisi -1.
SenderID ID Modem yang digunakan untuk mengirim SMS
CreatorID Isikan sembarang teks, misal: Gammu
SendingDateTime Waktu kapan SMS akan dikirimkan
Keterangan:
SMS Flash adalah SMS yang apabila diterima di HP penerima maka langsung terbuka di HP (tidak
tersimpan di INBOX) dan akan terhapus otomatis ketika ditutup SMS nya
Field SenderID boleh dikosongkan. Apabila field ini dikosongkan, maka gammu engine otomatis
akan mengirim dari modem mana saja yang dalam posisi stand by (jika menggunakan multi
modem)
Field CreatorID wajib diisi dengan sembarang teks, karena field ini tidak boleh NULL (kosong).
Jika tidak diisi, terkadang SMS tidak bisa terkirim.
Field SendingDateTime boleh dikosongkan. Apabila dikosongkan, maka SMS akan terkirim pada
saat itu juga.
Berikut ini contoh query SQL untuk menyisipkan record ke tabel OUTBOX untuk mengirim pesan SMS ke
nomor tertentu
INSERT INTO outbox (DestinationNumber, TextDecoded, SenderID, CreatorID, Class) VALUES ('08571111111', 'Test SMS', '', 'Gammu', '-1');
Di dalam file function.php yang terdapat dalam folder CASE01, berisi sebuah function untuk proses
pengiriman SMS nya.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 16 dari 43
function sendsms($nohp, $pesan, $modem) { $pesan = str_replace("'", "\'", $pesan); $query = "INSERT INTO outbox (DestinationNumber, TextDecoded, SenderID, CreatorID) VALUES ('$nohp', '$pesan', '$modem', 'Gammu')"; $hasil = mysql_query($query); return 'SMS sedang dikirim...'; }
Function sendsms() tersebut terdiri dari 3 parameter, yaitu $nohp yang digunakan untuk menentukan
nomor HP tujuan SMS, $pesan untuk menyatakan pesan SMS yang akan dikirimkan, dan $modem yaitu
ID modem yang digunakan untuk mengirim SMS.
Di dalam query SQL yang ada di function sendsms() tidak mengikutsertakan field Class nya, dengan
demikian SMS yang dikirimkan adalah SMS normal. Anda bisa memodifikasi function sendsms() tersebut
supaya bisa mengirim SMS flash.
Statement
$pesan = str_replace("'", "\'", $pesan);
digunakan untuk mengantisipasi jika di dalam pesan SMS nya memuat karakter single quote () yang bisa
menyebabkan proses insert query nya error, yaitu dengan mengubah karakter dengan \. Meskipun
demikian, tanda \ ini tidak akan muncul di SMS yang dikirim.
Anda bisa mencoba script pengiriman short sms nya dengan menjalankan file index.php di browser yang
terletak di dalam folder CASE01, dengan terlebih dahulu disetting konfigurasi koneksi ke database
gammu yang ada di MySQL dalam file koneksi.php
Setelah SMS yang akan dikirim ini tertampung di tabel OUTBOX menunggu proses pengirimannya,
selanjutnya data SMS tadi akan secara otomatis berpindah ke tabel SENTITEMS dari Gammu
databasenya. Apabila pengiriman SMS nya sukses (terkirim), maka Anda bisa melihat status:
SendingOKNoReport
Dalam field status pada tabel SENTITEMS tersebut.
Namun, jika pengirimannya gagal maka akan muncul Sending Error pada field statusnya. Untuk
penjelasan penyebab Sending Error bisa Anda pelajari di Bab Troubleshooting Gammu di bagian akhir
ebook ini.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 17 dari 43
(Case 02) Teknik Pengiriman Long SMS
Pada teknik pengiriman long SMS (SMS dengan jumlah karakter lebih dari 160 buah) di gammu engine,
prinsipnya hampir sama dengan pengiriman short sms. Namun, terdapat perbedaan sedikit.
Perbedaannya yaitu, untuk teks SMS perlu dibagi-bagi terlebih dahulu menjadi beberapa bagian (part),
dengan panjang masing-masing part adalah maksimum 153 karakter. Selanjutnya, untuk setiap part
diberikan UDH (User Data Header). UDH adalah berupa sederetan karakter yang nantinya digunakan
untuk menyusun kembali part sms menjadi sms utuh di HP penerima. Adapun format UDH adalah
sebagai berikut
050003XXYYZZ
Dengan XX adalah 2 digit kode hexadecimal dari sebuah bilangan desimal acak 1 s/d 255. Kemudian YY
adalah 2 digit bilangan yang menunjukkan jumlah total part SMS, dan ZZ adalah 2 digit bilangan yang
menunjukkan part ke berapanya.
Sebagai contoh misalkan ada pesan dengan panjang 400 karakter, maka pesan tersebut nantinya akan
dipecah menjadi 3 part, dengan part ke-1 berisi 153 karakter, part ke-2 berisi 153 karakter, dan part ke-3
berisi 94 karakter.
Selanjutnya, pada part ke-1 diberi label UDH 050003EE0301 dimana digit 03 menunjukkan total part,
dan dua digit terakhir UDH nya 01 menunjukkan posisi partnya adalah ke-1. Untuk UDH part ke-2 label
UDH nya adalah 050003EE0302 (perhatikan digit 03 dan 02), dan untuk part ke-3 nya 050003EE0303
(perhatikan juga digit 03 dan 03).
Setelah pesan SMS dipecah ke dalam part-part, dan masing-masing part diberikan UDH, proses
selanjutnya adalah menyisipkan pesan part dan UDH nya ke tabel gammu. Untuk part ke-1, disisipkan ke
tabel OUTBOX dan part yang lain disisipkan ke tabel OUTBOX_MULTIPART.
Di dalam tabel OUTBOX, field apa saja yang harus diisi? Berikut ini field-field yang harus diisi.
Nama Field Keterangan
DestinationNumber Nomor tujuan pengiriman SMS
TextDecoded Isi pesan SMS pada part ke-1
Class Jika diisi 0 maka SMS yang dikirim berupa SMS
Flash, jika diisi -1 maka yang dikirim berupa SMS
normal. Jika tidak diisi, secara default akan diisi -1.
SenderID ID Modem yang digunakan untuk mengirim SMS
CreatorID Isikan sembarang teks, misal: Gammu
SendingDateTime Waktu kapan SMS akan dikirimkan
MultiPart Diisi true
UDH Diisi UDH pada part ke-1
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 18 dari 43
ID Field ini akan terisi secara otomatis karena bersifat
autoincrement
Kemudian untuk tabel OUTBOX_MULTIPART, field yang harus diisi adalah:
Nama Field Keterangan
ID ID yang diisikan harus sama dengan ID dari tabel
OUTBOX
TextDecoded Isi pesan SMS pada part ke-2, 3 dst
UDH Diisi UDH untuk setiap part
SequencePosition Diisi nomor urutan part SMS nya
Berikut ini contoh isi tabel OUTBOX dan OUTBOX_MULTIPART ketika mengirim sebuah pesan SMS
dengan karakter lebih dari 160 karakter.
Pesan asli :
Berikut ini adalah teks lagu 'Balonku' yang sering dinyanyikan oleh anak-anak kecil, dari jaman dahulu
sampai dengan jaman sekarang yang modern ini: Balonku ada lima. Rupa-rupa warnanya. Hijau, kuning,
kelabu. Merah muda dan biru. Meletus balon hijau.. DOR. Hatiku sangat kacau. Balonku tinggal empat.
Kupegang erat-erat
Panjang pesan : 324 karakter
Jumlah part : 3 buah
Isi Tabel OUTBOX
DestinationNumber TextDecoded UDH Class MultiPart ID
0857123456789 Berikut ini adalah teks lagu
'Balonku' yang sering dinyanyikan
oleh anak-anak kecil, dari jaman
dahulu sampai dengan jaman
sekarang yang modern ini: Ba
050003F20301 -1 True 10
Isi Tabel OUTBOX_MULTIPART
ID UDH TextDecoded SequencePosition
10 050003F20302 lonku ada lima. Rupa-rupa warnanya. Hijau, kuning,
kelabu. Merah muda dan biru. Meletus balon hijau..
DOR. Hatiku sangat kacau. Balonku tinggal empat. Ku
2
10 050003F20303 pegang erat-erat 3
Implementasi dari teknik ini dalam script PHP adalah sbb:
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 19 dari 43
// mencari jumlah total part $jmlSMS = ceil(strlen($pesan)/153);
// proses memecah sms ke dalam part-part $pecah = str_split($pesan, 153);
// membaca ID terakhir dari tabel OUTBOX // ID ini nanti akan digunakan untuk disisipkan ke OUTBOX_MULTIPART $query = "SHOW TABLE STATUS LIKE 'outbox'"; $hasil = mysql_query($query); $data = mysql_fetch_array($hasil); $newID = $data['Auto_increment'];
// merandom bilangan 1 s.d 255 $random = rand(1, 255);
// mengubah bilangan random ke hexadecimal 2 digit $headerUDH = sprintf("%02s", strtoupper(dechex($random)));
// proses insert tiap part ke tabel OUTBOX dan OUTBOX_MULTIPART for ($i=1; $i
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 20 dari 43
(Case 03) Teknik Penerimaan Short SMS
Pada gammu engine, semua SMS yang diterima oleh modem/hp semuanya akan masuk ke dalam tabel
INBOX secara otomatis. Beberapa field yang perlu menjadi perhatian dalam tabel INBOX ini adalah
sebagai berikut:
Nama Field Keterangan
SenderNumber Nomor HP pengirim pesan SMS
TextDecoded Pesan SMS yang dikirimkan
UDH Kode UDH dari pesan yang diterima
ReceivingDateTime Waktu diterimanya SMS
RecipientID ID modem yang menerima SMS
Processed Secara default bernilai false
ID Merupakan ID dari pesan SMS
Keterangan:
Field Processed nantinya akan berguna sebagai flag atau penanda bahwa SMS tersebut sudah
diproses oleh sistem atau belum. Jika SMS belum diproses oleh sistem maka bernilai false.
Sedangkan apabila sudah diproses harus diubah menjadi true. Untuk penerapannya akan
dibahas di bab yang lain.
Pesan SMS yang masuk ke dalam field TextDecoded maksimum 160 karakter. Jika SMS yang
diterima berupa long SMS, maka pesan SMS yang masuk ke dalam tabel INBOX lebih dari satu
karena terbagi ke dalam part. Teknik untuk membaca pesan secara utuh dari long SMS akan
dibahas di bab lain.
Dengan demikian, jika ingin menampilkan daftar SMS yang sudah diterima oleh modem menggunakan
gammu engine cukup membaca data atau record yang ada di tabel INBOX tersebut saja.
Anda bisa mencoba script PHP yang ada di folder CASE03. Pada script tersebut, pembacaan data SMS
yang ada di INBOX ada di file run.php. Dalam script ini, pesan SMS yang akan ditampilkan akan diurutkan
berdasarkan waktu diterimanya secara descending dengan harapan supaya pesan SMS terbaru yang
masuk akan terletak paling atas dari daftar. Untuk melakukan pengurutan pesan SMS ini, cukup gunakan
query:
$query = "SELECT * FROM inbox ORDER BY ReceivingDateTime DESC";
Supaya list SMS yang diterima ini selalu terupdate tanpa harus merefresh halaman run.php, maka bisa
digunakan AJAX. Script AJAX yang ada di file index.php ini nanti akan merefresh run.php secara
asynchronous setiap 5 detik (5000 mili sekon). Perhatikan perintah di bawah ini pada index.php
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 21 dari 43
setTimeout("ajaxrunning()", 5000);
Jadi untuk melihat daftar SMS yang masuk ke INBOX, cukup Anda jalankan script index.php di browser.
Jangan lupa mensetting koneksi ke database gammu yang ada di file koneksi.php
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 22 dari 43
(Case 06) Teknik SMS Broadcast 1
SMS broadcast merupakan pengiriman SMS ke beberapa nomor sekaligus. Namun, meskipun demikian
metode SMS broadcast di dalam gammu engine bersifat antrian. Maksud antrian di sini digambarkan
sebagai berikut. Misalkan kita akan mengirim SMS ke 1000 nomor handphone dalam sekali klik, maka
1000 sms tersebut sementara akan masuk ke daftar tunggu antrian dalam tabel OUTBOX nya gammu.
SMS yang berada dalam daftar tunggu ini satu persatu akan dikirim oleh gammu engine nya.
Dalam kasus ini, akan dibahas teknik untuk mengirim SMS broadcast ke sebuah group tertentu atau
semua group sekaligus. Di dalam group tersebut telah diset beberapa nomor handphone.
Untuk implementasi kasus ini, kita akan manfaatkan dua buah tabel bawaan dari gammu engine yaitu
PBK dan PBK_GROUPS. Tabel PBK adalah tabel phonebook yang dapat digunakan untuk menyimpan
nomor-nomor handphone dengan struktur sebagai berikut:
CREATE TABLE `pbk` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `GroupID` int(11) NOT NULL DEFAULT '-1', `Name` text NOT NULL, `Number` text NOT NULL, PRIMARY KEY (`ID`) )
Keterangan:
Nama Field Keterangan
ID Digunakan untuk nomor ID dari record phonebook
(auto increment)
GroupID Nomor ID group. ID Group ini akan berguna untuk
mengelompokkan suatu nomor ke dalam group
tertentu. Default: -1
Name Nama pemilik nomor handphone
Number Nomor handphone
Sedangkan struktur dan keterangan dari tabel PBK_GROUPS adalah sbb:
CREATE TABLE `pbk_groups` ( `Name` text NOT NULL, `ID` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`ID`) )
Keterangan:
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 23 dari 43
Nama Field Keterangan
Name Nama group
ID Nomor ID Group (auto increment)
Dengan demikian, tabel PBK dan PBK_GROUPS ini saling berelasi melalui field ID dalam tabel
PBK_GROPS dan field GroupID dalam tabel PBK.
Bolehkah struktur kedua tabel tersebut diubah? Kalau sekedar menambah field baru diperbolehkan, asal
tidak mengubah nama field atau tipe datanya. Bagaimana jika data phonebook dan group ini dibuat di
tabel lain? Hal ini boleh dilakukan.
Setelah data phonebook dan group sudah siap, selanjutnya kita bisa buat script untuk sms broadcast
nya. Untuk mengisi data phonebook dan group di tabel PBK dan PBK_GROUPS, Anda bisa gunakan
phpMyAdmin yang ada di localhost (http://localhost/phpmyadmin) atau Anda buat interface sendiri.
Untuk scriptnya, pertama kita siapkan form untuk pengiriman SMS nya terlebih dahulu. Anda bisa
melihat contoh formnya di file index.php yang ada dalam folder CASE06.
Di dalam form yang ada di dalam index.php tersebut, terdapat sebuah combo box yang nantinya akan
berisi list group yang sudah ada di database, plus sebuah item lagi yaitu Semua yang nantinya apabila
dipilih, sms broadcast akan dikirim ke semua nomor dan bukan hanya ke group tertentu.
Pilih Group: Semua
Selanjutnya, untuk script pengolah form pengiriman SMS, jika bisa diletakkan dalam file yang sama
dengan formnya. Anda bisa lihat masih di file index.php
if (isset($_POST['submit'])) { $sms = $_POST['sms']; $group = $_POST['group'];
if ($group == "Semua")
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 24 dari 43
{ // query untuk membaca semua nomor jika yang dipilih 'Semua' $query = "SELECT * FROM pbk"; } else { // query untuk membaca nomor dalam group jika yang // dipilih group tertentu $query = "SELECT * FROM pbk WHERE GroupID = '$group'"; }
$hasil = mysql_query($query); while ($data = mysql_fetch_array($hasil)) { $nohp = $data['Number']; // proses kirim sms sendsms($nohp, $sms, ''); } echo "SMS sedang dikirimkan..."; }
Dari script di atas, tampak bahwa proses pengiriman SMS secara broadcast pada prinsipnya merupakan
proses perulangan yang dilakukan untuk setiap nomor yang merupakan hasil query terhadap tabel
phonebooknya.
Sedangkan untuk proses pengiriman SMS nya sendiri, kita cukup gunakan function sendsms() yang
sudah pernah kita bahas sebelumnya. Function sendsms() yang mendukung pengiriman long SMS ini
terletak di dalam file function.php dalam folder CASE06.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 25 dari 43
(Case 08) Teknik SMS Auto Reply 1
SMS autoreply adalah sebuah mekanisme untuk menjawab pesan SMS secara otomatis setelah
seseorang mengirim SMS ke sebuah aplikasi SMS Gateway. Bentuk balasan SMS otomatis yang dikirim
oleh sistem ini bisa berupa hanya sekedar konfirmasi, atau bisa juga berupa data yang direquest oleh si
pengirim pesan.
Dalam kasus ini akan dibahas teknik membuat sistem auto reply untuk proses registrasi dan unregistrasi
via SMS. Dengan hanya mengirim sebuah SMS dengan format: REG#IDGROUP#NAMA, maka secara
otomatis nomor pengirim, nama akan terdaftar di data phonebook pada sebuah ID group tertentu.
Kemudian sistem akan membalas pesan konfirmasi secara otomatis, misalnya Terimakasih [nama] telah
melakukan registrasi, dimana parameter [nama] ini nanti akan berisi nama si pengirim pesan registrasi.
Kemudian untuk proses unregistrasinya, seseorang bisa melakukannya via SMS dengan format pesan:
UNREG#IDGROUP, yang selanjutnya nomor HP si pengirim akan terhapus dari data phonebooknya.
Untuk mengimplementasikan kasus SMS registrasi tersebut di atas, idenya adalah sebagai berikut:
1. Baca SMS yang masuk ke dalam tabel INBOX bawaan gammu engine, termasuk juga nomor
handphone si pengirim dan juga ID sms nya.
2. Lakukan parsing untuk mendapatkan kata kunci, ID Group dan nama si pengirim
3. Jika kata kuncinya adalah REG maka proses selanjutnya adalah menghitung jumlah total
parameter dari SMSnya. Untuk perintah REG#IDGROUP#NAMA, terdapat 3 buah parameter.
Apabila dari SMS yang diterima tersebut memiliki total parameter kurang dari 3 atau lebih dari
3, maka akan dikirim pesan balasan bahwa format pesan salah. Sedangkan apabila kata kuncinya
adalah REG dan memiliki 3 parameter maka proses selanjutnya adalah menyimpan nomor HP si
pengirim, nama dan group id ke dalam database phonebook. Sebagai konfirmasi bahwa proses
registrasi sukses dilakukan, kirimkan pesan balasan.
Keterangan: Anda bisa mengubah karakter # yang berfungsi pemisah antar parameter dengan karakter
yang lain.
Beberapa langkah ide di atas kita bisa implementasikan ke dalam sebuah script. Anda bisa lihat script
tersebut di file run.php yang terletak di dalam folder CASE08.
Di dalam script tersebut, untuk proses parsing atau membaca nilai setiap parameter dari SMS nya
digunakan perintah explode().
$split = explode("#", $sms);
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 26 dari 43
Ide yang sama juga kita gunakan untuk proses UNREG nya. Secara prinsip hampir sama, bedanya hanya
pada bagian query terhadap data phonebooknya. Jika REG menggunakan query INSERT ke dalam data
phonebook, sedangkan UNREG melakukan query DELETE dari data phonebooknya.
Dalam sript CASE08 ini, digunakan tabel PBK untuk menyimpan data phonebooknya.
Secara lengkap, script run.php tersaji sebagai berikut:
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 27 dari 43
sendsms($noHP, $reply, '');
} else if ($command == "UNREG") { // jika keywordnya UNREG if (count($split) == 2) { // jika jml parameternya 2 // baca group id $idgroup = $split[1]; // hapus data phonebook berdasar no hp dan group id $query2 = "DELETE FROM pbk WHERE Number = '$noHP' AND GroupID = '$idgroup'"; mysql_query($query2); // konfirmasi unreg $reply = "Proses unregistrasi sukses"; } // jika jml parameter tidak 2 else $reply = "Maaf, format UNREG salah";
// kirim balasan sendsms($noHP, $reply, '');
}
// menandai sms yg sudah diproses $query2 = "UPDATE inbox SET Processed = 'true' WHERE ID = '$smsID'"; mysql_query($query2); }
?>
Pada script run.php di atas, SMS yang tidak mengandung keyword REG dan UNREG tidak akan diproses
atau diabaikan begitu saja.
Dalam penerapannya, script run.php tersebut harus senantiasa bekerja setiap waktu karena bisa saja
SMS REG dan UNREG datang kapan saja. Sehingga script run.php ini perlu direfresh secara kontinu.
Refresh otomatis ini bisa Anda gunakan AJAX supaya tidak setiap saat melakukan refresh secara manual.
Konsep auto refresh script dengan AJAX seperti yang pernah dibahas di CASE03 dan CASE04. Adapun
dalam kasus ini, script AJAX nya diletakkan di dalam file index.php. Dengan demikian untuk menjalankan
aplikasi SMS auto reply ini cukup Anda jalankan file index.php di browser.
Jika Anda perhatikan di dalam script run.php nya, maka terdapat perintah:
$sms = strtoupper($data['TextDecoded']);
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 28 dari 43
Perintah tersebut digunakan untuk mengubah semua pesan SMS yang dibaca menjadi huruf kapital
semuanya. Hal ini perlu dilakukan supaya mencegah kemungkinan kegagalan aplikasi dalam mendeteksi
keyword yang disebabkan perbedaan huruf besar atau kecil dalam SMS. Sebagai contoh misalkan
seseorang mengirim pesan SMS: Reg#3#Agus, maka sistem tidak bisa melakukan proses registrasi
karena keyword yang dibaca adalah Reg (hanya huruf R nya saja yang kapital), sedangkan di dalam
script run.php nya, diset keywordnya kapital semuanya (REG).
if ($command == "REG") { .
.
.
}
Oleh karena itu sangat perlu kita buat standarisasi bentuk keywordnya, apakah huruf kapital semuanya
atau bisa juga huruf kecil semuanya (gunakan strtolower()).
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 29 dari 43
(Case 09) Teknik SMS Auto Reply 2
Kasus SMS auto reply selanjutnya yang dibahas adalah mekanisme pengiriman balasan otomatis
terhadap si pengirim pesan, dimana isi pesan balasan otomatisnya sudah tersedia di dalam database.
Namun database yang berisi daftar pesan-pesan balasan ini terletak dalam database di luar database
gammu, atau bisa jadi juga databasenya terletak di beda PC atau server dengan gammu nya.
Sebagai contoh, misalkan kita punya data daftar pesan balasan sebagai berikut:
Daftar pesan balasan tersebut misalkan disimpan dalam sebuah tabel pada database X di luar database
gammu.
Selanjutnya kita ingin apabila seseorang mengirim pesan dengan format INFO#KEYWORD ke SMS center,
maka SMS center secara otomatis mengirim pesan balasan sesuai keywordnya. Sebagai contoh,
misalkan dikirim pesan INFO#REG, maka sistem akan membalas dengan pesan Ini informasi tentang
cara REG atau jika dikirim pesan INFO#UNREG, maka akan mengirim balasan dengan pesan Ini
informasi tentang cara UNREG. Sedangkan apabila Anda ingin menambah keyword dan balasannya ini,
cukup Anda tambahkan secara dinamis ke dalam databasenya.
Bagaimana cara mengimplementasikan mekanisme di atas?
Pada prinsipnya, ide untuk membuat sistem seperti tersebut di atas hampir sama dengan CASE08
sebelumnya. Bedanya, bahwa di sistem ini terdapat koneksi ke database lain untuk mencocokkan
keyword dan balasannya.
Berikut ini adalah script run.php yang digunakan untuk kasus sms autoreply ini.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 30 dari 43
$noHP = $data['SenderNumber']; // baca isi sms $sms = strtoupper($data['TextDecoded']); // baca id sms $smsID = $data['ID']; // proses parsing berdasarkan karakter # $split = explode("#", $sms); // baca keyword $command = $split[0];
if ($command == "INFO") { // jika keyword terdepannya INFO if (count($split) == 2) { // jika jumlah parameternya 2 // baca keywordnya $keyword = $split[1];
// lakukan koneksi ke database lain mysql_connect('...', '...', '...'); mysql_select_db('...');
// cari balasan berdasarkan keywordnya $query2 = "SELECT reply FROM data WHERE keyword = '$keyword'"; $hasil2 = mysql_query($query2);
if (mysql_num_rows($hasil2) > 0) { // jika ada keyword yang cocok, baca data balasannya $data2 = mysql_fetch_array($hasil2); $reply = $data2['reply']; } // jika tidak ada keyword yg cocok, kirim pesan balasan else $reply = "Maaf keyword tidak ditemukan"; } // jika jumlah parameternya tidak 2 else $reply = "Maaf format INFO salah";
// lakukan kembali koneksi ke database gammu include 'koneksi.php'; // kirim sms balasan sendsms($noHP, $reply, ''); }
// tandai sms yang sudah diproses $query2 = "UPDATE inbox SET Processed = 'true' WHERE ID = '$smsID'"; mysql_query($query2); }
?>
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 31 dari 43
Dalam script run.php di atas, Anda bisa melihat bahwa terdapat proses koneksi ke database lain pada
bagian
// lakukan koneksi ke database lain mysql_connect('...', '...', '...'); mysql_select_db('...');
// cari balasan berdasarkan keywordnya $query2 = "SELECT reply FROM data WHERE keyword = '$keyword'"; $hasil2 = mysql_query($query2);
if (mysql_num_rows($hasil2) > 0) { // jika ada keyword yang cocok, baca data balasannya $data2 = mysql_fetch_array($hasil2); $reply = $data2['reply']; } // jika tidak ada keyword yg cocok, kirim pesan balasan else $reply = "Maaf keyword tidak ditemukan";
Database lain yang dimaksud di sini, bisa dalam satu server yang sama, namun beda database dengan
database Gammu SMS engine atau bisa juga berbeda servernya. Khusus apabila database yang akan
diakses sebagai reply SMS ini berasal dari server atau host yang berbeda, maka pastikan username dan
password MySQL nya memiliki hak akses secara remote.
Setelah proses look up atau pencarian balasan berdasarkan keyword yang dilakukan di database lain ini,
selanjutnya perlu dilakukan kembali koneksi ke database gammu, dengan memberikan perintah:
include 'koneksi.php';
untuk pengiriman pesan SMS balasannya.
Dalam folder CASE09, tersedia juga contoh struktur tabel untuk menyimpan keyword dan balasannya di
dalam file tabel.sql. Silakan gunakan tabel tersebut untuk menjalankan contoh script autoreply di
CASE09 ini.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 32 dari 43
(Case 10) Teknik SMS Auto Reply 3
Pada CASE10 ini, masih seputar pembuatan aplikasi untuk SMS autoreply, kali ini akan dibahas
bagaimana cara membuat aplikasi SMS autoreplay namun data source yang nantinya digunakan sebagai
balasan ini terletak di web hosting. Kasus ini identik dengan CASE09 namun memiliki permasalahan yang
agak sedikit berbeda mengingat hampir sebagian besar admin web hosting tidak membuka port koneksi
ke MySQL yang ada di server hosting untuk bisa diakses dari luar (remote).
Meskipun demikian, kita tetap masih bisa membuat script untuk melakukan komunikasi antara database
gammu engine yang ada di PC local dengan database yang ada di server hostingnya.
Masih sama seperti pada CASE09, misalkan kita memiliki data sebagai berikut yang nantinya digunakan
sebagai reply SMS sesuai kata kuncinya.
Data tersebut misalkan terletak di dalam database server hosting.
Secara umum, script untuk CASE10 ini hampir sama seperti CASE09, namun terdapat perbedaan di
dalam run.php nya. Jika pada CASE09, di dalam script run.php terdapat bagian script untuk langsung
melakukan koneksi ke database lain, maka di dalam script run.php untuk CASE10 ini terdapat bagian
script untuk melakukan request ke server hosting via API (Application Protocol Interface). Untuk
melakukan request ini kita bisa menggunakan function simplexml_load_file(). Penggunaan function ini
lebih simpel daripada melakukan request menggunakan CURL.
Proses request menggunakan API ini berfungsi untuk membaca data dari server hosting sesuai
keywordnya, dan data yang di baca ini harus tersaji dalam bentuk XML. Berikut ini bagian dari script
run.php yang berfungsi melakukan request data XML ke server hosting berdasarkan keyword SMS nya.
if ($command == "INFO") { // sms INFO#KEYWORD if (count($split) == 2) { $keyword = $split[1];
// alamat situs $situs = "http://situsku.com"; // API code untuk security $code = "1234567";
// proses request data via API
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 33 dari 43
$xml = simplexml_load_file($situs."/apis.php?key=".$keyword."&code=".$code);
// baca data hasil request foreach ($xml as $dataxml) { $reply = $dataxml->reply; } } else $reply = "Maaf format INFO salah"; }
Perhatikan pada bagian script berikut ini
$situs = "http://situsku.com"; $code = "1234567";
// lakukan request data via API $xml = simplexml_load_file($situs."/apis.php?key=".$keyword."&code=".$code);
Maksud bagian script di atas, adalah melakukan request ke server hosting yang beralamat di
http://situsku.com. Proses request ini menembak sebuah script dengan nama apis.php yang sudah
diupload ke dalam server hosting, dengan asumsi file apis.php ini diupload ke root web direktori server
hosting. Misalkan file apis.php diletakkan di direktori /public_html/script, di mana /public_html/
merupakan root web directory nya, maka pada bagian $situs diisikan
$situs = "http://situsku.com/script";
Kemudian, dalam proses request tersebut terdapat dua parameter yaitu key dan code.
$xml = simplexml_load_file($situs."/apis.php?key=".$keyword."&code=".$code);
Parameter key ini adalah keyword yang diterima dari SMS, dan akan dicocokkan dengan data keyword
yang ada di database hosting untuk memperoleh balasannya. Sedangkan parameter code digunakan
untuk keperluan security saja. Kode ini bersifat acak, Anda bisa mensetting sendiri bentuk kodenya pada
bagian
$code = "1234567";
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 34 dari 43
Nantinya di dalam script apis.php yang diupload ke server hosting, ada mekanisme validasi request. Jika
dalam proses request tersebut terdapat kode sesuai yang disetting (dalam contoh ini: 1234567), maka
request akan diproses. Namun jika kodenya salah, maka request akan ditolak. Prinsip ini seperti proses
login atau authentication. Hal ini berfungsi untuk mencegah proses request dari aplikasi lain yang
memanfaatkan data yang di database hosting kita.
Selanjutnya, apa isi dari file apis.php yang diupload ke server hosting? Pada prinsipnya isi dari script ini
adalah mengolah request dari PC local, yaitu membaca parameter keywordnya dan kode API nya. Jika
kode API nya sesuai, maka proses berikutnya adalah melookup data response yang ada di dalam
database hosting sesuai keywordnya. Kemudian hasil lookup disajikan dalam bentuk dokumen XML.
Dengan demikian, script apis.php yang nantinya diupload ke server hosting adalah sebagai berikut:
0) { $data = mysql_fetch_array($hasil); echo "".$data['reply'].""; } else { // jika keyword tidak ada yg cocok echo "Keyword tidak ditemukan"; }
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 35 dari 43
} else echo "Kode API salah"; echo ""; echo ""; ?>
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 36 dari 43
(Case 12) Teknik SMS Auto Reply 5
Dalam CASE12 ini, masih terkait dengan SMS auto replay namun agak sedikit kompleks karena adanya
proses authentication. Kasus yang dibahas di sini adalah layanan cek nilai matakuliah mahasiswa via
sms, namun perlu adanya PIN untuk mengakses datanya.
Sebelum pembahasan lebih lanjut, terlebih dahulu dipersiapkan contoh struktur tabel-tabel
pendukungnya.
CREATE TABLE `mhs` ( `nim` varchar(5) NOT NULL DEFAULT '', `nama` varchar(50) DEFAULT NULL, `nohp` varchar(20) DEFAULT NULL, `pin` varchar(5) DEFAULT NULL, PRIMARY KEY (`nim`) );
Tabel mhs digunakan untuk menyimpan data mahasiswa, termasuk nomor hp dan pin untuk
mengakses nilai matakuliahnya. Sedangkan contoh datanya adalah sebagai berikut
INSERT INTO `mhs` VALUES ('M001', 'AGUS', '+62857100001', '1234'); INSERT INTO `mhs` VALUES ('M002', 'BUDI', '+62857100002', '2345');
Kemudian kita misalkan membuat juga tabel mk
CREATE TABLE `mk` ( `kodemk` varchar(5) NOT NULL DEFAULT '', `namamk` varchar(50) DEFAULT NULL, PRIMARY KEY (`kodemk`) );
Tabel mk digunakan untuk menyimpan data matakuliah yang bisa diambil oleh mahasiswa. Adapun
contoh datanya adalah sebagai berikut:
INSERT INTO `mk` VALUES ('MK001', 'Matakuliah 1'); INSERT INTO `mk` VALUES ('MK002', 'Matakuliah 2'); INSERT INTO `mk` VALUES ('MK003', 'Matakuliah 3');
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 37 dari 43
Perlu juga dibuat tabel ambilmk yang digunakan untuk menyimpan data matakuliah yang diambil oleh
seorang mahasiswa.
CREATE TABLE `ambilmk` ( `nim` varchar(5) NOT NULL DEFAULT '', `kodemk` varchar(5) NOT NULL DEFAULT '', `nilai` int(11) DEFAULT NULL, PRIMARY KEY (`nim`,`kodemk`) );
Tabel di atas digunakan untuk menyimpan pengambilan matakuliah mahasiswa beserta nilainya. Adapun
berikut ini adalah contoh datanya
INSERT INTO `ambilmk` VALUES ('M001', 'MK001', '4'); INSERT INTO `ambilmk` VALUES ('M001', 'MK002', '3'); INSERT INTO `ambilmk` VALUES ('M002', 'MK002', '4');
Dalam kasus ini, format SMS untuk mengakses nilai adalah: NILAI#KODEMK#PIN, di mana KODEMK
adalah kode matakuliah yang akan diakses nilainya, dan PIN adalah pin mahasiswa.
Secara garis besar, ide dari aplikasi untuk akses nilai matakuliah mahasiswa via sms ini adalah setelah
mahasiswa mengirim SMS dengan format di atas, selanjutnya sistem akan melakukan validasi terlebih
dahulu. Hal yang divalidasi adalah nomor hp dan pin nya. Apabila nomor hp si pengirim sms tidak
terdaftar di tabel mahasiswa maka akan ditolak. Demikian juga apabila nomor hp terdaftar namun PIN
tidak cocok, maka juga akan ditolak. Namun, apabila nomor hp terdaftar dan pin nya benar maka nilai
matakuliah yang akan diakses akan dibaca yang selanjutnya dikirimkan ke si mahasiswa pengirim pesan.
Berikut ini adalah script run.php nya.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 38 dari 43
$command = $split[0];
if ($command == "NILAI") { // cek jumlah parameter if (count($split) == 3) { // cek apakah nomor hp terdaftar if (ceknohp($nohp) == 1) { // baca pin $pin = $split[2]; // cek kesesuaian pin dan no hp if (cekpin($nohp, $pin) == 1) { // baca kode mk $kodemk = $split[1]; // baca nilai dari mk berdasarkan no hp mhs $reply = bacanilai($nohp, $kodemk); } else $reply = "Maaf PIN salah"; } else $reply = "Maaf No HP tidak terdaftar"; } else $reply = "Format SMS salah";
// kirim balasan ke si pengirim pesan sendsms($nohp, $reply, ''); }
$query2 = "UPDATE inbox SET Processed = 'true' WHERE id = '$id'"; mysql_query($query2); } ?>
Dalam script run.php di atas, ada beberapa function yang digunakan yaitu:
Nama Function Keterangan
Ceknohp(nohp) Digunakan untuk mengecek apakah nomor hp si
pengirim pesan terdaftar atau tidak. Jika terdaftar,
function ini mengembalikan nilai 1, jika tidak
terdaftar mengembalikan nilai 0.
Cekpin(nohp, pin) Digunakan untuk mengecek kesesuaian nomor hp
mahasiswa dan pin nya. Jika sesuai mengembali-
kan nilai 1, sedangkan jika tidak sesuai
mengembalikan nilai 0
Bacanilai(nohp, kodemk) Digunakan untuk membaca nilai matakuliah dari
mahasiswa berdasarkan nomor hp nya. Function
ini mengembalikan value berupa string berisi
keterangan nilai matakuliahnya.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 39 dari 43
Function-function tersebut bisa dilihat detailnya pada file function.php.
// mengecek apakah sebuah nomor hp sudah teregistrasi atau belum function ceknohp($nohp) { $query = "SELECT * FROM mhs WHERE nohp = '$nohp'"; $hasil = mysql_query($query); if (mysql_num_rows($hasil) > 0) return 1; else return 0; }
// cek kesesuaian nomor hp dan pin function cekpin($nohp, $pin) { $query = "SELECT * FROM mhs WHERE nohp = '$nohp'"; $hasil = mysql_query($query); $data = mysql_fetch_array($hasil); if ($pin == $data['pin']) return 1; else return 0; }
// baca nilai matakuliah berdasarkan kode mk dan no hp si mahasiswa function bacanilai($nohp, $kodemk) { $query = "SELECT nim FROM mhs WHERE nohp = '$nohp'"; $hasil = mysql_query($query); $data = mysql_fetch_array($hasil); $nim = $data['nim'];
$query = "SELECT namamk, nilai FROM mhs, mk, ambilmk WHERE mhs.nim = ambilmk.nim AND mk.kodemk = ambilmk.kodemk AND ambilmk.nim = '$nim' AND ambilmk.kodemk = '$kodemk'"; $hasil = mysql_query($query); if (mysql_num_rows($hasil) > 0) { $data = mysql_fetch_array($hasil); return "Nilai ".$data['namamk']." Anda : ".$data['nilai']; } else return "Matakuliah tidak ditemukan"; }
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 40 dari 43
(Case 13) Teknik SMS On Scheduled 1
SMS on scheduled adalah SMS yang dikirimkan pada saat waktu tertentu secara otomatis. Sebagai
contoh misalkan suatu SMS diset untuk dikirimkan pada saat tanggal 1 Juli 2012 pada pukul 13:00 maka
bila jam komputer sudah tepat pada saatnya, sms akan otomatis terkirim.
Untuk membuat aplikasi seperti ini, pada dasarnya sangat mudah sekali, yaitu Anda cukup mengeset
tanggal dan waktunya pada tabel OUTBOX dalam field SendingDateTime ketika mengirim SMS
Sehingga dalam hal ini, untuk mengirim SMS pada tanggal dan waktu tertentu perlu kita sisipkan waktu
pada field SendingDateTime tersebut.
Berikut ini contoh query untuk mengirim SMS supaya terkirim pada tanggal 1 Juli 2012 pukul 13:00.
INSERT INTO outbox (DestinationNumber, TextDecoded, SendingDateTime, SenderID, CreatorID) VALUES ('08123456789', 'Test SMS', '2012-07-01 13:00:00, '', 'Gammu');
Konsep ini berlaku untuk pengiriman short SMS maupun long SMS.
Di dalam folder CASE13 terdapat sebuah script function.php yang berisi sebuah prosedur untuk
mengirim SMS pada waktu tertentu, yaitu:
function sendsms($nohp, $pesan, $modem, $time) { .
.
.
}
Di mana, parameter $nohp adalah nomor HP tujuan SMS, $pesan adalah isi pesan SMS yang akan
dikirimkan, $modem adalah id modem yang digunakan sebagai alat pengiriman (khusus untuk multiple
modem), dan $time adalah waktu pengirimannya.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 41 dari 43
Troubleshooting Gammu
Troubleshooting ini merupakan rangkuman dari pertanyaan yang sering diajukan (FAQ) ke saya dari
pengunjung blog ini atau klien GampSMS saya.
SMS Tidak Mau Terkirim
Tidak terkirimnya SMS yang dikirim melalui Gammu ada beberapa kemungkinan sebab, diantaranya
adalah:
Service Gammu belum dijalankan
Pastikan service Gammu sudah dijalankan terlebih dahulu sebelum Anda mengirim dan
menerima SMS dengan Gammu
Pulsa habis atau masuk masa tenggang.
Pastikan pulsa masih ada dan cukup untuk mengirim SMS. Biasanya indikasi pulsa habis atau
kartu memasuki masa tenggang ini dijumpai ketika terima SMS via gammu bisa, namun kirim
SMS tidak bisa (muncul status SendingError di tabel SENTITEMS)
Perubahan nomor port modem/handphone.
Misalkan di awal instalasi Anda menggunakan port com tertentu dan waktu itu bisa untuk kirim
dan terima SMS dengan gammu, namun kemudian di lain waktu Anda memindahkan portnya
(colokan usb di lain port) atau berbeda dengan port ketika awal instalasi. Hal ini juga tidak
dibolehkan. Ketika Anda memindah port, Anda harus mengulangi setting modemnya kembali di
Langkah 2 Easy Gammu Installer dengan cara menghapus seluruh daftar modem, kemudian
registerkan kembali tiap modemnya. Pastikan sebelum melakukan hal ini service tiap modem
harus dimatikan dahulu. Indikasi permasalahan pengiriman SMS yang disebabkan karena
perubahan port ini bisa dilihat ketika sebelumnya pengiriman dan penerimaan SMS sukses,
namun tiba-tiba baik pengiriman dan penerimaan SMS sama sekali tidak bisa. Selain itu, indikasi
ini juga bisa dilihat dari tidak munculnya status pengiriman SMS di tabel SENTITEMS atau SMS
yang dikirim masih tetap berada di tabel OUTBOX dan tidak berpindah ke tabel SENTITEMS
meskipun service sudah dijalankan.
Modem/handphone tidak support Gammu.
Ada kalanya penyebab tidak bisa mengirim SMS disebabkan karena memang modem/hp tidak
disupport oleh gammu. Indikasinya bisa dilihat ketika langkah instalasi gammu sudah benar,
namun sama sekali tidak bisa kirim dan terima SMS, meskipun sudah berganti-ganti versi
Gammu nya sampai dengan Gammu rilis terakhir
Sinyal modem tidak ada atau lemah
Indikasi dari masalah pengiriman yang disebabkan karena sinyal yang lemah atau tidak ada, bisa
dilihat dari lampu indikator modem. Misal untuk modem Wavecom, indikasi modem tidak dapat
sinyal adalah lampu tidak berkedip atau tidak blinking atau blinking tidak teratur interval
waktunya. Selain itu, bisa dilihat juga tatkala terkadang SMS bisa terkirim dengan sukses, kadang
gagal.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 42 dari 43
SMS bisa masuk ke INBOX, tapi tidak bisa mengirim SMS
Jika Anda menjumpai kasus seperti ini, cek di tabel SENTITEMS apakah status pengirimannya
SendingError. Jika ya, kemungkinannya pulsa habis atau memasuki masa tenggang, atau sim card Anda
diblokir oleh pihak operator karena dianggap sebagai SMS spammer. Pemblokiran ini hanya untuk
pengiriman SMS saja.
SMS bisa terkirim, namun tidak bisa menerima SMS (SMS tidak masuk ke tabel INBOX)
Biasanya masalah ini terjadi tatkala menggunakan handphone NOKIA yang menggunakan symbian sbg
OS nya. Memang untuk hp NOKIA ber OS Symbian tidak direkomendasikan untuk gammu karena
memang tidak support untuk penerimaan SMS. Penyebab pastinya saya kurang tahu
SMS yang diinsert ke tabel OUTBOX tidak bisa pindah ke tabel SENTITEMS
Permasalahan ini kemungkinan disebabkan oleh beberapa hal, yaitu bisa jadi portnya berubah seperti
yang sudah saya jelaskan di atas, atau servicenya belum dijalankan. Kedua penyebab ini biasanya diikuti
dengan gejala tidak bisanya gammu menerima SMS yang masuk atau sms yang diterima tidak masuk ke
tabel INBOX. Namun jika SMS yang diterima bisa masuk ke INBOX, maka kemungkinan ada kesalahan
ketika proses pengiriman SMS, yaitu pastikan ketika mengirim SMS dengan menggunakan query INSERT,
minimal 3 field dalam tabel OUTBOX ini harus ada:
DestinationNumber : nomor tujuan pengiriman SMS
TextDecoded : pesan teks SMS yang akan dikirimkan
CreatorID : diisi sembarang string (mis. gammu), asal tidak kosong karena field ini harus NOT NULL.
Biasanya field ini yang terlupakan tidak diisi.
Service Gammu tidak bisa dijalankan
Penyebab dari service gammu yang tidak bisa dijalankan ini bisa jadi ada struktur tabel Gammu yang
rusak. Ini penyebab yang sering terjadi, khususnya Anda yang tinggal di daerah yang sering terjadi
pemadaman listrik Ketika listrik tiba-tiba mati, dan ketika itu service gammu sedang jalan maka bisa
menyebabkan struktur tabel database gammu nya corrupt atau rusak. Solusinya adalah coba merepair di
database gammunya, atau jika gagal merepair tabel, lakukan reinstall gammu di database yang baru.
Untuk repair, Anda bisa lakukan via phpmyadmin.
SMS bisa terkirim, namun data SMS yang dikirimkan tidak muncul di tabel SENTITEMS
Jika Anda menjumpai masalah yaitu SMS yang diterima bisa masuk ke INBOX, pengiriman SMS juga
sukses (bisa diterima di hp tujuan) namun reportnya tidak muncul di tabel SENTITEMS, biasanya masalah
ini terjadi karena tabel SENTITEMS nya corrupt atau rusak strukturnya. Solusinya silakan merepair tabel
SENTITEMS nya via phpmyadmin.
-
Panduan Praktis SMS Gateway - Rosihan Ari Yuana, S.Si, M.Kom - http://blog.rosihanari.net
Halaman 43 dari 43
Untuk Long SMS, SMS yang diterima di HP tujuan selalu terpotong
Sedangkan untuk long SMS yang selalu terpotong di hp penerima, bisa jadi ada 3 penyebab yaitu:
algoritma pengiriman long SMS yang salah, corruptnya struktur tabel OUTBOX_MULTIPART, atau
memang ada part SMS yang belum sampai atau tidak pernah sampai. Jika algoritma sudah benar,
kemungkinan kedua yaitu corruptnya tabel OUTBOX_MULTIPART. Solusinya hapus semua record di tabel
OUTBOX_MULTIPART dan OUTBOX kemudian repair kedua tabel. Sedangkan apabila algoritma sudah
benar, dan tabel OUTBOX_MULTIPART serta OUTBOX sudah direpair namun ternyata masih ada long
SMS yang terpotong maka sudah dipastikan gangguan ada di pihak operator yang menyebabkan ada
part SMS yang lost. Oya tambahan, bisa juga long SMS ini terpotong karena di dalam SMS nya memuat
karakter-karakter sbb: ~, `, ^, [, ], {, }, |, \. Sebaiknya hindari penggunaan karakter-karakter tersebut
dalam long SMS.