From 6de9aeb81085bd665c79a8bbfd69d450cedaa6d2 Mon Sep 17 00:00:00 2001 From: Rodrigo Bertoldo de Sousa Martins Date: Sun, 29 Mar 2026 15:16:08 -0300 Subject: [PATCH] TopSapp/Fiberhome: fix adicionar ONU ao FHTT do Topsapp_part2 Signed-off-by: Rodrigo Bertoldo de Sousa Martins --- src/bot/handler.js | 77 +++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 31 deletions(-) diff --git a/src/bot/handler.js b/src/bot/handler.js index ee2963f..dd3947f 100644 --- a/src/bot/handler.js +++ b/src/bot/handler.js @@ -6162,50 +6162,65 @@ Digite /help para ver todos os comandos disponíveis! const olts = oltsResult.data?.dados?.dados || oltsResult.data?.dados || []; - // 1. Tentar por SSID (IP de gerência) - let oltEncontrada = olts.find(o => o.ssid === onuData.oltHost); + // Mapa manual de keywords por oltId/tipo → para busca no campo ssid e nome do TopSapp + // Fonte: valores reais de ssid cadastrados no TopSapp + const SSID_KEYWORDS = { + 'fiberhome': ['fiberhome', '172.16.10.6'], + 'olt_colmeia': ['colmeia'], + 'olt_canaa': ['canaa'], + 'olt_canaa2': ['canaa 2', 'canaa2'], + 'olt_dito': ['dito'], + 'olt_pedro_afonso': ['pedro', 'afonso'], + 'olt_canavieiras': ['canavieiras'] + }; - // 2. Para Datacom: buscar por keyword do oltId no nome da OLT + /** + * Busca uma OLT na lista pelo campo nome OU ssid usando lista de keywords. + * Tenta match com TODOS os tokens primeiro; se falhar, com QUALQUER token. + */ + const buscarPorKeywords = (keywords) => { + const found = olts.find(o => { + const haystack = `${o.nome || ''} ${o.ssid || ''}`.toLowerCase(); + return keywords.every(k => haystack.includes(k)); + }); + if (found) return found; + return olts.find(o => { + const haystack = `${o.nome || ''} ${o.ssid || ''}`.toLowerCase(); + return keywords.some(k => haystack.includes(k)); + }); + }; + + let oltEncontrada = null; + + // 1. Match manual pelo tipo (Fiberhome) ou oltId (Datacom) + const tipoKey = onuData.tipo === 'fiberhome' ? 'fiberhome' : onuData.oltId; + if (tipoKey && SSID_KEYWORDS[tipoKey]) { + oltEncontrada = buscarPorKeywords(SSID_KEYWORDS[tipoKey]); + if (oltEncontrada) { + console.log(`✅ OLT encontrada por mapa manual (${tipoKey}): "${oltEncontrada.nome}" / ssid: "${oltEncontrada.ssid}"`); + } + } + + // 2. Fallback: keyword livre do oltId (Datacom sem mapa definido) if (!oltEncontrada && onuData.oltId) { const keyword = onuData.oltId.replace(/^olt_/, '').replace(/_/g, ' ').toLowerCase(); const keywords = keyword.split(' ').filter(k => k.length > 2); - oltEncontrada = olts.find(o => { - const nome = (o.nome || '').toLowerCase(); - return keywords.every(k => nome.includes(k)); - }); - // Se não encontrou com todos, tenta com qualquer um - if (!oltEncontrada) { - oltEncontrada = olts.find(o => { - const nome = (o.nome || '').toLowerCase(); - return keywords.some(k => nome.includes(k)); - }); - } + oltEncontrada = buscarPorKeywords(keywords); if (oltEncontrada) { - console.log(`✅ OLT encontrada por nome (oltId): "${oltEncontrada.nome}" (keyword: "${keyword}")`); + console.log(`✅ OLT encontrada por keyword livre (oltId): "${oltEncontrada.nome}" (keyword: "${keyword}")`); } } - // 2b. Para Fiberhome: buscar por keyword do oltHost (nome da OLT retornado pelo SSH) + // 3. Fallback: keyword livre do oltHost (Fiberhome sem mapa definido) if (!oltEncontrada && onuData.oltHost) { - const keyword = onuData.oltHost.toLowerCase(); - const keywords = keyword.split(/[\s_\-]+/).filter(k => k.length > 1); - oltEncontrada = olts.find(o => { - const nome = (o.nome || '').toLowerCase(); - return keywords.every(k => nome.includes(k)); - }); - // Se não encontrou com todos, tenta com qualquer um - if (!oltEncontrada) { - oltEncontrada = olts.find(o => { - const nome = (o.nome || '').toLowerCase(); - return keywords.some(k => nome.includes(k)); - }); - } + const keywords = onuData.oltHost.toLowerCase().split(/[\s_\-]+/).filter(k => k.length > 1); + oltEncontrada = buscarPorKeywords(keywords); if (oltEncontrada) { - console.log(`✅ OLT encontrada por oltHost: "${oltEncontrada.nome}" (keyword: "${keyword}")`); + console.log(`✅ OLT encontrada por keyword livre (oltHost): "${oltEncontrada.nome}" (keyword: "${onuData.oltHost}")`); } } - // 3. Fallback: primeira OLT disponível + // 4. Fallback: primeira OLT disponível if (!oltEncontrada && olts.length > 0) { oltEncontrada = olts[0]; console.log(`⚠️ OLT não identificada — usando a primeira disponível: ${oltEncontrada.nome}`);