diff --git a/src/bot/handler.js b/src/bot/handler.js index c3dd188..15d93ba 100644 --- a/src/bot/handler.js +++ b/src/bot/handler.js @@ -1108,6 +1108,7 @@ Digite /help para ver todos os comandos disponíveis! const pppoeLogin = servico.usuario || servico.pppoe_login || servico.login || null; const serial = servico.serial || servico.comodato_serial || servico.mac || null; + const circuitId = servico.dhcp_agent_circuit_id || null; const statusServico = this.topsapp.getStatusServicoDetalhado ? this.topsapp.getStatusServicoDetalhado(servico.id_status) : (servico.status || 'N/A'); @@ -1120,7 +1121,7 @@ Digite /help para ver todos os comandos disponíveis! // Executar consultas em paralelo: Juniper + ONU + GenieACS (por TAG/login) // No concentrador Juniper usa-se só o usuário (antes do @) const pppoeUser = pppoeLogin ? pppoeLogin.split('@')[0] : null; - const [juniperResult, onuResult, genieResult] = await Promise.all([ + let [juniperResult, onuResult, genieResult] = await Promise.all([ pppoeUser ? this.ssh.getJuniperSubscriberInfo('juniper', pppoeUser).catch(e => ({ success: false, error: e.message })) : Promise.resolve({ success: false, skipped: true }), @@ -1132,6 +1133,18 @@ Digite /help para ver todos os comandos disponíveis! : Promise.resolve({ success: false, skipped: true }) ]); + // Fallback: se PPPoE não encontrou sessão ativa e há circuit-id (IPoE), buscar pelo circuit-id + if (circuitId && (!juniperResult.connected)) { + try { + const circuitResult = await this.ssh.getJuniperSubscriberInfo('juniper', circuitId); + if (circuitResult.success && circuitResult.connected) { + juniperResult = { ...circuitResult, viaCircuitId: true }; + } + } catch (e) { + logger.warn(`Fallback circuit-id Juniper falhou: ${e.message}`); + } + } + // Sincronização TAG GenieACS ↔ PPPoE TopSapp (fire-and-forget, silencioso) // Garante que o login PPPoE do cliente fica registrado como TAG no GenieACS, // permitindo buscas futuras por "ver roteador ". @@ -1156,22 +1169,23 @@ Digite /help para ver todos os comandos disponíveis! msg += ` 🔌 Status: ${statusServico}\n`; if (pppoeLogin) msg += ` 👤 Login PPPoE: \`${pppoeLogin}\`\n`; if (servico.dhcp_username) msg += ` 👤 DHCP Username: \`${servico.dhcp_username}\`\n`; - if (servico.dhcp_agent_circuit_id) msg += ` 🔗 Agent Circuit ID: \`${servico.dhcp_agent_circuit_id}\`\n`; + if (circuitId) msg += ` 🔗 Circuit\-ID: \`${circuitId}\`\n`; if (endereco) msg += ` 📍 Endereço: ${endereco}${cidade ? `, ${cidade}` : ''}\n`; msg += '\n'; // Bloco 2: Concentrador Juniper msg += `🌐 *Concentrador Juniper*\n`; - if (juniperResult.skipped) { - msg += ` ⚫ Login PPPoE não informado no cadastro\n`; + if (juniperResult.skipped && !circuitId) { + msg += ` ⚫ Login PPPoE/Circuit\-ID não informado no cadastro\n`; } else if (!juniperResult.success) { msg += ` ⚠️ Erro ao consultar: ${juniperResult.error || 'falha na consulta'}\n`; } else if (juniperResult.connected) { - msg += ` 🟢 *Conectado*\n`; + const modoAuth = juniperResult.viaCircuitId ? 'IPoE/Circuit\-ID' : 'PPPoE'; + msg += ` 🟢 *Conectado* (${modoAuth})\n`; msg += ` 🌐 IP: \`${juniperResult.ip || 'N/A'}\`\n`; msg += ` 🔌 Interface: \`${juniperResult.interface || 'N/A'}\`\n`; } else { - msg += ` 🔴 *Desconectado* (sem sessão PPPoE ativa)\n`; + msg += ` 🔴 *Desconectado* (sem sessão ativa)\n`; } msg += '\n';