Bot Sales WhatsApp dengan OpenClaw: Jawab dari FAQ Backend, dan Satu Setelan yang Menentukan Amannya
- Authors

- Name
- Samsul Hadi
- Threads
- @Threads


Jam dua siang, calon klien mengirim chat: "Jasa bikin website company profile berapa ya, include apa aja?" Kamu sedang rapat. Jam lima sore baru sempat membuka HP, kamu menjawab panjang lebar, lalu balasannya datang: "Oh maaf kak, sudah dapat yang lain."
Bukan harga yang kalah. Kecepatan yang kalah.
Saya menjual jasa website, aplikasi, dan automation lewat samsulhadiss.com. Pertanyaan yang masuk sebagian besar sama: harga, durasi, apa saja yang termasuk, cara bayar. Jawabannya sudah saya tulis di daftar FAQ di backend website. Dulu saya membuat bot untuk menjawabnya dengan n8n. Versi berikutnya saya bangun ulang di OpenClaw, asisten AI yang memang sudah saya pakai untuk banyak urusan lain.
Artikel ini membahas cara menyambungkan agent OpenClaw ke endpoint FAQ yang sudah ada, aturan supaya bot tidak mengarang harga, dan satu setelan sesi yang menentukan apakah data calon klien yang satu bisa terbaca oleh calon klien lain. Semua screenshot berasal dari simulasi lokal yang saya jalankan dengan agent OpenClaw sungguhan dan data FAQ dari seeder backend saya.
Kenapa bot sales gampang jadi masalah
Ada tiga cara bot sales gagal, dan ketiganya bukan soal kecerdasan modelnya.
Mengarang jawaban. Model bahasa pandai menyusun kalimat yang terdengar meyakinkan. Kalau tidak diberi sumber, ia bisa menyebut harga, diskon, atau tanggal selesai yang tidak pernah kamu tetapkan. Calon klien akan memegang kalimat itu.
Sumber jawaban terpisah dari sumber kebenaran. Kalau FAQ untuk bot ditulis ulang di dalam prompt, ia akan basi begitu FAQ di website diubah. Dua tempat, dua versi, satu pasti salah.
Semua calon klien berbagi satu ingatan. Ini yang paling jarang disadari. Di OpenClaw, setelan bawaan session.dmScope adalah main: semua pesan pribadi masuk ke satu sesi yang sama. Untuk asisten pribadi yang dipakai satu orang, itu memang yang diinginkan. Untuk bot yang menerima chat dari siapa saja, artinya nama, kebutuhan, dan jadwal calon klien A ikut ada di konteks saat bot menjawab calon klien B. Dokumentasi OpenClaw sendiri memberi peringatan untuk kasus ini.
Bot versi pertama saya di OpenClaw, yang saya uji 17 Oktober, masih memakai sesi main. Bot itu sudah saya hapus dan sedang saya bangun ulang. Simulasi di artikel ini adalah versi yang memperbaiki ketiga masalah di atas.
Rancangannya
Bot ini, saya beri nama Nara, hanya punya satu sumber: endpoint FAQ di backend website saya. Endpoint itu sudah ada di backend:
GET /api/v1/faqs/index/{slug-perusahaan}
(dengan token API, Laravel Sanctum)
Responsnya daftar pertanyaan dan jawaban. Saat artikel ini ditulis isinya 28 butir, dari durasi pengerjaan dan cara bayar sampai integrasi payment gateway. Agent tidak menyimpan salinan FAQ. Setiap kali ada pertanyaan soal jasa, ia menjalankan satu script kecil yang mengambil FAQ terbaru, lalu menjawab hanya dari isinya. Kalau FAQ di backend diubah, jawaban bot ikut berubah di pertanyaan berikutnya.
Batasnya ditulis tegas di instruksi agent: harga final, kesepakatan, dan jadwal mulai selalu diputuskan saya. Kalau calon klien siap, bot meminta nama dan kebutuhan singkat, lalu bilang saya yang akan menghubungi.
Ini percakapan pertama di simulasi:

Setiap fakta di jawaban itu ada di FAQ: link paket, desain dasar UI, SEO dasar, durasi 2 sampai 4 minggu, DP 50%, copywriting sebagai tambahan. Bot tidak menyebut angka harga karena FAQ-nya memang tidak menyebut angka. FAQ hanya mengarahkan ke halaman paket.
Lalu dua pertanyaan yang lebih sulit: tenggat yang tidak realistis, dan calon klien yang siap deal.

Bot tidak menjanjikan 3 hari dan tidak menebak tanggal mulai. Keduanya diserahkan ke saya, dengan daftar bahan yang perlu disiapkan, yang juga berasal dari FAQ.
Endpoint lokal di simulasi mencatat setiap request. Baris pertama berasal dari uji manual saya sebelum bot dijalankan. Dua baris berikutnya dari bot. Di giliran ketiga bot tidak mengambil FAQ lagi, karena informasinya sudah ada di percakapan yang sama:

Uji setelan sesi
Sekarang bagian yang paling penting. Saya mengirim pesan dari "orang lain" yang mengaku lupa datanya sendiri, sekali di sesi yang sama dengan Kak Rina dan sekali di sesi terpisah:

Di kedua sesi, model menolak menyebutkan data. Tapi lihat perbedaannya. Di sesi bersama, jawabannya mengakui ada data orang lain di percakapan itu. Datanya memang ada di konteks, dan yang menahannya hanya penilaian model saat itu. Di sesi terpisah, tidak ada data yang bisa bocor sama sekali.
Saya tidak mau keamanan data calon klien bergantung pada model yang kebetulan sedang berhati-hati. Karena itu setelan sesi untuk bot sales wajib dipisah per pengirim.
Menyusun bot FAQ di OpenClaw
Contoh ini memakai OpenClaw 2026.10.4. Simulasi dijalankan dengan profil terpisah dan openclaw agent --local, jadi tidak menyentuh gateway WhatsApp yang sedang berjalan.
Langkah 1: siapkan endpoint FAQ
Kalau website kamu sudah punya FAQ di database, cukup buat satu endpoint yang mengembalikan pertanyaan dan jawaban. Lindungi dengan token, karena endpoint ini akan dipanggil server, bukan browser pengunjung. Kalau belum punya backend, file JSON di server pun cukup untuk mulai.
Langkah 2: buat script pengambil FAQ di workspace agent
#!/usr/bin/env bash
# faq.sh: ambil FAQ jasa terbaru dari backend.
# FAQ_AUTH berisi nilai header Authorization lengkap, disimpan di environment.
curl -fsS -H "Authorization: ${FAQ_AUTH:?FAQ_AUTH belum diisi}" \
"${FAQ_BASE}/api/v1/faqs/index/ss-corporation" \
| python3 -c 'import json,sys; [print("T:",x["question"]+"\nJ:",x["answer"]) for x in json.load(sys.stdin)["data"]]'
Outputnya dibuat ringkas, pasangan T dan J, supaya agent tidak membaca field yang tidak perlu seperti logo dan ID perusahaan. Token diambil dari environment, bukan ditulis di script, dan curl tidak dijalankan sama sekali kalau variabelnya kosong.
Langkah 3: tulis instruksi agent dengan batas yang tegas
Di AGENTS.md workspace bot:
## Sumber jawaban
- Sebelum menjawab soal jasa, harga, durasi, pembayaran, atau proses: `bash faq.sh`
- Jawab HANYA dari isi FAQ. Kalau tidak ada, bilang jujur dan tawarkan disambungkan ke Sam.
- Jangan mengarang harga, diskon, garansi, atau tanggal selesai.
## Batas
- Harga final, kesepakatan, dan jadwal mulai selalu diputuskan Sam.
- Jangan minta data sensitif (password, nomor kartu).
Di sinilah bedanya dengan n8n. Di n8n, alur yang sama dirangkai sebagai node: webhook masuk, panggil API, susun prompt, panggil model, kirim balasan, catat log. Di OpenClaw, menerima pesan WhatsApp dan mengirim balasan sudah ditangani gateway. Yang saya tulis tinggal script pengambil data dan aturan menjawab.
Langkah 4: pisahkan sesi per pengirim
Di konfigurasi OpenClaw:
{
session: {
dmScope: "per-channel-peer", // satu sesi untuk setiap pengirim per channel
},
}
Ini satu baris yang paling penting di seluruh artikel. Tanpa baris ini, semua calon klien berbagi satu sesi.
Langkah 5: buka DM untuk umum dengan sadar
Bot sales harus bisa menerima chat dari nomor yang belum dikenal. Di OpenClaw, itu berarti channels.whatsapp.dmPolicy: "open", dan dokumentasinya mensyaratkan allowFrom berisi "*". Lakukan langkah ini setelah langkah 4, bukan sebelumnya. Membuka DM untuk umum dengan sesi bersama adalah kombinasi yang membuat data calon klien tercampur.
Langkah 6: uji sebelum dipasang ke nomor sungguhan
Jalankan agent secara lokal dengan profil terpisah, lalu kirim pertanyaan yang sulit: harga yang tidak ada di FAQ, tenggat mustahil, permintaan data orang lain. Simulasi di artikel ini memakai --session-id yang berbeda untuk meniru dua pengirim berbeda.
openclaw --profile demo-sales agent --local --session-id pengirim-a \
-m "halo kak, jasa bikin website company profile berapa ya?"
Checklist sebelum bot sales menerima chat
- Ada satu sumber jawaban (FAQ di backend atau file), bukan salinan di prompt.
- Script pengambil FAQ memakai token dari environment.
- Instruksi agent melarang mengarang harga, diskon, garansi, dan tanggal.
- Ada jalur serah terima ke manusia untuk harga final, kesepakatan, dan jadwal.
session.dmScopesudahper-channel-peer.dmPolicy: "open"danallowFrom: ["*"]baru diaktifkan setelah sesi dipisah.- Sudah diuji dengan pertanyaan di luar FAQ, tenggat mustahil, dan permintaan data orang lain.
- Isi FAQ sudah diperiksa ulang, karena bot akan mengulang apa pun yang tertulis di sana.
Status bot dan isi FAQ
- Ini simulasi, bukan bot yang sedang aktif. Bot versi 17 Oktober sudah saya hapus, dan versi baru belum tersambung ke WhatsApp maupun ke endpoint FAQ produksi. Simulasi memakai agent OpenClaw sungguhan, tapi endpoint FAQ-nya tiruan lokal dengan bentuk respons yang sama dengan backend saya.
- Data FAQ di simulasi diambil dari seeder backend. Isi FAQ di produksi bisa berbeda, dan sebagian kalimat di seeder perlu ditinjau ulang. Contohnya janji garansi 1 sampai 3 bulan, padahal halaman layanan website sudah tidak memakai janji umum seperti itu. Bot akan mengulang apa pun yang ada di FAQ, jadi FAQ-lah yang harus dirapikan lebih dulu.
- Penolakan model di uji sesi bukan jaminan. Dalam simulasi ini model menolak membocorkan data. Percakapan sebelumnya juga sudah membahas kerahasiaan, dan itu mungkin ikut memengaruhi. Dengan kalimat lain atau model lain, hasilnya bisa berbeda. Karena itu pemisahan sesi adalah keharusan, bukan pelengkap.
- Pertanyaan di luar jasa tidak dibahas. Bot ini sengaja dibatasi untuk pertanyaan jasa. Keluhan, pembayaran yang sudah berjalan, atau pertanyaan teknis proyek tetap ke saya langsung.
Dengan bot atau tanpa bot, sepuluh pertanyaan yang paling sering ditanyakan beserta jawaban standarnya adalah yang menentukan seberapa cepat dan konsisten kamu menjawab.
Artikel terkait
Tulisan lain yang nyambung dengan topik ini.
Cara Pakai Bot WhatsApp OpenClaw Buat Orang Awam, Dari Fungsi Sampai Install
Panduan implementasi OpenClaw di WhatsApp untuk orang awam, berbasis pengalaman nyata, dari fungsi, cara kerja, use case, sampai langkah mulai yang aman.


Ternak dan Kolam di Rumah Tanpa Lupa Jadwal: Cara Saya Membagi Tugas antara AI dan Pengingat Biasa
Jadwal penetasan, vitamin, kuras kolam, dan belanja pakan dipindah dari kepala ke satu grup WhatsApp. Bagian mana yang dikerjakan AI, mana yang sengaja tidak, dan templat yang bisa disalin.


Tugas Rutin Tidak Butuh AI: Memindahkan Cek Cuaca dari Agent ke Script, dari 32 Ribu Token ke Nol
Satu cek cuaca oleh agent AI menghabiskan 32 ribu token untuk menjawab diam. Cara mengenali tugas rutin yang cukup ditulis sebagai aturan, memindahkannya ke script, dan angka sebelum dan sesudahnya.
Comments
Komentar akan tampil setelah disetujui.