El futuro sistema de complementos permitirá extensiones de terceros a través de ganchos de ciclo de vida, renderizadores personalizados y controladores de acciones. Crea análisis de sentimientos, integraciones de CRM, moderación personalizada, todo sin modificar el código base. Aislado para seguridad y estabilidad.
Cada negocio tiene necesidades únicas que las soluciones genéricas no pueden abordar completamente. El sistema de plugins planeado permitirá a los desarrolladores extender la funcionalidad de los widgets con capacidades personalizadas, sin necesidad de bifurcar el código o perder rutas de actualización.
Los widgets estándar no pueden predecir todos los requisitos comerciales. Podrías necesitar:
Los plugins se registran durante la inicialización del widget y reciben callbacks en momentos clave del ciclo de vida:
onBeforeMessageSend — preprocesar mensajes de usuario antes de enviarlos al backendonAfterMessageReceive — postprocesar respuestas de IA antes de renderizarlasonConversationStart — inicializar el estado del plugin cuando comienza la conversaciónonConversationEnd — limpiar recursos, registrar análisisonWidgetOpen / onWidgetClose — rastrear el compromiso, activar efectos secundariosonError — manejo o reporte de errores personalizadosPreprocesadores modifican los mensajes de usuario antes de enviarlos:
- Corrección ortográfica y autocorrección
- Filtro de contenido o moderación de lenguaje ofensivo
- Extracción de datos (detectar correos electrónicos, números de teléfono, IDs de pedidos)
- Detección de sentimientos
Postprocesadores modifican las respuestas de IA antes de renderizarlas:
- Mejora de Markdown (convertir tablas en componentes interactivos)
- Enriquecimiento de enlaces (previsualizar URLs, desplegar metadatos)
- Filtrado de cumplimiento (redactar PII, datos financieros sensibles)
Los plugins no pueden comprometer la seguridad o estabilidad 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;
}
}
});