Le futur système de plugins permettra des extensions tierces via des hooks de cycle de vie, des rendus personnalisés et des gestionnaires d'actions. Créez des analyses de sentiment, des intégrations CRM, une modération personnalisée—le tout sans modifier le code de base. Environnement isolé pour la sécurité et la stabilité.
Chaque entreprise a des besoins uniques que les solutions génériques ne peuvent pas entièrement satisfaire. Le système de plugin prévu permettra aux développeurs d'étendre la fonctionnalité des widgets avec des capacités personnalisées — sans forker le code ou perdre les chemins de mise à jour.
Les widgets standard ne peuvent pas prédire chaque exigence commerciale. Vous pourriez avoir besoin de :
Les plugins s'enregistrent lors de l'initialisation du widget et reçoivent des rappels à des moments clés du cycle de vie :
onBeforeMessageSend — prétraiter les messages des utilisateurs avant de les envoyer au backendonAfterMessageReceive — post-traiter les réponses de l'IA avant le renduonConversationStart — initialiser l'état du plugin lorsque la conversation commenceonConversationEnd — nettoyer les ressources, enregistrer les analysesonWidgetOpen / onWidgetClose — suivre l'engagement, déclencher des effets secondairesonError — gestion ou rapport d'erreurs personnalisésPréprocesseurs modifient les messages des utilisateurs avant l'envoi :
- Vérification orthographique et correction automatique
- Filtre de grossièretés ou modération de contenu
- Extraction de données (détecter les e-mails, numéros de téléphone, identifiants de commande)
- Détection de sentiment
Postprocesseurs modifient les réponses de l'IA avant le rendu :
- Amélioration Markdown (convertir les tableaux en composants interactifs)
- Enrichissement de liens (prévisualiser les URL, déplier les métadonnées)
- Filtrage de conformité (censurer les informations personnelles identifiables, données financières sensibles)
Les plugins ne peuvent pas compromettre la sécurité ou la stabilité du 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;
}
}
});