Catatan Harian Mas Andri

Silahkan digunakan dengan bijaksana

back

Membuat Sistem Pelacakan Tiket Helpdesk dalam Satu File PHP

14 April 2025 || 11:10:43 WIB || ClassyID

IndoTicket: Solusi Praktis untuk Memantau Status Permintaan Support Pelanggan

Dalam dunia layanan pelanggan dan dukungan teknis, transparansi dan komunikasi yang efektif sangat penting. Salah satu tantangan utama adalah memberikan cara bagi pelanggan untuk melacak status permintaan dukungan mereka tanpa perlu masuk ke sistem atau menghubungi customer service berulang kali.

Artikel ini membahas tentang implementasi sistem pelacakan tiket helpdesk yang ringkas dan efektif menggunakan satu file PHP. Pendekatan "single-file application" ini memiliki keunggulan dalam hal kemudahan deployment dan pemeliharaan, terutama untuk organisasi kecil hingga menengah.

Keunggulan Sistem Pelacakan Tiket Standalone

Sebelum kita menyelami kode, mari kita pahami mengapa pendekatan standalone ini dapat menjadi solusi yang menarik:

  1. Deployment Mudah: Cukup unggah satu file ke web server
  2. Tidak Perlu Database Terpisah: Menggunakan database helpdesk yang sudah ada
  3. Tanpa Dependencies: Tidak perlu menginstal framework atau library tambahan
  4. Kinerja Ringan: Minimal overhead karena tidak ada kompleksitas yang tidak perlu
  5. Integrasi Mudah: Dapat diintegrasikan ke dalam website yang sudah ada

Komponen Utama Sistem

Sistem pelacakan tiket yang kita bahas terdiri dari beberapa komponen utama:

1. Koneksi Database

Koneksi ke database dilakukan menggunakan MySQLi, yang merupakan ekstensi MySQL yang ditingkatkan untuk PHP:

$host = '';
$username = '';
$password = ''; 
$database = '';

$conn = new mysqli($host, $username, $password, $database);

Catatan: Dalam implementasi nyata, sebaiknya menyimpan kredensial database dalam file konfigurasi terpisah.

2. Fungsi Pelacakan Tiket

Fungsi getTicketTrackingData() adalah inti dari sistem. Fungsi ini melakukan beberapa operasi penting:

3. Interface Pengguna yang Responsif

Frontend dibangun menggunakan TailwindCSS untuk tampilan yang responsif dan modern. Komponen utama UI meliputi:

Cara Kerja Sistem

Mari kita bahas alur kerja sistem pelacakan tiket ini:

  1. Pencarian Tiket: Pengguna memasukkan ID tiket pada form pencarian.

  2. Validasi Tiket: Sistem melakukan validasi apakah tiket ada dan valid:

    // Validasi tiket berdasarkan jumlah balasan dalam ticket_replies
    $sql = "SELECT COUNT(*) as count FROM ticket_replies WHERE ticketid = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("i", $ticketId);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    
    // Tiket valid jika memiliki lebih dari satu entri (tiket asli + balasan)
    $isValid = ($row['count'] > 1);
    
  3. Pengambilan Data: Jika tiket valid, sistem mengambil semua informasi terkait dari database.

  4. Penyusunan Timeline: Sistem menyusun timeline aktivitas yang komprehensif dari berbagai sumber data:

    // Susun timeline untuk tracking (gabungan dari riwayat dan balasan)
    $timeline = [];
    
    // Tambahkan riwayat tiket ke timeline
    foreach ($history as $item) {
        $timeline[] = [
            'action' => $item['action'],
            'timestamp' => $item['timestamp'],
            'datetime' => $item['datetime'],
            'user' => $item['user'],
            'type' => 'history'
        ];
    }
    
    // Tambahkan balasan tiket ke timeline
    foreach ($replies as $reply) {
        $userType = $reply['is_client'] ? 'PELAPOR' : 'OPERATOR';
        
        $timeline[] = [
            'action' => "BALASAN DARI " . $userType,
            'description' => substr($reply['body'], 0, 100) . (strlen($reply['body']) > 100 ? '...' : ''),
            'timestamp' => $reply['timestamp'],
            'datetime' => $reply['datetime'],
            'user' => $reply['user'],
            'type' => 'reply'
        ];
    }
    
  5. Tampilan Hasil: Sistem menampilkan hasil pencarian dalam format yang mudah dibaca dan visual.

Aspek Keamanan

Keamanan merupakan aspek penting dalam sistem ini. Beberapa implementasi keamanan meliputi:

  1. Prepared Statements: Mencegah SQL injection dengan menggunakan prepared statements di semua query:

    $stmt = $conn->prepare($sql);
    $stmt->bind_param("iii", $ticketId, $ticketId, $ticketId);
    
  2. Sanitasi Output: Mencegah XSS dengan sanitasi output menggunakan htmlspecialchars():

    
     

    Tiket #

  3. Validasi Input: Validasi input dari pengguna:

    $ticketId = isset($_GET['id']) ? intval($_GET['id']) : '';
    

Optimasi dan Performa

Sistem dioptimasi untuk performa dengan beberapa cara:

  1. Query Efisien: Query database dirancang untuk meminimalkan beban pada server:

    // Cari informasi tiket dasar dari ticket_replies dengan subquery
    $sql = "SELECT tr.ticketid, tr.userid, tr.timestamp as created_time,
            (SELECT body FROM ticket_replies WHERE ticketid = ? ORDER BY timestamp ASC LIMIT 1) as title,
            ...";
    
  2. Lazy Loading: Data hanya dimuat jika pengguna memasukkan ID tiket.

  3. Caching Sederhana: Hasil query disimpan dalam variabel untuk mencegah query berulang.

Kustomisasi dan Pengembangan Lebih Lanjut

Sistem ini sangat fleksibel dan dapat dikustomisasi sesuai kebutuhan:

  1. Tampilan: Ubah warna dan tema dengan memodifikasi konfigurasi TailwindCSS:

    tailwind.config = {
        theme: {
            extend: {
                colors: {
                    primary: {
                        light: '#60a5fa',
                        DEFAULT: '#3b82f6',
                        dark: '#2563eb',
                    },
                    // ...
                }
            }
        }
    }
    
  2. Logika Bisnis: Tambahkan atau modifikasi logika bisnis sesuai kebutuhan organisasi Anda.

  3. Integrasi: Integrasikan dengan sistem notifikasi atau analitik tambahan sesuai kebutuhan.

Kesimpulan

Sistem pelacakan tiket dalam satu file PHP yang telah kita bahas merupakan solusi praktis untuk organisasi yang membutuhkan cara sederhana namun efektif untuk memungkinkan pelanggan melacak status permintaan dukungan mereka. Dengan pendekatan standalone ini, Anda dapat dengan cepat mengimplementasikan sistem pelacakan tiket tanpa overhead yang tidak perlu.

Kode sumber lengkap tersedia di GitHub repository IndoTicket untuk Anda terapkan dan kustomisasi sesuai kebutuhan organisasi Anda.

Tentang Penulis

Andri Wiratmono adalah pengembang web dengan spesialisasi dalam solusi PHP dan sistem manajemen konten. Dengan pengalaman lebih dari 5 tahun dalam pengembangan aplikasi web, Andri Wiratmono berfokus pada pembuatan solusi yang sederhana namun powerful untuk masalah bisnis nyata.


Artikel ini terakhir diperbarui pada 14 April 2025.