Il futuro sistema di plugin abiliterà estensioni di terze parti tramite hook di ciclo di vita, renderer personalizzati e gestori di azioni. Costruisci analisi del sentiment, integrazioni CRM, moderazione personalizzata — tutto senza modificare il codice principale. Sandboxed per sicurezza e stabilità.
Ogni azienda ha esigenze uniche che le soluzioni generiche non possono affrontare completamente. Il pianificato sistema di plugin consentirà agli sviluppatori di estendere la funzionalità del 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 — preprocessa i messaggi degli utenti prima di inviarli al backendonAfterMessageReceive — postprocessa le risposte AI prima del renderingonConversationStart — inizializza lo stato del plugin quando inizia la conversazioneonConversationEnd — pulisce le risorse, registra analisionWidgetOpen / onWidgetClose — traccia il coinvolgimento, 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 URL, espandi metadati)
- Filtraggio 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;
}
}
});