Support Ticket Management
Fitur utama yang membedakan Frog Cloud dari penyedia Cloud lainnya adalah layanan dukungan pelanggannya (Customer Service).
Tim Admin atau tim Support dapat merespons keluhan, membalas obrolan teknis, mengubah status penugasan (assignment), serta memantau antrean ticket secara real-time menggunakan teknologi Server-Sent Events (SSE).
1. Analisis & Metrik (Insight)
Pada saat Admin membuka menu "Support", Frontend sebaiknya merender kartu statistik (contoh: Jumlah tiket "Open", "In Progress", dsb.).
GET /api/backoffice/ticket/insight
Respons: Mengembalikan perhitungan agregasi status seluruh tiket.
2. Tabel Antrean Tiket (List & Detail)
Semua obrolan dari berbagai Customer dikelompokkan ke dalam tiket dengan ID unik.
GET /api/backoffice/ticket
GET /api/backoffice/ticket/{id}/conversations
Tindakan Frontend:
- Endpoint
/ticketmengembalikan array informasi tiket dasar (siapa pengirimnya, status, dan judul keluhan). - Endpoint
/conversationsmengembalikan seluruh untaian pesan/balasan layaknya aplikasi chat (termasuk attachment atau gambar).
3. Siklus Hidup Tiket (Lifecycle)
Selama proses investigasi masalah, Admin akan banyak mengubah atribut dari sebuah tiket. Tersedia beberapa endpoint spesifik untuk menangani pergantian status atau properti tiket.
Diagram Alur Penanganan Tiket
Membalas Pesan
POST /api/backoffice/ticket/{id}/reply
Merubah Prioritas & Penugasan
- Ubah Prioritas (Low, Medium, High):
PATCH /api/backoffice/ticket/{id}/priority - Oper ke Admin Lain (Assignment):
PATCH /api/backoffice/ticket/{id}/assignment
Mengakhiri Tiket
- Tutup Masalah (Close):
PATCH /api/backoffice/ticket/{id}/close - Arsipkan Tiket (Archive):
PATCH /api/backoffice/ticket/{id}/archive
4. Notifikasi Real-time (SSE)
Agar tim Support tidak perlu melakukan refresh halaman (F5) berkali-kali untuk melihat pesan baru dari Customer, Backend mengimplementasikan aliran Server-Sent Events (SSE) yang disinkronkan lewat koneksi Redis Pub/Sub.
GET /api/backoffice/ticket/sse/stream
Implementasi di Frontend (React/Vanilla JS):
const eventSource = new EventSource('/api/backoffice/ticket/sse/stream', {
withCredentials: true // Wajib untuk melewatkan Cookie otentikasi
});
eventSource.onmessage = function(event) {
const data = JSON.parse(event.data);
// Cek apakah ada tiket baru, pesan baru, atau perubahan status
if (data.type === 'NEW_REPLY') {
appendMessageToChat(data.payload);
}
};
Perhatian: Koneksi SSE bersifat terus-menerus (long-lived). Pastikan Anda menutup koneksi (
eventSource.close()) saat Admin berpindah halaman dari menu Support untuk mencegah kebocoran memori (memory leak).