Teknik Mengirim Long Text SMS Gammu dengan Query SQL
December 26th, 2009 | by rosihanari |
Cetak Artikel Ini
Pada artikel yang lalu, saya pernah menulis topik Teknik Dasar Mengirim SMS dengan Gammu. Dalam artikel tersebut salah satunya adalah pembahasan tentang teknik mengirim SMS dengan panjang karakter lebih dari 160 karakter (long text SMS) yaitu dengan command “gammu-smsd-inject”. Nah.. pada artikel kali ini saya akan menjelaskan cara mengirim long text SMS Gammu menggunakan query SQL.
Kelemahan mengirim long text SMS dengan command “gammu-smsd-inject” adalah lambatnya proses bila diintegrasikan dengan script PHP. Dari hasil eksperiman sendiri, ceilee…
, untuk mengirim long text SMS ke lebih dari 500 nomor dengan menggunakan command “gammu-smsd-inject” yang diintegrasikan dengan script PHP butuh waktu lebih dari 30 detik. Bisa dibayangkan bila digunakan untuk mengirim ke ribuan nomor sekaligus. Tentu running timenya lebih lama.
Sedangkan kelebihan mengirim long text SMS dengan query SQL adalah running time yang jauh lebih cepat dibandingkan command “gammu-smsd-inject”. Namun.. di sisi lain, kekurangannya adalah agak rumitnya membuat script untuk melakukan hal ini. Sedangkan kelebihan dari command “gammu-smsd-inject” adalah perintahnya jauh lebih mudah dibandingkan via script query SQL. Akan tetapi mengingat kelebihannya yang lebih efisien, saya kira kesulitan untuk membuat script pengiriman long text SMS dengan query tak perlu dipermasalahkan, toh… saya akan beberkan caranya di sini
So.. gimana teknik pengiriman long text SMS Gammu dengan query SQL? OK tekniknya adalah kita harus split atau memecah-mecah dahulu text SMS yang akan kita kirimkan. Untuk setiap pecahan terdiri dari text yang panjangnya 153 karakter. Jadi misal kita punya text SMS dengan panjang 400 karakter, maka sebelum dikirim dengan Gammu, kita harus split textnya menjadi 3 bagian, yaitu pecahan pertama terdiri dari 153 karakter, pecahan kedua 153 karakter dan pecahan ketiga 94 karakter.
Mungkin Anda bertanya, gimana caranya memecah-mecah text atau string dengan panjang 153 karakter tsb? Lho… kan sudah pernah saya bahas caranya di artikel Teknik Memecah String Menjadi Substring Dengan Jumlah Karakter Sama.
Setelah kita pecah text SMS asli ke dalam n pecahan dengan panjang maks 153 karakter, selanjutnya pecahan bagian pertama kita masukkan ke dalam tabel OUTBOX, sedangkan pecahan yang lain dimasukkan ke tabel OUTBOX_MULTIPART
Adapun query untuk memasukkan text pecahan pertama ke tabel OUTBOX adalah sbb:
INSERT INTO outbox (DestinationNumber, UDH, TextDecoded, MultiPart) VALUES ('NO TELP TUJUAN', 'KODE UDH', 'ISI TEXT PECAHAN KE-1', 'true')
Perhatikan, bahwa khusus untuk long text SMS, kita set nilai ‘true’ pada field ‘MultiPart’, dan ada pula kode UDH. Wah apaan tuh UDH? Nanti saya akan jelaskan.
Selanjutnya perintah query untuk memasukkan text pecahan ke tabel OUTBOX_MULTIPART adalah sbb:
INSERT INTO outbox_multipart(UDH, TextDecoded, ID, SequencePosition) VALUES ('KODE UDH', 'ISI TEXT PECAHAN', 'NO ID', 'NO URUT PESAN')
Keterangan:
- NO ID adalah nomor id dari pesan pecahan pertama yang telah disimpan ke tabel OUTBOX. Misal pecahan pertama setelah dimasukkan ke tabel OUTBOX memiliki ID = 100, maka dalam query SQL untuk memasukkan pecahan text ke tabel OUTBOX_MULTIPART juga harus menggunakan NO ID = 100.
- NO URUT PESAN adalah nomor urutan pesan dari pesan utuhnya.
UDH adalah kode header untuk menunjukkan urutan pecahan text SMS. Kode UDH ini terdiri dari 12 digit yang memiliki format sbb:
AAAAAAAA XX YY
dimana AAAAAAAA itu adalah kode random dalam format hexadesimal, XX itu menunjukkan jumlah pecahan SMS, dan YY menunjukkan nomor urutan pecahan.
Salah satu kode random hexadesimal yang bisa digunakan adalah ‘050003A7‘, atau Anda juga bisa memilih sendiri kode random yang lain.
Contoh UDH untuk sebuah pesan adalah sbb:
050003A7 10 02.
Pada kode di atas, nilai 10 menunjukkan bahwa pesan tersebut total terdiri dari 10 pecahan SMS, dan UDH tersebut adalah milik pesan ke 2 (perhatikan nilai ‘02′).
Sebagai gambaran misalkan kita punya teks SMS asli sbb:
Perkenalkan Nama Saya Rosihan Ari Yuana. Saya Memiliki Tiga Anak, Dua Diantaranya Laki-Laki Dan Satu Orang Perempuan. Saya Juga Punya Seorang Istri Yang Saya Cintai. Rumah Saya Di Colomadu Karanganyar. Saya Lahir Di Boyolali Tiga Puluh Tahun Yang Lalu. Sekarang Saya Mengajar Di Salah Satu Perguruan Tinggi Di Kota Solo, Yaitu Universitas Sebelas Maret.
Panjang karakter text SMS di atas adalah 353 buah.
Karena pesan tersebut panjangnya lebih dari 160 karakter, maka langkah pertama kita harus split dahulu menjadi beberapa pecahan string dengan panjang maks 153 untuk setiap pecahannya. Berikut ini hasil pecahannya
Pecahan ke-1 : Perkenalkan Nama Saya Rosihan Ari Yuana. Saya Memiliki Tiga Anak, Dua Diantaranya Laki-Laki Dan Satu Orang Perempuan. Saya Juga Punya Seorang Istri Yang
Pecahan ke-2 : Saya Cintai. Rumah Saya Di Colomadu Karanganyar. Saya Lahir Di Boyolali Tiga Puluh Tahun Yang Lalu. Sekarang Saya Mengajar Di Salah Satu Perguruan Tinggi
Pecahan ke-3 : Di Kota Solo, Yaitu Universitas Sebelas Maret.
Panjang pecahan ke-1 dan ke-2 adalah 153 karakter, dan pecahan ke-3 panjangnya 47 karakter.
Setelah dipecah, selanjutnya kita simpan pecahan ke-1 ke tabel OUTBOX
INSERT INTO outbox (DestinationNumber, UDH, TextDecoded, MultiPart) VALUES ('NO TELP TUJUAN', '050003A70301', 'Perkenalkan Nama Saya Rosihan Ari Yuana. Saya Memiliki Tiga Anak, Dua Diantaranya Laki-Laki Dan Satu Orang Perempuan. Saya Juga Punya Seorang Istri Yang ', 'true');
Perhatikan nilai UDH dari pecahan pertama di atas, yaitu 050003A70301. Nilai ‘03′ dari ‘0301′ menunjukkan total pecahan ada 3 buah, dan ‘01′ dari ‘0301′ menunjukkan urutan pecahan.
Selanjutnya misalkan ID dari record hasil query di atas adalah 200 (lihat field ID record di atas pada tabel OUTBOX), maka kita gunakan ID = 200 ini untuk proses penyimpanan pecahan yang ke-2 dan ke-3 di tabel OUTBOX_MULTIPART nya.
Perintah query untuk menyimpan pecahan ke-2 ke tabel OUTBOX_MULTIPART:
INSERT INTO outbox_multipart(UDH, TextDecoded, ID, SequencePosition) VALUES ('050003A70302', 'Saya Cintai. Rumah Saya Di Colomadu Karanganyar. Saya Lahir Di Boyolali Tiga Puluh Tahun Yang Lalu. Sekarang Saya Mengajar Di Salah Satu Perguruan Tinggi', '200', '2');
Perhatikan nilai UDH dari pecahan kedua di atas, yaitu 050003A70302.
Perintah query untuk menyimpan pecahan ke-3 ke tabel OUTBOX_MULTIPART:
INSERT INTO outbox_multipart(UDH, TextDecoded, ID, SequencePosition) VALUES ('050003A70303', 'Di Kota Solo, Yaitu Universitas Sebelas Maret.', '200', '3');
Perhatikan nilai UDH dari pecahan kedua di atas, yaitu 050003A70303.
Nah.. dah paham kan konsepnya? OK sekarang saya berikan script khusus untuk mengirim long text SMS sebagaimana ide di atas.
<?php // koneksi ke mysql mysql_connect("dbhost", "dbuser", "dbpass"); mysql_select_db("dbname"); // pesan asli $pesan = "......."; // menghitung jumlah pecahan $jmlSMS = ceil(strlen($pesan)/153); // memecah pesan asli $pecah = str_split($pesan, 153); // proses untuk mendapatkan ID record yang akan disisipkan ke tabel OUTBOX $query = "SHOW TABLE STATUS LIKE 'outbox'"; $hasil = mysql_query($query); $data = mysql_fetch_array($hasil); $newID = $data['Auto_increment']; // proses penyimpanan ke tabel mysql untuk setiap pecahan for ($i=1; $i<=$jmlSMS; $i++) { // membuat UDH untuk setiap pecahan, sesuai urutannya $udh = "050003A7".sprintf("%02s", $jmlSMS).sprintf("%02s", $i); // membaca text setiap pecahan $msg = $pecah[$i-1]; if ($i == 1) { // jika merupakan pecahan pertama, maka masukkan ke tabel OUTBOX $query = "INSERT INTO outbox (DestinationNumber, UDH, TextDecoded, ID, MultiPart) VALUES ('$noTelp', '$udh', '$msg', '$newID', 'true')"; } else { // jika bukan merupakan pecahan pertama, simpan ke tabel OUTBOX_MULTIPART $query = "INSERT INTO outbox_multipart(UDH, TextDecoded, ID, SequencePosition) VALUES ('$udh', '$msg', '$newID', '$i')"; } // jalankan query mysql_query($query); } ?>
OK deh.. selamat mencoba ya…
Teknik di atas adalah rahasia yang saya gunakan untuk software SMS gateway saya supaya mendukung pengiriman long text SMS. Wah… apa gak takut idenya dipakai orang? Apa gak takut pula rejekinya berkurang karena scriptnya gak laku? He.. 3x, masalah rejeki mah dah ada yang ngatur Gan. Insya Allah rejeki tak akan pergi ke mana.
Beberapa artikel terkait
- Teknik Dasar Mengirim SMS dengan Gammu
- Teknik Untuk Memecah String Menjadi Substring dengan Jumlah Karakter Sama
- Cara Supaya Service SMS Daemon Gammu Berjalan Otomatis di Windows
- Setting Gammu untuk Aplikasi SMS Gateway
- Setting Gammu Untuk Lebih Dari Satu HP/Modem
- Cara Memasang Auto Scrolling Text di Wordpress
- Penggunaan Function substring() di Query SQL
- Membuat SMS Gateway Ucapan Ulang Tahun Otomatis dengan PHP + MySQL
- Script Auto Reply SMS Gateway dengan PHP
- Cara Mengubah Struktur Tabel dengan Query SQL
Share this article on:
Kata kunci: long text sms gammu - script php sms gateway - sms gammu - teknik kirim sms gammu -
Mau kaos (T-shirt) Wordpress keren? (


Rosihan Ari adalah seorang programmer, penulis buku, trainer, peneliti dan berusaha menjadi seorang blogger sejati dengan memberikan yang terbaik buat negeri ini. Berfokus pada computer programming serta computer aided learning for mathematics, ia ingin berbagi ilmu yang dimilikinya. 


oh gitu ya mas!!
thankz,,,
aku juga kemaren tugas akhir buat dpt ahmad pake gammu sama hp butut + php sama mysql dan tentunya apache. lumayan dapet A.
Tapi kalo buat smsgateway lambat.
kalo pengen cepet gimana mas?
@asep: lambatnya gimana mas?
lambatnya pas ambil sms dari hp!!
kayaknya kalo di itung ada 1 mennit..
dan yang kedua pada saat daemon smsd mengirimkan sms yang di ambil dari table outbox. aku pake database bawaan gammu untuk mysql.
dan auto reply yang saya pake kebetulan pake script php-cli
Aslm. Pak,sy mau tanya… Gammu bs u kirim MMS g pak n gimana cara membuatnya… Makash
@saridewi: bisa mbak, tapi saya blm tahu caranya
Tolong penjelasan lebih detail mengenai kode UDH, khususnya yang angka hexadecimalnya…. thanks
@dijae uncleskin: kode hexadecimalnya itu bisa sembarang mas (boleh acak), asal jumlahnya 8 digit. Tapi dibuat tetap pun juga gak masalah.
terima kasih atas penjelasannya, lalu bagaimana dengan pemecahan kalimat yang mengandung karakter escape? misalnya kita mau pecahkan kalimat setiap kali menemukan karakter escape.
menCoba untuk bantu
@dijae
untuk karakter escape bisa dilahat disini
http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php
jika ada ingin menghilangkan atau memotong karakter escape anda bisa menggunakan perintah
str_replace, contohntya :
str_replace(“karakter yang ingin di ganti”,”karakter pengganti”,”sumber kalimat”);
str_replace(“¤”,”*”,$msg);
Kalo ingin dipotong setiap kali menemukan karakter escape
mungkin bisa pake perintah explode
$array_msg_explode = explode(“¤”,$msg);
Nah jika anda pengen memotong setiap kali ada karakter escape tinggal anda lakukan looping
dengan karakter escape yang anda inginkan
Tapi akan sangat aneh jika anda memotong setiap kali ada karakter escape.
Ribet..
Terima kasih pak Ari. Anda memang jenius dan rendah hati. Artikel yang sangat membantu dan sangat saya butuhkan. Thanks!