This commit is contained in:
rodrigo committed 2025-08-08 10:35:13 -03:00
1 parent 2d2e40214b
commit a88ee59f0d
20 files changed
-2509

No files matched your search

-326
View File
@@ -1,326 +0,0 @@
# Funcionalidade: Adicionar ONU
## Descrição
Nova funcionalidade implementada para adicionar ONUs automaticamente nas OLTs, incluindo descoberta de slot, determinação de ONU ID disponível, configuração de VLAN e criação de service-port.
## Como Usar
### Comando de Texto
```
adicionar onu SERIAL_DA_ONU
add onu SERIAL_DA_ONU
cadastrar onu SERIAL_DA_ONU
criar onu SERIAL_DA_ONU
registrar onu SERIAL_DA_ONU
```
### Exemplos
- `adicionar onu FHTT12345678`
- `add onu DACM91569513`
- `cadastrar onu ABCD12345678`
## Fluxo de Operação
### 1. Comando Inicial
O usuário digita o comando com o serial da ONU que deseja adicionar.
### 2. Seleção da OLT
O bot apresenta uma lista das OLTs disponíveis para o usuário escolher onde adicionar a ONU.
### 3. Descoberta do Slot
O sistema executa `show interface gpon discovered-onus` para encontrar o slot onde a ONU foi descoberta.
### 4. Análise de ONU IDs
O sistema executa `show interface gpon SLOT onu | nomore` para descobrir quais ONU IDs (0-127) estão em uso.
### 5. Determinação da VLAN
Com base na OLT e slot, o sistema determina automaticamente o VLAN ID usando o mapeamento pré-configurado.
### 6. Confirmação
Antes de adicionar, o bot exibe todas as informações e pede confirmação:
- Serial da ONU
- Slot descoberto
- ONU ID que será usado
- VLAN ID
- Configurações que serão aplicadas
### 7. Adição Automática
Após confirmação, o sistema executa automaticamente todos os comandos necessários.
## Comandos SSH Executados
### Descoberta do Slot
```bash
show interface gpon discovered-onus
```
### Verificação de ONU IDs em Uso
```bash
show interface gpon 1/1/3 onu | nomore
```
### Configuração da ONU
```bash
config
interface gpon 1/1/3 # Slot descoberto
onu 42 # Próximo ID disponível
line-profile DM986-100
serial-number FHTT12345678
ethernet 1
native vlan vlan-id 603 # VLAN baseada na OLT/slot
top
service-port new
gpon 1/1/3 onu 42 gem 1 match vlan vlan-id 603 action vlan replace vlan-id 603
commit
top
exit
exit
```
## Mapeamento de VLANs
### OLT DITO
| Slot | VLAN |
|------|------|
| 1/1/1 | 601 |
| 1/1/2 | 602 |
| 1/1/3 | 603 |
| 1/1/4 | 604 |
### OLT COLMEIA
| Slot | VLAN |
|------|------|
| 1/1/1 | 605 |
| 1/1/2 | 606 |
| 1/1/3 | 607 |
| 1/1/4 | 608 |
| 1/1/5 | 609 |
| 1/1/6 | 610 |
| 1/1/7 | 611 |
| 1/1/8 | 612 |
| 1/1/9 | 613 |
| 1/1/10 | 614 |
| 1/1/11 | 608 |
| 1/1/12 | 616 |
| 1/1/13 | 617 |
| 1/1/14 | 618 |
| 1/1/15 | 619 |
| 1/1/16 | 620 |
### OLT CANAA
| Slot | VLAN |
|------|------|
| 1/1/1 | 605 |
| 1/1/2 | 606 |
| 1/1/3 | 607 |
| 1/1/4 | 608 |
| 1/1/5 | 609 |
| 1/1/6 | 610 |
| 1/1/7 | 611 |
| 1/1/8 | 612 |
### OLT CANAA 2
| Slot | VLAN |
|------|------|
| 1/1/1 | 621 |
| 1/1/2 | 622 |
| 1/1/3 | 623 |
| 1/1/4 | 624 |
| 1/1/5 | 625 |
| 1/1/6 | 626 |
| 1/1/7 | 627 |
| 1/1/8 | 628 |
### OLT PEDRO AFONSO 1
| Slot | VLAN |
|------|------|
| 1/1/1 | 301 |
| 1/1/2 | 302 |
| 1/1/3 | 303 |
| 1/1/4 | 304 |
| 1/1/5 | 305 |
| 1/1/6 | 306 |
| 1/1/7 | 307 |
| 1/1/8 | 308 |
| 1/1/9 | 309 |
| 1/1/10 | 310 |
| 1/1/11 | 311 |
| 1/1/12 | 312 |
| 1/1/13 | 313 |
| 1/1/14 | 314 |
| 1/1/15 | 315 |
| 1/1/16 | 316 |
### OLT CANAVIEIRAS
| Slot | VLAN |
|------|------|
| 1/1/1 | 601 |
| 1/1/2 | 602 |
| 1/1/3 | 603 |
| 1/1/4 | 604 |
| 1/1/5 | 605 |
| 1/1/6 | 606 |
| 1/1/7 | 607 |
| 1/1/8 | 608 |
| 1/1/9 | 609 |
| 1/1/10 | 610 |
| 1/1/11 | 611 |
| 1/1/12 | 612 |
| 1/1/13 | 613 |
| 1/1/14 | 614 |
| 1/1/15 | 615 |
| 1/1/16 | 616 |
## Recursos de Segurança
### Confirmação Obrigatória
- Sistema exige confirmação explícita antes de adicionar
- Exibe todas as configurações que serão aplicadas
- Mostra ONU IDs já em uso no slot
### Validação de Dados
- Verifica se a ONU está na lista de discovered-onus
- Encontra automaticamente o próximo ONU ID disponível
- Valida se existe VLAN configurada para a OLT/slot
### Processo Controlado
- Usa shell interativo para manter contexto
- Timeout de segurança (90 segundos)
- Logging detalhado de todas as operações
## Tratamento de Erros
### ONU Não Descoberta
- Mensagem clara informando que a ONU não está na lista discovered-onus
- Sugestão para verificar se a ONU está ligada
### Slot Lotado
- Informa quando todos os ONU IDs (0-127) estão em uso
- Sugere usar outro slot ou remover ONUs não utilizadas
### VLAN Não Configurada
- Alerta quando não há VLAN mapeada para a OLT/slot
- Informa as configurações necessárias
### Timeout
- Processo é interrompido após 90 segundos
- Conexão é fechada adequadamente
## Resultados
### Sucesso
```
✅ ONU Adicionada com Sucesso!
📱 Serial: FHTT12345678
📍 Localização: Slot 1/1/3, ONU 42
🏷️ VLAN: 603
🔌 Service-port: 1234
🏢 OLT: DITO
✅ Configurações aplicadas:
• Line-profile: DM986-100
• Serial number: FHTT12345678
• Ethernet: porta 1
• Native VLAN: 603
• Service-port: criado e configurado
• Configuração commitada
🎉 A ONU está pronta para uso!
```
### Erro
```
❌ Não foi possível adicionar a ONU
📱 Serial: FHTT12345678
🏢 OLT: DITO
❌ Erro: ONU FHTT12345678 não encontrada na lista de discovered-onus
💡 Dica: Verifique se a ONU está ligada e descoberta pela OLT.
Use o comando: show interface gpon discovered-onus
```
## Arquivos Modificados
### 1. `src/ssh/manager.js`
- `getVlanMapping()` - Mapeamento de VLANs por OLT/slot
- `discoverOnuSlot()` - Descobre slot da ONU na lista discovered-onus
- `getUsedOnuIds()` - Lista ONU IDs já em uso em um slot
- `findNextAvailableOnuId()` - Encontra próximo ID disponível
- `addOnu()` - Adiciona ONU completa (shell interativo)
- `addOnuBySerial()` - Processo completo por serial
### 2. `src/nlp/processor.js`
- Adicionado 'adicionar_onu' aos actionSynonyms
- Novos padrões regex para comandos de adição
- Suporte para variações de comando (add, criar, cadastrar, registrar)
### 3. `src/bot/handler.js`
- `handleAdicionarOnu()` - Interface para comando adicionar
- `handleAddOnuCallback()` - Callback para seleção de OLT e análise
- `handleConfirmAddCallback()` - Callback para confirmação e execução
- Atualização da mensagem de help
## Considerações Técnicas
### Performance
- Processo otimizado em etapas bem definidas
- Uso de shell interativo para operações complexas
- Timeout de 90 segundos para operações da OLT
### Confiabilidade
- Validação em todas as etapas
- Descoberta automática de configurações
- Logs detalhados para troubleshooting
### Usabilidade
- Interface intuitiva com botões
- Mensagens claras e informativas
- Confirmação visual antes da ação
## Limitações
1. **Dependência de Discovered-onus**: ONU deve estar na lista discovered-onus
2. **Mapeamento Fixo**: VLANs são pré-configuradas no código
3. **Timeout**: Operações longas podem exceder 90s
4. **Dependência SSH**: Requer conectividade estável
## Próximas Melhorias
1. **VLAN Configurável**: Permitir definir VLAN customizada
2. **Line-profile Dinâmico**: Detectar modelo da ONU automaticamente
3. **Validação Pós-adição**: Verificar se ONU subiu corretamente
4. **Adição em Lote**: Adicionar múltiplas ONUs de uma vez
## Teste da Funcionalidade
### Cenário de Teste
1. Certifique-se que há uma ONU na lista discovered-onus
2. Digite: `adicionar onu SERIAL_DA_ONU`
3. Selecione uma OLT na lista
4. Verifique as informações exibidas
5. Confirme a adição
6. Aguarde conclusão da operação
### Comandos de Teste
- `adicionar onu TESTE123456`
- `add onu TESTE123456`
- `cadastrar onu TESTE123456`
- `criar TESTE123456`
### Verificação Manual
```bash
# Verificar se ONU está discovered
show interface gpon discovered-onus
# Verificar ONU IDs em uso
show interface gpon 1/1/3 onu | nomore
# Após adição, verificar se ONU subiu
show interface gpon 1/1/3 onu ONUID
# Verificar service-port criado
show running-config service-port
```
-125
View File
@@ -1,125 +0,0 @@
# Correções Aplicadas na Funcionalidade ADD ONU
## Problemas Identificados e Soluções
### 1. **Problema de Roteamento de Callbacks** ✅ CORRIGIDO
**Problema:** O callback `confirm_add_` estava sendo capturado pela condição genérica `confirm_` antes de chegar ao handler específico.
**Solução:** Reordenei as condições no `src/bot/handler.js` para que `confirm_add_` seja verificado antes da condição genérica `confirm_`.
**Arquivo:** `src/bot/handler.js`
**Linhas:** ~775-785
### 2. **Problema na Sequência SSH - Contexto Ethernet** ✅ CORRIGIDO
**Problema:** Após o comando `ethernet 1`, o bot entrava no contexto `(config-ethernet-1)#`, mas a lógica não reconhecia este prompt para continuar.
**Solução:** Adicionei reconhecimento específico para o prompt `(config-ethernet-1)#` no step 6.
**Arquivo:** `src/ssh/manager.js`
**Código:**
```javascript
} else if (step === 6 && dataStr.includes('(config-ethernet')) {
// No modo ethernet - enviar native vlan
shouldSendCommand = true;
```
### 3. **Problema na Sequência SSH - Comando TOP** ✅ CORRIGIDO
**Problema:** Após `native vlan vlan-id 603`, o bot ainda estava em `(config-ethernet-1)#` mas esperava estar em `(config)#` para enviar `top`.
**Solução:** Ajustei a condição do step 7 para reconhecer o contexto ethernet antes de enviar `top`.
**Arquivo:** `src/ssh/manager.js`
**Código:**
```javascript
} else if (step === 7 && dataStr.includes('(config-ethernet')) {
// Após native vlan - enviar top para voltar ao config
shouldSendCommand = true;
```
### 4. **Ajuste das Condições Subsequentes** ✅ CORRIGIDO
**Problema:** Com a adição do step 7, todos os steps subsequentes ficaram desalinhados.
**Solução:** Reajustei todos os números dos steps:
- Step 8: service-port new
- Step 9: configuração service-port
- Step 10: comando gpon
- Step 11: commit
- Step 12: top
- Step 13: exit
- Step 14: exit final
## Sequência Completa de Comandos
```
0: config → (config)#
1: interface gpon 1/1/3 → (config-gpon-1/1/3)#
2: onu 0 → (config-gpon-onu-0)#
3: line-profile DM986-100 → (config-gpon-onu-0)#
4: serial-number DACM915E0F76 → (config-gpon-onu-0)#
5: ethernet 1 → (config-ethernet-1)#
6: native vlan vlan-id 603 → (config-ethernet-1)#
7: top → (config)#
8: service-port new → (config)#
9: gpon 1/1/3 onu 0 gem 1... → (config-serviceport-X)#
10: commit → (config)#
11: top → (config)#
12: exit → #
13: exit → desconexão
```
## Status das Correções
- ✅ **Callback Routing**: Corrigido
- ✅ **SSH Context Recognition**: Corrigido
- ✅ **Step Sequence**: Corrigido
- ✅ **Prompt Detection**: Corrigido
## Para Testar
1. **Reinicie o bot:**
```bash
cd c:\Users\rodri\build\bot-ajuda
npm start
```
2. **Teste no Telegram:**
```
adicionar onu DACM915E0F76
```
3. **Sequência esperada:**
- Seleção da OLT
- Descoberta automática do slot
- Confirmação das configurações
- Execução completa dos comandos SSH
- Mensagem de sucesso
## Logs Esperados
Você deve ver toda a sequência de comandos sendo executada:
```
📝 Enviando comando 1: config
📝 Enviando comando 2: interface gpon 1/1/3
📝 Enviando comando 3: onu 0
📝 Enviando comando 4: line-profile DM986-100
📝 Enviando comando 5: serial-number DACM915E0F76
📝 Enviando comando 6: ethernet 1
📝 Enviando comando 7: native vlan vlan-id 603
📝 Enviando comando 8: top
📝 Enviando comando 9: service-port new
📝 Enviando comando 10: gpon 1/1/3 onu 0 gem 1...
📝 Enviando comando 11: commit
📝 Enviando comando 12: top
📝 Enviando comando 13: exit
📝 Enviando comando 14: exit
```
## Próximos Passos
Se ainda houver problemas:
1. Verificar se todas as ONUs discovered estão sendo listadas
2. Testar com diferentes seriais
3. Verificar conectividade SSH com as OLTs
4. Analisar logs completos para identificar pontos de falha
**As correções foram aplicadas e o bot deve funcionar corretamente agora!** 🎉
-183
View File
@@ -1,183 +0,0 @@
# 🛡️ Sistema de Autenticação do Bot
## ✅ **IMPLEMENTADO COM SUCESSO**
### 🔐 **Controle de Acesso**
**Usuários Autorizados:** Apenas usuários na lista podem usar o bot
**Configuração:** Via arquivo `.env`
**Verificação:** Todas as mensagens e callbacks são verificados
### 📝 **Configuração**
**Arquivo:** `.env`
```properties
# IDs dos usuários autorizados (separados por vírgula)
ALLOWED_USERS=593272271
```
**Para adicionar mais usuários:**
```properties
ALLOWED_USERS=593272271,123456789,987654321
```
### 🚫 **Mensagem de Acesso Negado**
Usuários não autorizados recebem:
```
🚫 Acesso Negado
❌ Você não tem permissão para usar este bot.
🆔 Seu ID: 123456789
📞 Entre em contato com o administrador para solicitar acesso.
```
### 👤 **Como Descobrir ID do Usuário**
1. **Usuário envia mensagem para o bot**
2. **Bot responde com o ID na mensagem de negação**
3. **Ou use o comando:** `meu id`
### 🛠️ **Comandos Administrativos**
#### **`admin`** - Painel Administrativo
```
🛡️ Painel Administrativo
👥 Gestão de Usuários:
• usuarios autorizados - Ver lista de usuários
• meu id - Ver seu ID do Telegram
📊 Sistema:
• status - Status do bot
• equipamentos - Lista de equipamentos
🔧 Comandos disponíveis:
• Ver sinal, adicionar ONU, remover ONU
• Resetar ONU, atualizar firmware
• Gerenciar usuários Juniper
```
#### **`usuarios autorizados`** - Lista de Usuários
```
👥 Usuários Autorizados
📊 Total: 1 usuário(s)
1. ID: 593272271
🆔 Seu ID: 593272271
```
#### **`meu id`** - Identificação do Usuário
```
🆔 Sua Identificação
👤 User ID: 593272271
💬 Chat ID: 593272271
📋 Use estes IDs para configurar permissões
```
### 🔧 **Implementação Técnica**
#### **Verificação de Autorização**
```javascript
isAuthorized(userId) {
if (config.bot.allowedUsers.length === 0) {
return true; // Se não há lista, permite todos
}
return config.bot.allowedUsers.includes(userId);
}
```
#### **Proteção de Mensagens**
```javascript
// Verificar autorização
if (!this.isAuthorized(userId)) {
await this.bot.sendMessage(chatId, '🚫 Acesso Negado...');
return;
}
```
#### **Proteção de Callbacks**
```javascript
// Verificar autorização
if (!this.isAuthorized(userId)) {
await this.bot.answerCallbackQuery(callbackQuery.id, '🚫 Acesso negado');
return;
}
```
### 📊 **Logs de Segurança**
**Acesso negado:**
```
🚫 Acesso negado para usuário João (123456789)
🚫 Callback negado para usuário (123456789)
```
**Mensagens de usuários autorizados:**
```
📨 Mensagem de Rodrigo (593272271): admin
```
### 🚀 **Para Adicionar Novo Usuário**
1. **O usuário envia mensagem para o bot**
2. **Bot responde com o ID dele**
3. **Administrador adiciona o ID no `.env`:**
```properties
ALLOWED_USERS=593272271,NOVO_ID_AQUI
```
4. **Reiniciar o bot**
5. **Usuário já pode usar o bot**
### ⚡ **Exemplo de Uso**
**Usuário não autorizado tenta usar:**
```
Usuário: ver sinal DACM123456
Bot: 🚫 Acesso Negado
🆔 Seu ID: 123456789
```
**Administrador adiciona ID e reinicia bot:**
```properties
ALLOWED_USERS=593272271,123456789
```
**Usuário já autorizado:**
```
Usuário: ver sinal DACM123456
Bot: 📡 Selecione a OLT para verificar o sinal...
```
### 🛡️ **Segurança Implementada**
- ✅ **Controle total de acesso**
- ✅ **Verificação em todas as operações**
- ✅ **Logs de tentativas de acesso**
- ✅ **Mensagens informativas para negação**
- ✅ **Comandos administrativos**
- ✅ **Identificação de usuários**
### 🎯 **Status**
**Sistema de autenticação 100% funcional!**
**Usuário autorizado atual:** Rodrigo (593272271)
**Para testar:** Reinicie o bot e use `admin` para ver o painel
```bash
cd c:\Users\rodri\build\bot-ajuda
npm start
```
**No Telegram:**
- `admin` - Ver painel administrativo
- `usuarios autorizados` - Ver lista de usuários
- `meu id` - Ver seu ID
**Agora seu bot está seguro!** 🛡️✨
-88
View File
@@ -1,88 +0,0 @@
# Configuração do Bot de Telegram
## Passo 1: Obter Token do Bot
1. Abra o Telegram e procure por `@BotFather`
2. Digite `/newbot` e siga as instruções
3. Escolha um nome para seu bot (ex: "Bot de Ajuda Rede")
4. Escolha um username (ex: "bot_ajuda_rede_bot")
5. Copie o token fornecido pelo BotFather
## Passo 2: Configurar o arquivo .env
1. Abra o arquivo `.env` na raiz do projeto
2. Cole o token do bot:
```
TELEGRAM_BOT_TOKEN=1234567890:AABBCCDDEEFFgghhiijjkkllmmnnoopp
```
## Passo 3: Obter seu ID do Telegram (opcional - para restringir acesso)
1. No Telegram, procure por `@userinfobot`
2. Digite `/start`
3. Copie seu ID numérico
4. Adicione no arquivo `.env`:
```
ALLOWED_USERS=123456789
```
## Passo 4: Instalar dependências e executar
```bash
npm install
npm start
```
## Comandos de Teste
Após o bot estar rodando, teste no Telegram:
### Comandos básicos:
- `/start` - Iniciar o bot
- `/help` - Ver ajuda
- `/equipamentos` - Listar equipamentos
### Desconectar usuários (Juniper):
- "desconectar cliente joao123"
- "kick usuário maria456"
- "expulsar cliente teste"
### Listar usuários:
- "listar usuários conectados"
- "mostrar clientes"
### SSH:
- "ssh juniper"
- "conectar concentrador"
### Status:
- "verificar status concentrador"
- "status juniper"
## Equipamentos Configurados
- **juniper** - Concentrador Juniper (131.0.192.254)
- **concentrador** - Alias para o Juniper
- **router1** - Router exemplo (192.168.1.1)
- **switch1** - Switch exemplo (192.168.1.10)
## Comandos Juniper Suportados
- `clear network-access aaa subscriber USUARIO` - Desconectar usuário
- `show network-access aaa subscribers` - Listar usuários conectados
## Troubleshooting
### Bot não responde:
1. Verifique se o token está correto no `.env`
2. Verifique se não há erros no console
3. Teste com `/start`
### Erro de SSH:
1. Verifique se o IP 131.0.192.254 está acessível
2. Teste credenciais manualmente
3. Verifique firewall/portas
### Bot responde "sem permissão":
1. Adicione seu ID no `ALLOWED_USERS` no `.env`
2. Ou remova a linha para permitir todos os usuários
-110
View File
@@ -1,110 +0,0 @@
# 🐳 Docker Quick Start - Bot de Ajuda Telegram
## ⚡ **DEPLOY RÁPIDO**
### **1. Configurar Ambiente**
```bash
# Copiar template
cp .env.production .env
# Editar credenciais
nano .env # Linux/Mac
notepad .env # Windows
```
### **2. Deploy Automático**
```bash
# Linux/Mac
./deploy.sh
# Windows
.\deploy.ps1
# Manual
docker-compose up -d --build
```
### **3. Verificar**
```bash
# Status
docker-compose ps
# Logs
docker-compose logs -f telegram-bot
# Teste no Telegram
# Envie: /start
```
## 🔧 **COMANDOS ÚTEIS**
```bash
# Gerenciamento básico
docker-compose up -d # Iniciar
docker-compose down # Parar
docker-compose restart # Reiniciar
docker-compose ps # Status
# Logs e debug
docker-compose logs -f # Logs em tempo real
docker-compose logs --tail=50 # Últimos 50 logs
docker stats bot-ajuda-telegram # Uso de recursos
# Build e update
docker-compose build --no-cache # Rebuild
docker-compose up -d --build # Update e restart
```
## 📊 **MONITORAMENTO**
```bash
# Health check
docker-compose exec telegram-bot node -e "console.log('OK')"
# Verificar conectividade SSH
docker-compose exec telegram-bot ping 131.0.192.254
# Ver configuração
docker-compose config
```
## 🚨 **TROUBLESHOOTING**
### **Bot não inicia:**
```bash
docker-compose logs telegram-bot | grep ERROR
```
### **Problema SSH:**
```bash
docker-compose logs telegram-bot | grep SSH
```
### **Erro Telegram:**
```bash
docker-compose logs telegram-bot | grep TelegramError
```
## 📋 **ESTRUTURA**
```
bot-ajuda/
├── Dockerfile # Configuração da imagem
├── docker-compose.yml # Orquestração
├── .dockerignore # Otimização build
├── .env.production # Template configuração
├── deploy.sh # Script deploy Linux/Mac
├── deploy.ps1 # Script deploy Windows
└── logs/ # Logs persistentes
```
## ✅ **PRONTO!**
Seu bot está rodando em produção com:
- 🔒 Segurança (usuário não-root)
- 📊 Monitoramento (health checks)
- 🔄 Restart automático
- 📝 Logs persistentes
- ⚡ Performance otimizada
**Teste enviando `/start` para o bot no Telegram!** 🎉
-70
View File
@@ -1,70 +0,0 @@
# 🎯 Correção Final - Duplo Exit Implementado
## ✅ **Problema Identificado e Corrigido:**
Você estava correto! São necessários **dois comandos `exit`** para sair completamente dos modos de configuração:
### 📋 **Sequência Correta Implementada:**
```bash
1. config # Entra no modo configuração
2. interface gpon 1/1/1 # Entra no modo interface específica
3. onu-reset onu 10 # Executa reset da ONU
4. yes # Confirma o reset
5. exit # Sai do modo interface (config-gpon-1/1/1 → config)
6. exit # Sai do modo configuração (config → modo normal)
```
### 🎯 **Fluxo Detalhado:**
```bash
DM4610-OLT-POP-DITO# config
Entering configuration mode terminal
DM4610-OLT-POP-DITO(config)# interface gpon 1/1/1
DM4610-OLT-POP-DITO(config-gpon-1/1/1)# onu-reset onu 10
Are you sure you want to reset this ONU? [no,yes] yes
DM4610-OLT-POP-DITO(config-gpon-1/1/1)# exit ← Primeiro exit
DM4610-OLT-POP-DITO(config)# exit ← Segundo exit
DM4610-OLT-POP-DITO# ← Volta ao modo normal
```
### 🔧 **Mudanças Implementadas:**
1. **Array de comandos atualizado:**
- Adicionado primeiro `exit` (sai do modo interface)
- Adicionado segundo `exit` (sai do modo configuração)
2. **Removido exit duplicado:**
- Eliminado o `exit` que era executado separadamente
- Agora tudo está na sequência principal
3. **Logs atualizados:**
- Mostra execução de 6 comandos (em vez de 4)
- Indica claramente cada etapa de saída
### 📊 **Logs Esperados:**
```
📝 Executando comando 1/6: config
📝 Executando comando 2/6: interface gpon 1/1/1
📝 Executando comando 3/6: onu-reset onu 10
⏳ Aguardando prompt de confirmação...
📝 Executando comando 4/6: yes
📝 Executando comando 5/6: exit
📝 Executando comando 6/6: exit
🔌 Desconectado da OLT
```
### ✅ **Resultado:**
- ✅ Entra no modo configuração corretamente
- ✅ Executa reset da ONU
- ✅ Confirma com "yes"
- ✅ Sai do modo interface
- ✅ Sai do modo configuração
- ✅ Retorna ao prompt normal
- ✅ Desconecta limpo
**🚀 Agora o reset da ONU deve funcionar perfeitamente e sair de todos os modos corretamente!**
**Obrigado pela observação precisa sobre os dois exits! 👍**
-64
View File
@@ -1,64 +0,0 @@
# Correções Finais - ADD ONU SSH Context
## ✅ **PROBLEMAS CORRIGIDOS**
### 1. **Service-Port Context Detection**
**Problema:** Após `service-port new`, bot vai para `(config-service-port-X)#` mas condição esperava `(config)#`
**Correção Step 9:**
```javascript
} else if (step === 9 && dataStr.includes('(config-service-port')) {
// Após service-port new - enviar configuração service-port
shouldSendCommand = true;
```
### 2. **Sequência de Contextos Corrigida**
```
Step 8: service-port new → (config-service-port-X)#
Step 9: gpon 1/1/3 onu 0... → (config-service-port-X)#
Step 10: commit → (config)#
Step 11: top → (config)#
Step 12: exit → #
Step 13: exit → desconexão
```
### 3. **Condições Atualizadas**
- ✅ Step 9: `(config-service-port` detection
- ✅ Step 10: `(config-service-port` para commit
- ✅ Step 11: `(config)#` após commit
- ✅ Step 12: `(config)#` para exit
- ✅ Step 13: `#` sem config para exit final
## 🚀 **TESTE AGORA**
**Reinicie o bot e teste:**
```bash
cd c:\Users\rodri\build\bot-ajuda
npm start
```
**No Telegram:**
```
adicionar onu DACM915E0F76
```
**Sequência esperada completa:**
```
📝 Enviando comando 1: config
📝 Enviando comando 2: interface gpon 1/1/3
📝 Enviando comando 3: onu 0
📝 Enviando comando 4: line-profile DM986-100
📝 Enviando comando 5: serial-number DACM915E0F76
📝 Enviando comando 6: ethernet 1
📝 Enviando comando 7: native vlan vlan-id 603
📝 Enviando comando 8: top
📝 Enviando comando 9: service-port new
📝 Enviando comando 10: gpon 1/1/3 onu 0 gem 1...
📝 Enviando comando 11: commit
📝 Enviando comando 12: top
📝 Enviando comando 13: exit
📝 Enviando comando 14: exit
✅ ONU Adicionada com Sucesso!
```
**Agora deve funcionar 100%!** 🎯
-132
View File
@@ -1,132 +0,0 @@
# 🔧 Correção de Timeout na Atualização de Firmware
## 🐛 **Problema Identificado:**
O método de atualização de firmware estava usando shell interativo com timeout de 60 segundos, mas o comando `request firmware onu install` demora muito mais tempo para processar completamente, causando timeout.
**Erro observado:**
```
Error: Timeout na operação de update firmware
```
## ✅ **Solução Implementada:**
### **Mudança de Estratégia:**
- ❌ **ANTES:** Shell interativo com espera de processamento completo
- ✅ **DEPOIS:** `executeCommand` simples + sucesso imediato após envio
### **Nova Lógica:**
1. **Conecta** na OLT
2. **Envia** o comando `request firmware onu install...`
3. **Considera sucesso** imediatamente após envio
4. **Desconecta** da OLT
5. **Informa** que o comando foi enviado (não que completou)
## 🔄 **Código Corrigido:**
### **Método `updateOnuFirmware` Simplificado:**
```javascript
async updateOnuFirmware(equipmentId, slot, onuId, firmwareFile) {
// 1. Conectar
const connection = await this.connect(equipmentId);
// 2. Enviar comando
const firmwareCommand = `request firmware onu install ${firmwareFile} interface gpon ${slot} onu ${onuId}`;
const result = await this.executeCommand(connection.connectionId, firmwareCommand);
// 3. Desconectar imediatamente
this.disconnect(connection.connectionId);
// 4. Considerar sucesso (comando enviado)
return {
success: true,
message: `Comando de atualização de firmware enviado com sucesso`
};
}
```
### **Mensagens Atualizadas:**
#### **Mensagem de Sucesso:**
```
✅ Comando de Atualização Enviado!
📦 Firmware: DM986-100-v56.tar
📍 Slot: 1/1/1
🔌 ONU ID: 5
🏢 OLT: DITO
✅ Status: Comando enviado com sucesso
⏳ Processamento: A atualização está sendo processada pela OLT
🕒 Tempo estimado: 5-15 minutos
📡 Importante: Monitore o status da ONU
💡 A ONU ficará offline durante a atualização
```
#### **Mensagem de Erro:**
```
❌ Erro ao Enviar Comando
📦 Firmware: DM986-100-v56.tar
📍 Slot: 1/1/1
🔌 ONU ID: 5
🏢 OLT: DITO
❌ Erro: [detalhes do erro]
🔄 Tente novamente ou verifique a conexão
```
## 📋 **Vantagens da Nova Abordagem:**
### **✅ Benefícios:**
- **Sem timeout:** Não aguarda processamento completo
- **Resposta rápida:** Feedback imediato ao usuário
- **Simplicidade:** Menos complexidade no código
- **Confiabilidade:** Não depende de detecção de prompts
### **📝 Considerações:**
- **Responsabilidade do usuário:** Monitorar status da ONU
- **Transparência:** Usuário sabe que é apenas envio do comando
- **Realismo:** Reflete a realidade do processo (demora mesmo)
## 🎯 **Resultado Esperado:**
### **Processo Completo:**
1. **Usuário:** Clica "⬆️ Atualizar ONU"
2. **Bot:** Detecta modelo e mostra opções
3. **Usuário:** Escolhe firmware e confirma
4. **Bot:** Envia comando rapidamente (~5 segundos)
5. **Bot:** Informa sucesso do envio
6. **OLT:** Processa atualização (5-15 minutos)
7. **Usuário:** Monitora status da ONU
### **Fluxo de Logs:**
```
🔄 Iniciando update firmware ONU - OLT: olt_dito, Slot: 1/1/1, ONU: 5, FW: DM986-100-v56.tar
📡 Conectando na OLT: olt_dito
✅ Conectado! ConnectionId: olt_dito_xxxxx
📝 Enviando comando: request firmware onu install DM986-100-v56.tar interface gpon 1/1/1 onu 5
🔌 Desconectado da OLT
```
## ✅ **Status:**
- [x] Método `updateOnuFirmware` simplificado
- [x] Timeout removido
- [x] Mensagens atualizadas
- [x] Código testado e validado
- [x] Documentação atualizada
**🚀 Correção implementada e pronta para uso!**
## 🧪 **Como Testar:**
1. **Reinicie o bot** para carregar as alterações
2. Digite: `ver sinal DACM91569513`
3. Clique: `⬆️ Atualizar ONU`
4. Escolha firmware e confirme
5. **Resultado esperado:** Sucesso em ~5 segundos
6. **Aguarde:** 5-15 minutos para a OLT processar
**💡 Agora o bot responde rapidamente após enviar o comando, sem aguardar o processamento completo!**
-186
View File
@@ -1,186 +0,0 @@
# ⬆️ Funcionalidade de Atualização de Firmware ONU - Implementação Completa
## 🎯 **Visão Geral**
Nova funcionalidade que permite atualizar o firmware de ONUs diretamente pelo bot do Telegram, com detecção automática do modelo e seleção de firmware específica.
## 📋 **Recursos Implementados**
### 1. **Detecção Automática de Modelo**
- ✅ Identifica automaticamente o Equipment ID da ONU
- ✅ Suporte para modelos DM986-100 e DM986-414
- ✅ Parser inteligente que busca Equipment ID no output
### 2. **Opções de Firmware por Modelo**
#### **DM986-100:**
- 📦 **FW INTERMEDIÁRIA:** `DM986-100-inter.tar`
- 📦 **FW ATUAL (v56):** `DM986-100-v56.tar`
- 📦 **FW ROUTER (R300):** `DM986-100-R300.tar`
#### **DM986-414:**
- 📦 **FW INTERMEDIÁRIA:** `DM986-414-inter.tar`
- 📦 **FW ATUAL (v70):** `DM986-414-v70.tar`
### 3. **Interface de Usuário**
- ✅ Botão "⬆️ Atualizar ONU" nos resultados de verificação de sinal
- ✅ Menu de seleção de firmware específico para cada modelo
- ✅ Sistema de confirmação dupla para segurança
- ✅ Feedback detalhado durante todo o processo
## 🔧 **Implementação Técnica**
### **Novos Métodos no SSH Manager:**
1. **`getOnuDetails(equipmentId, slot, onuId)`**
- Executa `show interface gpon SLOT onu ONU_ID`
- Extrai Equipment ID do output
- Retorna informações detalhadas da ONU
2. **`parseEquipmentId(output)`**
- Parser inteligente para identificar modelo
- Busca por padrões "Equipment ID:" e modelos conhecidos
- Suporte a diferentes formatos de output
3. **`updateOnuFirmware(equipmentId, slot, onuId, firmwareFile)`**
- Executa comando `request firmware onu install ARQUIVO interface gpon SLOT onu ONU_ID`
- Usa shell interativo para estabilidade
- Timeout de 60 segundos
### **Novos Handlers no Bot:**
1. **`handleUpdateOnuCallback()`**
- Processa clique no botão "⬆️ Atualizar ONU"
- Detecta modelo da ONU automaticamente
- Gera menu de opções de firmware
2. **`handleFirmwareCallback()`**
- Processa seleção de firmware específico
- Mostra tela de confirmação com detalhes
3. **`handleConfirmFirmware()`**
- Executa atualização após confirmação
- Feedback em tempo real do processo
## 🚀 **Fluxo de Uso**
### **1. Iniciar Verificação:**
```
Usuario: ver sinal DACM91569513
```
### **2. Resultados com Novo Botão:**
```
📡 Sinal da ONU DACM91569513
🏢 OLT: OLT DITO (192.168.190.7)
📍 Localização: Slot 1/1/1, ONU 5
Botões:
[🔄 Atualizar sinal] [📋 Ver configuração]
[🔌 Reiniciar ONU] [⬆️ Atualizar ONU] ← NOVO
[🔍 Pesquisar em outra OLT]
```
### **3. Detecção Automática:**
```
🔍 Identificando modelo da ONU 5 no slot 1/1/1...
⬆️ Atualização de Firmware
📍 Slot: 1/1/1
🔌 ONU ID: 5
🏢 OLT: DITO
🔍 Modelo: DM986-100
📦 Selecione a versão do firmware:
[📦 FW INTERMEDIÁRIA]
[📦 FW ATUAL (v56)]
[📦 FW ROUTER (R300)]
[❌ Cancelar]
```
### **4. Confirmação:**
```
⚠️ Confirmação de Atualização de Firmware
📦 Firmware: DM986-100-v56.tar
📍 Slot: 1/1/1
🔌 ONU ID: 5
🏢 OLT: DITO
⚠️ ATENÇÃO:
• A atualização pode demorar alguns minutos
• A ONU ficará offline durante o processo
• Não interrompa a operação
[✅ SIM, Atualizar] [❌ Cancelar]
```
### **5. Execução:**
```
⬆️ Atualizando Firmware...
📦 Firmware: DM986-100-v56.tar
📍 Slot: 1/1/1
🔌 ONU ID: 5
🏢 OLT: DITO
⏳ Enviando comando de atualização...
↓ (Após processamento)
✅ Firmware Enviado com Sucesso!
⏳ Status: Comando enviado para a OLT
🔄 A atualização pode levar alguns minutos
📡 Monitore o status da ONU
```
## 📊 **Comandos Executados**
### **1. Detecção de Modelo:**
```bash
show interface gpon 1/1/1 onu 5
```
### **2. Atualização de Firmware:**
```bash
request firmware onu install DM986-100-v56.tar interface gpon 1/1/1 onu 5
```
## ⚠️ **Considerações Importantes**
### **Segurança:**
- ✅ Confirmação dupla obrigatória
- ✅ Validação de modelo antes de mostrar opções
- ✅ Avisos sobre impacto da operação
### **Compatibilidade:**
- ✅ Apenas modelos DM986-100 e DM986-414 suportados
- ✅ Mensagem clara para modelos não suportados
- ✅ Parsing robusto de Equipment ID
### **Processo:**
- ⏳ Operação pode demorar alguns minutos
- 📡 ONU fica offline durante atualização
- 🔄 Usuário deve monitorar status após envio
## 🎯 **Status da Implementação**
- [x] Detecção automática de modelo
- [x] Menu de firmware específico por modelo
- [x] Sistema de confirmação
- [x] Comandos de atualização
- [x] Interface de usuário completa
- [x] Tratamento de erros
- [x] Documentação
- [x] Arquivo de teste
**🚀 Funcionalidade de Atualização de Firmware ONU implementada e pronta para uso!**
## 🧪 **Como Testar**
1. **Reinicie o bot** para carregar as alterações
2. Digite: `ver sinal DACM91569513`
3. Clique: `⬆️ Atualizar ONU`
4. Veja a detecção automática do modelo
5. Escolha uma opção de firmware
6. Confirme a operação
7. Acompanhe o processo de atualização
-131
View File
@@ -1,131 +0,0 @@
# 🤖 Bot de Telegram Multifuncional - Funcionalidades
## ✅ Funcionalidades Implementadas
### 🔐 **Concentrador Juniper (131.0.192.254)**
- **Desconectar usuários**: `clear network-access aaa subscriber username USUARIO`
- **Listar usuários conectados**: `show network-access aaa subscribers`
- **Comandos aceitos**:
- "desconectar cliente joao123"
- "kick usuário maria456"
- "expulsar cliente teste"
- "remover cliente admin"
- "listar usuários conectados"
### 📡 **OLTs para Verificação de Sinal**
- **OLT DITO**: 192.168.190.7
- **OLT COLMEIA**: 192.168.190.8
- **OLT CANAA**: 192.168.190.9
- **OLT CANAA 2**: 192.168.190.10
**Processo de verificação de sinal:**
1. **Busca da ONU**: `show running-config interface gpon | context-match "SERIAL"`
2. **Extração de dados**: Slot e ONU ID
3. **Verificação do sinal**: `show interface gpon SLOT onu ONU_ID | nomore`
**Comandos aceitos:**
- "ver sinal DACM91569513"
- "verificar sinal ABCD12345678"
- "sinal TESTE123456"
### 🧠 **Processamento de Linguagem Natural**
#### Comandos Suportados:
- ✅ `/start` - Inicializar bot
- ✅ `/help` - Ajuda e comandos
- ✅ `/equipamentos` - Listar equipamentos
- ✅ **Desconectar usuários** (múltiplos formatos)
- ✅ **Verificar sinal de ONU** (com seleção de OLT)
- ✅ **Listar usuários conectados**
- ✅ **Conexões SSH**
- ✅ **Status de equipamentos**
#### Detecção Inteligente:
- Reconhece sinônimos (desconectar = kick = expulsar = remover)
- Detecta nomes de usuários vs equipamentos
- Sugestões automáticas para comandos incorretos
- Confiança baseada em padrões regex e palavras-chave
### 🎛️ **Interface do Telegram**
#### Menus Interativos:
- **Seleção de OLT** para verificação de sinal
- **Opções pós-verificação** (atualizar, ver config, pesquisar em outra OLT)
- **Gerenciamento de usuários** (atualizar lista, desconectar)
- **Confirmações** para ações críticas
#### Botões Inline:
- 📊 Status
- 🔄 Reiniciar/Atualizar
- 📋 Comandos personalizados
- ❌ Desconectar/Cancelar
- 🔍 Pesquisar em outras OLTs
### 🔧 **Arquitetura Modular**
```
src/
├── index.js # Entrada principal
├── bot/
│ └── handler.js # Lógica principal do bot
├── ssh/
│ └── manager.js # Gerenciamento SSH e comandos
├── nlp/
│ └── processor.js # Processamento de linguagem natural
└── config/
└── config.js # Configurações
```
### 🛡️ **Recursos de Segurança**
- **Autenticação**: Lista de usuários autorizados (ALLOWED_USERS)
- **Validação**: Verificação de parâmetros e comandos
- **Timeouts**: Timeout configurável para conexões SSH
- **Error Handling**: Tratamento robusto de erros
### 📊 **Monitoramento e Debug**
- **Logs detalhados** com modo debug
- **Tracking de intenções** NLP
- **Rastreamento de conexões** SSH ativas
- **Métricas de confiança** para comandos
## 🎯 **Exemplos de Uso**
### Desconectar Usuários:
```
"Desconectar usuario analuciagomes"
"kick cliente joao123"
"expulsar usuário maria456"
```
### Verificar Sinal:
```
"ver sinal DACM91569513"
"verificar sinal ABCD12345678"
"sinal TESTE123456"
```
### Outros Comandos:
```
"listar usuários conectados"
"ssh concentrador"
"status juniper"
"ping 192.168.190.7"
```
## 🚀 **Próximos Passos Sugeridos**
1. **Expansão de OLTs**: Adicionar mais equipamentos
2. **Comandos Avançados**: Reset de ONU, alteração de VLAN
3. **Relatórios**: Logs de ações, histórico de comandos
4. **Notificações**: Alertas automáticos de problemas
5. **Interface Web**: Dashboard complementar
6. **Backup/Restore**: Configurações de equipamentos
7. **Agendamento**: Tarefas programadas
8. **Multi-tenant**: Suporte a múltiplos clientes
## ⚙️ **Configuração Rápida**
1. Configure o `.env` com o token do bot
2. Execute `npm install && npm start`
3. No Telegram: `/start` para começar
4. Use `/help` para ver todos os comandos
-146
View File
@@ -1,146 +0,0 @@
# 🔧 Correção: Erro no Comando /help
## ❌ **PROBLEMA IDENTIFICADO**
**Erro:** `TelegramError: ETELEGRAM: 400 Bad Request: can't parse entities: Can't find end of the entity starting at byte offset 734`
**Causa:** Problema no parsing do Markdown na mensagem de ajuda devido a caracteres especiais mal formatados.
## ✅ **SOLUÇÃO APLICADA**
### 1. **Remoção do Markdown Problemático**
- **Antes:** Usava `parse_mode: 'Markdown'` com formatação complexa
- **Agora:** Mensagem simples sem Markdown para evitar erros de parsing
### 2. **Reformatação da Mensagem**
- **Antes:** Asteriscos (*) para negrito que causavam conflitos
- **Agora:** Emojis e texto simples para organização visual
### 3. **Estrutura Melhorada**
```
📋 COMANDOS DISPONÍVEIS:
🔧 COMANDOS BÁSICOS:
/start - Inicia o bot
/help - Mostra esta ajuda
/equipamentos - Lista equipamentos
🔐 SSH E CONEXÕES:
...
👥 JUNIPER - GERENCIAR USUÁRIOS:
...
📡 OLT - VERIFICAR SINAL DE ONU:
...
➕ OLT - ADICIONAR ONU:
...
🗑️ OLT - REMOVER ONU:
...
🔄 OLT - REINICIAR ONU:
...
⬆️ OLT - ATUALIZAR FIRMWARE ONU:
...
📊 STATUS E MONITORAMENTO:
...
🗣️ LINGUAGEM NATURAL:
...
✅ EXEMPLOS PRÁTICOS:
...
🏢 OLTs DISPONÍVEIS:
...
🛡️ COMANDOS ADMINISTRATIVOS:
...
🔒 SEGURANÇA:
...
```
## 🔍 **ANÁLISE DO ERRO**
**Byte offset 734:** Indica que o erro ocorreu em um ponto específico da mensagem onde havia formatação Markdown mal formada.
**Possíveis causas:**
1. Asteriscos (*) não fechados corretamente
2. Underscores (_) em posições problemáticas
3. Caracteres especiais conflitando com o parsing
4. Formatação aninhada incorreta
## 🛠️ **ALTERAÇÕES TÉCNICAS**
### **Antes:**
```javascript
await this.bot.sendMessage(chatId, helpMessage, { parse_mode: 'Markdown' });
```
### **Agora:**
```javascript
await this.bot.sendMessage(chatId, helpMessage);
```
**Resultado:** Mensagem enviada como texto simples sem parsing de Markdown.
## ✅ **BENEFÍCIOS DA CORREÇÃO**
1. **🚫 Sem Erros:** Eliminação completa do erro de parsing
2. **📱 Compatibilidade:** Funciona em todos os clientes Telegram
3. **👀 Legibilidade:** Emojis tornam a mensagem mais visual
4. **⚡ Performance:** Sem overhead de parsing Markdown
5. **🔧 Manutenibilidade:** Mais fácil de editar sem se preocupar com formatação
## 🎯 **RESULTADO**
**Comando `/help` agora funciona perfeitamente!**
### **Estrutura Visual:**
- ✅ Seções organizadas com emojis
- ✅ Comandos claramente separados
- ✅ Exemplos práticos destacados
- ✅ Informações de segurança visíveis
- ✅ Lista completa de OLTs disponíveis
### **Funcionalidades Exibidas:**
- 🔧 Comandos básicos
- 🔐 SSH e conexões
- 👥 Gerenciamento de usuários Juniper
- 📡 Verificação de sinal ONU
- ➕ Adição de ONU (novo!)
- 🗑️ Remoção de ONU
- 🔄 Reinicialização de ONU
- ⬆️ Atualização de firmware
- 📊 Status e monitoramento
- 🛡️ Comandos administrativos
## 🚀 **PARA TESTAR**
Reinicie o bot e teste:
```bash
cd c:\Users\rodri\build\bot-ajuda
npm start
```
**No Telegram:**
```
/help
```
**Resultado esperado:** Mensagem completa exibida sem erros, com todas as funcionalidades organizadas por categoria.
## 📝 **PREVENÇÃO FUTURA**
Para evitar problemas similares:
1. **Teste sempre** comandos que usam Markdown
2. **Use texto simples** quando possível
3. **Valide caracteres especiais** antes de enviar
4. **Implemente fallback** para mensagens críticas
**Correção aplicada com sucesso!** ✅
-140
View File
@@ -1,140 +0,0 @@
# Atualização: Novas OLTs Adicionadas
## Resumo
Foram adicionadas duas novas OLTs ao sistema para suporte completo às funcionalidades de verificação de sinal e remoção de ONU.
## Novas OLTs Configuradas
### 1. OLT PEDRO AFONSO 1
- **ID:** `olt_pedro_afonso`
- **Nome:** "OLT PEDRO AFONSO 1"
- **Host:** 192.168.100.2
- **Credenciais:** admin/admin
- **Porta:** 22
- **Tipo:** Datacom
### 2. OLT CANAVIEIRAS
- **ID:** `olt_canavieiras`
- **Nome:** "OLT CANAVIEIRAS"
- **Host:** 192.168.100.4
- **Credenciais:** admin/admin
- **Porta:** 22
- **Tipo:** Datacom
## Funcionalidades Suportadas
As novas OLTs têm suporte completo para todas as funcionalidades existentes:
### ✅ Verificação de Sinal
- Comando: `ver sinal SERIAL_DA_ONU`
- Busca automática da ONU pelo serial
- Exibição de informações detalhadas do sinal
- Botões para ações adicionais (reiniciar, atualizar, etc.)
### ✅ Remoção de ONU
- Comando: `remover onu SERIAL_DA_ONU`
- Busca automática da ONU e service-port
- Confirmação obrigatória antes da remoção
- Remoção completa (interface + service-port)
### ✅ Reiniciar ONU
- Disponível após verificar sinal
- Processo seguro com confirmação
- Execução automática dos comandos
### ✅ Atualizar Firmware ONU
- Disponível após verificar sinal
- Detecção automática do modelo
- Opções de firmware específicas
- Processo otimizado sem timeout
## Lista Completa de OLTs Disponíveis
Agora o sistema suporta **6 OLTs** no total:
1. **OLT DITO** (192.168.190.7)
2. **OLT COLMEIA** (192.168.190.8)
3. **OLT CANAA** (192.168.190.9)
4. **OLT CANAA 2** (192.168.190.10)
5. **OLT PEDRO AFONSO 1** (192.168.100.2) 🆕
6. **OLT CANAVIEIRAS** (192.168.100.4) 🆕
## Arquivos Modificados
### 1. `src/ssh/manager.js`
- Adicionadas configurações das duas novas OLTs
- Mantido padrão existente de nomenclatura
- Credenciais admin/admin conforme especificado
### 2. `src/bot/handler.js`
- Atualizada mensagem de help com as novas OLTs
- Atualizados comentários de exemplo nos callbacks
- Sistema automaticamente suporta as novas OLTs
## Compatibilidade
### ✅ Callbacks Automáticos
O sistema de callbacks já estava preparado para IDs compostos:
- `olt_pedro_afonso` → parsing automático como `olt_` + `pedro_afonso`
- `olt_canavieiras` → parsing automático como `olt_` + `canavieiras`
### ✅ Funcionalidades Existentes
Todas as funcionalidades existentes funcionam automaticamente:
- Seleção de OLT via botões inline
- Verificação de sinal por serial
- Remoção de ONU com confirmação
- Reinicialização de ONU
- Atualização de firmware
## Como Testar
### Teste de Verificação de Sinal
1. Digite: `ver sinal SERIAL_DA_ONU`
2. Selecione **"OLT PEDRO AFONSO 1"** ou **"OLT CANAVIEIRAS"**
3. Verifique se a busca funciona corretamente
### Teste de Remoção de ONU
1. Digite: `remover onu SERIAL_DA_ONU`
2. Selecione uma das novas OLTs
3. Confirme se encontra a ONU e service-port
4. Teste a confirmação de remoção
### Verificação de Help
1. Digite: `/help`
2. Confirme que as novas OLTs aparecem na lista
## Considerações Técnicas
### Rede 192.168.100.x
As novas OLTs estão na rede 192.168.100.x (diferente das existentes 192.168.190.x):
- Verifique conectividade de rede
- Confirme que as credenciais admin/admin estão corretas
- Teste conectividade SSH antes do uso
### Performance
- Mesma arquitetura das OLTs existentes
- Timeouts e tratamento de erro idênticos
- Logs detalhados para troubleshooting
## Próximos Passos
1. **Teste em Produção**: Validar conectividade com as novas OLTs
2. **Verificação de Credenciais**: Confirmar usuário/senha corretos
3. **Teste de Comandos**: Validar compatibilidade dos comandos Datacom
4. **Monitoramento**: Acompanhar logs para identificar possíveis ajustes
## Comando de Teste Rápido
```bash
# Reiniciar o bot
node src/index.js
# Testar help
/help
# Testar nova OLT
ver sinal TESTE123456
# Selecionar "OLT PEDRO AFONSO 1" ou "OLT CANAVIEIRAS"
```
As duas novas OLTs estão prontas para uso com funcionalidade completa! 🚀
-208
View File
@@ -1,208 +0,0 @@
# Funcionalidade: Remover ONU
## Descrição
Nova funcionalidade implementada para remover ONUs completamente das OLTs, incluindo a interface e o service-port.
## Como Usar
### Comando de Texto
```
remover onu SERIAL_DA_ONU
remover SERIAL_DA_ONU
deletar onu SERIAL_DA_ONU
apagar SERIAL_DA_ONU
```
### Exemplos
- `remover onu FHTT12345678`
- `remover DACM91569513`
- `deletar onu ABCD12345678`
## Fluxo de Operação
### 1. Comando Inicial
O usuário digita o comando com o serial da ONU que deseja remover.
### 2. Seleção da OLT
O bot apresenta uma lista das OLTs disponíveis para o usuário escolher onde buscar a ONU.
### 3. Busca da ONU
O sistema busca a ONU pelo serial na OLT selecionada e localiza:
- Slot da ONU
- ONU ID
- Service-port associado
### 4. Confirmação
Antes de remover, o bot exibe todas as informações encontradas e pede confirmação:
- Serial da ONU
- Localização (slot e ONU ID)
- Service-port
- OLT selecionada
### 5. Remoção
Após confirmação, o sistema executa automaticamente:
```bash
config
interface gpon SLOT
no onu ONU_ID
top
no service-port SERVICE_PORT_ID
commit
top
exit
exit
```
## Comandos SSH Executados
### Busca do Service-port
```bash
show running-config service-port | context-match "gpon SLOT onu ONU_ID"
```
### Remoção da ONU
```bash
config
interface gpon 1/1/3 # Exemplo de slot
no onu 0 # Exemplo de ONU ID
top
no service-port 102 # Exemplo de service-port
commit
top
exit
exit
```
## Recursos de Segurança
### Confirmação Obrigatória
- Sistema exige confirmação explícita antes de remover
- Exibe todas as informações da ONU antes da remoção
- Aviso de que a ação não pode ser desfeita
### Validação de Dados
- Verifica se a ONU existe na OLT selecionada
- Localiza o service-port automaticamente
- Confirma todas as informações antes de proceder
### Processo Controlado
- Usa shell interativo para manter contexto
- Timeout de segurança (60 segundos)
- Logging detalhado de todas as operações
## Tratamento de Erros
### ONU Não Encontrada
- Mensagem clara informando que a ONU não foi encontrada
- Sugestão para verificar serial ou tentar outra OLT
### Erro de Conexão
- Informa problemas de conectividade com a OLT
- Sugere tentar novamente
### Service-port Não Encontrado
- Caso o service-port não seja localizado
- Exibe saída dos comandos para diagnóstico
### Timeout
- Processo é interrompido após 60 segundos
- Conexão é fechada adequadamente
## Resultados
### Sucesso
```
✅ ONU Removida com Sucesso!
📱 Serial: FHTT12345678
📍 Localização: Slot 1/1/3, ONU 0
🔌 Service-port: 102
🏢 OLT: DITO
✅ Status: ONU removida completamente
🗑️ Ações realizadas:
• Removida interface ONU
• Removido service-port
• Configuração commitada
💡 A ONU pode ser reconfigurada quando necessário
```
### Erro
```
❌ Erro na Remoção
📱 Serial: FHTT12345678
📍 Localização: Slot 1/1/3, ONU 0
🔌 Service-port: 102
🏢 OLT: DITO
❌ Erro: [Descrição do erro]
🔄 Verifique o status da ONU ou tente novamente
```
## Arquivos Modificados
### 1. `src/ssh/manager.js`
- `findServicePort()` - Localiza service-port de uma ONU
- `parseServicePort()` - Extrai service-port da saída SSH
- `removeOnu()` - Remove ONU completa (shell interativo)
- `removeOnuBySerial()` - Processo completo por serial
### 2. `src/nlp/processor.js`
- Adicionado 'remover_onu' aos actionSynonyms
- Novos padrões regex para comandos de remoção
- `looksLikeOnuSerial()` - Valida formato de serial
### 3. `src/bot/handler.js`
- `handleRemoverOnu()` - Interface para comando remover
- `handleRemoveOnuCallback()` - Callback para seleção de OLT
- `handleConfirmRemoveCallback()` - Callback para confirmação
- Atualização da mensagem de help
## Considerações Técnicas
### Performance
- Processo otimizado em 3 etapas bem definidas
- Uso de shell interativo para operações complexas
- Timeout adequado para operações da OLT
### Confiabilidade
- Validação em todas as etapas
- Rollback não implementado (por design do equipamento)
- Logs detalhados para troubleshooting
### Usabilidade
- Interface intuitiva com botões
- Mensagens claras e informativas
- Confirmação visual antes da ação
## Limitações
1. **Irreversibilidade**: Ação não pode ser desfeita
2. **Timeout**: Operações longas podem exceder 60s
3. **Dependência SSH**: Requer conectividade estável
4. **Permissões**: Usuário SSH deve ter privilégios admin
## Próximas Melhorias
1. **Log de Auditoria**: Registrar todas as remoções
2. **Backup de Configuração**: Salvar config antes de remover
3. **Remoção em Lote**: Remover múltiplas ONUs
4. **Validação Avançada**: Verificar se ONU está offline
## Teste da Funcionalidade
### Cenário de Teste
1. Digite: `remover onu FHTT12345678`
2. Selecione uma OLT na lista
3. Verifique as informações exibidas
4. Confirme a remoção
5. Aguarde conclusão da operação
### Comandos de Teste
- `remover onu TESTE123456`
- `deletar TESTE123456`
- `apagar onu TESTE123456`
- `remove TESTE123456`
-92
View File
@@ -1,92 +0,0 @@
# 🔧 Correção do Reset ONU - Problema Resolvido
## 🐛 **Problema Identificado:**
O comando de reset da ONU não estava funcionando devido a dois problemas principais:
1. **Sintaxe incorreta:** `config terminal` → deveria ser apenas `config`
2. **Confirmação interativa:** O equipamento pergunta `Are you sure you want to reset this ONU? [no,yes]` e espera resposta
## ✅ **Soluções Implementadas:**
### 1. **Corrigida a sintaxe do comando:**
```bash
# ANTES (incorreto):
config terminal && interface gpon 1/1/1 && onu-reset onu 10 && exit
# DEPOIS (correto):
1. config
2. interface gpon 1/1/1
3. onu-reset onu 10
4. yes
5. exit
```
### 2. **Implementada execução sequencial:**
- Comandos executados um por vez
- Aguarda 2 segundos após `onu-reset` antes de enviar `yes`
- Delays de 1 segundo entre comandos para estabilidade
### 3. **Melhorado tratamento de erros:**
- Log detalhado de cada comando
- Tratamento específico para erro no comando `yes`
- Continuação mesmo se houver erros menores
## 📋 **Fluxo Correto:**
```bash
DM4610-OLT-POP-DITO# config
Entering configuration mode terminal
DM4610-OLT-POP-DITO(config)# interface gpon 1/1/1
DM4610-OLT-POP-DITO(config-gpon-1/1/1)# onu-reset onu 10
Are you sure you want to reset this ONU? [no,yes] yes
DM4610-OLT-POP-DITO(config-gpon-1/1/1)# exit
DM4610-OLT-POP-DITO(config)# exit
DM4610-OLT-POP-DITO#
```
## 🚀 **Como Testar:**
1. **Iniciar o bot:**
```bash
npm start
```
2. **No Telegram:**
```
ver sinal DACM91569513
```
3. **Clicar:** `🔌 Reiniciar ONU`
4. **Confirmar:** `✅ SIM, Reiniciar`
## 📊 **Logs Esperados:**
```
🔄 Iniciando reset ONU - OLT: olt_dito, Slot: 1/1/1, ONU: 10
📡 Conectando na OLT: olt_dito
✅ Conectado! ConnectionId: olt_dito_1754618005083
📝 Executando comando 1/4: config
📊 Resultado do comando: { success: true, output: 'Entering configuration mode terminal' }
📝 Executando comando 2/4: interface gpon 1/1/1
📊 Resultado do comando: { success: true, output: '' }
📝 Executando comando 3/4: onu-reset onu 10
📊 Resultado do comando: { success: true, output: 'Are you sure you want to reset this ONU? [no,yes]' }
⏳ Aguardando prompt de confirmação...
📝 Executando comando 4/4: yes
📊 Resultado do comando: { success: true, output: '' }
📝 Executando comando final: exit
🔌 Desconectado da OLT
```
## 🎯 **Status:**
- ✅ Sintaxe corrigida
- ✅ Confirmação interativa implementada
- ✅ Logs detalhados adicionados
- ✅ Tratamento de erros melhorado
- ✅ Delays para estabilidade
- ✅ Pronto para teste
**🚀 O reset da ONU agora deve funcionar corretamente!**
-79
View File
@@ -1,79 +0,0 @@
# 🔌 Funcionalidade de Reiniciar ONU - Implementação Concluída
## 📋 Resumo das Alterações
### 1. **SSH Manager** (`src/ssh/manager.js`)
- ✅ Adicionado método `resetOnu()` - versão original com shell interativo
- ✅ Adicionado método `resetOnuAlternative()` - versão simplificada (RECOMENDADA)
- 🔧 A versão alternativa usa comando único para evitar timeouts
### 2. **Bot Handler** (`src/bot/handler.js`)
- ✅ Adicionado botão "🔌 Reiniciar ONU" nos resultados de verificação de sinal
- ✅ Implementado `handleResetOnuCallback()` - processa clique do botão
- ✅ Implementado `handleConfirmResetOnu()` - processa confirmação
- ✅ Adicionado tratamento no `handleConfirmCallback()`
- ✅ Atualizada mensagem de ajuda com nova funcionalidade
### 3. **Fluxo de Funcionamento**
1. Usuario digita: `"ver sinal DACM91569513"`
2. Bot mostra resultados com botões de ação
3. Usuario clica: `"🔌 Reiniciar ONU"`
4. Bot pede confirmação com detalhes da ONU
5. Usuario confirma: `"✅ SIM, Reiniciar"`
6. Bot executa comando e mostra resultado
### 4. **Comandos Executados na OLT**
```bash
config terminal && interface gpon SLOT && onu-reset onu ONU_ID && exit
```
**Exemplo:** `config terminal && interface gpon 1/1/1 && onu-reset onu 5 && exit`
### 5. **Arquivos de Teste Criados**
- `test-reset-onu.js` - Teste geral da funcionalidade
- `test-reset-alternative.js` - Teste específico da versão alternativa
## 🚀 Como Testar
1. **Inicie o bot:**
```bash
cd c:\Users\rodri\build\bot-ajuda
npm start
```
2. **No Telegram, digite:**
```
ver sinal DACM91569513
```
3. **Clique no botão:** `🔌 Reiniciar ONU`
4. **Confirme a ação:** `✅ SIM, Reiniciar`
## ⚠️ Solução para Timeout
**Problema:** Timeout na operação de reset
**Solução:** Implementada versão alternativa `resetOnuAlternative()` que:
- Usa comando único em vez de shell interativo
- Evita detecção complexa de prompts
- Reduz chance de timeout
- Mantém mesma funcionalidade
## 🔧 Configuração das OLTs
As seguintes OLTs estão configuradas:
- **OLT DITO:** 192.168.190.7
- **OLT COLMEIA:** 192.168.190.8
- **OLT CANAA:** 192.168.190.9
- **OLT CANAA 2:** 192.168.190.10
## ✅ Status da Implementação
- [x] Método de reset ONU implementado
- [x] Interface do bot atualizada
- [x] Botões de confirmação adicionados
- [x] Tratamento de erros implementado
- [x] Solução para timeout aplicada
- [x] Documentação criada
- [x] Arquivos de teste preparados
**🎯 Implementação concluída e pronta para uso!**
-88
View File
@@ -1,88 +0,0 @@
# 🔌 Melhoria: Exibição do Service-Port ID
## ✅ **MELHORIAS IMPLEMENTADAS**
### 1. **Captura Aprimorada do Service-Port**
**Antes:** Captura básica que podia falhar
```javascript
if (dataStr.includes('service-port') && /service-port\s+(\d+)/.test(dataStr))
```
**Agora:** Captura dupla e mais robusta
```javascript
// Captura 1: Pattern mais flexível
if (dataStr.includes('service-port') && /service-port[^a-zA-Z]*(\d+)/.test(dataStr))
// Captura 2: Do prompt de configuração
if (dataStr.includes('(config-service-port-') && /config-service-port-(\d+)/.test(dataStr))
```
### 2. **Exibição Melhorada na Mensagem**
**Nova mensagem de sucesso:**
```
✅ ONU Adicionada com Sucesso!
📱 Serial: DACM915E0F76
📍 Localização: Slot 1/1/3, ONU 0
🏷️ VLAN: 603
🔌 Service-port: 6 (Auto-gerado) ← DESTAQUE!
🏢 OLT: DITO
✅ Configurações aplicadas:
• Line-profile: DM986-100
• Serial number: DACM915E0F76
• Ethernet: porta 1
• Native VLAN: 603
• Service-port: 6 criado e configurado ← DETALHADO!
• Configuração commitada
🎉 A ONU está pronta para uso!
```
### 3. **Logs Detalhados**
**Agora o console mostra:**
```
📋 Service-port ID capturado do prompt: 6
```
## 🎯 **Resultado**
**O bot agora informa claramente:**
- ✅ **Número exato** do service-port criado
- ✅ **Confirmação visual** de que foi auto-gerado
- ✅ **Detalhamento** nas configurações aplicadas
- ✅ **Logs** para troubleshooting
## 🚀 **Para Testar**
Reinicie o bot e teste:
```bash
cd c:\Users\rodri\build\bot-ajuda
npm start
```
**No Telegram:**
```
adicionar onu TESTE123456
```
**Resultado esperado:**
```
✅ ONU Adicionada com Sucesso!
🔌 Service-port: 7 (Auto-gerado)
• Service-port: 7 criado e configurado
```
## 📊 **Informações Agora Exibidas**
1. **📱 Serial** da ONU
2. **📍 Localização** (Slot + ONU ID)
3. **🏷️ VLAN** configurada
4. **🔌 Service-port** auto-gerado ← **NOVO!**
5. **🏢 OLT** utilizada
6. **✅ Configurações** detalhadas
**Agora o usuário tem visibilidade completa do que foi configurado!** 🎉
-81
View File
@@ -1,81 +0,0 @@
# 🔧 Implementação Shell Interativo - Reset ONU
## 🐛 **Problema Identificado:**
O método anterior usando `executeCommand` em sequência não mantinha o contexto dos modos de configuração. Cada comando era executado independentemente, perdendo o estado da sessão CLI.
**Sintomas observados:**
- `config` funcionava
- `interface gpon 1/1/3` falhava com "syntax error"
- Todos os comandos subsequentes falhavam
- Não entrava no modo de configuração
## ✅ **Solução Implementada:**
### **Shell Interativo com Detecção de Prompts:**
A nova implementação usa `conn.connection.shell()` para manter uma sessão interativa contínua e detecta os prompts específicos para enviar os comandos na sequência correta.
### **Fluxo de Detecção:**
```bash
1. Aguarda: '#' → Envia: 'config'
2. Aguarda: '(config)#' → Envia: 'interface gpon 1/1/3'
3. Aguarda: '(config-gpon' → Envia: 'onu-reset onu 0'
4. Aguarda: 'Are you sure' ou '[no,yes]' → Envia: 'yes'
5. Aguarda: '(config-gpon' → Envia: 'exit'
6. Aguarda: '(config)#' → Envia: 'exit'
7. Aguarda: '#' (sem config) → Finaliza
```
### **Vantagens da Nova Implementação:**
- ✅ **Mantém contexto:** Sessão CLI contínua
- ✅ **Detecção precisa:** Identifica prompts específicos
- ✅ **Sequencial:** Aguarda cada prompt antes do próximo comando
- ✅ **Timeout robusto:** 60 segundos de segurança
- ✅ **Logs detalhados:** Mostra cada data recebido
### **Prompts Detectados:**
```
DM4610-OLT-POP-DITO# ← Prompt inicial
DM4610-OLT-POP-DITO(config)# ← Modo configuração
DM4610-OLT-POP-DITO(config-gpon-1/1/3)# ← Modo interface
Are you sure you want to reset this ONU? [no,yes] ← Confirmação
DM4610-OLT-POP-DITO(config-gpon-1/1/3)# ← Após confirmação
DM4610-OLT-POP-DITO(config)# ← Após primeiro exit
DM4610-OLT-POP-DITO# ← Após segundo exit (finalizado)
```
## 🚀 **Teste:**
1. **Reinicie o bot** (se estiver rodando)
2. **Digite:** `ver sinal DACM91569513`
3. **Clique:** `🔌 Reiniciar ONU`
4. **Confirme:** `✅ SIM, Reiniciar`
## 📊 **Logs Esperados:**
```
🔄 Iniciando reset ONU - OLT: olt_dito, Slot: 1/1/3, ONU: 0
📡 Conectando na OLT: olt_dito
✅ Conectado! ConnectionId: olt_dito_xxxxx
📨 Recebido: DM4610-OLT-POP-DITO#
📝 Enviando comando 1: config
📨 Recebido: Entering configuration mode terminal
📨 Recebido: DM4610-OLT-POP-DITO(config)#
📝 Enviando comando 2: interface gpon 1/1/3
📨 Recebido: DM4610-OLT-POP-DITO(config-gpon-1/1/3)#
📝 Enviando comando 3: onu-reset onu 0
📨 Recebido: Are you sure you want to reset this ONU? [no,yes]
📝 Enviando comando 4: yes
📨 Recebido: DM4610-OLT-POP-DITO(config-gpon-1/1/3)#
📝 Enviando comando 5: exit
📨 Recebido: DM4610-OLT-POP-DITO(config)#
📝 Enviando comando 6: exit
📨 Recebido: DM4610-OLT-POP-DITO#
🔌 Desconectado da OLT
```
**🎯 Esta implementação deve resolver completamente o problema de contexto e executar o reset da ONU com sucesso!**
-94
View File
@@ -1,94 +0,0 @@
# 🎉 SUCCESS! - Correção Final da Funcionalidade ADD ONU
## ✅ **SUCESSO CONFIRMADO!**
A ONU foi adicionada com sucesso! O único problema restante era a finalização do processo SSH.
## 🔧 **Última Correção Aplicada**
### **Problema:**
Após `commit`, o sistema ainda estava em `(config-service-port-6)#` mas o step 11 esperava `(config)#` para enviar `top`.
### **Solução:**
Ajustei o step 11 para detectar `(config-service-port` em vez de `(config)#`:
```javascript
} else if (step === 11 && dataStr.includes('(config-service-port')) {
// Após commit (ainda em service-port) - enviar top
shouldSendCommand = true;
```
## 📋 **Sequência Final Correta:**
```
Step 8: service-port new → (config-service-port-X)#
Step 9: gpon 1/1/3 onu 0 gem 1... → (config-service-port-X)#
Step 10: commit → (config-service-port-X)# ← Permanece aqui!
Step 11: top → (config)#
Step 12: exit → #
Step 13: exit → desconexão
```
## 🎯 **Resultado:**
### ✅ **Funcionalidade ADD ONU 100% FUNCIONAL!**
**Operações realizadas com sucesso:**
- ✅ Descoberta automática do slot (1/1/3)
- ✅ Determinação do ONU ID disponível (0)
- ✅ Configuração automática da VLAN (603)
- ✅ Execução de todos os comandos SSH
- ✅ Line-profile aplicado (DM986-100)
- ✅ Serial number configurado (DACM915E0F76)
- ✅ Ethernet configurada (porta 1)
- ✅ Native VLAN configurada (603)
- ✅ Service-port criado (6)
- ✅ Configuração commitada
- ✅ Processo finalizado corretamente
## 🚀 **Status Final:**
**O bot agora pode:**
1. **Ver sinal** das ONUs em 6 OLTs
2. **Adicionar ONUs** automaticamente ✅ NOVO!
3. **Remover ONUs** com confirmação
4. **Resetar ONUs**
5. **Atualizar firmware** das ONUs
6. **Gerenciar usuários** no concentrador Juniper
## 🔄 **Para Testar Completamente:**
Reinicie o bot e teste toda a funcionalidade:
```bash
cd c:\Users\rodri\build\bot-ajuda
npm start
```
**Comandos para testar:**
```
adicionar onu TESTE123456
ver sinal TESTE123456
remover onu TESTE123456
```
## 📊 **Estatísticas da Implementação:**
- **Total de arquivos modificados:** 4
- **Total de funções criadas:** 8
- **Total de comandos SSH:** 14 por ONU
- **Total de OLTs suportadas:** 6
- **Total de VLANs mapeadas:** 62
- **Tempo de desenvolvimento:** Concluído!
## 🎉 **PARABÉNS!**
**A funcionalidade de adicionar ONUs está 100% implementada e funcional!**
Seu bot agora é uma ferramenta completa de gerenciamento de rede com:
- **Automação completa** do ciclo de vida das ONUs
- **Interface intuitiva** via Telegram
- **Segurança** com confirmações
- **Logs detalhados** para troubleshooting
- **Suporte multi-OLT** (6 equipamentos)
**Missão cumprida!** 🎯✨
-78
View File
@@ -1,78 +0,0 @@
# Script de Deploy - Bot de Ajuda Telegram (Windows)
# ===================================================
Write-Host "🚀 Iniciando deploy do Bot de Ajuda Telegram..." -ForegroundColor Green
# Verificar se Docker está instalado
if (-not (Get-Command docker -ErrorAction SilentlyContinue)) {
Write-Host "❌ Docker não encontrado. Instale o Docker Desktop primeiro." -ForegroundColor Red
exit 1
}
# Verificar se Docker Compose está instalado
if (-not (Get-Command docker-compose -ErrorAction SilentlyContinue)) {
Write-Host "❌ Docker Compose não encontrado. Instale o Docker Compose primeiro." -ForegroundColor Red
exit 1
}
# Verificar se arquivo .env existe
if (-not (Test-Path .env)) {
Write-Host "⚠️ Arquivo .env não encontrado!" -ForegroundColor Yellow
Write-Host "📋 Copiando template de produção..." -ForegroundColor Cyan
Copy-Item .env.production .env
Write-Host "✅ Arquivo .env criado a partir do template." -ForegroundColor Green
Write-Host ""
Write-Host "🔧 AÇÃO NECESSÁRIA:" -ForegroundColor Yellow
Write-Host " 1. Edite o arquivo .env"
Write-Host " 2. Configure TELEGRAM_BOT_TOKEN"
Write-Host " 3. Configure DEFAULT_SSH_PASSWORD"
Write-Host " 4. Configure ALLOWED_USERS"
Write-Host " 5. Execute este script novamente"
Write-Host ""
exit 1
}
# Verificar configurações
$envContent = Get-Content .env -Raw
if ($envContent -match "YOUR_BOT_TOKEN_HERE" -or $envContent -match "YOUR_SSH_PASSWORD_HERE") {
Write-Host "❌ Arquivo .env contém valores de template. Configure as variáveis necessárias." -ForegroundColor Red
exit 1
}
Write-Host "✅ Configurações validadas" -ForegroundColor Green
# Parar containers existentes
Write-Host "🛑 Parando containers existentes..." -ForegroundColor Yellow
docker-compose down 2>$null
# Build da imagem
Write-Host "🔨 Construindo nova imagem..." -ForegroundColor Cyan
docker-compose build --no-cache
# Iniciar containers
Write-Host "🚀 Iniciando containers..." -ForegroundColor Green
docker-compose up -d
# Aguardar inicialização
Write-Host "⏳ Aguardando inicialização..." -ForegroundColor Yellow
Start-Sleep -Seconds 10
# Verificar status
Write-Host "📊 Verificando status dos containers..." -ForegroundColor Cyan
docker-compose ps
# Mostrar logs
Write-Host "📜 Últimos logs do bot:" -ForegroundColor Cyan
docker-compose logs --tail=20 telegram-bot
Write-Host ""
Write-Host "🎉 Deploy concluído!" -ForegroundColor Green
Write-Host ""
Write-Host "📋 Comandos úteis:" -ForegroundColor Cyan
Write-Host " Ver logs: docker-compose logs -f telegram-bot"
Write-Host " Parar bot: docker-compose down"
Write-Host " Reiniciar bot: docker-compose restart telegram-bot"
Write-Host " Status: docker-compose ps"
Write-Host ""
Write-Host "🔍 Para verificar se o bot está funcionando:" -ForegroundColor Yellow
Write-Host " Envie /start para o bot no Telegram"
-88
View File
@@ -1,88 +0,0 @@
#!/bin/bash
# Script de Deploy - Bot de Ajuda Telegram
# ========================================
set -e
echo "🚀 Iniciando deploy do Bot de Ajuda Telegram..."
# Verificar se Docker está instalado
if ! command -v docker &> /dev/null; then
echo "❌ Docker não encontrado. Instale o Docker primeiro."
exit 1
fi
# Verificar se Docker Compose está instalado
if ! command -v docker-compose &> /dev/null; then
echo "❌ Docker Compose não encontrado. Instale o Docker Compose primeiro."
exit 1
fi
# Verificar se arquivo .env existe
if [ ! -f .env ]; then
echo "⚠️ Arquivo .env não encontrado!"
echo "📋 Copiando template de produção..."
cp .env.production .env
echo "✅ Arquivo .env criado a partir do template."
echo ""
echo "🔧 AÇÃO NECESSÁRIA:"
echo " 1. Edite o arquivo .env"
echo " 2. Configure TELEGRAM_BOT_TOKEN"
echo " 3. Configure DEFAULT_SSH_PASSWORD"
echo " 4. Configure ALLOWED_USERS"
echo " 5. Execute este script novamente"
echo ""
exit 1
fi
# Verificar se variáveis obrigatórias estão configuradas
source .env
if [ -z "$TELEGRAM_BOT_TOKEN" ] || [ "$TELEGRAM_BOT_TOKEN" = "YOUR_BOT_TOKEN_HERE" ]; then
echo "❌ TELEGRAM_BOT_TOKEN não configurado no arquivo .env"
exit 1
fi
if [ -z "$DEFAULT_SSH_PASSWORD" ] || [ "$DEFAULT_SSH_PASSWORD" = "YOUR_SSH_PASSWORD_HERE" ]; then
echo "❌ DEFAULT_SSH_PASSWORD não configurado no arquivo .env"
exit 1
fi
echo "✅ Configurações validadas"
# Parar containers existentes
echo "🛑 Parando containers existentes..."
docker-compose down 2>/dev/null || true
# Build da imagem
echo "🔨 Construindo nova imagem..."
docker-compose build --no-cache
# Iniciar containers
echo "🚀 Iniciando containers..."
docker-compose up -d
# Aguardar inicialização
echo "⏳ Aguardando inicialização..."
sleep 10
# Verificar status
echo "📊 Verificando status dos containers..."
docker-compose ps
# Mostrar logs
echo "📜 Últimos logs do bot:"
docker-compose logs --tail=20 telegram-bot
echo ""
echo "🎉 Deploy concluído!"
echo ""
echo "📋 Comandos úteis:"
echo " Ver logs: docker-compose logs -f telegram-bot"
echo " Parar bot: docker-compose down"
echo " Reiniciar bot: docker-compose restart telegram-bot"
echo " Status: docker-compose ps"
echo ""
echo "🔍 Para verificar se o bot está funcionando:"
echo " Envie /start para o bot no Telegram"