TELAH DIBUKA !!!

Toko Ebook Tutorial "RosihanAri.Net"


Free Ebook Tutorial from Rosihan Ari's Blog

Tutorial Javascript | Tutorial PHP | Tutorial AJAX | Tutorial CSS | Tutorial FPDF | Tutorial Wordpress | Tutorial Java SE


 photo 300x250_zpsff09f9e7.gif
Slot iklan tersedia, pasang iklan di atas

Produk yang direkomendasikan untuk Anda
Ebook Panduan Praktis SMS Gateway dengan PHP dan Gammu
Butuh modem Wavecom untuk SMS Gateway yang support Gammu dan dapat BONUS?? BELI SEKARANG

Teknik Mengirim Long Text SMS Gammu dengan Query SQL


December 26th, 2009 | by rosihanari | Cetak Artikel Cetak Artikel

GampSMS SMS Gateway

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, CreatorID)
VALUES ('NO TELP TUJUAN', 'KODE UDH', 'ISI TEXT PECAHAN KE-1', 'true', 'Gammu')

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, CreatorID)
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', 'Gammu');

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, CreatorID)
                VALUES ('$noTelp', '$udh', '$msg', '$newID', 'true', 'Gammu')";
   }
   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.

Teknik dan script di atas sudah diuji coba dan berjalan dengan lancar di modem Wavecom Fastrack.


Baca Juga Artikel Terkait
Teknik Dasar Mengirim SMS dengan Gammu
Teknik Untuk Memecah String Menjadi Substring dengan Jumlah Karakter Sama
Penggunaan Function substring() di Query SQL
Cara Memasang Auto Scrolling Text di WordPress
Fakta Seputar Query INSERT di SQL


 photo 300x250_zpsff09f9e7.gif
Slot iklan tersedia, pasang iklan di atas


Kata kunci: long text sms gammu - script php sms gateway - sms gammu - teknik kirim sms gammu -


Ada 90 komentar dalam artikel ini.



  1. rohmat says:

    kalimat penutupnya saya sangat menyukainya!
    ini tergambar bahwa agan sangat mencerminkan ketaatan pada sunnah rasul :”man katama ilman” dst. emang matemaika akhirat lebih aula dari matematika dunia. semoga agan sukses selalu.
    dan Yang Maha Agung selalu memberi rezeki yang barokah pada agan Rosihan amin

  2. Rivhay says:

    Mas Terimakasih atas tutorialnya sekian lama saya mempelajari tutorial ini dan akhirnya baru bisa mlm ini ,sungguh saya sangat berterimakasih.

  3. Pandu says:

    Assalamuallaikum pak, nanya…
    saya nyoba long sms (2 bagia) menggunakan siemens c55 terjadi beberapa masalah:
    - SMS yang diterima itu tidak jadi 1, maksudnya diterima 2 bagian SMS (hape tujuan yaitu yang dapat menerima lebih dari 1 bagian)
    - yang bagian pertama (UDH 01) selalu blankdan dianggap rusak.

    kira-kira kenapa ya pak? mohon bimbingannya…

  4. Pandu says:

    pertanyaan saya sebelumnya sudah teratasi pak, ternyata salah logikanya…
    ini yang saya bingung pak, kenapa klo misalnya pengiriman sms long sms gagal, yang di table multiplepart nya gak ikut kesimpen ke table sentitems ya pak?
    tapi klo sukses, itu tersimpan…
    kenapa itu pak?

    mohon penjelasannya…

  5. pwcahyo says:

    tested and worked.
    thanks pak rosihan, semoga ilmunya barokah, code saya ubah sedikit saya sesuaikan menggunakan codeigniter.
    sayang komentar tidak bisa memasukan code, kalau bisa, mau saya masukan code translate ke codeigniternya,
    yadah makasih pak…
    barakallah…

  6. Mas aan says:

    terimakasih pak,..
    sangat membantu,…

  7. Ikhwan says:

    Pak rosihan, klo Status di tabel Sentitems adalah “SendingError” hanya saat mengirim long sms kira2 maslahnya dmn ya?

    *saya menggunakan script long text sms dari bapak



 

Komentar/pertanyaan Anda!

Mohon maaf, komentar/pertanyaan yang menggunakan email palsu atau komentar bernada negatif, cemooh, umpatan, cacian atau sejenisnya secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil

Dimohon jangan pula memasukkan code program dalam bentuk apapun ke dalam komentar karena akan dianggap spam.

Mohon maaf jika seandainya ada beberapa pertanyaan Anda yang tidak direspon atau ditanggapi mengingat banyaknya komentar yang masuk dan keterbatasan kemampuan/ilmu saya dalam menjawab pertanyaan satu persatu. Saya harap Anda bisa memahami dan memakluminya.

Semua komentar atau pertanyaan yg masuk tidak akan langsung tampil di halaman ini, karena akan dimoderasi dahulu.


*