Sistem plugin masa depan akan memungkinkan ekstensi pihak ketiga melalui hook siklus hidup, renderer kustom, dan penangan aksi. Bangun analisis sentimen, integrasi CRM, moderasi kustom — semua tanpa memodifikasi kode inti. Terisolasi untuk keamanan dan stabilitas.
Setiap bisnis memiliki kebutuhan unik yang tidak dapat dipenuhi sepenuhnya oleh solusi generik. Sistem plugin yang direncanakan akan memungkinkan pengembang untuk memperluas fungsionalitas widget dengan kemampuan kustom — tanpa memisahkan kode atau kehilangan jalur pembaruan.
Widget standar tidak dapat memprediksi setiap persyaratan bisnis. Anda mungkin memerlukan:
Plugin mendaftar selama inisialisasi widget dan menerima callback pada momen siklus hidup kunci:
onBeforeMessageSend — memproses pesan pengguna sebelum mengirim ke backendonAfterMessageReceive — memproses respons AI sebelum merenderonConversationStart — menginisialisasi status plugin saat percakapan dimulaionConversationEnd — membersihkan sumber daya, mencatat analitikonWidgetOpen / onWidgetClose — melacak keterlibatan, memicu efek sampingonError — penanganan atau pelaporan kesalahan kustomPreprocessor memodifikasi pesan pengguna sebelum mengirim:
- Pemeriksaan ejaan dan koreksi otomatis
- Filter kata kasar atau moderasi konten
- Ekstraksi data (mendeteksi email, nomor telepon, ID pesanan)
- Deteksi sentimen
Postprocessor memodifikasi respons AI sebelum merender:
- Peningkatan markdown (mengonversi tabel menjadi komponen interaktif)
- Enrichment tautan (prabaca URL, mengungkap metadata)
- Penyaringan kepatuhan (menyunting PII, data keuangan sensitif)
Plugin tidak dapat mengkompromikan keamanan atau stabilitas widget:
WidgetSDK.registerPlugin({
name: 'sentiment-analyzer',
version: '1.0.0',
hooks: {
onBeforeMessageSend: async (message, context) => {
const sentiment = await analyzeSentiment(message.text);
return { ...message, metadata: { sentiment } };
},
onAfterMessageReceive: (message, context) => {
if (message.metadata?.sentiment < -0.5) {
context.escalateToHuman(message);
}
return message;
}
}
});