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 :
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" 😀
makasih ya shaingnnyaa
Uyeee