Selasa, 28 Oktober 2008

KONSEP PEMBUATAN SMS GATEWAY

Melanjutkan pembahasan edisi sebelumnya mengenai pembuatan SMS gateway, kali ini kita akan mengupas seluk beluk SMS gateway dengan lebih mendalam lagi. Joko Nurjadi

BAGIAN 2 DARI 2 ARTIKEL

ADA BAIKNYA Anda melihat kembali artikel pada edisi sebelumnya yang merupakan dasar persiapan pembuatan SMS gateway.

Pada edisi sebelumnya, kita telah membahas mengenai AT Command yang merupakan inti dari pemrograman SMS gateway dengan menggunakan GSM modem/ponsel.

Karena itu, Anda harus terlebih dahulu memahami AT Command. Anda dapat mencobanya secara langsung tanpa pemrograman melalui HyperTerminal yang disediakan Win-

dows.

Kita juga telah membahas dua format SMS yang digunakan device GSM modem/ponsel, yaitu format PDU dan format Text. Kebanyakan device telah mendukung format text yang lebih mudah dan user friendly, tetapi jika device Anda tidak mendukung format text, Anda harus menggunakan format PDU yang lebih rumit.

Database

Apa kelebihan sebuah SMS gateway dibandingkan dengan pengiriman ataupun penerimaan dengan ponsel biasa? Kelebihan yang paling nyata tentunya adalah SMS gateway merupakan aplikasi komputer, artinya dapat melakukan otomatisasi dan meringankan pekerjaan manual.

Selain itu, suatu aplikasi juga dapat menyimpan data dalam jumlah yang banyak. Berapa SMS yang dapat ditampung oleh inbox dan sent item pada ponsel Anda? Tentunya tidak sebanyak data yang dapat disimpan pada harddisk komputer.

Umumnya, sebuah SMS gateway akan memindahkan data SMS pada device ke dalam sebuah database agar dapat di-proses lebih lanjut, sehingga device GSM modem/ponsel hanya bersifat sebagai media pengirim dan penerima SMS.

Karena itu sebuah aplikasi SMS gateway juga memerlukan database, table-table utama yang perlu dipersiapkan pada sebuah SMS gateway adalah sebagai berikut:

1. Inbox.

Merupakan table yang berfungsi untuk menampung SMS yang diterima. Field-field penting yang diperlukan antara lain field pengirim (berisi nomor pengirim), pesan (berisi text SMS), dan waktu (berisi tanggal dan jam).

Jika Anda hanya menggunakan satu device, Anda tidak memerlukan field nomor penerima, karena semua SMS yang masuk inbox tentunya ditujukan untuk sebuah nomor saja, yaitu nomor GSM yang terpasang pada device Anda.

2. Outbox.

Table Outbox merupakan table yang menyimpan SMS yang akan dikirimkan. Field-field yang penting adalah field tujuan (nomor penerima SMS), dan pesan (berisi text SMS).

3. Sent Item.

Saat SMS pada Outbox telah terkirim, maka data tersebut akan masuk kedalam table Sent Item. Jadi table Sent Item adalah table yang menyimpan SMS yang telah terkirim.

Karena itu pada intinya isi dari Sent Item adalah record yang tadinya terdapat pada table Outbox, ditambah dengan field-field seperti waktu (berisi tanggal dan jam), serta status delivery yang menunjukkan indikasi apakah sebuah SMS telah diterima atau tidak.

Inisialisasi

Pada edisi yang lalu, Anda telah mencoba menjalankan AT command melalui HyperTerminal. AT command diketikkan pada HyperTerminal dan Anda dapat langsung melihat hasilnya ataupun response yang diterima oleh device pada tampilan HyperTerminal.

Aplikasi SMS gateway memindahkan proses tersebut ke dalam bahasa pemrograman. Dalam artikel ini, kita akan menggunakan bahasa pemrograman Visual Basic untuk membuat SMS gateway. Kita juga akan menggunakan AT command yang kompatibel dengan jenis GSM modem Itegno 3000.

Sebagai catatan tambahan, AT command bisa saja berbeda-beda antara device satu dengan device lainnya. Ada baiknya Anda memiliki dokumentasi AT command yang didukung oleh device yang Anda gunakan.

Pada Visual Basic, Anda dapat menggunakan control MSComm, yang berfungsi seperti layaknya HyperTerminal. MSComm berfungsi sebagai media komunikasi program Anda dengan device, tentunya sebelum dapat “bercakap-cakap” dengan device, Anda perlu melakukan inisialisasi device terlebih dahulu.

Proses inisialisasi berarti Anda harus menentukan terlebih dahulu port dan baud rate, parity, dan konfigurasi lain yang digunakan oleh device Anda. Di dalam bahasa Visual Basic, kurang lebih kode programnya akan seperti di bawah ini:

MSComm1.CommPort = 3

MSComm1.Settings = “115200,N,8,1”

MSComm1..PortOpen = True

Kode program di atas memberikan nilai pada property-property MSComm untuk melakukan inisialisasi dan mengaktifkan port, asumsi kode program di atas adalah device Anda terpasang pada port 3, diatur menggunakan baud rate 115200, parity = N, databit = 8, dan stop bit =1.

Jika pada program HyperTerminal Anda dapat mengetikkan perintah-perintah AT command dan melihat responsenya, demikian juga pada control MSComm, dengan menggunakan property Output dan Input.

Property Output digunakan untuk memberikan command/perintah kepada device, sedangkan property Input menghasilkan data dari buffer penerima.

Jangan menjadi rancu antara output dan input, property Output pada MSComm berarti merupakan transmit data yang dikirimkan pada device, response dari device akan diterima oleh property Input.

Sebagai contoh, jika Anda ingin memberikan perintah AT command sederhana, misalnya AT, maka Anda menuliskannya pada property Output. Jika komunikasi berjalan dengan baik, maka device akan menjawab OK yang diterima oleh property

Input.

Kita akan melanjutkan potongan program di atas, dengan contoh untuk mengirimkan dua perintah AT command di bawah ini:

MSComm.Output = “AT” & Chr$(13)

MSComm..Output = “AT+CMGF=1” & Chr$(13)

Baris pertama mengirimkan command AT yang berfungsi untuk testing komunikasi, sedangkan baris kedua mengirimkan command AT+CMGF=1 yang berfungsi untuk memberikan perintah pada device untuk berada dalam mode text.

Chr$(13) merupakan karakter enter yang digunakan untuk mengakhiri perintah. Jika komunikasi berjalan dengan baik dan device GSM modem/ponsel Anda mendukung penggunaan mode text, maka property MSComm.Input akan berisi nilai OK.

Property MSComm.Input akan mengembalikan nilai ERROR jika terjadi kesalahan sintaks atau komunikasi tidak berjalan sebagaimana mestinya.

Inisialisasi berikutnya yang diperlukan adalah menentukan nomor service center yang digunakan. Nomor service center berbeda-beda tergantung pada operator GSM yang Anda gunakan.

Untuk menentukan nomor service center, digunakan AT command AT+CSCA=xxx, di mana xxx adalah nomor service center operator GSM yang Anda gunakan.

Mengirim SMS

Jika pada edisi sebelumnya Anda telah berhasil mengirimkan SMS melalui HyperTerminal, maka seharusnya Anda juga dapat melakukannya melalui control MSComm didalam Visual Basic ini.

Untuk mengirim SMS, digunakan AT command AT+CMGS. Potongan kode program dalam Visual Basic untuk mengirim SMS adalah sebagai berikut:

sTujuan = “081xxxxx”

sPesan = “Selamat Pagi”

MSComm.Output = “AT+CMGS=” & sTujuan & Chr$(13)

MSComm.Output = sPesan & Chr$(26)

Variabel sTujuan berisi dengan nomor ponsel tujuan, sedangkan variabel sPesan berisi dengan pesan SMS yang diinginkan.

Perhatikan pada baris MSComm.Output = sPesan & Chr$(26), apakah arti dari Chr$(26)? Chr$(26) merupakan karakter CTRL + Z yang berfungsi untuk mengakhiri isi pesan yang ingin dikirim.

Salah satu keuntungan menggunakan database dalam aplikasi SMS gateway adalah Anda dapat menyimpan daftar SMS yang ingin dikirimkan sebanyak yang Anda inginkan.

Anda cukup mengisi atau membuat program entry table Outbox yang telah Anda persiapkan, sehingga akan terdapat record-record yang berisi tujuan dan pesan yang siap dikirimkan melalui SMS gateway.

Aplikasi SMS gateway Anda kemudian membaca table Outbox, dan melakukan pengiriman untuk masing-masing record yang dibaca. Menarik, bukan? Anda kini telah dapat membuat sebuah aplikasi yang dapat mengirimkan SMS dalam jumlah banyak ke berbagai tujuan.

Bayangkan jika hal itu dilakukan secara manual, pastinya akan cukup merepotkan.

Record pada table Outbox yang telah terkirim, dapat Anda pindahkan kedalam table Sent Item sehingga Anda memiliki arsip SMS yang telah dikirim.

Menerima SMS

SMS gateway dapat membantu Anda menjadi penerima SMS yang baik, tanpa Anda perlu 24 jam sehari memantau SMS yang masuk. Bahkan kalau diperlukan, aplikasi SMS gateway dapat diatur agar dapat membalas secara otomatis.

Untuk menangani SMS yang masuk, aplikasi SMS harus dalam keadaan menunggu, informasi SMS yang masuk akan ditampung pada property MSComm.Input.

Terdapat event MSComm_OnComm yang dapat Anda gunakan untuk melakukan pengecekan input yang masuk. Event ini akan dijalankan setiap kali terdapat data yang diterima melalui port komunikasi yang terpasang.

Anda dapat mencoba menuliskan program sederhana seperti di bawah ini:

Private Sub MSComm_OnComm()

Dim stComChar As String * 1

Do

Loop Until MSComm.InBufferCount > 0

Do While MSComm.InBufferCount > 0

stComChar = MSComm.Input

tempBuffer = tempBuffer + stComChar

Loop

Debug.Print tempBuffer

End Sub

Jika tidak terdapat masalah, maka setiap kali SMS masuk (ataupun terjadi event lainnya seperti telpon masuk), maka event ini akan dijalankan dan program akan menuliskan isi dari data yang diterima.

Anda dapat membuat rutin untuk memeriksa isi dari data yang diterima tersebut, untuk kebutuhan SMS masuk, MSComm akan mengembalikan kode nilai +CMT atau +CMTI sebagai indikasi bahwa ada SMS yang masuk.

+CMT akan diikuti dengan informasi nomor pengirim, tanggal dan waktu, serta isi SMS yang diterima, semua informasi ini akan tersimpan dalam variabel tempBuffer di atas.

Yang perlu Anda lakukan selanjutnya adalah membuat rutin untuk melakukan parsing data dan memilah-milah antara nomor pengirim, tanggal, dan isi SMS sehingga dapat disimpan tapi di dalam table Inbox.

+CMTI tidak disertai dengan informasi lengkap seperti pada +CMT, tetapi Anda dapat menjalankanAT command AT+CMGL=”REC UNREAD”. Setelah dijalankan, AT command ini akan menghasilkan daftar SMS yang belum terbaca (unread), lengkap dengan informasi nomor pengirim, tanggal dan waktu, serta isi SMS.

Langkah Anda selanjutnya adalah melakukan parsing data dan menyimpan informasi SMS masuk tersebut ke dalam table Inbox.

Perhatikan jika Anda menjalankan lagi perintah AT+CMGL=”REC UNREAD” untuk kedua kalinya, maka hasilnya tidak sama de ngan saat pertama kali dijalankan, karena status record unread telah menjadi read (terbaca) saat AT+CMGL=”REC UNREAD” dijalankankali pertama.

Hal penting di sini adalah rutin parsing data, agar rutin tersebut mampu memilah data dengan benar.

Anda juga mungkin perlu mengetahui cara untuk menghapus SMS yang tersimpan dalam memory SIM card, gunakan AT command AT+CMGD untuk keperluan tersebut. Karena Anda harus menghindari memory SIM card penuh oleh SMS yang masuk.

Anda dapat menghapus SMS secara terjadwal ataupun setiap kali selesai membaca dan memindahkan SMS tersebut ke database.

Jika aplikasi SMS gateway Anda ditujukan untuk membalas SMS secara otomatis, maka biasanya tidak semua SMS harus dibalas. Terdapat kesepakatan format SMS yang valid untuk diproses lebih lanjut, hal seperti ini sering ditemui misalnya pada aplikasi SMS premium yang iklannya sering kita lihat di televisi, contoh ketik LELANG, RAMAL, dan kata lainnya diikuti dengan parameter yang dibutuhkan.

Kata LELANG, RAMAL, dan lain sebagainya merupakan format yang valid bagi aplikasi SMS tersebut melakukan proses selanjutnya, misalnya mengolah data yang dikirimkan lebih lanjut, dan melakukan reply SMS yang semuanya dikerjakan oleh aplikasi, Anda tentunya tidak berpikir Deddy Corbuzier bergadang semalam suntuk untuk membalas SMS Anda, bukan?

Kesalahan yang Umum Terjadi

Inti dari SMS gateway adalah proses mengirim dan menerima SMS seperti di atas, tetapi perjalanan Anda membuat SMS gateway yang baik mungkin masih harus melewati perjalanan yang cukup panjang, mungkin Anda akan menemui pelbagai error dan bugs yang memang sudah merupakan makanan sehari-hari programmer.

Kesalahan yang Anda temui pada saat development tentunya beragam. Salah satu contoh kesalahan yang mungkin terjadi adalah SMS gateway tidak berfungsi karena SIM card Anda menggunakan PIN. Untuk masalah ini Anda harus menggunakan AT command untuk mendefi nisikan PIN, yaitu AT+CPIN.

Anda juga dapat menganalisis kesalahan dari pesan error yang dihasilkan. Salah satu format pesan error yang dapat terjadi adalah +CMS Error: kode_error, di mana kode_error

Beberapa kode kesalahan yang umum adalah seperti pada

Hal lain yang perlu diingat adalah kecepatan pengiriman SMS dengan menggunakan device GSM/CDMA modem/ponsel relatif cukup lama, terutama jika dibandingkan dengan pengiriman langsung dari SMS Center.

Bisa jadi device yang Anda gunakan tidak stabil karena satu dan lain hal sehingga menyebabkan error yang sulit dilacak, ada baiknya Anda memberikan jedah waktu dalam setiap pengiriman SMS.

Kesulitan lain yang mungkin ditemui adalah saat melakukan parsing data yang masuk, contoh data yang diterima adalah seperti berikut:

+CMGL: 10,”REC UNREAD”,”+628129618870”,,”08/01/10,03:10:58

+28”

hai, apa kabar?

String berisi nomor pengirim, isi pesan, dan seterusnya, dipisahkan karakter koma. Jika Anda menggunakan function Split untuk memilah string, perhitungkan bahwa isi pesan dapat mengandung karakter koma yang tidak tentu jumlahnya, jadi pastikan function Anda dapat memilah data dengan benar.

Yang patut diingat adalah SMS gateway dengan menggunakan media modem/ponsel kurang cocok untuk informasi yang memerlukan ketepatan waktu yang tinggi sekaligus mengharuskan pengiriman SMS dalam jumlah banyak.

Penggunaan SMS Gateway Lebih Lanjut

Jika telah berhasil membuat function/rutin untuk mengirim dan menerima SMS, maka Anda telah menyelesaikan sebuah engine yang dapat dipasang pada sebuah komputer server.

Jika diperlukan user interface untuk user dapat mengirim SMS dan melihat SMS yang masuk, maka Anda dapat membuat aplikasi database yang mengakses table-table utama yang telah kita buat, yaitu Inbox, Outbox, dan Sent Item.

Lebih jauh lagi, Anda dapat membuat server SMS Anda menjadi web server agar user yang menggunakan aplikasi tersebut dapat mengaksesnya melalui HTTP.

Dengan demikian, aplikasi SMS gateway juga dapat menjadi aplikasi web dengan berbagai macam kemungkinan pengembangannya.

Tidak hanya terbatas untuk mengirim dan menerima SMS pada saat ini, aplikasi Anda juga dapat diperluas agar dapat mengirimkan SMS terjadwal. Misalnya dengan mengirimkan SMS yang telah diatur akan dikirim pada event tertentu seperti ulang tahun, perkawinan, dan seterusnya.

Akhir kata, tentunya tidak semua hal yang mengangkut SMS gateway dapat dibahas dalam artikel yang terbatas ini, tetapi tentunya diharapkan artikel ini dapat memberikan gambaran dasar mengenai pembuatan SMS gateway.[1]

LEBIH LANJUT

http://en.wikipedia.org/wiki/Short_message_service

http://en.wikipedia.org/wiki/SMS_gateway

MENGHAFAL AT COMMAND

Tulang punggung dari aplikasi SMS gateway adalah AT command yang dikenali oleh device GSM modem/ponsel yang Anda gunakan. Tetapi, mengapa AT command demikian sulit dan tidak user friendly?

Sebenarnya AT command cukup mudah untuk digunakan, lagi pula tidak semua AT command diperlukan dalam aplikasi SMS gateway Anda.

Bisa jadi AT command yang akan sering Anda gunakan dalam aplikasi tidaklah terlalu banyak, bahkan sebenarnya cukup mudah untuk diingat.

Beberapa AT command yang sering dipergunakan dan cara menghafalnya adalah sebagai berikut:

1. AT+CMGS.

Untuk mengirimkan pesan, Anda hanya perlu mengingat huruf terakhir yaitu S, yang berarti Send.

2. AT+CMGL.

Untuk menghasilkan daftar SMS yang terdapat pada inbox, L pada huruf terakhir adalah List.

3. AT+CMGR.

Untuk membaca SMS, R adalah Read.

4. AT+CMGD.

Untuk menghapus SMS, D adalah Delete. Dari empat AT command yang utama ini, memiliki persamaan yaitu semuanya diawali dengan AT+CMG.

INTRA OPERATOR DAN LINTAS OPERATOR

Sebuah SMS yang dikirim atau diterima, diatur oleh SMS center. Tanpa SMS center, tidak akan tercipta lalu-lintas komunikasi SMS.

Jika pengirim dan penerima berada pada sebuah jaringan operator yang sama, maka mereka menggunakan SMS Center yang sama dalam proses transmisinya, hal ini dinamakan transmisi intra operator.

Sedangkan, jika menggunakan operator yang berbeda, maka terdapat dua SMS Center dan proses transmisi ini dinamakan inter-operator atau lintas operator.

Dengan transmisi intra operator, umumnya dapat diperoleh biaya SMS yang lebih murah dibandingkan biaya SMS lintas operator.

Fitur SMS gateway dapat dikembangkan dengan mendukung pengiriman yang sesuai dengan nomor calon penerima, di mana aplikasi diprogram untuk menentukan pengiriman dengan nomor tertentu dengan jaringan yang sama, sehingga diberlakukan intra operator yang berarti menekan biaya agar menjadi lebih murah.

Untuk kebutuhan ini, diperlukan lebih dari satu nomor pengirim dari jaringan operator yang berbeda, tidak terbatas pada jaringan GSM, tetapi juga pada jaringan CDMA.

Tentunya Anda juga memerlukan device pendukung seperti GSM modem dan CDMA modem yang terpasang dalam satu aplikasi SMS gateway. Ini hanyalah satu contoh dari pengembangan SMS gateway yang dapat Anda lakukan.

TABEL 1. BEBERAPA KODE KESALAHAN

KODE KESALAHAN

ARTI

300

302

303

304

305

310

311

321

322

330

331

332

Kesalahan pada ME (Mobile Equipment) / device yang digunakan

Operasi yang dilakukan AT command tidak diijinkan

Operasi yang dilakukan AT command tidak

disupport

Invalid parameter pada AT command (mode PDU)

Invalid parameter pada AT command (mode text)

SIM card tidak terpasang

SIM Card memerlukan PIN

I ndex pada memory/storage invalid

Memory/storage penuh

SMS Center tidak dikenal

Network tidak available

Network time out