Friday, August 10, 2012

Menggunakan Schedule Task Sebagai Auto Reminder Agent

Seringkali kita mendapatkan pesan baik lewat email atau sms, dimana pesan yang diperoleh dikirimkan pada waktu dimana sudah di luar jam kerja, seperti di malam hari dimana kemungkinan besar orang tidak lagi di jam kerja. Pesan yang diterima bisa berupa informasi atau reminder, seperti mengingatkan hari ulang tahun, atau waktu meeting, atau mungkin mengirimkan informasi lain yang sifatnya mengingatkan. Reminder ini biasanya terkirim secara otomatis atau disebut automatic reminder, yang tentunya menggunakan parameter waktu yang sudah dijadwalkan, sudah dibuatkan konfigurasi akan dilakukan reminder pada waktu tertentu atau dengan kondisi tertentu.

Sebagai contoh, mengirimkan reminder masa aktif akun sebuah website berlangganan misalnya website yang menyediakan sebuah layanan dan membership yang memberikan hak akses dengan durasi masa aktif. Dan ketika masa aktif sudah mulai habis, maka seminggu sebelum masa aktif, dikirimkan email pemberitahuan kepada member. Contoh lain, pernahkah Anda menerima email atau sms berisi iklan penawaran sesuatu produk. Atau contoh lainnya seperti di facebook, mengirimkan email bila ada teman-teman facebook yang akan ulang tahun beberapa hari atau beberapa minggu ke depan. Dan masih banyak contoh lainnya, reminder seperti ini dilakukan secara otomatis, bukan lagi seorang administrator yang mengirimkan, tetapi sistem yang melakukannya secara otomatis. Pengiriman reminder bisa dilakukan sesuai dengan waktu yang ditentukan, dengan kondisi-kondisi tertentu misalnya dikirimkan kepada pelanggan yang masa aktifnya tinggal seminggu lagi. Untuk mengetahui masa aktif seperti ini, menggunakan aplikasi yang melakukan query data ke member, meng-query siapa saja yang masa aktifnya akan habis seminggu lagi, lalu baru kemudian dikirimkan reminder lewat email atau sms.

Dalam kasus berikut, saya akan menampilkan contoh automatic reminder dengan menggunakan schedule task pada windows server, dan menggunakan aplikasi PHP. Contoh kasus adalah pada sistem sebuah website berlangganan, yang mengirimkan email reminder berupa notifikasi kepada member yang masa aktif akunnya tinggal 2 minggu, 1 minggu, 3 hari lagi atau yang sudah lewat dari 1 minggu. 

Yang perlu disiapkan adalah:

1. Aplikasi  (agent)  yang menjalankan tugas untuk mengirimkan email, aplikasi yang digunakan adalah php.

a. Query untuk mendapatkan kondisi,function get_active_period_accounts($before, $after)
{
    $sql = "SELECT 
                b.id,
                a.member_id,
                b.full_name,
                b.email,
                a.transaction_id,
                a.activated_date,
                a.deactivated_date,
                c.package_name,
                DATEDIFF(a.deactivated_date, DATE_FORMAT(now(),'%Y-%m-%d')) AS active_days   
            FROM trpackage a
            INNER JOIN msmember b ON a.member_id=b.member_id
            INNER JOIN mspackage c ON c.package_id=a.package_id
            WHERE     a.package_id NOT IN('0')
                    AND DATEDIFF(a.deactivated_date, date_format(now(),'%Y-%m-%d'))<='$before'
                    AND DATEDIFF(a.deactivated_date, date_format(now(),'%Y-%m-%d'))>='$after'
            ORDER BY active_days DESC";
    $rs = mysql_query($sql);
    return $rs;
    mysql_free_result($rs);
}

?>

b.  Menggunakan fungsi email pada PHP

function email_account_expiration($before=14, $after=-7)
{
    global $tvc_admin;
   
    $email_content = get_email_content(14);
    $subject = “Reminders for the active period of account”;       
    $from = “noreply@banuaguniomasio.com”;   
    $headers = "From: $from\r\n";
    $headers.= "Content-type: text/html; charset=iso-8859-1\r\n";
       
    $rs = get_active_period_accounts($before, $after);
   
    while($trpackage=mysql_fetch_object($rs))
    {   
        $days = $trpackage->active_days;
        if($days==14 || $days==7 || $days==3 || $days==-7)
        {
           
            $message = “Dear $trpackage->full_name,
We inform you that the active period of your account is $days days away. You can extend your account by clicked this link http://www.banuaguniomasio.com/activation.php.


Thank you.

Bet Regards
Banuaguniomasio.Com”;
           
            $params['full_name']=$trpackage->full_name;
            $params['active_days']=$trpackage->active_days;
               
            if(mail($trpackage->email, $subject, $message, $headers)){
                echo "Sent to $trpackage->full_name
";
            }
        }
    }
   
    mysql_free_result($rs);   
}


?>

c.    Jalankan fungsi untuk mengirimkan email
email_account_expiration();
?>
    Simpan sintak php (a,b,c) di atas dalam sebuah file php, misalnya disimpan di drive d:\webserver\banuaguniomasio\activation.php

2.    Siapkan file bat, sebagai pengeksekusi aplikasi.

-    Buat file yang bat (berextention .bat), lalu simpan misalnya di drive d:/webserver/banuaguniomasio/reminder.bat
-    Kemudian buka file reminder.bat lalu tuliskan perintah :
C:\php\php.exe D:\webserver\banuaguniomasio\activation.php
-    Dalam perintah di atas ada dua bagian, pertama adalah mengarahkan ke aplikasi php (compiler), file php.exe ini tersimpan di mana php terinstall, dalam contoh ini php disimpan di drive C. Lalu bagian yang kedua adalah file php yang akan dieksekusi, dalam hal  ini adalah fungsi yang menjalankan pengiriman email reminder, yang tadi sudah disimpan di file activation.php.

3.    Scheduled Task

Schedule Task ini adalah sebuah fitur Window, ada pada server maupun client, yang berfungsi untuk menjalankan tugas tertentu berdasarkan waktu yang ditentukan, jadi tugas yang dijalankan bisa dijadwalkan akan dieksekusi pada waktu tertentu. Dalam kasus ini, saya menggunakan Scheduled Task untuk menjalankan Auto Reminder, jadi scheduled task inilah yang digunakan sebagai agent, yang men-trigger aplikasi php yang berfungsi untuk pengiriman email tadi. Scheduled Task ini juga bukan hanya ada di Window saja, di Linux juga ada fitur seperti ini yang dikenal dengan crontab, yang tentu saja cara setingnya berbeda. Schedule tasks on Linux using crontab, untuk referensi tutorial bisa dipelajari di:


- HowTo: Add Jobs To cron Under Linux or UNIX? (http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/).
- Schedule tasks on Linux using crontab (http://kevin.vanzonneveld.net/techblog/article/schedule_tasks_on_linux_using_crontab/).
- Cron and Crontab usage and examples (http://www.pantz.org/software/cron/croninfo.html).



Berikut langkah-langkah peyetingan Scheduled Task pada Windows.




-          Masuk ke Control Panel  - Scheduled Task – Add Scheduled Task



-          Browse file bat yang sudah dibuat
-          Buat nama reminder, terserah dengan memberikan nama apa saja, misalnya yang sesuai dengan fungsi dari remimder tersebut. Ada beberapa pilihan waktu kapan task tersebut dijalankan, apakah setiap hari, setiap minggu, dan seterusnya. Dalam contoh ini, task akan dijalankan setiap hari pada pukul 03.00 AM subuh atau pagi.
 
-          Berikut setingan jam akan dijalankannya task.
 
-          Setelah itu klik Next untuk menyelesaikan tahapan penyetingan scheduled task.
-          Schedule task yang sudah sukses dibuat bisa dilihat di daftar scheduled task
 

-  Selesai. 

Pada tahap ini scheduled task sudahberhasil dibuat. Maka sistem pengiriman notifikasi lewat email akan dilakukan otomatis oleh scheduled task setiap jam 3 pagi hari.