Aplikasi Survey Kepuasan Pelanggan Berbasis Laravel: Solusi Monitoring Kualitas Layanan

Keluhan pelanggan sering baru terdengar ketika sudah terlambat: ulasan bintang satu di Google, pelanggan tetap yang diam-diam pindah, atau atasan yang bertanya "kenapa omzet cabang...

Aplikasi Survey Kepuasan Pelanggan Berbasis Laravel: Solusi Monitoring Kualitas Layanan

Keluhan pelanggan sering baru terdengar ketika sudah terlambat: ulasan bintang satu di Google, pelanggan tetap yang diam-diam pindah, atau atasan yang bertanya "kenapa omzet cabang ini turun?" tanpa ada data yang bisa menjawabnya. Formulir kertas di meja kasir jarang diisi, dan kalaupun diisi, tumpukannya tidak pernah direkap.

Aplikasi survey kepuasan pelanggan berbasis web menyelesaikan bagian yang paling membosankan: mengumpulkan jawaban secara terstruktur, menghitung skornya, dan menampilkan tren tanpa rekap manual. Artikel ini membahas cara kerja sistem semacam ini, desain database yang masuk akal, cara menjalankannya di Laravel, dan apa saja yang perlu Anda periksa sebelum memakai source code siap pakai.

Masalah yang Sebenarnya Diselesaikan

Survey kepuasan bukan sekadar "minta rating". Tujuannya adalah menemukan titik layanan mana yang lemah, sehingga perbaikannya tepat sasaran. Tanpa sistem, ada tiga masalah yang biasa muncul:

  • Data tercecer. Jawaban ada di kertas, Google Form pribadi staf, dan chat WhatsApp. Tidak ada satu tempat untuk melihat semuanya.
  • Tidak bisa dibandingkan. Pertanyaan berubah tiap bulan, skala berbeda, sehingga tren tidak bisa dibaca.
  • Rekap makan waktu. Admin menghabiskan berjam-jam memindahkan angka ke Excel, dan laporan baru jadi setelah masalahnya basi.

Sistem survey yang baik menetapkan skala tetap (misalnya 1–5), pertanyaan yang konsisten, dan perhitungan otomatis, sehingga skor bulan ini benar-benar bisa dibandingkan dengan bulan lalu.

Modul Inti dan Alur Data

Aplikasi survey kepuasan pelanggan berbasis Laravel yang dibahas di sini memiliki fitur: input kepuasan dengan rating 1–5, dukungan multi pertanyaan, rekap dan perhitungan hasil otomatis, dashboard monitoring, export ke Excel dan PDF, serta manajemen data responden. Alur datanya kira-kira seperti ini:

  1. Admin menyusun daftar pertanyaan (misalnya keramahan staf, kecepatan layanan, kebersihan, kualitas produk).
  2. Responden mengisi formulir dan memberi nilai 1–5 untuk setiap pertanyaan.
  3. Data responden dan jawaban tersimpan di tabel terpisah agar satu responden bisa punya banyak jawaban.
  4. Sistem menghitung rata-rata per pertanyaan dan skor keseluruhan.
  5. Dashboard menampilkan grafik, dan admin mengekspor laporan ke Excel atau PDF untuk rapat.

Rancangan Tabel yang Direkomendasikan

Apa pun source code yang Anda pakai atau bangun, struktur berikut adalah pola yang sehat. Kuncinya: pisahkan pertanyaan, responden, dan jawaban. Jangan menyimpan semua jawaban dalam satu kolom teks panjang, karena itu membuat perhitungan dan filter menjadi sulit.

TabelKolom pentingFungsi
questionsid, text, sort_order, is_activeDaftar pertanyaan survey
respondentsid, name, phone, unit/cabang, created_atData orang yang mengisi
answersid, respondent_id, question_id, score (1–5)Nilai per pertanyaan
usersid, name, email, roleAdmin dan petugas yang melihat laporan

Kolom is_active pada pertanyaan penting: ketika sebuah pertanyaan tidak dipakai lagi, nonaktifkan saja, jangan dihapus. Dengan begitu jawaban lama tetap utuh dan laporan historis tidak rusak. Untuk memahami cara menggambar relasi seperti ini, lihat panduan merancang ERD sederhana.

Contoh migration Laravel 11

Schema::create('answers', function (Blueprint $table) {
    $table->id();
    $table->foreignId('respondent_id')->constrained()->cascadeOnDelete();
    $table->foreignId('question_id')->constrained()->restrictOnDelete();
    $table->unsignedTinyInteger('score'); // 1 sampai 5
    $table->timestamps();
    $table->unique(['respondent_id', 'question_id']);
});

Constraint unique mencegah satu responden menjawab pertanyaan yang sama dua kali karena tombol kirim ditekan berulang. restrictOnDelete pada pertanyaan mencegah admin menghapus pertanyaan yang sudah punya jawaban.

Cara Menghitung Skor dengan Benar

Ada dua angka yang umum dipakai. Pertama, rata-rata skor per pertanyaan. Kedua, CSAT (Customer Satisfaction Score), yaitu persentase jawaban bernilai 4 atau 5 dari seluruh jawaban. CSAT lebih mudah dikomunikasikan ke pemilik usaha ("78% pelanggan puas") dibanding rata-rata 3,9.

$report = DB::table('answers')
    ->join('questions', 'questions.id', '=', 'answers.question_id')
    ->whereBetween('answers.created_at', [$from, $to])
    ->groupBy('questions.id', 'questions.text')
    ->selectRaw('questions.text,
        ROUND(AVG(answers.score), 2) AS rata_rata,
        ROUND(100 * SUM(answers.score >= 4) / COUNT(*), 1) AS csat_persen,
        COUNT(*) AS jumlah_jawaban')
    ->get();

Selalu tampilkan jumlah jawaban di samping skor. CSAT 100% dari 3 jawaban tidak sama artinya dengan CSAT 85% dari 400 jawaban. Contoh: jika cabang A punya 12 jawaban dan cabang B punya 300, jangan langsung menyimpulkan cabang A lebih baik.

Menjalankan di Komputer Lokal

Langkah umum untuk source code Laravel berlaku juga di sini:

  1. Pastikan PHP, Composer, dan MySQL sudah terpasang. Panduannya ada di setup environment PHP, Composer, dan MySQL.
  2. Ekstrak source code, lalu jalankan composer install.
  3. Salin .env.example menjadi .env, lalu jalankan php artisan key:generate.
  4. Buat database kosong dan isi kredensialnya di .env.
  5. Impor file SQL bawaan atau jalankan php artisan migrate --seed, sesuai dokumentasi.
  6. Jalankan php artisan serve dan buka alamat yang muncul di browser.

Jika terjadi error koneksi database atau halaman putih, rujuk panduan menjalankan source code Laravel yang membahas penyebab umumnya.

Kapan dan di Mana Survey Dibagikan

Sistem sebagus apa pun tidak berguna jika tidak ada yang mengisi. Waktu terbaik meminta penilaian adalah sesaat setelah layanan selesai, ketika pengalaman masih segar. Beberapa cara yang praktis:

  • QR code di meja kasir atau ruang tunggu yang mengarah ke formulir survey. Cetak per cabang dengan parameter berbeda (misalnya ?unit=cabang-2) agar hasil bisa difilter per lokasi.
  • Tautan di struk atau pesan konfirmasi setelah transaksi atau kunjungan.
  • Tablet di pintu keluar untuk klinik, kantor layanan, atau sekolah.

Misalkan sebuah klinik menerima 40 pasien per hari dan 1 dari 5 pasien mengisi survey. Dalam sebulan Anda punya sekitar 200 jawaban, cukup untuk melihat pola per pertanyaan. Angka ini hanya ilustrasi; tingkat pengisian nyata sangat bergantung pada cara Anda memintanya.

Kustomisasi yang Aman

Hampir semua organisasi ingin mengubah sesuatu: logo, pertanyaan, atau menambah kolom cabang. Beberapa prinsip agar tidak merusak:

  • Ubah pertanyaan lewat admin, bukan kode. Jika pertanyaan tertanam di file Blade, pindahkan ke tabel agar bisa diubah tanpa developer.
  • Tambah kolom lewat migration baru. Jangan mengedit migration lama yang sudah dijalankan di server.
  • Gunakan Git sejak hari pertama agar setiap perubahan bisa dikembalikan.
  • Batasi spam. Formulir publik rawan diisi bot. Tambahkan throttle di route dan validasi between:1,5 pada skor.

Contoh validasi sederhana di controller:

$data = $request->validate([
    'name'        => ['required', 'string', 'max:100'],
    'scores'      => ['required', 'array'],
    'scores.*'    => ['required', 'integer', 'between:1,5'],
]);

Checklist Sebelum Memakai Source Code Survey

  • Ada demo yang bisa dicoba, bukan hanya tangkapan layar.
  • Pertanyaan bisa ditambah, diurutkan, dan dinonaktifkan tanpa menyentuh kode.
  • Jawaban disimpan per pertanyaan (tabel terpisah), bukan dalam satu kolom teks.
  • Export Excel dan PDF menghasilkan angka yang sama dengan dashboard.
  • Ada dokumentasi instalasi dan versi PHP/Laravel yang jelas.
  • Formulir publik memiliki validasi dan perlindungan CSRF.
  • Lisensi menjelaskan apakah boleh dipakai untuk klien.

Kesalahan Umum dan Cara Memperbaikinya

KesalahanAkibatPerbaikan
Terlalu banyak pertanyaanResponden berhenti di tengahBatasi 5–8 pertanyaan inti
Mengubah teks pertanyaan lamaTren tidak bisa dibandingkanBuat pertanyaan baru, nonaktifkan yang lama
Hanya melihat rata-rataMasalah kecil tersembunyiLihat juga sebaran skor 1 dan 2
Tidak menindaklanjutiPelanggan merasa diabaikanTetapkan PIC untuk setiap skor rendah

Keterbatasan yang Perlu Disadari

Skala 1–5 bagus untuk mengukur, tetapi kurang bagus untuk memahami alasan. Jika Anda butuh "kenapa", tambahkan satu kolom komentar terbuka yang opsional. Selain itu, survey hanya mewakili orang yang mau mengisi; pelanggan yang paling kecewa sering tidak mengisi sama sekali. Gunakan hasilnya sebagai sinyal, lalu konfirmasi dengan data lain seperti keluhan dan transaksi berulang. Untuk gambaran yang lebih luas tentang peran aplikasi semacam ini, baca manfaat aplikasi bisnis untuk UMKM.

Jika ingin melihat contoh implementasi yang sudah jadi, detail aplikasinya tersedia di halaman Aplikasi Survey Kepuasan Pelanggan di GudangCode.

Ingin langsung mempraktikkannya?

Buat akun gratis untuk mengunduh contoh aplikasi Laravel, menyimpan tutorial favorit, dan mencoba kursus. Gratis, bisa daftar dengan akun Google.

Daftar Gratis Lihat katalog aplikasi
Yudhi
Ditulis oleh
Yudhi
Founder & Lead Developer, GudangCode

Yudhi adalah founder GudangCode dan developer Laravel dengan pengalaman membangun puluhan sistem informasi bisnis siap pakai — mulai dari POS, HRIS, hingga aplikasi manajemen. Ia menulis panduan dan artikel di GudangCode untuk membantu developer Indonesia menjalankan, memahami, dan men-deploy source code Laravel dengan benar.

Laravel PHP MySQL Sistem Informasi Bisnis
Lihat semua artikel Yudhi
survey kepuasan pelanggan laravel aplikasi survey sistem informasi customer feedback
Bacaan Paling Dicari
📚 Free Learning Hub

Learn Coding for Free at DhieCoderWeb

Explore Laravel, PHP, JavaScript tutorials, source code, web development guides, and practical programming tips.

DhieCoderWeb
100+
Tutorials
Free
Learning
SEO
Tips
Visit Dhiecoderweb.com →