core: expandir NLP

Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
rodrigo committed 2026-03-29 16:29:09 -03:00
1 parent c4df157dd4
commit 7aad2f17b6
1 file changed
+166 -31
+166 -31
View File
@@ -2,38 +2,36 @@ class NLPProcessor {
constructor() { constructor() {
// Dicionário de sinônimos para ações // Dicionário de sinônimos para ações
this.actionSynonyms = { this.actionSynonyms = {
'desconectar': ['desconectar', 'desligar', 'parar', 'stop', 'disconnect', 'kick', 'expulsar'], 'desconectar': ['desconectar', 'desligar', 'parar', 'stop', 'disconnect', 'kick', 'expulsar', 'encerrar', 'fechar conexão', 'fechar conexao'],
'desconectar_usuario': ['desconectar cliente', 'desconectar usuário', 'desconectar user', 'kick cliente', 'kick usuário', 'expulsar cliente', 'remover cliente'], 'desconectar_usuario': ['desconectar cliente', 'desconectar usuário', 'desconectar usuario', 'desconectar user', 'kick cliente', 'kick usuário', 'kick usuario', 'expulsar cliente', 'remover cliente', 'tirar cliente', 'cortar usuário', 'cortar usuario'],
'conectar': ['conectar', 'ligar', 'iniciar', 'start', 'connect'], 'conectar': ['conectar', 'ligar', 'iniciar', 'start', 'connect', 'abrir conexão', 'abrir conexao', 'entrar em', 'acessar'],
'reiniciar': ['reiniciar', 'restart', 'reboot', 'reset'], 'reiniciar': ['reiniciar', 'restart', 'reboot', 'reset', 'reinicializar', 'rebotar', 'rebootar', 'dar reboot', 'resetar'],
'status': ['status', 'estado', 'verificar', 'check', 'info'], 'status': ['status', 'estado', 'verificar', 'check', 'info', 'situação', 'situacao', 'checar'],
'help': ['ajuda', 'help', 'socorro', 'comandos'], 'help': ['ajuda', 'help', 'socorro', 'comandos', 'menu', 'opções', 'opcoes', 'o que posso fazer'],
'ssh': ['ssh', 'acessar', 'entrar', 'login'], 'ssh': ['ssh', 'acessar', 'entrar', 'login', 'terminal', 'acesso remoto', 'shell'],
'lista': ['lista', 'listar', 'equipamentos', 'devices', 'list'], 'lista': ['lista', 'listar', 'equipamentos', 'devices', 'list', 'dispositivos', 'mostrar equipamentos'],
'listar_usuarios': ['listar usuários', 'listar clientes', 'usuarios conectados', 'clientes conectados', 'show users'], 'listar_usuarios': ['listar usuários', 'listar usuarios', 'listar clientes', 'usuarios conectados', 'usuarios ativos', 'clientes conectados', 'show users', 'ver usuarios', 'mostrar usuários', 'mostrar usuarios', 'quem está conectado', 'quem ta conectado', 'quem esta conectado', 'ppp active', 'ativos no concentrador'],
'ver_sinal': ['ver sinal', 'verificar sinal', 'sinal', 'check signal', 'signal'], 'ver_sinal': ['ver sinal', 'verificar sinal', 'sinal', 'check signal', 'signal', 'potência onu', 'potencia onu', 'nivel de sinal', 'nível de sinal', 'rx onu', 'ver onu sinal'],
'remover_onu': ['remover onu', 'deletar onu', 'apagar onu', 'remove onu', 'delete onu'], 'remover_onu': ['remover onu', 'deletar onu', 'apagar onu', 'remove onu', 'delete onu', 'tirar onu', 'excluir onu', 'retirar onu', 'desconfigurar onu', 'del onu'],
'adicionar_onu': ['adicionar onu', 'add onu', 'criar onu', 'cadastrar onu', 'registrar onu'], 'adicionar_onu': ['adicionar onu', 'add onu', 'criar onu', 'cadastrar onu', 'registrar onu', 'configurar onu', 'provisionar onu', 'instalar onu', 'nova onu', 'provisionar'],
'adicionar_onu_vlan': ['adicionar onu vlan', 'add onu vlan', 'criar onu vlan', 'cadastrar onu vlan'], 'adicionar_onu_vlan': ['adicionar onu vlan', 'add onu vlan', 'criar onu vlan', 'cadastrar onu vlan', 'adicionar com vlan', 'add com vlan'],
'adicionar_onu_fiberhome': ['adicionar onu fiberhome', 'add onu fiberhome', 'criar onu fiberhome', 'cadastrar onu fiberhome', 'registrar onu fiberhome'], 'adicionar_onu_fiberhome': ['adicionar onu fiberhome', 'add onu fiberhome', 'criar onu fiberhome', 'cadastrar onu fiberhome', 'registrar onu fiberhome', 'fiberhome onu', 'onu fiberhome'],
'remover_onu_fiberhome': ['remover onu fiberhome', 'deletar onu fiberhome', 'apagar onu fiberhome', 'remove onu fiberhome', 'delete onu fiberhome'], 'remover_onu_fiberhome': ['remover onu fiberhome', 'deletar onu fiberhome', 'apagar onu fiberhome', 'remove onu fiberhome', 'delete onu fiberhome', 'tirar onu fiberhome'],
'ping': ['ping', 'testar', 'test', 'conectividade'], 'ping': ['ping', 'testar', 'test', 'conectividade', 'alcançável', 'alcancavel', 'latência', 'latencia'],
'admin': ['admin', 'administração', 'administracao', 'painel'], 'admin': ['admin', 'administração', 'administracao', 'painel', 'configurações', 'configuracoes', 'gerenciar'],
'usuarios_autorizados': ['usuarios autorizados', 'users autorizados', 'lista usuarios', 'listar usuarios autorizados'], 'usuarios_autorizados': ['usuarios autorizados', 'users autorizados', 'lista usuarios', 'listar usuarios autorizados'],
'meu_id': ['meu id', 'meu user id', 'my id', 'user id', 'minha id'], 'meu_id': ['meu id', 'meu user id', 'my id', 'user id', 'minha id', 'qual meu id', 'meu telegram id'],
'buscar_cliente': ['buscar cliente', 'procurar cliente', 'encontrar cliente', 'search cliente', 'cliente'], 'buscar_cliente': ['buscar cliente', 'procurar cliente', 'encontrar cliente', 'search cliente', 'cliente', 'ver cliente', 'consultar cliente', 'pesquisar cliente', 'localizar cliente', 'achar cliente'],
'ver_faturas': ['ver faturas', 'ver fatura', 'faturas', 'fatura', 'boletos', 'boleto', 'contas'], 'ver_faturas': ['ver faturas', 'ver fatura', 'faturas', 'fatura', 'boletos', 'boleto', 'contas', 'débitos', 'debitos', 'pendências', 'pendencias', 'financeiro cliente', 'em aberto', 'inadimplência', 'inadimplencia', 'mensalidade', 'vencimento', 'segunda via'],
'gerar_boleto': ['gerar boleto', 'boleto', 'criar boleto', 'pdf boleto', 'imprimir boleto'], 'gerar_boleto': ['gerar boleto', 'boleto', 'criar boleto', 'pdf boleto', 'imprimir boleto', 'emitir boleto', 'segunda via boleto', 'segunda via fatura'],
'bloquear_cliente': ['bloquear cliente', 'bloquear', 'suspender cliente', 'cortar cliente'], 'bloquear_cliente': ['bloquear cliente', 'bloquear', 'suspender cliente', 'cortar cliente', 'cortar internet', 'suspender acesso', 'desativar cliente', 'suspender internet'],
'liberar_cliente': ['liberar cliente', 'liberar', 'desbloquear cliente', 'reconectar cliente'], 'liberar_cliente': ['liberar cliente', 'liberar', 'desbloquear cliente', 'reconectar cliente', 'reativar cliente', 'religar cliente', 'reativar', 'religar internet', 'tirar bloqueio', 'desbloquear'],
'status_topsapp': ['status topsapp', 'verificar topsapp', 'topsapp status', 'topsapp'], 'status_topsapp': ['status topsapp', 'verificar topsapp', 'topsapp status', 'topsapp'],
'status_onu': ['status onu', 'verificar onu', 'onu status', 'check onu', 'status ont', 'ont status'], 'status_onu': ['status onu', 'verificar onu', 'onu status', 'check onu', 'status ont', 'ont status', 'checar onu', 'info onu', 'informações onu', 'informacoes onu', 'dados onu'],
'fiberhome_status': ['fiberhome status', 'status fiberhome', 'conexões fiberhome', 'fiberhome conexoes'], 'fiberhome_status': ['fiberhome status', 'status fiberhome', 'conexões fiberhome', 'fiberhome conexoes', 'fiberhome conectado'],
'dados_cliente': ['dados cliente', 'dados cadastrais', 'cadastro cliente', 'informações cliente', 'info cliente'], 'dados_cliente': ['dados cliente', 'dados cadastrais', 'cadastro cliente', 'informações cliente', 'info cliente', 'perfil cliente', 'ficha cliente', 'registro cliente', 'ver dados'],
'listar_servicos': ['listar serviços', 'servicos cliente', 'planos cliente', 'contratos cliente', 'ver servicos'], 'listar_servicos': ['listar serviços', 'servicos cliente', 'planos cliente', 'contratos cliente', 'ver servicos', 'plano cliente', 'assinaturas', 'planos', 'serviços ativos', 'ver plano'],
'abrir_suporte': ['abrir suporte', 'criar suporte', 'adicionar suporte', 'novo suporte', 'suporte', 'atendimento', 'chamado', 'ticket'], 'abrir_suporte': ['abrir suporte', 'criar suporte', 'adicionar suporte', 'novo suporte', 'suporte', 'chamado', 'ticket', 'atendimento', 'suporte tecnico', 'atendimento tecnico', 'abrir chamado', 'registrar chamado', 'criar chamado', 'visita tecnica', 'agendar visita', 'reclamação', 'reclamacao']
'adicionar_suporte': ['abrir suporte', 'criar suporte', 'adicionar suporte', 'novo suporte', 'suporte tecnico', 'atendimento tecnico'],
'abrir_suporte': ['abrir suporte', 'criar suporte', 'adicionar suporte', 'novo suporte', 'suporte', 'chamado', 'ticket', 'atendimento']
}; };
// Padrões de comandos // Padrões de comandos
@@ -86,7 +84,21 @@ class NLPProcessor {
/^(reiniciar|restart)\s+(.+)$/i, /^(reiniciar|restart)\s+(.+)$/i,
/^(verificar|check)\s+(status\s+)?(.+)$/i, /^(verificar|check)\s+(status\s+)?(.+)$/i,
/^ssh\s+(.+)$/i, /^ssh\s+(.+)$/i,
/^ping\s+(.+)$/i /^ping\s+(.+)$/i,
// Segunda via / emitir boleto com identificador
/^(segunda\s+via|emitir\s+boleto|2[aª]?\s*via)\s+(.+)$/i,
// Reativar / religar / desbloquear → liberar_cliente
/^(reativar|religar|ativar|desbloquear)\s+(.+)$/i,
// Cortar / suspender com alvo (exceto "usuario/user/cliente")
/^(cortar|suspender)\s+(?!usu|cli|sess)(.+)$/i,
// Plano / serviço / contrato de cliente → listar_servicos
/^(planos?|servi[çc]os?|contratos?)\s+(?:de\s+|do\s+|da\s+)?(.+)$/i,
// Ficha / perfil de cliente → dados_cliente
/^(ficha|perfil)\s+(?:de\s+|do\s+|da\s+)?(.+)$/i,
// Consultar / pesquisar / localizar / achar cliente
/^(consultar|pesquisar|localizar|achar)\s+(?:cliente|user)\s+(.+)$/i,
// Quem está conectado → listar_usuarios
/^(quem)\s+(?:está|esta|tá|ta)\s+conectado.*$/i
]; ];
} }
@@ -501,6 +513,82 @@ class NLPProcessor {
}; };
} }
// Detectar segunda via / emitir boleto
if (/segunda\s*via|emitir\s*boleto|2[aª]?\s*via/i.test(action) || /segunda\s*via|2[aª]?\s*via/i.test(fullMatch)) {
const query = match[2] || match[1];
return {
action: 'gerar_boleto',
target: query ? query.trim() : null,
confidence: 0.9,
type: 'segunda_via_pattern'
};
}
// Detectar reativar / religar / desbloquear → liberar_cliente
if (/^(reativar|religar|ativar|desbloquear)$/i.test(action)) {
const query = match[2] || match[1];
return {
action: 'liberar_cliente',
target: query ? query.trim() : null,
confidence: 0.9,
type: 'liberar_pattern'
};
}
// Detectar cortar / suspender → bloquear_cliente
if (/^(cortar|suspender)$/i.test(action)) {
const query = match[2] || match[1];
return {
action: 'bloquear_cliente',
target: query ? query.trim() : null,
confidence: 0.9,
type: 'bloquear_pattern'
};
}
// Detectar plano / serviço / contrato → listar_servicos
if (/^(planos?|servi[çc]os?|contratos?)$/i.test(action)) {
const query = match[2] || match[1];
return {
action: 'listar_servicos',
target: query ? query.trim() : null,
confidence: 0.9,
type: 'servicos_pattern'
};
}
// Detectar ficha / perfil → dados_cliente
if (/^(ficha|perfil)$/i.test(action)) {
const query = match[2] || match[1];
return {
action: 'dados_cliente',
target: query ? query.trim() : null,
confidence: 0.9,
type: 'dados_perfil_pattern'
};
}
// Detectar quem está conectado → listar_usuarios
if (/^quem$/i.test(action) && /conectado/i.test(fullMatch)) {
return {
action: 'listar_usuarios',
target: 'concentrador',
confidence: 0.95,
type: 'list_users_quem_pattern'
};
}
// Detectar consultar / pesquisar / localizar / achar → buscar_cliente
if (/^(consultar|pesquisar|localizar|achar)$/i.test(action) && /cliente|user/i.test(fullMatch)) {
const query = match[2] || match[1];
return {
action: 'buscar_cliente',
target: query ? query.trim() : null,
confidence: 0.9,
type: 'buscar_cliente_extra_pattern'
};
}
// Padrões gerais // Padrões gerais
const normalizedAction = this.normalizeAction(action); const normalizedAction = this.normalizeAction(action);
const target = match[match.length - 1]; // Último grupo capturado const target = match[match.length - 1]; // Último grupo capturado
@@ -558,6 +646,53 @@ class NLPProcessor {
} }
} }
// Detectar reativar / religar / desbloquear → liberar_cliente
if (/reativar|religar|desbloquear|tirar\s+bloqueio/i.test(text)) {
const rlMatch = text.match(/(?:reativar|religar|desbloquear)\s+(.+)/i);
if (rlMatch) {
return {
action: 'liberar_cliente',
target: rlMatch[1].trim(),
confidence: 0.85,
type: 'keyword_liberar'
};
}
}
// Detectar "quem está/ta conectado" → listar_usuarios
if (/quem\s+(?:está|esta|tá|ta)\s+conectado/i.test(text)) {
return {
action: 'listar_usuarios',
target: 'concentrador',
confidence: 0.95,
type: 'keyword_quem_conectado'
};
}
// Detectar segunda via → gerar_boleto
if (/segunda\s*via|2[aª]\s*via/i.test(text)) {
const svMatch = text.match(/(?:segunda\s*via|2[aª]\s*via)\s*(.*)/i);
return {
action: 'gerar_boleto',
target: svMatch && svMatch[1] ? svMatch[1].trim() : null,
confidence: 0.9,
type: 'keyword_segunda_via'
};
}
// Detectar cortar internet / suspender acesso → bloquear_cliente
if (/cortar\s+internet|suspender\s+(?:cliente|acesso|internet)/i.test(text)) {
const blMatch = text.match(/(?:cortar|suspender)\s+(?:internet|acesso|cliente)?\s*(.+)?/i);
if (blMatch && blMatch[1]) {
return {
action: 'bloquear_cliente',
target: blMatch[1].trim(),
confidence: 0.85,
type: 'keyword_bloquear'
};
}
}
// Procurar por ações conhecidas // Procurar por ações conhecidas
for (const [action, synonyms] of Object.entries(this.actionSynonyms)) { for (const [action, synonyms] of Object.entries(this.actionSynonyms)) {
for (const synonym of synonyms) { for (const synonym of synonyms) {