Il futuro sistema di plugin abiliterà estensioni di terze parti tramite hook del ciclo di vita, renderer personalizzati e gestori di azioni. Costruisci analisi del sentiment, integrazioni CRM, moderazione personalizzata—tutto senza modificare il codice di base. Isolato per sicurezza e stabilità.
Ogni azienda ha esigenze uniche che le soluzioni generiche non possono affrontare completamente. Il sistema di plugin pianificato consentirà agli sviluppatori di estendere la funzionalità dei widget con capacità personalizzate — senza forkare il codice o perdere percorsi di aggiornamento.
I widget standard non possono prevedere ogni requisito aziendale. Potresti aver bisogno di:
I plugin si registrano durante l'inizializzazione del widget e ricevono callback in momenti chiave del ciclo di vita:
onBeforeMessageSend — pre-processa i messaggi degli utenti prima di inviarli al backendonAfterMessageReceive — post-processa le risposte AI prima del renderingonConversationStart — inizializza lo stato del plugin quando inizia la conversazioneonConversationEnd — pulisce le risorse, registra le analisionWidgetOpen / onWidgetClose — traccia l'engagement, attiva effetti collateralionError — gestione o segnalazione degli errori personalizzatiPreprocessori modificano i messaggi degli utenti prima dell'invio:
- Controllo ortografico e correzione automatica
- Filtro di volgarità o moderazione dei contenuti
- Estrazione dei dati (rileva email, numeri di telefono, ID ordine)
- Rilevamento del sentiment
Postprocessori modificano le risposte AI prima del rendering:
- Miglioramento del Markdown (converti tabelle in componenti interattivi)
- Arricchimento dei link (anteprima degli URL, espandi i metadati)
- Filtro di conformità (redigi PII, dati finanziari sensibili)
I plugin non possono compromettere la sicurezza o la stabilità del 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;
}
}
});