Setiap hari admin Anda menjawab pertanyaan yang sama di WhatsApp: jam buka, harga, ongkir, cara pesan, status pesanan. Di luar jam kerja pesan menumpuk, dan pelanggan yang menunggu terlalu lama pindah ke toko lain. Menambah admin bukan solusi yang selalu terjangkau.
Chatbot WhatsApp bisa menangani pertanyaan berulang secara otomatis dan menyerahkan kasus rumit ke manusia. Tapi chatbot yang dirancang asal-asalan justru membuat pelanggan frustrasi, dan memakai jalur yang salah bisa membuat nomor bisnis Anda diblokir. Artikel ini membahas pilihan teknologi, cara merancang alur, aturan main WhatsApp yang perlu dipahami, dan contoh implementasi webhook di Laravel.
Tiga Cara Mengotomatiskan WhatsApp
| Opsi | Kelebihan | Keterbatasan | Cocok untuk |
|---|---|---|---|
| Aplikasi WhatsApp Business (gratis) | Pesan sambutan, pesan di luar jam kerja, balasan cepat, katalog; tanpa coding | Bukan chatbot sungguhan, tidak bisa terhubung ke database | Usaha kecil dengan volume chat rendah |
| WhatsApp Business Platform (API resmi Meta, langsung lewat Cloud API atau lewat penyedia BSP) | Resmi, stabil, mendukung tombol interaktif, bisa diintegrasikan dengan sistem Anda | Perlu verifikasi bisnis, pesan template berbayar, aturan ketat | Bisnis yang serius dan butuh integrasi data |
| Gateway tidak resmi (berbasis WhatsApp Web) | Murah, cepat dipasang | Melanggar ketentuan WhatsApp, risiko nomor diblokir, tidak ada jaminan stabil | Tidak disarankan untuk nomor utama bisnis |
Jika chatbot perlu mengecek stok, status pesanan, atau data pelanggan dari aplikasi Anda, pilihannya praktis hanya API resmi. Anda bisa memakai Cloud API langsung dari Meta (perlu Meta Business account, nomor yang belum terdaftar di aplikasi WhatsApp biasa, dan aplikasi di Meta for Developers) atau lewat Business Solution Provider yang menyediakan dashboard dan bantuan onboarding.
Aturan Main yang Wajib Dipahami
- Jendela layanan 24 jam: setelah pelanggan mengirim pesan, Anda bebas membalas dengan pesan apa pun selama 24 jam. Di luar jendela itu, Anda hanya boleh mengirim message template yang sudah disetujui Meta.
- Template dan kategori: template dibagi menjadi kategori seperti utility (notifikasi transaksi), authentication (OTP), dan marketing. Tarifnya berbeda per kategori dan per negara; cek halaman harga resmi Meta karena skemanya berubah dari waktu ke waktu.
- Opt-in: pelanggan harus setuju menerima pesan dari Anda sebelum Anda memulai percakapan, misalnya lewat centang di form checkout.
- Kualitas nomor: banyaknya pelanggan yang memblokir atau melaporkan nomor Anda menurunkan rating kualitas dan bisa membatasi pengiriman.
Merancang Alur Percakapan
Rancang dulu di kertas atau diagram sebelum menulis kode. Langkah yang bisa Anda ikuti:
- Kumpulkan data chat. Baca 100-200 chat terakhir dan kelompokkan pertanyaannya. Biasanya segelintir topik mendominasi sebagian besar chat.
- Pilih 5-7 topik teratas untuk diotomatiskan. Sisanya tetap ke manusia.
- Buat menu utama dengan tombol atau daftar. Pesan interaktif WhatsApp mendukung hingga 3 tombol balasan, atau list message dengan hingga 10 pilihan.
- Tulis jawaban singkat. Satu pesan, satu informasi. Akhiri dengan pilihan berikutnya agar pelanggan tidak bingung.
- Siapkan jalur keluar di setiap titik: tombol "Bicara dengan admin".
- Tentukan perilaku di luar jam kerja: bot menjawab yang bisa dijawab, dan memberi tahu kapan admin akan membalas sisanya.
Contoh menu utama
Halo, terima kasih sudah menghubungi Toko Contoh.
Pilih topik di bawah ini:
[Cek status pesanan]
[Daftar harga & produk]
[Bicara dengan admin]
Untuk pertanyaan bebas yang tidak cocok dengan menu, Anda bisa memakai model AI untuk memahami maksud pesan dan menjawab berdasarkan FAQ Anda. Batasi AI hanya menjawab dari dokumen FAQ yang Anda berikan, dan arahkan ke admin jika jawabannya tidak ada, agar bot tidak mengarang harga atau kebijakan.
Implementasi Webhook di Laravel
Dengan Cloud API, Meta mengirim setiap pesan masuk ke URL webhook Anda. Ada dua bagian: verifikasi (GET) saat Anda mendaftarkan URL, dan penerimaan pesan (POST).
// routes/web.php
use App\Http\Controllers\WhatsAppWebhookController;
Route::get('/webhooks/whatsapp', [WhatsAppWebhookController::class, 'verify']);
Route::post('/webhooks/whatsapp', [WhatsAppWebhookController::class, 'receive']);
// bootstrap/app.php (kecualikan dari CSRF)
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(except: ['webhooks/whatsapp']);
})
// app/Http/Controllers/WhatsAppWebhookController.php
class WhatsAppWebhookController extends Controller
{
public function verify(Request $request)
{
// PHP mengubah titik di nama parameter menjadi underscore
if ($request->query('hub_mode') === 'subscribe'
&& $request->query('hub_verify_token') === config('services.whatsapp.verify_token')) {
return response($request->query('hub_challenge'), 200);
}
abort(403);
}
public function receive(Request $request)
{
$signature = 'sha256=' . hash_hmac('sha256', $request->getContent(), config('services.whatsapp.app_secret'));
abort_unless(hash_equals($signature, (string) $request->header('X-Hub-Signature-256')), 401);
$message = data_get($request->all(), 'entry.0.changes.0.value.messages.0');
if ($message) {
HandleWhatsAppMessage::dispatch($message); // proses di queue
}
return response()->json(['ok' => true]); // balas cepat
}
}
Dua hal penting: verifikasi tanda tangan X-Hub-Signature-256 agar hanya Meta yang bisa memicu bot, dan balas webhook secepat mungkin lalu proses pesan di queue. Jika respons lambat, Meta akan mencoba mengirim ulang dan bot Anda bisa membalas dua kali. Simpan juga ID pesan yang sudah diproses untuk mencegah duplikasi. Penjelasan queue ada di queue dan job di Laravel.
Untuk membalas, kirim POST ke endpoint pesan Graph API:
Http::withToken(config('services.whatsapp.token'))
->post('https://graph.facebook.com/' . config('services.whatsapp.version')
. '/' . config('services.whatsapp.phone_number_id') . '/messages', [
'messaging_product' => 'whatsapp',
'to' => $message['from'],
'type' => 'text',
'text' => ['body' => 'Pesanan INV-1023 sedang dikemas dan dikirim besok.'],
])->throw();
Simpan token, app secret, dan phone number ID di .env, bukan di kode. Lihat checklist keamanan dasar Laravel untuk kebiasaan aman lainnya.
Eskalasi ke Manusia
Bot yang tidak bisa dilewati adalah sumber keluhan nomor satu. Atur agar percakapan pindah ke admin ketika:
- Pelanggan memilih "Bicara dengan admin" atau mengetik kata seperti "admin", "komplain", "refund".
- Bot gagal memahami pesan dua kali berturut-turut.
- Topiknya sensitif: pembayaran gagal, barang rusak, data pribadi.
Saat eskalasi, simpan status percakapan (misalnya kolom handled_by berisi human) agar bot berhenti menjawab, dan kirim ringkasan percakapan ke admin supaya pelanggan tidak perlu mengulang cerita.
Mengukur Keberhasilan Bot
Setelah bot berjalan, catat setiap percakapan ke database dengan kolom sederhana: topik, apakah selesai oleh bot, dan apakah dieskalasi. Dari situ Anda bisa menghitung beberapa angka yang berguna:
- Tingkat penyelesaian bot: persentase percakapan yang selesai tanpa admin.
- Tingkat eskalasi per topik: topik dengan eskalasi tinggi berarti jawabannya kurang jelas atau memang butuh manusia.
- Waktu tunggu setelah eskalasi: bot tidak ada gunanya jika pelanggan tetap menunggu berjam-jam untuk admin.
Tinjau angka ini setiap dua minggu dan perbaiki satu alur setiap kali.
Kesalahan Umum
- Menu terlalu dalam. Lebih dari tiga level membuat pelanggan menyerah. Ratakan menunya.
- Jawaban panjang seperti brosur. Di WhatsApp, pesan pendek lebih mudah dibaca.
- Broadcast promosi ke semua kontak tanpa opt-in. Ini mempercepat penurunan kualitas nomor.
- Tidak menguji di HP sungguhan. Tampilan tombol dan list berbeda dengan simulasi di dashboard.
- Tidak meninjau log. Pesan yang gagal dipahami bot adalah daftar perbaikan gratis untuk alur berikutnya.
Checklist Sebelum Go-Live
- Nomor dan akun bisnis sudah terverifikasi di Meta Business.
- Webhook memverifikasi tanda tangan dan memproses pesan di queue.
- Pesan duplikat dicegah dengan menyimpan ID pesan.
- Tombol "Bicara dengan admin" tersedia di setiap alur.
- Template untuk notifikasi di luar jendela 24 jam sudah disetujui.
- Opt-in pelanggan tercatat di database.
- Pesan di luar jam kerja menyebut kapan admin akan membalas.
Mulailah dari FAQ sederhana dan satu integrasi data, misalnya cek status pesanan, lalu kembangkan berdasarkan log percakapan nyata. Jika data pesanan Anda belum terdigitalisasi, langkah pertamanya ada di cara digitalisasi bisnis kecil dengan sistem informasi. Beberapa aplikasi Laravel di GudangCode sudah menyimpan data pesanan yang bisa langsung dihubungkan ke webhook seperti di atas.