O futuro sistema de plugins permitirá extensões de terceiros por meio de hooks de ciclo de vida, renderizadores personalizados e manipuladores de ação. Crie análise de sentimento, integrações de CRM, moderação personalizada — tudo sem modificar o código principal. Isolado para segurança e estabilidade.
Cada negócio tem necessidades únicas que soluções genéricas não conseguem atender completamente. O planejado sistema de plugins permitirá que os desenvolvedores estendam a funcionalidade do widget com capacidades personalizadas — sem bifurcar o código ou perder caminhos de atualização.
Widgets padrão não conseguem prever todos os requisitos de negócios. Você pode precisar:
Plugins se registram durante a inicialização do widget e recebem callbacks em momentos-chave do ciclo de vida:
onBeforeMessageSend — pré-processar mensagens de usuários antes de enviar para o backendonAfterMessageReceive — pós-processar respostas de IA antes da renderizaçãoonConversationStart — inicializar o estado do plugin quando a conversa começaonConversationEnd — limpar recursos, registrar análisesonWidgetOpen / onWidgetClose — rastrear engajamento, acionar efeitos colateraisonError — manipulação ou relatório de erro personalizadoPré-processadores modificam mensagens de usuários antes de enviar:
- Verificação ortográfica e autocorreção
- Filtro de profanidade ou moderação de conteúdo
- Extração de dados (detectar e-mails, números de telefone, IDs de pedidos)
- Detecção de sentimento
Pós-processadores modificam respostas de IA antes da renderização:
- Aprimoramento de Markdown (converter tabelas em componentes interativos)
- Enriquecimento de links (visualizar URLs, desdobrar metadados)
- Filtragem de conformidade (redigir PII, dados financeiros sensíveis)
Plugins não podem comprometer a segurança ou estabilidade do 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;
}
}
});