diff --git a/src/bot/handler.js b/src/bot/handler.js index 9bb2b9f..91f0ee4 100644 --- a/src/bot/handler.js +++ b/src/bot/handler.js @@ -1231,6 +1231,7 @@ Digite /help para ver todos os comandos disponíveis! const cidade = servico.instalacao_cidade || null; // Campo base/AP usado para rotear para a OLT correta const baseInfo = servico.base || (servico.id_ap ? `AP ${servico.id_ap}` : null); + const idAp = servico.id_ap !== undefined ? servico.id_ap : null; // Executar consultas em paralelo: Juniper + ONU + GenieACS (por TAG/login) // No concentrador Juniper usa-se só o usuário (antes do @) @@ -1242,7 +1243,7 @@ Digite /help para ver todos os comandos disponíveis! ? this.ssh.getJuniperSubscriberInfo(juniperId, pppoeUser).catch(e => ({ success: false, error: e.message })) : Promise.resolve({ success: false, skipped: true }), serial - ? this._diagnosticarONU(serial, baseInfo, activeSite.id).catch(e => ({ success: false, error: e.message })) + ? this._diagnosticarONU(serial, baseInfo, activeSite.id, idAp).catch(e => ({ success: false, error: e.message })) : Promise.resolve({ success: false, skipped: true }), pppoeLogin && this.genieacs.isReady() ? this.genieacs.buscarRoteador(pppoeLogin).catch(() => ({ success: false })) @@ -1393,10 +1394,20 @@ Digite /help para ver todos os comandos disponíveis! } /** - * Mapeia o campo base/AP do TopSapp para o ID da OLT Datacom (ou 'fiberhome') + * Mapeia o campo base/AP (e o id_ap) do TopSapp para o ID da OLT Datacom (ou 'fiberhome') * As bases DITO/COLMEIA/CANAA só existem em Guaraí; em outro site, ignora a dica. + * Em Pedro Afonso a base "DOBLERNET FIBRA ÓPTICA" é compartilhada por duas OLTs + * (Pedro Afonso e Canavieiras) — a única forma de saber qual delas é o id_ap: + * id_ap 2 = OLT Pedro Afonso, id_ap 4 = OLT Canavieiras. */ - _resolverOLTporBase(baseInfo, siteId = 'guarai') { + _resolverOLTporBase(baseInfo, siteId = 'guarai', idAp = null) { + if (siteId === 'pedro_afonso') { + const ap = idAp !== null && idAp !== undefined ? String(idAp) : null; + if (ap === '2') return 'olt_pedro_afonso'; + if (ap === '4') return 'olt_canavieiras'; + return null; + } + if (!baseInfo) return null; const b = String(baseInfo).toUpperCase(); if (/INTERNET\s+FIBRA\s+OPTICA/i.test(b)) return 'fiberhome'; @@ -1413,10 +1424,11 @@ Digite /help para ver todos os comandos disponíveis! * @param {string} serial - Serial da ONU * @param {string|null} baseInfo - Campo base/AP do TopSapp para rotear para OLT correta * @param {string} siteId - Cidade/provedor ativo, usado para restringir a busca + * @param {number|string|null} idAp - id_ap do TopSapp (necessário em Pedro Afonso) */ - async _diagnosticarONU(serial, baseInfo, siteId = 'guarai') { + async _diagnosticarONU(serial, baseInfo, siteId = 'guarai', idAp = null) { const serialUpper = serial.toUpperCase(); - const oltHint = this._resolverOLTporBase(baseInfo, siteId); + const oltHint = this._resolverOLTporBase(baseInfo, siteId, idAp); // Usar base description para decidir se é FiberHome if (oltHint === 'fiberhome' || @@ -8857,6 +8869,7 @@ Digite /help para ver todos os comandos disponíveis! async _confirmarReiniciarOnu(chatId, idCliente, servico, location) { const serial = servico.serial || servico.comodato_serial || servico.mac || ''; const base = servico.base || ''; + const idAp = servico.id_ap !== undefined ? servico.id_ap : null; const nome = servico.descricao || servico.nome || 'Serviço'; if (!serial) { @@ -8864,14 +8877,14 @@ Digite /help para ver todos os comandos disponíveis! return; } - const oltHint = this._resolverOLTporBase(base, this.getActiveSite(chatId).id); + const oltHint = this._resolverOLTporBase(base, this.getActiveSite(chatId).id, idAp); const tipoOLT = oltHint === 'fiberhome' ? '🔶 Fiberhome (TL1)' : '🔷 Datacom (SSH)'; const serialEscaped = serial.replace(/_/g, '\\_'); // Gerar ID curto para callback_data const restartId = String(++this._restartIdCounter); - this.pendingRestarts.set(restartId, { serial, base, location }); + this.pendingRestarts.set(restartId, { serial, base, idAp, location }); await this.bot.sendMessage(chatId, `⚠️ *Confirmar Reinicialização de ONU*\n\n` + @@ -8954,9 +8967,9 @@ Digite /help para ver todos os comandos disponíveis! } this.pendingRestarts.delete(restartId); - const { serial, base } = pending; + const { serial, base, idAp } = pending; const siteId = this.getActiveSite(chatId).id; - const oltHint = this._resolverOLTporBase(base, siteId); + const oltHint = this._resolverOLTporBase(base, siteId, idAp); const serialEscaped = serial.replace(/_/g, '\\_'); await this.bot.editMessageText(