From 259e48fa421c131c1a4fa25d9f52b33cb605073e Mon Sep 17 00:00:00 2001 From: Rodrigo Bertoldo de Sousa Martins Date: Tue, 10 Feb 2026 19:11:21 -0300 Subject: [PATCH] fiberhome: add prelimunary add ONU support Signed-off-by: Rodrigo Bertoldo de Sousa Martins --- src/bot/handler.js | 141 ++++++++++++++++++++++++--------------------- 1 file changed, 74 insertions(+), 67 deletions(-) diff --git a/src/bot/handler.js b/src/bot/handler.js index 747b69a..b23e934 100644 --- a/src/bot/handler.js +++ b/src/bot/handler.js @@ -2,6 +2,7 @@ const NLPProcessor = require('../nlp/processor'); const SSHManager = require('../ssh/manager'); const { TopSappManager } = require('../topsapp'); const FiberhomeManager = require('../fiberhome/manager'); +const FiberhomeTL1Manager = require('../fiberhome/manager_tl1'); const config = require('../config/config'); const logger = require('../utils/logger'); const DateProcessor = require('../utils/dateProcessor'); @@ -13,6 +14,7 @@ class BotHandler { this.ssh = new SSHManager(); this.topsapp = new TopSappManager(); this.fiberhome = new FiberhomeManager(); + this.fiberhomeTL1 = new FiberhomeTL1Manager(); this.dateProcessor = new DateProcessor(); this.userSessions = new Map(); // Armazena sessões de usuário this.suporteSessions = new Map(); // Armazena sessões de suporte em andamento @@ -1081,6 +1083,8 @@ Digite /help para ver todos os comandos disponíveis! return; } + console.log(`📝 Criando sessão para usuário ${userId}, serial: ${serialNumber}`); + // Criar sessão para coletar informações this.userSessions.set(userId, { action: 'adicionar_onu_fiberhome_step1', @@ -1088,6 +1092,8 @@ Digite /help para ver todos os comandos disponíveis! timestamp: Date.now() }); + console.log(`✅ Sessão criada. Sessões ativas:`, this.userSessions.size); + // Perguntar o alias/nome do usuário await this.bot.sendMessage(chatId, `➕ **Adicionar ONU Fiberhome**\n\n` + @@ -1103,57 +1109,76 @@ Digite /help para ver todos os comandos disponíveis! */ async handleUserSessionInput(chatId, text, userId, session) { try { - switch (session.action) { - case 'adicionar_onu_fiberhome_step1': - // Recebeu o nome do usuário, agora perguntar pelo tipo da ONU - session.usuario = text.trim(); - session.action = 'adicionar_onu_fiberhome_step2'; - this.userSessions.set(userId, session); + console.log(`🔄 Processando input de sessão. Action: ${session.action}, Type: ${session.type}, Text: ${text}`); + + // Verificar se é sessão baseada em action (Fiberhome ONU) + if (session.action) { + switch (session.action) { + case 'adicionar_onu_fiberhome_step1': + // Recebeu o nome do usuário, agora perguntar pelo tipo da ONU + session.usuario = text.trim(); + session.action = 'adicionar_onu_fiberhome_step2'; + this.userSessions.set(userId, session); - const keyboard = { - inline_keyboard: [ - [{ text: '🔌 AN5506-02-B (2 portas)', callback_data: 'fh_onu_type_AN5506-02-B' }], - [{ text: '🔌 AN5506-01-A (1 porta)', callback_data: 'fh_onu_type_AN5506-01-A' }], - [{ text: '❌ Cancelar', callback_data: 'cancel_action' }] - ] - }; + const keyboard = { + inline_keyboard: [ + [{ text: '🔌 AN5506-02-B (2 portas)', callback_data: 'fh_onu_type_AN5506-02-B' }], + [{ text: '🔌 AN5506-01-A (1 porta)', callback_data: 'fh_onu_type_AN5506-01-A' }], + [{ text: '❌ Cancelar', callback_data: 'cancel_action' }] + ] + }; - await this.bot.sendMessage(chatId, - `📡 **Porta PON:** ${session.portAlias}\n\n` + - '🔌 Selecione o **tipo da ONU**:', - { reply_markup: keyboard, parse_mode: 'Markdown' } - ); - break; + await this.bot.sendMessage(chatId, + `👤 **Usuário:** ${session.usuario}\n\n` + + '🔌 Selecione o **tipo da ONU**:', + { reply_markup: keyboard, parse_mode: 'Markdown' } + ); + return; - case 'adicionar_onu_fiberhome_step5': - // Recebeu confirmação de VLAN customizada - const vlanInput = text.trim(); - - if (vlanInput && !isNaN(vlanInput)) { - const vlan = parseInt(vlanInput); - if (vlan >= 1 && vlan <= 4094) { - session.vlan = vlan; + case 'adicionar_onu_fiberhome_step3': + // Recebeu confirmação de VLAN customizada + const vlanInput = text.trim(); + + if (vlanInput && !isNaN(vlanInput)) { + const vlan = parseInt(vlanInput); + if (vlan >= 1 && vlan <= 4094) { + session.vlan = vlan; + } else { + await this.bot.sendMessage(chatId, '❌ VLAN inválida. Usando VLAN padrão 1002.'); + session.vlan = 1002; + } } else { - await this.bot.sendMessage(chatId, '❌ VLAN inválida. Usando VLAN padrão 1002.'); session.vlan = 1002; } - } else { - session.vlan = 1002; - } - // Limpar sessão - this.userSessions.delete(userId); + // Limpar sessão + this.userSessions.delete(userId); - // Executar adição da ONU - await this.executarAdicaoOnuFiberhome(chatId, session); - break; - - default: - // Sessão desconhecida, limpar - this.userSessions.delete(userId); - await this.bot.sendMessage(chatId, '❌ Sessão expirada. Por favor, comece novamente.'); - break; + // Executar adição da ONU + await this.executarAdicaoOnuFiberhome(chatId, session); + return; + } } + + // Verificar se é sessão baseada em type (outros fluxos) + if (session.type) { + switch (session.type) { + case 'waiting_custom_command': + await this.executeCustomCommand(chatId, session.connectionId, text); + this.userSessions.delete(userId); + return; + + case 'waiting_username_disconnect': + await this.handleDisconnectUser(chatId, text.trim()); + this.userSessions.delete(userId); + return; + } + } + + // Estado desconhecido + console.log(`❓ Estado de sessão desconhecido: action=${session.action}, type=${session.type}`); + this.userSessions.delete(userId); + await this.bot.sendMessage(chatId, '❓ Estado de sessão desconhecido. Tente novamente.'); } catch (error) { console.error('❌ Erro ao processar input da sessão:', error); this.userSessions.delete(userId); @@ -1179,7 +1204,7 @@ Digite /help para ver todos os comandos disponíveis! ); // Executar comando TL1 via Fiberhome Manager - const resultado = await this.fiberhome.adicionarOnuFiberhome( + const resultado = await this.fiberhomeTL1.adicionarOnuFiberhome( serial, usuario, vlan, @@ -1548,25 +1573,8 @@ Digite /help para ver todos os comandos disponíveis! } /** - * Lida com input de usuário durante sessões específicas + * MÉTODO REMOVIDO - handleUserSessionInput duplicado foi mesclado acima */ - async handleUserSessionInput(chatId, text, userId, session) { - switch (session.type) { - case 'waiting_custom_command': - await this.executeCustomCommand(chatId, session.connectionId, text); - break; - - case 'waiting_username_disconnect': - await this.handleDisconnectUser(chatId, text.trim()); - break; - - default: - await this.bot.sendMessage(chatId, '❓ Estado de sessão desconhecido. Tente novamente.'); - } - - // Limpar sessão - this.userSessions.delete(userId); - } /** * Executa comando personalizado em uma conexão SSH @@ -2639,7 +2647,7 @@ Digite /help para ver todos os comandos disponíveis! // Recuperar sessão const session = this.userSessions.get(userId); - if (!session || session.action !== 'adicionar_onu_fiberhome_step4') { + if (!session || session.action !== 'adicionar_onu_fiberhome_step2') { await this.bot.answerCallbackQuery(callbackQuery.id, '❌ Sessão expirada'); await this.bot.sendMessage(chatId, '❌ Sessão expirada. Por favor, comece novamente.'); this.userSessions.delete(userId); @@ -2647,6 +2655,8 @@ Digite /help para ver todos os comandos disponíveis! } session.onuType = onuType; + session.action = 'adicionar_onu_fiberhome_step3'; + this.userSessions.set(userId, session); await this.bot.answerCallbackQuery(callbackQuery.id); @@ -2681,7 +2691,7 @@ Digite /help para ver todos os comandos disponíveis! // Recuperar sessão const session = this.userSessions.get(userId); - if (!session || session.action !== 'adicionar_onu_fiberhome_step2') { + if (!session || session.action !== 'adicionar_onu_fiberhome_step3') { await this.bot.answerCallbackQuery(callbackQuery.id, '❌ Sessão expirada'); await this.bot.sendMessage(chatId, '❌ Sessão expirada. Por favor, comece novamente.'); this.userSessions.delete(userId); @@ -2701,10 +2711,7 @@ Digite /help para ver todos os comandos disponíveis! await this.executarAdicaoOnuFiberhome(chatId, session); } else if (data === 'fh_vlan_custom') { - // Pedir VLAN customizada - session.action = 'adicionar_onu_fiberhome_step3'; - this.userSessions.set(userId, session); - + // Pedir VLAN customizada - manter sessão no step3 para receber input do usuário await this.bot.editMessageText( `🏷️ **VLAN Customizada**\n\n` + `Digite o número da VLAN que deseja usar (1-4094):`,