Panduan Praktis SMS Gateway (Bundled)

43

Click here to load reader

description

Panduan sms Gateway

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.