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
| Pendekatan | Kelebihan | Kekurangan | Cocok untuk |
|---|---|---|---|
| Bot berbasis menu/aturan | Murah, jawaban selalu tepat | Kaku, gagal jika pertanyaan di luar menu | FAQ sangat sedikit dan stabil |
| Platform chatbot siap pakai | Cepat jalan, ada dashboard dan integrasi kanal | Biaya bulanan, kustomisasi terbatas, data di pihak ketiga | Tim tanpa developer |
| Bangun sendiri dengan API model bahasa | Kontrol penuh, bisa membaca data pesanan dari sistem sendiri | Butuh developer dan pemeliharaan | Bisnis 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.
- Tulis satu artikel pendek per topik, misalnya "Kebijakan retur 7 hari" atau "Area pengiriman instan".
- Gunakan bahasa lugas, satu fakta per kalimat, dan sertakan angka yang pasti seperti batas jam pengiriman.
- Tandai tanggal pembaruan. Jawaban basi lebih merusak kepercayaan daripada tidak menjawab.
- 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
| Metrik | Cara menghitung | Yang dilakukan bila buruk |
|---|---|---|
| Tingkat penyelesaian bot | Percakapan yang selesai tanpa status human รท total | Tambah artikel basis pengetahuan untuk topik yang sering dieskalasi |
| Waktu balasan pertama | Selisih pesan pertama user dan balasan pertama | Periksa timeout API dan antrean |
| Jawaban salah | Sampel 20 percakapan dibaca manual tiap minggu | Perbaiki teks sumber, bukan hanya prompt |
| Kepuasan | Pertanyaan "Apakah jawaban ini membantu?" di akhir | Baca 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.