Membuat Chatbot Layanan Pelanggan dengan AI

Pertanyaan yang sama datang puluhan kali sehari: "Ongkirnya berapa?", "Pesanan saya sudah dikirim?", "Bisa bayar transfer?". Admin Anda sibuk menyalin jawaban yang sama, sementara...

Membuat Chatbot Layanan Pelanggan dengan AI

Pertanyaan yang sama datang puluhan kali sehari: "Ongkirnya berapa?", "Pesanan saya sudah dikirim?", "Bisa bayar transfer?". Admin Anda sibuk menyalin jawaban yang sama, sementara chat yang masuk di luar jam kerja baru dibalas besok pagi dan sebagian pembeli sudah pindah ke toko lain.

Chatbot berbasis AI bisa mengambil alih pertanyaan rutin itu, asalkan dibangun dengan batasan yang jelas. Chatbot yang asal dipasang justru berbahaya: menjawab dengan yakin padahal salah, atau membuat pelanggan berputar-putar tanpa bisa bicara dengan manusia. Panduan ini membahas cara merencanakan, membangun, dan mengukur chatbot layanan pelanggan, lengkap dengan desain tabel dan contoh kode Laravel.

1. Tentukan Cakupan Secara Sempit

Ambil riwayat chat satu sampai dua bulan terakhir, lalu kelompokkan pertanyaannya. Biasanya sebagian besar jatuh ke beberapa kategori saja: harga dan stok, ongkos kirim, status pesanan, cara pembayaran, dan retur. Pilih tiga sampai lima kategori dengan volume tertinggi dan jawaban yang jelas. Itulah cakupan versi pertama.

Tuliskan juga apa yang tidak boleh dijawab bot: keluhan barang rusak, permintaan refund, negosiasi harga khusus, dan apa pun yang menyangkut data pribadi di luar milik penanya. Topik ini langsung diteruskan ke manusia.

2. Pilih Pendekatan

PendekatanKelebihanKekuranganCocok untuk
Bot berbasis menu/aturanMurah, jawaban selalu tepatKaku, gagal jika pertanyaan di luar menuFAQ sangat sedikit dan stabil
Platform chatbot siap pakaiCepat jalan, ada dashboard dan integrasi kanalBiaya bulanan, kustomisasi terbatas, data di pihak ketigaTim tanpa developer
Bangun sendiri dengan API model bahasaKontrol penuh, bisa membaca data pesanan dari sistem sendiriButuh developer dan pemeliharaanBisnis yang sudah punya aplikasi web sendiri

Jika Anda sudah punya aplikasi Laravel untuk pesanan, pendekatan ketiga paling menarik karena bot bisa menjawab "status pesanan INV-1023" dengan data asli, bukan tebakan.

3. Siapkan Basis Pengetahuan

Model bahasa tidak tahu kebijakan toko Anda. Ia hanya akan menjawab benar jika Anda memberinya teks sumber yang benar. Pola ini disebut retrieval-augmented generation: cari dulu potongan pengetahuan yang relevan, lalu kirimkan bersama pertanyaan.

  1. Tulis satu artikel pendek per topik, misalnya "Kebijakan retur 7 hari" atau "Area pengiriman instan".
  2. Gunakan bahasa lugas, satu fakta per kalimat, dan sertakan angka yang pasti seperti batas jam pengiriman.
  3. Tandai tanggal pembaruan. Jawaban basi lebih merusak kepercayaan daripada tidak menjawab.
  4. Tunjuk satu orang yang bertanggung jawab memperbarui isi saat kebijakan berubah.

4. Desain Tabel

CREATE TABLE kb_articles (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(200) NOT NULL,
  body TEXT NOT NULL,
  is_active TINYINT(1) DEFAULT 1,
  updated_at TIMESTAMP NULL,
  FULLTEXT KEY ft_kb (title, body)
);

CREATE TABLE chat_conversations (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  channel VARCHAR(20) NOT NULL,          -- web, whatsapp
  customer_ref VARCHAR(100) NULL,
  status VARCHAR(20) DEFAULT 'bot',      -- bot, human, closed
  created_at TIMESTAMP NULL,
  updated_at TIMESTAMP NULL
);

CREATE TABLE chat_messages (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  conversation_id BIGINT UNSIGNED NOT NULL,
  role VARCHAR(10) NOT NULL,             -- user, bot, agent
  content TEXT NOT NULL,
  created_at TIMESTAMP NULL,
  INDEX (conversation_id)
);

Kolom status di percakapan adalah kunci eskalasi: begitu bernilai human, bot berhenti membalas dan agen mengambil alih. Riwayat pesan juga menjadi bahan evaluasi di langkah 7.

5. Contoh Implementasi di Laravel

Contoh di bawah memanggil API model bahasa dengan format chat completions yang didukung banyak penyedia. Alamat endpoint, kunci, dan nama model disimpan di config/services.php yang membaca .env, sehingga Anda bisa berganti penyedia tanpa mengubah kode.

namespace App\Services;

use App\Models\ChatConversation;
use App\Models\KbArticle;
use Illuminate\Support\Facades\Http;

class SupportBot
{
    public function reply(ChatConversation $conv, string $question): ?string
    {
        if ($conv->status !== 'bot') {
            return null; // sedang ditangani manusia
        }

        $context = KbArticle::where('is_active', true)
            ->whereFullText(['title', 'body'], $question)
            ->limit(3)
            ->get()
            ->map(fn ($a) => "## {$a->title}\n{$a->body}")
            ->implode("\n\n");

        $system = "Anda asisten layanan pelanggan toko. Jawab singkat dalam bahasa Indonesia "
            . "HANYA berdasarkan informasi di bawah. Jika jawabannya tidak ada, balas persis: ESKALASI.\n\n"
            . $context;

        $response = Http::withToken(config('services.llm.key'))
            ->timeout(20)
            ->post(config('services.llm.url'), [
                'model'    => config('services.llm.model'),
                'messages' => [
                    ['role' => 'system', 'content' => $system],
                    ['role' => 'user', 'content' => $question],
                ],
                'temperature' => 0.2,
            ]);

        $answer = trim($response->json('choices.0.message.content') ?? '');

        if ($response->failed() || $answer === '' || str_contains($answer, 'ESKALASI')) {
            $conv->update(['status' => 'human']);
            return 'Pertanyaan Anda kami teruskan ke tim kami. Mohon tunggu sebentar.';
        }

        return $answer;
    }
}

Beberapa keputusan desain di sini: temperature rendah membuat jawaban konsisten; instruksi "hanya berdasarkan informasi di bawah" mengurangi jawaban karangan; dan setiap kegagalan, termasuk API mati, berujung ke manusia, bukan ke pesan error. whereFullText memerlukan index FULLTEXT di MySQL atau PostgreSQL. Untuk volume tinggi, jalankan pemanggilan API di job antrean agar webhook WhatsApp tidak timeout.

6. Rancang Alur dan Eskalasi

  • Sapaan pembuka yang jujur: sebutkan bahwa ini asisten otomatis dan apa saja yang bisa dibantu.
  • Tombol cepat untuk tiga pertanyaan teratas, agar pelanggan tidak perlu mengetik.
  • Kata kunci eskalasi seperti "admin", "komplain", atau "refund" langsung mengubah status menjadi human.
  • Batas percobaan: jika pelanggan bertanya ulang hal yang sama dua kali, anggap bot gagal dan teruskan.
  • Jam kerja: di luar jam kerja, sampaikan kapan manusia akan membalas.

7. Ukur dan Perbaiki Setiap Minggu

MetrikCara menghitungYang dilakukan bila buruk
Tingkat penyelesaian botPercakapan yang selesai tanpa status human รท totalTambah artikel basis pengetahuan untuk topik yang sering dieskalasi
Waktu balasan pertamaSelisih pesan pertama user dan balasan pertamaPeriksa timeout API dan antrean
Jawaban salahSampel 20 percakapan dibaca manual tiap mingguPerbaiki teks sumber, bukan hanya prompt
KepuasanPertanyaan "Apakah jawaban ini membantu?" di akhirBaca percakapan yang dinilai buruk

Jika Anda juga menangani keluhan yang lebih rumit, catat dalam sistem tiket agar tidak tercecer. Data percakapan pun bisa diolah lebih lanjut, misalnya dengan pola dari artikel otomatisasi laporan dengan spreadsheet dan AI.

Memperkirakan biaya

Biaya API model bahasa dihitung per token, yaitu potongan kata pada pertanyaan, konteks, dan jawaban. Cara memperkirakannya: ambil rata-rata panjang satu percakapan dari uji coba, kalikan dengan jumlah percakapan per bulan, lalu cocokkan dengan daftar harga penyedia yang Anda pilih. Batasi konteks ke tiga artikel teratas dan pasang batas pemakaian bulanan di dashboard penyedia agar tagihan tidak melonjak tanpa disadari.

Privasi dan Keamanan

Jangan kirim data sensitif seperti nomor KTP atau detail rekening ke API pihak ketiga. Saring pola nomor panjang sebelum dikirim, simpan kunci API hanya di .env, dan jelaskan di kebijakan privasi bahwa percakapan diproses oleh layanan AI. Untuk dasar keamanan aplikasinya, lihat 10 best practice keamanan aplikasi web.

Checklist Sebelum Peluncuran

  • Cakupan topik tertulis, termasuk daftar topik yang wajib diteruskan ke manusia.
  • Basis pengetahuan diperiksa ulang dan diberi tanggal pembaruan.
  • Bot diuji dengan minimal 50 pertanyaan nyata dari riwayat chat.
  • Eskalasi ke manusia bekerja, termasuk saat API gagal.
  • Ada orang yang membaca sampel percakapan setiap minggu.
  • Pelanggan tahu sedang berbicara dengan asisten otomatis.

Chatbot yang baik bukan pengganti tim layanan, melainkan penyaring pertanyaan rutin agar tim punya waktu untuk kasus yang benar-benar butuh manusia. Bagi yang ingin mempelajari pola Laravel di balik sistem seperti ini, GudangCode menyediakan berbagai contoh aplikasi bisnis untuk UMKM sebagai bahan belajar.

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
AI Chatbot Layanan Pelanggan Automation
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 โ†’