Penjelasan Teknis Multi-Channel Chatbot
Halaman ini menjelaskan bagaimana satu cabang bisa membuka WhatsApp, Telegram, dan Discord sekaligus, tetapi tetap memakai menu, promo, currency, dan dashboard cabang yang sama.
1. Konsep Inti
Satu branch_id dapat memiliki beberapa channel aktif sekaligus. Channel hanya menjadi pintu masuk pesan, sedangkan business logic tetap dipusatkan di ChatbotEngine.
Customer -> Channel Webhook -> Provider Adapter -> ChatbotEngine -> Reply
2. Channel yang Didukung
- web: chat widget di website
- whatsapp: Fonnte, Wablas, Meta Cloud API
- telegram: Telegram Bot webhook
- discord: Discord slash command / interaction webhook
3. Mapping per Cabang
Untuk satu cabang, semua channel tetap mengarah ke data branch yang sama: menu, promo, bahasa, mata uang, PPN, dan dashboard order.
Branch 2 (Bandung)
- WhatsApp -> /api/whatsapp/webhook.php?branch=2
- Telegram -> /api/channel/webhook.php?channel=telegram
- Discord -> /api/channel/webhook.php?channel=discord
4. Tabel Konfigurasi
- branch_whatsapp_settings: khusus provider WhatsApp
- branch_bot_settings: dipakai fallback migrasi dari core lama
- plugin_branch_settings: konfigurasi channel plugin seperti Telegram dan Discord baru
WhatsApp dipisah karena sudah punya beberapa adapter legacy. Telegram dan Discord sekarang bisa berjalan penuh sebagai plugin, dengan fallback baca setting lama saat migrasi.
5. Reuse ChatbotEngine
Semua channel pada akhirnya memanggil method yang sama:
$engine->process($channel, $branchId, $customerIdentifier, $message);
Artinya fitur menu, cart, promo, checkout, variant, topping, dan order history tidak perlu dibuat ulang per platform.
6. Isolasi Customer & Cart
Session key dibangun dari channel, branch, dan identifier customer. Karena itu, customer yang sama di WhatsApp dan Telegram akan dianggap dua sesi yang berbeda.
hash('sha256', "{$channel}:{$branchId}:{$identifier}")
7. Dampaknya ke Order
- cart WhatsApp tidak bercampur dengan cart Telegram
- riwayat customer tetap tersimpan per channel
- order tetap masuk ke cabang yang sama
- dashboard bisa melihat channel asal order
8. Contoh Implementasi Cabang
Cabang Surabaya
- WhatsApp: aktif
- Telegram: aktif
- Discord: aktif
Semua memakai:
- menu Surabaya
- promo Surabaya
- currency Surabaya
- dashboard order Surabaya
Telegram juga bisa dipasang sebagai satu bot host untuk semua cabang. Dalam mode itu, customer memilih cabang di awal chat lalu percakapan diarahkan ke cabang terpilih.
Discord juga mendukung mode yang sama: satu bot per cabang atau satu bot host untuk semua cabang aktif.
9. Batasan Saat Ini
- Telegram dan Discord sekarang dikonfigurasi dari halaman Settings branch lewat plugin.
- Discord saat ini dirancang untuk interaction/slash command, bukan membaca semua chat channel bebas.
- Belum ada account linking lintas channel secara native.
10. Checklist Aktivasi
- Pastikan branch aktif dan menu cabang sudah siap.
- Aktifkan provider WhatsApp bila perlu di branch_whatsapp_settings.
- Untuk Telegram, aktifkan plugin dan isi token di halaman Settings cabang.
- Untuk Discord, aktifkan plugin dan isi token di halaman Settings cabang.
- Daftarkan webhook masing-masing channel ke endpoint yang sesuai.
- Uji masing-masing channel untuk memastikan reply memakai branch yang sama.