March 26, 2009

SMS Autorespon Dengan Trigger Mysql





SMS Gateway merupakan aplikasi SMS yang saat ini sudah sangat berkembang di masyarakat, hampir semua perusahaan yang berbasis sistem infomormasi untuk perusahaannya menggunakan fasilitas ini untuk memberikan kemudahan bagi konsumen dengan mengirim SMS ke nomor tertentu dengan menggunakan format yang telah di tentukan Anda dapat memperoleh informasi dengan mudah.

Baru-baru ini saya servis motor ke Ahas Honda, iseng-iseng liat brosur sambil nunggu motor di service, saya liat Honda mempunyai fasilitas SMS Gateway, jadi untuk mengetahui harga suku cadangnya Anda cuman kirim SMS dengan format yang telah ditentukan misal ingin tau harga suku cadang motor Anda, terus dapet info balesan dah harga suku cadangnya. Kampus-kampus, instansi pemerintah sekarang sudah menggunakan fasilitas SMS Gateway untuk kemudahan layanannya.

Seperti pada tulisan saya sebelumnya, sudah saya jelaskan sedikit tentang instalasi SMS Gateway dengan menggunakan gammu. Kali ini saya mau berbagi ilmu sedikit membuat SMS Autorespon tanpa harus menggunakan bahasa pemrogaraman.

Ada beberapa cara untuk membangun suatu fasilitas SMS yang autorespon dengan gammu, namun kali ini saya mau memberikan contoh sedikit membaut SMS Autorespon memanfaatkan Trigger yang ada pada Mysql, penjelasan tentang trigger entr ya di posting saya berikutnya.


Contoh script Trigger:

CREATE TRIGGER autoreply_gammu AFTER INSERT ON inbox

FOR EACH ROW BEGIN

IF SUBSTRING(NEW.TextDecoded,1,4) = 'FRMT' then

INSERT INTO `smscenter`.`outbox` (`UpdatedInDB`, `InsertIntoDB`,

`SendingDateTime`, `Text`, `DestinationNumber`, `Coding`, `UDH`,

`Class`, `TextDecoded`, `ID`, `MultiPart`, `RelativeValidity`,

`SenderID`, `SendingTimeOut`, `DeliveryReport`, `CreatorID`) VALUES

(NOW(), '','', NULL, NEW.SenderNumber, 'Default_No_Compression', NULL,

'-1',(SELECT isi from format_sms WHERE kode=SUBSTRING(NEW.TextDecoded,6,3)) , NULL,

'false', '-1', NULL, '', 'default', '');
end if;


IF SUBSTRING(NEW.TextDecoded,1,4) = 'INFO' Then

INSERT INTO `smscenter`.`outbox` (`UpdatedInDB`, `InsertIntoDB`,

`SendingDateTime`, `Text`, `DestinationNumber`, `Coding`, `UDH`,

`Class`, `TextDecoded`, `ID`, `MultiPart`, `RelativeValidity`,

`SenderID`, `SendingTimeOut`, `DeliveryReport`, `CreatorID`) VALUES

(NOW(), '','', NULL, NEW.SenderNumber, 'Default_No_Compression', NULL,

'-1', 'Terima kasih atas saran anda, segera akan kami tindak lanjutin', NULL, 'false', '-1',

NULL, '', 'default', '');
End If;
End;

  • contoh diatas format request di 'IF' yang pertama format untuk melihat FORMAT SMS yang tersedia caranya dengan KETIK: FRMTSMS ----> kirim ke .....nomor tujuan
  • 'IF' yang kedua format sms untuk menyampaikan saran dengan format, KETIK: INFO------->kirim ke...nomor tujuan


"CREATE TRIGGER autoreply_gammu AFTER INSERT ON inbox
FOR EACH ROW BEGIN"

skrip ini meruapakan awal untuk membuat trigger dengan nama autoreply_gammu, perintahnya terletak pada kata AFTER yaitu jalankan trigger autoreply_gammu setelah ada sms masuk ke inbox memori ponsel kemudian mulai.


"IF SUBSTRING(NEW.TextDecoded,1,4) = 'FRMT' then"
Angka 1,4 yang ada diatas digunakan untuk membaca string yang ada pada sms inbox dimemori ponsel dimana 1 membaca string pertama kemudian 4 adalah jumlah string dari kata FRMT, jadi jika ada sms yang masuk di memori ponsel ada kata pertamanya FRMT maka perintah selanjutnya akan dijalankan.

" INSERT INTO `smscenter`.`outbox` (`UpdatedInDB`, `InsertIntoDB`,
`SendingDateTime`, `Text`, `DestinationNumber`, `Coding`, `UDH`,
`Class`, `TextDecoded`, `ID`, `MultiPart`, `RelativeValidity`,
`SenderID`, `SendingTimeOut`, `DeliveryReport`, `CreatorID`) VALUES
(NOW(), '','', NULL, NEW.SenderNumber, 'Default_No_Compression', NULL,
'-1',(SELECT isi from format_sms WHERE kode=SUBSTRING(NEW.TextDecoded,6,3)) , NULL,
'false', '-1', NULL, '', 'default', '');
end if;"

Perintah ini yang akan dijalankan setelah aplikasi gammu membaca SMS masuk ada kata kunci FRMT seperti penjelasan diatas, maka mysql akan secara otomatis menjalankan perintah untuk menginsert ke tabel Outbox database seperti format diatas, namun yang perlu diperhatikan adalah baris yang saya blok kalau yang lainnya biarkan saja, baris yang di blok menjelaskan untuk menampilkan kolom isi dati tabel format_sms dimana kata kuncinya sama dengan SMS (kenapaprogram diatas adaa angka 6 dan 3? karena setelah kata FRMT dan diberi spasi kata 'SMS' merupakan string ke 6 dan terdiri dari 3 huruf).

jadi dengan format yang diatas maka jika kita mengirim SMS dengan format FRMTSMS maka yang diterima adalah isi dari baris tabel format_sms dengan primary key SMS, isinya merupakan format-format sms yang digunakan.

Lanjut....

Sedangkan pada bagian script autorespon INFO, sms respon tidak diambil dari database karena sudah langsung kita buat balasannya
seperti ini 'Terima kasih atas saran anda, segera akan kami tindak lanjutin', namun jika Anda ingin merobah kata-kata diatas agar lebih mudah dan tidak perlu masuk ke script trigger sebaiknya dikoneksikan ke dalam bentuk tabel database, sehingga dapat mengganti SMS Responnya dari aplikasi berbasis web jika menggunakan pemrograman php untuk interface nya agar lebih manusiawi.

Bersama dengan program gammu sudah ada contoh script untuk mengirim SMS berbasis Web, bahkan di contoh program bawaan gammu tersebut sudah ada fasilitas untuk SMS terjadwal.

Yang perlu diingat adalah jika menggunakan gammu bahwa setiap SMS yang akan dikirim adalah menggunakan perintah Insert ke tabel outbox, jadi setiap SMS yang akan dikirim itu masuk ke table outbox terlebih dahulu baru kemudian oleh gammu dilakukan query untuk pengiriman SMS dan SMS terkirim akan dipindah ke table senitems.








Semoga artikel diatas bermanfaat bagi yang membutuhkannya.

6 comments:

  1. Mas isi field-field untuk format_sms apa saja dan apakah satu database dengan database gammunya??

    Terima kasih

    ReplyDelete
  2. sudah ada di gammu nya database untuk SMSnya tinggal dimanipulasi aja untuk nampilinnya. Gammu udah lengkap tuh, malahan ada contohnya tuh beserta scriptnya untuk ber kirim SMS di gammmunya, coba saja folder2nya dilihat.

    ReplyDelete
  3. Mas Sitorus, kalau format sms nya lebih dr 2 kata bgmn scriptnya? Misal; INFOBUKUBARU

    Tlg dong mas, sya lg btuh tutorial dan bimbingan tntng Trigger MySQL

    ReplyDelete
  4. Mas Sitorus, ane mau tanya nih. Trigger MySQL sprti dbwh ini yg ane bwt sdh benar blm?Klo da yg slh tlg ksih tau sya via komen dsini atw via email di muslimok@gmail.com. Mhn bantuannya,please! Syukron!

    **********************trigger******************
    delimiter $
    create trigger smsd.sms AFTER INSERT on smsd.inbox
    for each row BEGIN
    DECLARE smsx,smsz,smsmasuk varchar(200);
    DECLARE format,pilihansms,pemilih,no_pengirim varchar(200);
    DECLARE error,x,y,jmlvote int;

    set smsz=new.TextDecoded;
    select ltrim(smsz) into smsx;
    select rtrim(smsx) into smsmasuk;
    set no_pengirim=new.SenderNumber;
    select substring_index(smsmasuk,' ',1) into format;
    select substring(smsmasuk,6,8) into pilihansms; select substring(smsmasuk,10) into pemilih; select count(nim) from polling.data_mahasiswa where nim=pemilih into y;

    if y>0 then insert into smsd.outbox values ('', '', '', NULL, no_pengirim, 'Default_No_Compression', NULL, -1, 'Maaf,Anda Sudah Memilih','', 'false',-1, '', '', '', ''); end if;

    select count(pilihan) from polling.data_polling where pilihan=pilihansms into x;
    select vote from polling.data_polling where pilihan=pilihansms into jmlvote;
    set jmlvote=jmlvote+1; set error=0;

    if format='vote' and x>0 and y=0 then update polling.data_polling set vote=jmlvote where pilihan=pilihansms;
    else
    set error=1;
    end if;

    if error=1 then
    insert into smsd.outbox values ('', '', '', NULL, no_pengirim, 'Default_No_Compression', NULL, -1, 'Maaf,format yang anda masukkan salah. Silahkan kirim ulang','', 'false',-1, '', '', '', '');
    end if;

    if error=0 then insert into smsd.outbox values ('', '', '', NULL, no_pengirim, 'Default_No_Compression', NULL, -1, 'Terimakasih,pilihan anda telah kami tampung','', 'false',-1, '', '', '', '');
    end if;
    END;
    $
    *********************trigger*******************

    ReplyDelete
  5. mohon bantuannya dong,
    saya ada proyek TA Mobile Programing Communicaton,saya rencananya mau biki SMS Gateway tentang Info Spesifikasi dan Harga Ponsel dengan perintah sms [KETIK merk ponsel type Ponsel],nah yang saya mau minta tolong.Gimana caranya bikin trigger yang dapat ngambil record pada database,setelah itu dikirim melalui autoreply sms.
    di Mohon dengan Sangat untuk bantuannya :)

    ReplyDelete
  6. Saran mending enggk usah pakai trigger mas, cukup programming php aja nanti halaman yg digunakan untuk script autoreplaynya di kasih autorepfresh, seperti yg saya gunakan di creativegamastudio.com/absensisms/

    kalau pakai trigger nanti ribet di prosedur query mysqlnya.

    kalau pakai script php, logikanya setiap ada sms masuk dibaca oleh program, jika ada sms masuk dengna query yg telah ditentukan maka script tersebut akan melakukan pencarian sesuai query tersebut, kemudian akan membalas otomatis. metodenya hanya baca inbox, cari yg dicari, insert ke outbox. ini saya gunakan di software sms yg saya gunakan dengan gammu.

    ReplyDelete