core: atualizado pacotes node.js

Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
rodrigo committed 2026-03-29 16:05:53 -03:00
1 parent 6de9aeb810
commit 850201a74e
37 files changed
+8 -3745

No files matched your search

View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
-69
View File
@@ -1,69 +0,0 @@
# Informações sobre RX Power em ONUs FiberHome
## Problema Identificado
O comando TL1 `LST-OMDDM` retorna valores de potência **medidos pela OLT**, não pela ONU:
```
ONUID RxPower RxPowerR TxPower TxPowerR PTxPower PRxPower
-- -23,01 Normal 4,71 Normal -- --
```
### Campos Retornados:
- **RxPower**: -23,01 dBm - Sinal que a **OLT recebe** da ONU (uplink)
- **TxPower**: 4,71 dBm - Potência de **transmissão da OLT** (não é sinal recebido!)
- **PTxPower**: -- (vazio) - Deveria ser potência transmitida pela ONU
- **PRxPower**: -- (vazio) - Deveria ser potência recebida pela ONU
## Diferença com o UNM2000
O UNM2000 mostra **-20.22 dBm**, mas o TL1 retorna **-23,01 dBm**.
### Possíveis Causas:
1. **UNM2000 usa OMCI diretamente**: O sistema de gestão pode acessar a ONU via protocolo OMCI (ONT Management and Control Interface), obtendo valores medidos pela própria ONU
2. **Comando TL1 diferente**: O UNM2000 pode usar um comando proprietário ou extensão do TL1 não documentada no manual
3. **Cálculo/compensação**: Pode haver algum cálculo de compensação de atenuação
## Solução Implementada
O bot agora mostra o **RxPower** (-23,01 dBm) que é o único valor confiável disponível via TL1, com a indicação de que é medido pela OLT:
```
📡 RX Power: -23.01 dBm (uplink)
💡 Valores medidos pela OLT via protocolo TL1
```
## Comandos TL1 Testados
- ✅ **LST-OMDDM**: Retorna potências medidas pela OLT
- ✅ **LST-ONUSTATE**: Apenas status (UP/DOWN)
- ✅ **LST-ONUCFG**: Apenas configuração e distância
- ✅ **LST-PONPERF**: Apenas estatísticas de pacotes
## Notas Técnicas
### Significado dos Campos LST-OMDDM:
| Campo | Significado | Medido em |
|-------|-------------|-----------|
| RxPower | Sinal recebido ONU→OLT | OLT |
| TxPower | Potência transmitida OLT→ONU | OLT |
| PTxPower | Potência transmitida ONU→OLT | ONU (vazio via TL1) |
| PRxPower | Sinal recebido OLT→ONU | ONU (vazio via TL1) |
### Interpretação:
- **RxPower da OLT** = **TX Power da ONU** (mesmo sinal, medido na chegada)
- Para obter o sinal que a ONU recebe, seria necessário acesso OMCI ou comando específico
## Recomendação
Para obter valores idênticos ao UNM2000, seria necessário:
1. Acesso direto à ONU via OMCI
2. Documentação adicional de comandos TL1 proprietários
3. Ou usar diretamente a API do UNM2000 se disponível
-250
View File
@@ -1,250 +0,0 @@
# Funcionalidade: Adicionar ONU Fiberhome via TL1
## Descrição
Esta funcionalidade permite adicionar ONUs Fiberhome via protocolo TL1, configurando automaticamente todos os parâmetros necessários através do UNM2000.
## Comando
```
adicionar onu fiberhome SERIAL
```
ou
```
fiberhome onu SERIAL
```
**Exemplo:**
```
adicionar onu fiberhome FHTT12345678
```
## Fluxo de Execução
O processo de adição é **interativo** e coleta as seguintes informações:
### 1. Nome/Alias do Usuário
- O bot solicita que você digite o nome ou alias do usuário
- Este nome será usado como identificador da ONU no sistema
- **Exemplo:** `joao_silva`, `cliente123`
### 2. Descoberta Automática da Porta PON
- O sistema busca automaticamente em todas as portas PON (slots 1-20, portas 1-16)
- Utiliza o comando `LST-UNREGONU` para encontrar a ONU descoberta
- A ONU deve estar **ligada e descoberta** pela OLT
### 3. Tipo da ONU
- Selecione o tipo da ONU via botões:
- **AN5506-02-B** (2 portas Ethernet)
- **AN5506-01-A** (1 porta Ethernet)
### 4. VLAN
- Escolha entre:
- **VLAN padrão 1002** (recomendado)
- **VLAN customizada** (digite o número de 1 a 4094)
## Comandos TL1 Executados
O sistema executa automaticamente a seguinte sequência de comandos TL1:
### 0. LST-UNREGONU - Descoberta da Porta PON
```tl1
LST-UNREGONU::OLTID=131.0.192.9,PONID=NA-NA-[slot]-[porta]:CTAG::;
```
- Busca em todas as portas PON (slots 1-20, portas 1-16)
- Identifica em qual porta a ONU está descoberta
### 1. ADD-ONU - Autenticação da ONU
```tl1
ADD-ONU::OLTID=131.0.192.9,PONID=NA-NA-[portaalias]:CTAG::AUTHTYPE=MAC,ONUTYPE=[tipo],NAME=[usuario],ONUID=[serial];
```
### 2. SET-WANSERVICE - Configuração de WAN Services
**Para ONU de 2 portas (AN5506-02-B):**
```tl1
SET-WANSERVICE::OLTID=131.0.192.9,PONID=NA-NA-[portaalias],ONUIDTYPE=MAC,ONUID=[serial]:CTAG::STATUS=1,MODE=2,CONNTYPE=1,VLAN=[vlan],COS=0,QOS=2,UPORT=1;
SET-WANSERVICE::OLTID=131.0.192.9,PONID=NA-NA-[portaalias],ONUIDTYPE=MAC,ONUID=[serial]:CTAG::STATUS=1,MODE=2,CONNTYPE=1,VLAN=[vlan],COS=0,QOS=2,UPORT=2;
```
**Para ONU de 1 porta (AN5506-01-A):**
```tl1
SET-WANSERVICE::OLTID=131.0.192.9,PONID=NA-NA-[portaalias],ONUIDTYPE=MAC,ONUID=[serial]:CTAG::STATUS=1,MODE=2,CONNTYPE=1,VLAN=[vlan],COS=0,QOS=2,UPORT=1;
```
### 3. CFG-WEBADMINISTRATOR - Configuração de Autenticação Web
```tl1
CFG-WEBADMINISTRATOR::OLTID=131.0.192.9,PONID=NA-NA-[portaalias],ONUIDTYPE=MAC,ONUID=[serial]:CTAG::WEBUSERNAME=admin,WEBPASSWORD=clicknet10;
```
### 4. RESET-ONU - Reinicialização da ONU
```tl1
RESET-ONU::OLTID=131.0.192.9,PONID=NA-NA-[portaalias],ONUIDTYPE=MAC,ONUID=[serial]:CTAG::;
```
## Parâmetros de Configuração
### Autenticação
- **Tipo:** MAC (autenticação por endereço MAC)
- **Serial:** Fornecido pelo usuário (formato: FHTTXXXXXXXX)
### WAN Service
- **STATUS:** 1 (ativo)
- **MODE:** 2 (INTERNET)
- **CONNTYPE:** 1 (Bridge)
- **VLAN:** Configurável (padrão: 1002)
- **COS:** 0
- **QOS:** 2 (desabilitado)
- **UPORT:** 1 ou 2 (dependendo da porta)
### Autenticação Web
- **Username:** admin (fixo)
- **Password:** clicknet10 (fixo)
## Mensagens de Retorno
### Sucesso
```
✅ ONU Fiberhome Adicionada com Sucesso!
👤 Usuário: joao_silva
🏢 OLT: 131.0.192.9
📡 Porta descoberta: Slot 7, PON 1
📱 Serial: FHTT12345678
🔌 Tipo: AN5506-02-B
🏷️ VLAN: 1002
⚙️ Portas configuradas: 2
🔐 Login Web: admin / clicknet10
⚡ A ONU foi reiniciada e estará disponível em alguns instantes.
```
### Erro
```
❌ Erro ao adicionar ONU Fiberhome
⚠️ [Mensagem de erro detalhada]
```
## Estrutura de Código
### Arquivos Modificados/Criados
1. **src/fiberhome/manager_tl1.js**
- Método `descobrirPortaPON()`: Busca ONU nas portas PON
- Método `adicionarOnuFiberhome()`: Executa sequência de comandos TL1
- Configuração da OLT única (131.0.192.9)
2. **src/nlp/processor.js**
- Adicionado reconhecimento de padrões para comando Fiberhome
3. **src/bot/handler.js**
- `handleAdicionarOnuFiberhome()`: Inicia processo interativo
- `handleUserSessionInput()`: Processa inputs do usuário
- `executarAdicaoOnuFiberhome()`: Executa adição da ONU
- `handleFiberhomeOnuTypeCallback()`: Callback para tipo de ONU
- `handleFiberhomeVlanCallback()`: Callback para VLAN
## Sessões de Usuário
O sistema utiliza sessões para armazenar temporariamente os dados coletados:
```javascript
{
action: 'adicionar_onu_fiberhome_step1|2|3',
serial: 'FHTT12345678',
usuario: 'joao_silva',
onuType: 'AN5506-02-B',
vlan: 1002,
timestamp: Date.now()
}
```
### Fluxo de Steps
1. **step1**: Aguardando nome do usuário
2. **step2**: Aguardando seleção do tipo de ONU e VLAN
3. **step3**: Aguardando VLAN customizada (se aplicável)
## Segurança
- Apenas usuários autorizados podem executar o comando
- Validação de VLAN (1-4094)
- Timeout de sessão para evitar sessões orfãs
- Logging detalhado de todas as operações
## Logs
Todos os passos são registrados no logger:
```javascript
logger.info('Iniciando adição de ONU Fiberhome via TL1', { nameOlt, portAlias, serial, usuario, vlan, onuType });
logger.debug('Executando ADD-ONU', { comando });
logger.warn('Aviso ao configurar WAN porta', { erro });
logger.error('Erro ao adicionar ONU Fiberhome', { erro });
```
## Exemplos de Uso
### Exemplo 1: ONU de 2 portas com VLAN padrão
```
Usuário: adicionar onu fiberhome FHTT12345678
Bot: 👤 Digite o nome/alias do usuário:
Usuário: cliente_123
Bot: 🔌 Selecione o tipo da ONU:
[Usuário seleciona: AN5506-02-B]
Bot: 🏷️ VLAN: A VLAN padrão é 1002...
[Usuário seleciona: Usar VLAN 1002 (padrão)]
Bot: ⏳ Adicionando ONU Fiberhome...
🔍 Descobrindo porta PON automaticamente...
Bot: ✅ ONU Fiberhome Adicionada com Sucesso!
📡 Porta descoberta: Slot 7, PON 1
```
### Exemplo 2: ONU de 1 porta com VLAN customizada
```
Usuário: fiberhome onu FHTT87654321
Bot: 👤 Digite o nome/alias do usuário:
Usuário: empresa_xyz
Bot: 🔌 Selecione o tipo da ONU:
[Usuário seleciona: AN5506-01-A]
Bot: 🏷️ VLAN: A VLAN padrão é 1002...
[Usuário seleciona: Usar outra VLAN]
Bot: Digite o número da VLAN (1-4094):
Usuário: 603
Bot: ⏳ Adicionando ONU Fiberhome...
🔍 Descobrindo porta PON automaticamente...
Bot: ✅ ONU Fiberhome Adicionada com Sucesso!
📡 Porta descoberta: Slot 3, PON 4
```
## Troubleshooting
### Erro: "Não foi possível conectar ao UNM2000"
- Verificar conectividade de rede com 131.0.192.9:3337
- Verificar credenciais de login TL1
### Erro: "ONU não encontrada em nenhuma porta PON"
- Verificar se a ONU está **ligada**
- Verificar se a ONU está **descoberta** pela OLT
- Verificar se o serial está correto (formato: FHTTXXXXXXXX)
- A ONU precisa estar no estado "unregistered" para ser descoberta
### Erro: "Falha ao adicionar ONU"
- Verificar se a ONU já não está cadastrada
- Verificar se há espaço disponível na porta PON
- Verificar logs do UNM2000
### Erro: "Sessão expirada"
- Reiniciar o processo com o comando inicial
- Não demorar muito entre as respostas
- Completar o fluxo sem interrupções
## Referências
- Manual TL1 Fiberhome: `material/fiberhometl1.txt`
- Documentação UNM2000: Seção 5.1 "ONU Configuration (FTTH)"
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
-202
View File
@@ -1,202 +0,0 @@
# Integração TopSapp - Bot de Ajuda
## 📋 Visão Geral
Esta integração permite ao bot interagir com o sistema TopSapp para gerenciar clientes, faturas e serviços através de comandos naturais no Telegram.
## 🏢 Instâncias Configuradas
### Guarai/Colmeia
- **Host**: 131.0.192.6
- **Porta**: 443 (HTTPS)
- **Localização**: Guarai e Colmeia
### Pedro Afonso
- **Host**: 45.189.140.18
- **Porta**: 443 (HTTPS)
- **Localização**: Pedro Afonso
## ⚙️ Configuração
### 1. Variáveis de Ambiente
Adicione as seguintes variáveis no arquivo `.env`:
```bash
# TopSapp - Instância Guarai/Colmeia
TOPSAPP_GUARAI_USER=seu_usuario_guarai
TOPSAPP_GUARAI_PASS=sua_senha_guarai
# TopSapp - Instância Pedro Afonso
TOPSAPP_PEDRO_AFONSO_USER=seu_usuario_pedro_afonso
TOPSAPP_PEDRO_AFONSO_PASS=sua_senha_pedro_afonso
```
### 2. Dependências
As seguintes dependências são necessárias:
- `axios` - Para requisições HTTP
- `form-data` - Para upload de formulários
- `https` - Para certificados SSL personalizados
## 🔧 Comandos Disponíveis
### 📊 Status do Sistema
```
status topsapp
verificar topsapp
```
### 🔍 Buscar Clientes
```
buscar cliente João da Silva
buscar cliente 123.456.789-10
buscar cliente Guarai João (específica instância)
buscar cliente Pedro Afonso Maria
```
### 📄 Ver Faturas
```
ver faturas 123.456.789-10
ver faturas cliente123
ver faturas Guarai 123.456.789-10
```
### 💸 Gerar Boletos
```
gerar boleto 12345
gerar boleto fatura123
```
### 🔒 Bloquear Clientes
```
bloquear cliente 456
bloquear 789
```
### 🔓 Liberar Clientes
```
liberar cliente 456
liberar 789
```
## 🚀 Funcionalidades
### ✅ Autenticação Automática
- Login automático com credenciais configuradas
- Gerenciamento de sessões com expiração
- Renovação automática de tokens
### 🌐 Multi-instância
- Detecção automática da instância por localização
- Roteamento de requisições para servidor correto
- Suporte a múltiplas configurações
### 📋 Gestão de Clientes
- Busca por nome, CPF ou ID
- Visualização de dados completos
- Histórico de serviços e faturas
### 💰 Sistema de Faturamento
- Listagem de faturas pendentes e pagas
- Geração de boletos em PDF
- Linha digitável para pagamento
### 🔐 Controle de Serviços
- Bloqueio de serviços em massa
- Liberação de serviços bloqueados
- Confirmação antes de ações críticas
### 📊 Relatórios e Status
- Status de configuração do sistema
- Estatísticas de uso por instância
- Monitoramento de conectividade
## 🔧 Arquitetura
### Classes Principais
#### `TopSappAPI`
- Gerencia autenticação e sessões
- Executa requisições para a API
- Converte Base64 para PDF
#### `TopSappConfig`
- Carrega configurações do ambiente
- Valida credenciais disponíveis
- Fornece dados de instâncias
#### `TopSappManager`
- Interface principal para o bot
- Coordena operações complexas
- Trata erros e formatação
## 📝 Logs e Debug
O sistema gera logs detalhados:
- `🎯` - Inicialização de componentes
- `🔐` - Operações de autenticação
- `📡` - Requisições para API
- `✅` - Operações bem-sucedidas
- `❌` - Erros e falhas
## ⚠️ Considerações de Segurança
- Certificados SSL auto-assinados são aceitos
- Sessões expiram automaticamente em 30 minutos
- Credenciais são armazenadas em variáveis de ambiente
- Timeout de 10 segundos para requisições
## 🐛 Troubleshooting
### Erro de Autenticação
1. Verificar credenciais no `.env`
2. Testar login manual no TopSapp
3. Verificar conectividade com o servidor
### Timeout de Conexão
1. Verificar conectividade de rede
2. Confirmar se os serviços estão online
3. Ajustar timeout se necessário
### Erro de Certificado SSL
- O sistema já está configurado para aceitar certificados auto-assinados
- Verificar se o hostname está correto
## 📈 Métricas de Performance
- Sessões mantidas por até 30 minutos
- Timeout de requisições: 10 segundos
- Suporte a operações simultâneas
- Cache de configurações carregadas
## 🔄 Manutenção
### Limpeza de Sessões
- Sessões expiradas são limpas automaticamente
- Intervalo de limpeza: 10 minutos
### Renovação de Tokens
- Detecção automática de expiração
- Re-autenticação transparente
- Sem interrupção do serviço
---
## 💡 Exemplos de Uso
### Fluxo Completo de Atendimento
1. `buscar cliente João da Silva`
2. `ver faturas 123.456.789-10`
3. `gerar boleto 12345`
4. `bloquear cliente 456` (se necessário)
### Verificação de Status
1. `status topsapp`
2. Verificar configurações
3. Testar conectividade
### Operações por Localização
- `buscar cliente Guarai João` → Busca apenas em Guarai/Colmeia
- `buscar cliente Pedro Afonso Maria` → Busca apenas em Pedro Afonso
- `buscar cliente João` → Busca em todas as instâncias
-149
View File
@@ -1,149 +0,0 @@
# Melhorias Implementadas no Módulo TopSapp
## Problemas Resolvidos
### ✅ 1. CPF do Cliente Não Era Mostrado
**Problema:** O CPF dos clientes não aparecia nas buscas.
**Solução:**
- Implementado mapeamento correto do campo `cpf` da API
- Adicionado fallback para campos alternativos (`cpfCnpj`, `documento`)
- CPF agora é exibido corretamente em todas as interfaces
### ✅ 2. Status Incorreto dos Clientes
**Problema:** Clientes ativos apareciam como inativos.
**Solução:**
- Criado método `interpretarStatusCliente()` que analisa múltiplos campos
- Verifica `ativo`, `bloqueado`, `id_status`, datas de bloqueio/desativação
- Status agora reflete corretamente a situação real do cliente
### ✅ 3. Seleção de Clientes Múltiplos
**Problema:** Quando havia múltiplos clientes, não havia opção de escolha.
**Solução:**
- Interface com botões inline para seleção
- Lista até 10 clientes com informações resumidas
- Botões específicos para "Ver Dados" e "Ver Faturas"
- Navegação intuitiva entre múltiplos resultados
## Novas Funcionalidades
### 🆕 1. Dados Cadastrais Completos
**Comandos:**
- `dados cliente João Silva`
- `dados cadastrais 123.456.789-10`
- `dados cliente 12345` (ID do cliente)
**Informações Exibidas:**
- **Dados Pessoais:** Nome, CPF, RG, email, telefones
- **Endereço Completo:** Rua, número, complemento, bairro, cidade, UF, CEP
- **Status do Cliente:** Ativo/Inativo baseado nos serviços
- **Data de Cadastro:** Quando o cliente foi registrado
- **Observações:** Notas importantes sobre o cliente
### 🆕 2. Informações Detalhadas dos Serviços
**Para cada serviço contratado:**
- **Plano:** Nome do plano contratado
- **Login e Senha:** Credenciais de acesso
- **Dados de Rede:** IP atual, último IP, status de conexão
- **Velocidades:** Download e upload contratados
- **Cobrança:** Valor mensal, dia de vencimento, modalidade
- **Status:** Liberado, Bloqueado, Desativado com ícones coloridos
### 🆕 3. Dados FTTH Completos
**Informações Técnicas:**
- **Base/OLT:** Identificação da central
- **PON:** Porta PON específica (ex: 16-7, 12-11)
- **Service Port:** Porta de serviço na OLT
- **Serial da ONU:** Identificação única do equipamento
- **Perfil da ONU:** Modelo e configuração (ex: AN5506-02-B)
- **Sinais Ópticos:** RX e TX com data/hora da última medição
- **Status de Conexão:** Online/Offline em tempo real
- **Último Acesso:** Data e hora da última conexão
### 🆕 4. Endereço de Instalação
**Dados Completos:**
- **Endereço:** Rua, número, complemento
- **Localização:** Bairro, cidade, UF, CEP
- **Coordenadas:** Latitude e longitude para localização GPS
- **Diferenciação:** Endereço de cobrança vs. endereço de instalação
### 🆕 5. Histórico do Serviço
**Datas Importantes:**
- **Cadastro:** Quando o serviço foi criado
- **Ativação:** Quando começou a funcionar
- **Último Bloqueio:** Se teve bloqueio recente
- **Desativação:** Se o serviço foi cancelado
### 🆕 6. Interface Melhorada
**Navegação:**
- **Botões Inline:** Ações rápidas sem digitar comandos
- **Múltiplas Opções:** Ver dados, faturas, serviços
- **Visual Organizado:** Informações agrupadas logicamente
- **Ícones Intuitivos:** Status visuais com cores e símbolos
## Comandos Disponíveis
### Busca de Clientes
```
buscar cliente João da Silva
buscar cliente 123.456.789-10
buscar cliente Guarai João (especifica instância)
```
### Dados Cadastrais
```
dados cliente João Silva
dados cadastrais 123.456.789-10
info cliente 12345
```
### Faturas
```
ver faturas 123.456.789-10
faturas cliente João Silva
```
### Serviços
```
listar serviços 123.456.789-10
ver serviços cliente João
```
## Integração com API TopSapp
### Endpoints Utilizados
- **ObterClientes:** Dados básicos do cliente
- **ObterClientesServicos:** Informações completas dos serviços
- **ObterDocReceber:** Faturas em aberto
### Tratamento de Erros
- **Fallback Inteligente:** Se um endpoint falha, usa dados de outro
- **Múltiplas Tentativas:** Diferentes abordagens para obter dados
- **Logs Detalhados:** Rastreamento completo para debugging
### Otimizações
- **Cache de Sessão:** Reutiliza autenticação por 30 minutos
- **Requests Paralelos:** Busca dados simultaneamente quando possível
- **Dados Unificados:** Combina informações de múltiplas fontes
## Configuração
### Variáveis de Ambiente Necessárias
```
TOPSAPP_GUARAI_USER=usuario_guarai
TOPSAPP_GUARAI_PASS=senha_guarai
TOPSAPP_PEDRO_AFONSO_USER=usuario_pedro
TOPSAPP_PEDRO_AFONSO_PASS=senha_pedro
```
### Instâncias Suportadas
- **Guarai/Colmeia:** https://131.0.192.6:9910
- **Pedro Afonso:** https://45.189.140.18:9910
## Benefícios das Melhorias
1. **Informação Completa:** Dados técnicos e cadastrais em um só lugar
2. **Interface Intuitiva:** Botões e navegação simplificada
3. **Dados Precisos:** Status e informações atualizadas
4. **Suporte Técnico:** Informações FTTH para diagnósticos
5. **Produtividade:** Menos comandos, mais informações
6. **Confiabilidade:** Múltiplas fontes de dados com fallback
-2884
View File
File diff suppressed because it is too large. Load diff
+8 -8
View File
@@ -1,6 +1,6 @@
{ {
"name": "bot-ajuda-telegram", "name": "bot-ajuda-telegram",
"version": "1.0.0", "version": "1.0.1",
"description": "Bot de Telegram multifuncional com suporte a SSH e linguagem natural", "description": "Bot de Telegram multifuncional com suporte a SSH e linguagem natural",
"main": "src/index.js", "main": "src/index.js",
"scripts": { "scripts": {
@@ -26,14 +26,14 @@
"author": "Rodrigo", "author": "Rodrigo",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"node-telegram-bot-api": "^0.64.0", "node-telegram-bot-api": "^0.67.0",
"ssh2": "^1.15.0", "ssh2": "^1.17.0",
"dotenv": "^16.3.1", "dotenv": "^17.3.1",
"axios": "^1.6.0", "axios": "^1.14.0",
"form-data": "^4.0.0", "form-data": "^4.0.5",
"telnet-client": "^2.2.6" "telnet-client": "^2.2.13"
}, },
"devDependencies": { "devDependencies": {
"nodemon": "^3.0.1" "nodemon": "^3.1.14"
} }
} }
View File
Whitespace-only changes.
View File
Whitespace-only changes.
-32
View File
@@ -1,32 +0,0 @@
const DateProcessor = require('./src/utils/dateProcessor');
// Teste do processador de datas
const dateProcessor = new DateProcessor();
console.log('🧪 Testando processador de datas...\n');
const testCases = [
'amanhã às 14h',
'sexta-feira 09:00',
'hoje 18h',
'em 3 dias às 10h',
'15/08 às 16h30',
'segunda-feira 08:30',
'depois de amanhã 20h',
'quarta 14:30'
];
testCases.forEach((testCase, index) => {
console.log(`${index + 1}. Teste: "${testCase}"`);
const resultado = dateProcessor.processarTexto(testCase);
if (resultado.success) {
console.log(` ✅ Sucesso: ${dateProcessor.formatarData(resultado.data)}`);
console.log(` 📊 Parsed: ${JSON.stringify(resultado.parsed)}`);
} else {
console.log(` ❌ Erro: ${resultado.error}`);
}
console.log('');
});
console.log('🏁 Teste concluído!');
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
-91
View File
@@ -1,91 +0,0 @@
/**
* Teste para validar a correção do RX Power das ONUs FiberHome
*
* Problema: Bot mostrava -23.02 dBm, mas UNM2000 mostrava -20.22 dBm
* Nova Hipótese: UNM2000 mostra TxPower da OLT (que é o sinal recebido pela ONU)
*/
// Simular resposta do comando LST-OMDDM conforme o manual
const respostaSimulada = `
FH_10.78.20.120 2024-02-10 14:30:00
M CTAG COMPLD
total_blocks=1
block_number=1
block_records=1
List of Optical Power Info
----------------------------------------------------------
ONUID RxPower RxPowerR TxPower TxPowerR CurrTxBias CurrTxBiasR Temperature TemperatureR Voltage VoltageR PTxPower PRxPower
5 -23.02 Normal -20.22 Normal 15.80 Normal 62.37 Normal 3.40 Normal 1.85 -19.50
-----------------------------------------------------------
`;
console.log('🧪 Teste de Extração do RX Power - NOVA HIPÓTESE\n');
console.log('=' .repeat(70));
// Processar resposta
const linhasTabela = respostaSimulada.split('\n').filter(linha =>
linha.includes('\t') &&
!linha.includes('ONUID\tRxPower') &&
!linha.includes('ONUID RxPower') &&
!linha.includes('---') &&
linha.match(/[+-]?\d+[,.]?\d*/)
);
if (linhasTabela.length > 0) {
const campos = linhasTabela[0].split('\t');
console.log(`\n📊 Total de campos extraídos: ${campos.length}`);
console.log('\nCampos encontrados:');
campos.forEach((campo, idx) => {
const nomes = ['ONUID', 'RxPower', 'RxPowerR', 'TxPower', 'TxPowerR',
'CurrTxBias', 'CurrTxBiasR', 'Temperature', 'TemperatureR',
'Voltage', 'VoltageR', 'PTxPower', 'PRxPower'];
console.log(` [${idx}] ${nomes[idx]?.padEnd(15)}: "${campo}"`);
});
// Extrair valores
const valores = {
rxPower: campos[1]?.replace(',', '.').trim(), // OLT recebe da ONU
txPower: campos[3]?.replace(',', '.').trim(), // OLT transmite para ONU ⭐
ptxPower: campos[11]?.replace(',', '.').trim(), // ONU transmite para OLT
prxPower: campos[12]?.replace(',', '.').trim() // ONU recebe da OLT
};
console.log('\n' + '='.repeat(70));
console.log('📡 ANÁLISE DOS VALORES:');
console.log('='.repeat(70));
console.log(`\n🔴 Bot estava usando (ERRADO):`);
console.log(` RxPower = ${valores.rxPower} dBm (sinal que OLT recebe da ONU)`);
console.log(`\n🟡 Tentativa anterior (ainda errado):`);
console.log(` PRxPower = ${valores.prxPower} dBm (sinal que ONU recebe da OLT)`);
console.log(`\n🟢 NOVA HIPÓTESE (pode ser o correto!):`);
console.log(` TxPower = ${valores.txPower} dBm ⭐ (sinal que OLT transmite = ONU recebe)`);
console.log('\n' + '='.repeat(70));
console.log('✅ COMPARAÇÃO:');
console.log('='.repeat(70));
console.log(`UNM2000 mostra: -20.22 dBm`);
console.log(`TxPower (campo 3): ${valores.txPower} dBm ${valores.txPower === '-20.22' ? '✅ MATCH!' : '❌'}`);
console.log(`PRxPower (campo 12): ${valores.prxPower} dBm ${valores.prxPower === '-20.22' ? '✅ MATCH!' : '❌'}`);
console.log(`RxPower (campo 1): ${valores.rxPower} dBm ${valores.rxPower === '-20.22' ? '✅ MATCH!' : '❌'}`);
console.log('\n' + '='.repeat(70));
console.log('📖 INTERPRETAÇÃO:');
console.log('='.repeat(70));
console.log('Campo | Significado | Quem mede');
console.log('------------|--------------------------------------|------------------');
console.log('RxPower | Potência recebida (ONU→OLT) | Medido na OLT');
console.log('TxPower ⭐ | Potência transmitida (OLT→ONU) | Medido na OLT');
console.log('PTxPower | Potência transmitida (ONU→OLT) | Medido na ONU');
console.log('PRxPower | Potência recebida (OLT→ONU) | Medido na ONU');
console.log('\n💡 TxPower da OLT é o sinal que a ONU RECEBE da OLT!');
} else {
console.log('❌ Nenhuma linha de dados encontrada');
}
console.log('\n' + '='.repeat(70));
-30
View File
@@ -1,30 +0,0 @@
// Teste rápido para verificar a estrutura de dados do TopSapp
const { TopSappManager } = require('./src/topsapp');
async function testarServicos() {
const topsapp = new TopSappManager();
if (!topsapp.isReady()) {
console.log('❌ TopSapp não está configurado');
return;
}
try {
console.log('🔍 Testando obterServicosCliente...');
const resultado = await topsapp.obterServicosCliente(2207);
console.log('📊 Resultado completo:', JSON.stringify(resultado, null, 2));
if (resultado.success && resultado.servicos) {
console.log('\n✅ Serviços encontrados:');
resultado.servicos.forEach((servico, index) => {
console.log(`${index + 1}. ${servico.nome} (ID: ${servico.id})`);
});
}
} catch (error) {
console.error('❌ Erro:', error);
}
}
testarServicos();
-30
View File
@@ -1,30 +0,0 @@
const NLPProcessor = require('./src/nlp/processor');
// Teste do processador NLP para comandos de suporte
const nlp = new NLPProcessor();
console.log('🧪 Testando detecção de comandos de suporte...\n');
const testCases = [
'abrir suporte',
'criar suporte para João Silva',
'novo chamado',
'suporte cliente 123.456.789-10',
'adicionar suporte',
'abrir suporte FRANCE CRISTINA DE SOUSA CAMARGO',
'ticket',
'atendimento'
];
testCases.forEach((testCase, index) => {
console.log(`${index + 1}. Teste: "${testCase}"`);
const intent = nlp.processMessage(testCase);
console.log(` 🧠 Action: ${intent.action}`);
console.log(` 🎯 Target: ${intent.target}`);
console.log(` 📊 Confidence: ${intent.confidence}`);
console.log(` 🔧 Type: ${intent.type}`);
console.log('');
});
console.log('🏁 Teste de NLP concluído!');
View File
Whitespace-only changes.
View File
Whitespace-only changes.