#SMSGatewayGammu - Membuat trigger MySQL SMS autoreply dengan format tertentu

2
3798
1
2
Sertakan sumber dengan jelas jika ingin mencopy. Selalu cek tanggal, karena mungkin ada beberapa artikel lama yang belum disesuaikan dengan fakta terbaru

Membuat trigger MySQL SMS autoreply

Ini dia gaes yang penting n jangan sampe salah. Create Autoreply Trigger on MySQL. Untuk mengecek format benar atau salah bisa dilakukan dengan mengecek panjang string sms yang masuk.

Untuk mengambil value dari setiap field yang akan diinsert, bisa menggunakan new.field. Misal mengambil nomor hp sebelum masuk tabel inbox, maka cukup dengan new.SenderNumber

Format Benar.

  • SMS dengan character lebih dari 8 char
  • 4 string pertama sms ='INFO'
  • String ke 6 dan selanjutnya merupakan nama/id user yang ada di table data_user.  Dicek dengan perintah "select from data_user", jika ada maka benar, jika null (user tidak ada) maka dianggap salah.
  • Jika benar maka "Insert ke outbox  (DestinationNumber,TextDecoded,CreatorID) values (NomorPengirim, (nama dan handphone dari table data_user), CreatorID)".
  • Nama dan handphone dari table data_user Silahkan ganti sendiri dengan text sesuai dengan keinginan sobat.
  • Selain format di atas dianggap salah. ; "Insert ke outbox    (DestinationNumber,TextDecoded,CreatorID) values (NomorPengirim, IsiPesan+FormatSalah,CreatorID)".
  • Jika salah isi pesan akan ditambah "format salah", lalu diinsert ke outbox

Script Trigger MySQL SMS autoreply

DELIMITER $$
/* edit sesuaikan dengan nama database. penulis menggunakan database `sms_gateway` */
USE `sms_gateway`$$

DROP TRIGGER /*!50032 IF EXISTS */ `cek_format`$$

CREATE
    /*!50017 DEFINER = 'root'@'localhost' */
    TRIGGER `cek_format` BEFORE INSERT ON `inbox` 
    FOR EACH ROW BEGIN
    /*cek trigger jika benar */    
    IF LENGTH(new.`TextDecoded`)>8 AND SUBSTR(new.`TextDecoded`,1,4)='INFO' AND (SELECT COUNT(`name`) FROM `data_user` WHERE `name`= SUBSTR(new.`TextDecoded`,6,15))>0
       THEN 
       INSERT INTO `outbox` (`DestinationNumber`,`TextDecoded`,`CreatorID`) 
       VALUES
             (new.`SenderNumber`,CONCAT('NAMA :',(SELECT `name` FROM `data_user` WHERE `name`= SUBSTR(new.`TextDecoded`,6,15)),' HP: ',(SELECT `handphone` FROM `data_user` WHERE `name`= SUBSTR(new.`TextDecoded`,6,15))),'@Paijo Creator ID' );
             /* Jika ingin menandai format benar dengan kata benar di pesan masuk */    
             /* SET new.`TextDecoded`=concat('BENAR ',new.`TextDecoded`); */
    ELSE 
        INSERT INTO `outbox` (`DestinationNumber`,`TextDecoded`,`CreatorID`) 
        VALUES (new.`SenderNumber`, CONCAT('"',new.`TextDecoded`,'" Format salah'),'@Paijo Creator ID'));
            /* Jika ingin menandai format salah dengan kata salah di pesan masuk */     
            /* SET new.`TextDecoded`=concat('SALAH ',new.`TextDecoded`); */
    END IF;     
END;
$$

DELIMITER ;

Cek dengan mensimulasikan ada pesan masuk. Insert ke inbox secara manual :

INSERT INTO `inbox` (`SenderNumber`,`TextDecoded`) VALUES ('1234','INFO PAIJAN');

Untuk format salah :




INSERT INTO `inbox` (`SenderNumber`,`TextDecoded`) VALUES ('1234','INFOPAIJAN');

Jika trigger benar di outbox akan ada baris berisi data user paijan.

SELECT TextDecoded, DestinationNumber FROM outbox WHERE DestinationNumber='1234';

HASILNYA :

+---------------------------+-------------------+
| TextDecoded               | DestinationNumber |
+---------------------------+-------------------+
| NAMA :paijan HP: 4321     | 1234              |
| "INFOPAIJAN" Format salah | 1234              |
+---------------------------+-------------------+

Cara mudah mengecek penentuan kondisi dalam triger

Untuk mempermudahnya bisa dipecah perbagian dulu. Misal untuk mengecek  kondisi pertama dulu benar atau tidak nya
Jangan lupa baris sebelum ini dipakai juga ya 😀

IF LENGTH(new.`TextDecoded`)>8
THEN
/* Jika ingin menandai format benar dengan kata benar di pesan masuk */
   SET new.`TextDecoded`=concat('BENAR  ',new.`TextDecoded`);
ELSE

/* Jika ingin menandai format salah dengan kata salah di pesan masuk */
   SET new.`TextDecoded`=concat('SALAH  ',new.`TextDecoded`);

Trigger di atas bila tidak ada error maka :

Artikel Terkait :  Pengembangan Info Publik via SMS (Auto Reply, Broadcast, Report) untuk SAMSAT

Jika format benar isi pesan inbox akan ada tambahan "BENAR" di setiap insert ke inbox/sms masuk. Jika salah ada tambahan "SALAH".

Jika masih error (tidak ada benar/salah di TextDecoded inbox) cek kembali TRIGGERNYA. Jika tidak ada error, bisa ditambahkan kondisi selanjutnya . Seperti kondisi 4 string pertama = INFO dan string ke 6-15 merupakan nama dan ada di tabel data_user

SELECT `TextDecoded`,`SenderNumber` from inbox where `SenderNumber`='1234';

Hasilnya :

+---------------------------+-------------------+
| TextDecoded               | SenderNumber      |
+---------------------------+-------------------+
| BENAR INFO PAIJAN         | 1234              |
| SALAH INFOPAIJAN          | 1234              |
+---------------------------+-------------------+

Jika trigger sudah bisa membedakan mana format benar mana format salah, maka lanjut ke perintah selanjutnya :

Jika format benar maka :

INSERT INTO `outbox` (`DestinationNumber`,`TextDecoded`,`CreatorID`)
 VALUES
 (new.`SenderNumber`,CONCAT('NAMA :',(SELECT `name` FROM `data_user` WHERE `name`= SUBSTR(new.`TextDecoded`,6,15)),' HP: ',(SELECT `handphone` FROM `data_user` WHERE `name`= SUBSTR(new.`TextDecoded`,6,15))),'@Paijo Creator ID' );

Dan jika format salah maka :

INSERT INTO `outbox` (`DestinationNumber`,`TextDecoded`,`CreatorID`)
 VALUES (new.`SenderNumber`, CONCAT('"',new.`TextDecoded`,'" Format salah'),'@Paijo Creator ID');
 /* Jika ingin menandai format salah dengan kata salah di pesan masuk */
 /* SET new.`TextDecoded`=concat('SALAH  ',new.`TextDecoded`); */

Kuncinya ada di masing-masing query, seperti query dalam kondisi misalnya,

 SELECT COUNT(`name`) FROM `data_user` WHERE `name`= SUBSTR(new.`TextDecoded`,6,15))>0

Jika setelah PAIJAN (string ke-6 dan seterusnya) ada di field nama tabel data_user, hasilnya lebih dari 0 maka format benar (ditambah kondisi yang lain)

Untuk perintah setelah cek kondisi (benar atau salah) kuncinya ada di query :

(new.`SenderNumber`,CONCAT('NAMA :',(SELECT `name` FROM `data_user` WHERE `name`= SUBSTR(new.`TextDecoded`,6,15) limit 1),' HP: ',(SELECT `handphone` FROM `data_user` WHERE `name`= SUBSTR(new.`TextDecoded`,6,15) limit 1)),'@Paijo Creator ID' );

Untuk mengecek query diatas bisa dipisah-pisah. Misalnya :

select concat('NAMA :',`name`) FROM `data_user` WHERE `name`='paijan';
select concat('HP :',`handphone`) FROM `data_user` WHERE `name`='paijan';

Masih bingung???? Yup karena itulah ada yang namanya "sharing" 😀




2 COMMENTS

Jangan lupa tinggalkan komentar ya gais

This site uses Akismet to reduce spam. Learn how your comment data is processed.