core: atualizado pacotes node.js
Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
1 parent
6de9aeb810
commit
850201a74e
37 files changed
+8
-3745
No files matched your search
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
@@ -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
|
||||
@@ -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)"
|
||||
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
@@ -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
|
||||
@@ -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
|
||||
Generated
-2884
File diff suppressed because it is too large.
Load diff
+8
-8
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "bot-ajuda-telegram",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.1",
|
||||
"description": "Bot de Telegram multifuncional com suporte a SSH e linguagem natural",
|
||||
"main": "src/index.js",
|
||||
"scripts": {
|
||||
@@ -26,14 +26,14 @@
|
||||
"author": "Rodrigo",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"node-telegram-bot-api": "^0.64.0",
|
||||
"ssh2": "^1.15.0",
|
||||
"dotenv": "^16.3.1",
|
||||
"axios": "^1.6.0",
|
||||
"form-data": "^4.0.0",
|
||||
"telnet-client": "^2.2.6"
|
||||
"node-telegram-bot-api": "^0.67.0",
|
||||
"ssh2": "^1.17.0",
|
||||
"dotenv": "^17.3.1",
|
||||
"axios": "^1.14.0",
|
||||
"form-data": "^4.0.5",
|
||||
"telnet-client": "^2.2.13"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^3.0.1"
|
||||
"nodemon": "^3.1.14"
|
||||
}
|
||||
}
|
||||
Whitespace-only changes.
Whitespace-only changes.
@@ -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!');
|
||||
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
Whitespace-only changes.
@@ -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));
|
||||
@@ -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();
|
||||
@@ -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!');
|
||||
Whitespace-only changes.
Reference in new issue
Block a user