#SMSGateway Query Menampilkan Pesan Terbaru Inbox maupun Sentitems Seperti Handphone

6
4176
Halaman:
Sertakan sumber dengan jelas jika ingin mencopy. Selalu cek tanggal, karena mungkin ada beberapa artikel lama yang belum disesuaikan dengan fakta terbaru

Query Menampilkan Pesan Terbaru Inbox maupun Sentitems Seperti Handphone. Sobat pasti bisa membedakan tampilan SMS pada HP kebanyakan saat ini dibandingkan HP lawas semacam Nokia 3xxx dll. Tampilan SMS pada HP lawas masih per item (sms). Dimana Folder Inbox, Folder Terkirim, Draft masih terpisah.

Dengan perkembangan teknologi sekarang ini, pada kebanyakan HP tidak ada folder inbox, folder sentitems maupun folder dratf. SMS pun ditampilkan seperti percakapan, bukan per item/sms.

Saat membuka menu messaging/SMS, yang ditampilkan adalah nomor pengirim/tujuan dan sms  yang tampil adalah sms terakhir(terbaru). Saat user memilih satu dari beberapa nomor pengirim/tujuan tersebut, akan ditampilkan semua pesan masuk dan pesan terkirim dari dan ke nomor tersebut.

Query Menampilkan Pesan Terbaru Inbox maupun Sentitems Seperti Handphone

Seperti judulnya sob, mungkin ada yang masih bingung cara menampilkan halaman/menu pesan seperti tampilan sms di handphone.




Wis yo gaesss, langsung wae. Berikut tahapan-tahapan menampilkan pesan di gammu seperti tampilan di handphone.

Minimum Requirement :

  1. Database Gammu (inbox dan sentitems yang telah ada datanya, jika belum ada, isi terlebih dahulu. Manual bisa, pake handphone juga bisa
  2. Mengetahui perintah query MySQL. Bisa menggunakan PHPMyAdmin, SQLYog ataupun MySQL Client (Command Line, linux /windows perintahnya sama).

Step by Step Query Menampilkan Pesan Terbaru Inbox maupun Sentitems Seperti Handphone

Step 1. Menampilkan hanya pesan terbaru  di inbox pada setiap nomor.

1 nomor, 1 pesan terbaru, walaupun sms yang masuk ada banyak, pesan yang lebih lama tidak ditampilkan

SELECT
  a.`SenderNumber`,
  b.`TextDecoded`  AS `TextDecoded_a`,
  MAX(a.ReceivingDateTime) AS `time_inbox`/*Mengambil waktu terbaru*/
FROM `inbox` a
  LEFT JOIN (SELECT
               `SenderNumber`,
               `TextDecoded`
             FROM `inbox`
             /* Urut berdasar waktu terbaru, untuk mengambil pesan terbaru */
             ORDER BY `ReceivingDateTime` DESC) b
    ON a.`SenderNumber` = b.`SenderNumber`
GROUP BY a.`SenderNumber`
ORDER BY MAX(a.`ReceivingDateTime`)DESC

Hasilnya sebagai berikut :

+----------------+--------------------------+---------------------+
| SenderNumber   | TextDecoded_a            | time_inbox          |
+----------------+--------------------------+---------------------+
| +6285645177541 | DIBLOKIR - TES SPAM      | 2014-12-31 13:12:46 |
| +6281350147647 | KH4584TM                 | 2014-12-31 13:02:49 |
| +6285248994455 | KH8330EP                 | 2014-12-31 11:57:29 |
| +6281332504810 | KH1929GC                 | 2014-12-30 15:00:25 |
| +6281233330935 | KH9470AA                 | 2014-12-30 13:25:42 |
| +6285751376523 | KH2697BO                 | 2014-12-30 11:25:36 |
| +6282350830820 | KH2697BO                 | 2014-12-30 11:05:11 |
| +6281345241982 | KH1481AC                 | 2014-12-29 14:52:59 |
| +6281286131040 | KH1946AA                 | 2014-12-29 14:51:18 |
| +6285654213151 | KH4823FF                 | 2014-12-29 12:40:53 |
+----------------+--------------------------+---------------------+

Step 2. Menampilkan pesan terkirim terbaru di sentitems pada setiap nomor.

Sama seperti step 1, pesan terkirim yang lebih lama tidak ditampilkan.

SELECT
  a.`DestinationNumber`,
  b.`TextDecoded`       AS `TextDecoded_b`,
  MAX(a.`SendingDateTime`) AS `time_sent`/*Mengambil waktu terbaru*/
FROM `sentitems` a
  LEFT JOIN (SELECT
               `DestinationNumber`,
               `Status`,
               `TextDecoded`
             FROM `sentitems`
             ORDER BY `SendingDateTime` DESC) b/* Urut berdasar waktu terbaru, untuk mengambil pesan terbaru */
    ON a.`DestinationNumber` = b.`DestinationNumber`
GROUP BY a.`DestinationNumber`
ORDER BY MAX(a.`SendingDateTime`)DESC

Hasilnya sebagai berikut :

+-------------------+------------------+---------------------+
| DestinationNumber | TextDecoded_b    | time_sent           |
+-------------------+------------------+---------------------+
| +6282144353639    | KH4584TM; YAMAHA-| 2014-12-31 14:06:13 |
| +6285248994455    | KH8330EP; Tipe ke| 2014-12-31 12:44:21 |
| +6281350147647    | KH3131TE; YAMAHA-| 2014-12-31 12:43:02 |
| +6285645177541    | huahhame         | 2014-12-31 12:03:58 |
| +6281332504810    | KH1929GC; Tipe ke| 2014-12-31 09:32:53 |
| +6285751376523    | KH2697BO; YAMAHA-| 2014-12-30 13:54:01 |
| +6282350830820    | KH2697BO; YAMAHA-| 2014-12-30 13:53:56 |
| +6281233330935    | KH9470AA; MITSHUB| 2014-12-30 13:26:10 |
| +6281286131040    | KH1946AA; -Tipe -| 2014-12-30 08:45:35 |
| +6281345241982    | KH1481AC; TOYOTA-| 2014-12-29 15:24:56 |
+-------------------+------------------+---------------------+

 Jika step diatas tidak ada masalah, bisa lanjut ke step selanjutnya.

Artikel Terkait :  #SMSGateway - Install Gammu pada CentOS-7

Step 3. Menggabungkan 2 step diatas

SELECT
    `SenderNumber`,
    /*  Penting!!!
        Untuk menentukan waktu mana yang akan ditampilkan, waktu inbox atau sentitems
        Logika sederhana, jika waktu sent lebih besar/baru waktu sentitems yang diambil
        dan sebaliknya */
    IF (`time_sent` > `time_inbox` OR `time_sent`=NULL, `time_sent`,`time_inbox`) AS `Waktu`,

    /*  Penting !!!
        Menentukan pesan sent atau inbox yang ditampilkan, idem dengan logika diatas. 
        Hanya 15 karakter pertama dari pesan yang ditampilkan*/
    IF (`time_sent` > `time_inbox` OR `time_sent`=NULL, SUBSTRING(`TextDecoded_b`,1,15),SUBSTRING(`TextDecoded_a`,1,15)) AS `TextDecoded`
    FROM ( 
            /* SubQuery 1 */
            /* Menampilkan pesan masuk terbaru dari inbox dari setiap nomor */
            SELECT
                    a.`SenderNumber`,
                    b.`TextDecoded`  AS `TextDecoded_a`,
                    MAX(a.ReceivingDateTime) AS `time_inbox`/*Mengambil waktu terbaru*/
                FROM `inbox` a
            LEFT JOIN ( 
                    /*$SubQuery 1.1 */
                    SELECT
                        `SenderNumber`,
                        `TextDecoded`
                    FROM `inbox`
                    /* Urut berdasar waktu terbaru, untuk mengambil pesan terbaru */
                    ORDER BY `ReceivingDateTime` DESC) b 
            ON a.`SenderNumber` = b.`SenderNumber`
            GROUP BY a.`SenderNumber`
            ORDER BY MAX(a.`ReceivingDateTime`)DESC) `inbox`
    /*Menggabungkan inbox dan sentitems*/
    LEFT JOIN (
            /* Subquery 2 */
            /*Menampilkan pesan terkirim terakhir dari sentitems dari setiap nomor */
            SELECT
                    a.`DestinationNumber`,
                    b.`TextDecoded`       AS `TextDecoded_b`,
                    MAX(a.`SendingDateTime`) AS `time_sent`/*Mengambil waktu terbaru*/
                FROM `sentitems` a
            LEFT JOIN (
                /*Subquery 2.1 */
                SELECT
                    `DestinationNumber`,
                    `TextDecoded`
                FROM `sentitems`
                /* Urut berdasar waktu terbaru, untuk mengambil pesan terbaru */
                ORDER BY `SendingDateTime` DESC) b 
            ON a.`DestinationNumber` = b.`DestinationNumber`
            GROUP BY a.`DestinationNumber`
            ORDER BY MAX(a.`SendingDateTime`)DESC) `sent`
    ON inbox.`SenderNumber` = sent.`DestinationNumber`/* diurutkan berdasarkan waktu terbaru */
    ORDER BY waktu DESC

Hasil query diatas seperti berikut :

+----------------+---------------------+-----------------+
| SenderNumber   | Waktu               | TextDecoded     |
+----------------+---------------------+-----------------+
| +6282144353639 | 2014-12-31 14:06:13 | KH4584TM; YAMAH |
| +6285645177541 | 2014-12-31 13:12:46 | DIBLOKIR - HUAH |
| +6281350147647 | 2014-12-31 13:02:49 | KH4584TM        |
| +6285248994455 | 2014-12-31 12:44:21 | KH8330EP; Tipe  |
| +6281332504810 | 2014-12-31 09:32:53 | KH1929GC; Tipe  |
| +6285751376523 | 2014-12-30 13:54:01 | KH2697BO; YAMAH |
| +6282350830820 | 2014-12-30 13:53:56 | KH2697BO; YAMAH |
| +6281233330935 | 2014-12-30 13:26:10 | KH9470AA; MITSH |
| +6281286131040 | 2014-12-30 08:45:35 | KH1946AA; -Tipe |
| +6281345241982 | 2014-12-29 15:24:56 | KH1481AC; TOYOT |
+----------------+---------------------+-----------------+

Query diatas sudah di tes. Bila ada error, baca dengan teliti errornya dimana n cek kembali query nya. Mungkin ada salah ketik.
Disarankan untuk memahami query di atas, bukan sekedar copy paste
Untuk membedakan mana pesan masuk dan mana pesan terkirim, sobat bisa menggunakan field yang mana field tersebut bisa membedakan antara inbox atau sentitems,bisa juga dengan menambah field khusus di table inbox dan sentitems untuk membedakannya
Berikut ini screenshoot tampilan di interfacenya. Yang warna merah jika itu inbox (pesan masuk) brarti ada pesan yang belum dibaca atau bisa juga pesan gagal terkirim jika itu sentitems

inbox_percakapan_sms_gateway

Ada Pertanyaan Query Menampilkan Pesan Terbaru Inbox maupun Sentitems Seperti Handphone?

6 COMMENTS

  1. Inbox, outbox, sentitems and status delivery. Perbedaan chatting sms dengan chatting WA, BBM dll, SMS menggunakan TEXT sedangkan WA dkk menggunakan PAKET_DATA.
    Fitur chatting SMS tidak bisa melihat lawan chatting "ONLINE/OFFLINE" karena masalah di atas. Untuk inbox, outbox, sentitems dan status delivery bisa dibuat. Bisa inbox FB saya atau DM di akun sosmed saya. Thanks.

  2. saya mau pakai untuk SMS Center (khusus untuk tanya jawab pertanyaan" dari customer) jadi saya perlu tampilan seperti chatting gitu bentuknya..
    kira" tampilannya seperti ini http://prntscr.com/5nm84m

    menu yg diutamakan, inbox , outbox, sent item dan STATUS DELIVERY

    kira" biayanya brp ya ? tlg inbox ke email saya dunk 🙂

  3. Thanks kunjungannya. SMSGateway untuk apa ya mas? Saya biasa buat untuk instansi. Biasa dipakai untuk info publik. Auto reply dengan format tertentu. Awal tahun ini untuk info publik Samsat. Tergantung request user seperti apa keperluannya. Untuk jelasnya bisa kontak saya mas. Thanks
    http://wp.me/p1Rkbt-xj.

  4. mas,, mau tanya ada buat program untuk smsgateway pake gammu ? saya pengen order kalo mas ada buat.. tlg inbox yah 🙂

Jangan lupa tinggalkan komentar ya gais

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