datacom: add ONU with custom VLAN
Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
1 parent
88366f25e6
commit
600555596d
2 files changed
+209
No files matched your search
@@ -173,6 +173,11 @@ class BotHandler {
|
|||||||
await this.handleAdicionarOnu(chatId, target);
|
await this.handleAdicionarOnu(chatId, target);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'adicionar_onu_vlan':
|
||||||
|
console.log(`➕ Executando handleAdicionarOnuVlan com target: ${target}, vlanId: ${intent.vlanId}`);
|
||||||
|
await this.handleAdicionarOnuVlan(chatId, target, intent.vlanId);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'buscar_cliente':
|
case 'buscar_cliente':
|
||||||
console.log(`🔍 Executando handleBuscarCliente com target: ${target}`);
|
console.log(`🔍 Executando handleBuscarCliente com target: ${target}`);
|
||||||
await this.handleBuscarCliente(chatId, target);
|
await this.handleBuscarCliente(chatId, target);
|
||||||
@@ -401,6 +406,11 @@ Digite /help para ver todos os comandos disponíveis!
|
|||||||
• "cadastrar ABCD12345678"
|
• "cadastrar ABCD12345678"
|
||||||
• "add onu SERIAL_NUMBER"
|
• "add onu SERIAL_NUMBER"
|
||||||
|
|
||||||
|
**➕ ADICIONAR ONU COM VLAN CUSTOMIZADA:**
|
||||||
|
• "adicionar onu vlan 603 DACM91569513"
|
||||||
|
• "add onu vlan 700 ABCD12345678"
|
||||||
|
• "adicionar vlan 603 SERIAL_NUMBER"
|
||||||
|
|
||||||
**🗑️ REMOVER ONU:**
|
**🗑️ REMOVER ONU:**
|
||||||
• "remover onu DACM91569513"
|
• "remover onu DACM91569513"
|
||||||
• "deletar ABCD12345678"
|
• "deletar ABCD12345678"
|
||||||
@@ -992,6 +1002,51 @@ Digite /help para ver todos os comandos disponíveis!
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comando para adicionar ONU com VLAN customizada
|
||||||
|
*/
|
||||||
|
async handleAdicionarOnuVlan(chatId, serialNumber, vlanId) {
|
||||||
|
if (!serialNumber) {
|
||||||
|
await this.bot.sendMessage(chatId, '❌ Por favor, informe o serial da ONU.\n\nExemplo: `adicionar onu vlan 603 FHTT12345678`', { parse_mode: 'Markdown' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!vlanId || isNaN(vlanId) || vlanId < 1 || vlanId > 4094) {
|
||||||
|
await this.bot.sendMessage(chatId, '❌ VLAN ID inválida. Deve ser um número entre 1 e 4094.\n\nExemplo: `adicionar onu vlan 603 FHTT12345678`', { parse_mode: 'Markdown' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perguntar em qual OLT adicionar
|
||||||
|
const oltOptions = this.ssh.listOLTs();
|
||||||
|
|
||||||
|
if (oltOptions.length === 0) {
|
||||||
|
await this.bot.sendMessage(chatId, '❌ Nenhuma OLT disponível configurada.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let keyboard = {
|
||||||
|
inline_keyboard: oltOptions.map(olt => [
|
||||||
|
{ text: `🏢 ${olt.name}`, callback_data: `add_onu_vlan_${olt.id}_${vlanId}_${serialNumber}` }
|
||||||
|
])
|
||||||
|
};
|
||||||
|
|
||||||
|
// Adicionar opção de cancelar
|
||||||
|
keyboard.inline_keyboard.push([
|
||||||
|
{ text: '❌ Cancelar', callback_data: 'cancel_action' }
|
||||||
|
]);
|
||||||
|
|
||||||
|
await this.bot.sendMessage(chatId,
|
||||||
|
`➕ **Adicionar ONU com VLAN Customizada**\n\n` +
|
||||||
|
`📱 **Serial:** ${serialNumber}\n` +
|
||||||
|
`🏷️ **VLAN:** ${vlanId}\n\n` +
|
||||||
|
'🏢 Selecione a OLT onde deseja adicionar a ONU:',
|
||||||
|
{
|
||||||
|
reply_markup: keyboard,
|
||||||
|
parse_mode: 'Markdown'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Comando não reconhecido
|
* Comando não reconhecido
|
||||||
*/
|
*/
|
||||||
@@ -1097,6 +1152,9 @@ Digite /help para ver todos os comandos disponíveis!
|
|||||||
} else if (data.startsWith('remove_onu_')) {
|
} else if (data.startsWith('remove_onu_')) {
|
||||||
console.log(`🔍 Chamando handleRemoveOnuCallback`);
|
console.log(`🔍 Chamando handleRemoveOnuCallback`);
|
||||||
await this.handleRemoveOnuCallback(callbackQuery, data);
|
await this.handleRemoveOnuCallback(callbackQuery, data);
|
||||||
|
} else if (data.startsWith('add_onu_vlan_')) {
|
||||||
|
console.log(`🔍 Chamando handleAddOnuVlanCallback`);
|
||||||
|
await this.handleAddOnuVlanCallback(callbackQuery, data);
|
||||||
} else if (data.startsWith('add_onu_')) {
|
} else if (data.startsWith('add_onu_')) {
|
||||||
console.log(`🔍 Chamando handleAddOnuCallback`);
|
console.log(`🔍 Chamando handleAddOnuCallback`);
|
||||||
await this.handleAddOnuCallback(callbackQuery, data);
|
await this.handleAddOnuCallback(callbackQuery, data);
|
||||||
@@ -2265,6 +2323,127 @@ Digite /help para ver todos os comandos disponíveis!
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle callback para iniciar processo de adição de ONU com VLAN customizada
|
||||||
|
*/
|
||||||
|
async handleAddOnuVlanCallback(callbackQuery, data) {
|
||||||
|
const chatId = callbackQuery.message.chat.id;
|
||||||
|
// Formato: add_onu_vlan_olt_dito_603_SERIAL ou add_onu_vlan_olt_pedro_afonso_603_SERIAL
|
||||||
|
// Índices: [0]_[1]_[2]_[3]_[4]_[5]_[6]
|
||||||
|
const parts = data.split('_');
|
||||||
|
|
||||||
|
let oltId, vlanId, serialNumber;
|
||||||
|
|
||||||
|
if (parts.length >= 9 && parts[4] === 'pedro' && parts[5] === 'afonso') {
|
||||||
|
// Caso: add_onu_vlan_olt_pedro_afonso_VLANID_SERIAL
|
||||||
|
oltId = parts[3] + '_' + parts[4] + '_' + parts[5]; // "olt_pedro_afonso"
|
||||||
|
vlanId = parts[6];
|
||||||
|
serialNumber = parts.slice(7).join('_'); // Serial pode ter underscores
|
||||||
|
} else if (parts.length >= 7) {
|
||||||
|
// Caso: add_onu_vlan_olt_dito_VLANID_SERIAL ou add_onu_vlan_olt_colmeia_VLANID_SERIAL
|
||||||
|
oltId = parts[3] + '_' + parts[4]; // "olt_dito" ou "olt_colmeia"
|
||||||
|
vlanId = parts[5];
|
||||||
|
serialNumber = parts.slice(6).join('_'); // Serial pode ter underscores
|
||||||
|
} else {
|
||||||
|
// Fallback
|
||||||
|
oltId = parts[3];
|
||||||
|
vlanId = parts[4];
|
||||||
|
serialNumber = parts.slice(5).join('_');
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.bot.answerCallbackQuery(callbackQuery.id);
|
||||||
|
|
||||||
|
await this.bot.editMessageText(
|
||||||
|
`🔍 **Analisando ONU ${serialNumber}**\n\n` +
|
||||||
|
`🏢 OLT: ${oltId.replace('olt_', '').replace(/_/g, '\\_').toUpperCase()}\n` +
|
||||||
|
`📱 Serial: ${serialNumber}\n` +
|
||||||
|
`🏷️ VLAN customizada: ${vlanId}\n\n` +
|
||||||
|
`⏳ Descobrindo slot e próximo ONU ID disponível...`,
|
||||||
|
{
|
||||||
|
chat_id: chatId,
|
||||||
|
message_id: callbackQuery.message.message_id,
|
||||||
|
parse_mode: 'Markdown'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Usar a mesma função addOnuBySerial mas sem a vlanId (vamos usar a customizada)
|
||||||
|
const result = await this.ssh.addOnuBySerial(oltId, serialNumber);
|
||||||
|
|
||||||
|
if (result.success && result.readyForAddition) {
|
||||||
|
// ONU analisada - mostrar informações e pedir confirmação
|
||||||
|
const keyboard = {
|
||||||
|
inline_keyboard: [
|
||||||
|
[
|
||||||
|
{ text: '✅ CONFIRMAR ADIÇÃO', callback_data: `confirm_add_${oltId}_${result.slot.replace(/\//g, '-')}_${result.onuId}_${vlanId}_${serialNumber}` }
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ text: '❌ Cancelar', callback_data: 'cancel_action' }
|
||||||
|
]
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
await this.bot.editMessageText(
|
||||||
|
`✅ **CONFIRMAÇÃO DE ADIÇÃO COM VLAN CUSTOMIZADA**\n\n` +
|
||||||
|
`📱 **Serial:** ${serialNumber}\n` +
|
||||||
|
`📍 **Slot descoberto:** ${result.slot}\n` +
|
||||||
|
`🔢 **ONU ID a usar:** ${result.onuId}\n` +
|
||||||
|
`🏷️ **VLAN ID customizada:** ${vlanId}\n` +
|
||||||
|
`🏢 **OLT:** ${oltId.replace('olt_', '').replace(/_/g, '\\_').toUpperCase()}\n\n` +
|
||||||
|
`📋 **ONU IDs em uso no slot:** ${result.usedIds.join(', ')}\n\n` +
|
||||||
|
`⚡ **Configurações que serão aplicadas:**\n` +
|
||||||
|
`• Line-profile: DM986-100\n` +
|
||||||
|
`• Ethernet: porta 1\n` +
|
||||||
|
`• Native VLAN: ${vlanId} (customizada)\n` +
|
||||||
|
`• Service-port: novo (auto) com VLAN ${vlanId}\n\n` +
|
||||||
|
`✅ **Confirme que deseja adicionar esta ONU:**`,
|
||||||
|
{
|
||||||
|
chat_id: chatId,
|
||||||
|
message_id: callbackQuery.message.message_id,
|
||||||
|
parse_mode: 'Markdown',
|
||||||
|
reply_markup: keyboard
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
let errorMessage = `❌ **Não foi possível adicionar a ONU**\n\n` +
|
||||||
|
`📱 **Serial:** ${serialNumber}\n` +
|
||||||
|
`🏷️ **VLAN:** ${vlanId}\n` +
|
||||||
|
`🏢 **OLT:** ${oltId.replace('olt_', '').replace(/_/g, '\\_').toUpperCase()}\n\n`;
|
||||||
|
|
||||||
|
if (result.message) {
|
||||||
|
errorMessage += `❌ **Erro:** ${result.message}\n\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.message && result.message.includes('discovered-onus')) {
|
||||||
|
errorMessage += `💡 **Dica:** Verifique se a ONU está ligada e descoberta pela OLT.\n` +
|
||||||
|
`Use o comando: \`show interface gpon discovered-onus\``;
|
||||||
|
} else if (result.message && result.message.includes('todos os ONU IDs')) {
|
||||||
|
errorMessage += `💡 **Dica:** O slot está lotado. Considere usar outro slot ou remover ONUs inutilizadas.`;
|
||||||
|
} else {
|
||||||
|
errorMessage += `💡 Verifique a conectividade com a OLT ou se a ONU está descoberta.`;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.bot.editMessageText(errorMessage, {
|
||||||
|
chat_id: chatId,
|
||||||
|
message_id: callbackQuery.message.message_id,
|
||||||
|
parse_mode: 'Markdown'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Erro ao analisar ONU para adição com VLAN customizada:', error);
|
||||||
|
await this.bot.editMessageText(
|
||||||
|
`❌ **Erro interno**\n\n` +
|
||||||
|
`Não foi possível analisar a ONU.\n` +
|
||||||
|
`Erro: ${error.message}`,
|
||||||
|
{
|
||||||
|
chat_id: chatId,
|
||||||
|
message_id: callbackQuery.message.message_id,
|
||||||
|
parse_mode: 'Markdown'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle callback para confirmar adição de ONU
|
* Handle callback para confirmar adição de ONU
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ class NLPProcessor {
|
|||||||
'ver_sinal': ['ver sinal', 'verificar sinal', 'sinal', 'check signal', 'signal'],
|
'ver_sinal': ['ver sinal', 'verificar sinal', 'sinal', 'check signal', 'signal'],
|
||||||
'remover_onu': ['remover onu', 'deletar onu', 'apagar onu', 'remove onu', 'delete onu'],
|
'remover_onu': ['remover onu', 'deletar onu', 'apagar onu', 'remove onu', 'delete onu'],
|
||||||
'adicionar_onu': ['adicionar onu', 'add onu', 'criar onu', 'cadastrar onu', 'registrar onu'],
|
'adicionar_onu': ['adicionar onu', 'add onu', 'criar onu', 'cadastrar onu', 'registrar onu'],
|
||||||
|
'adicionar_onu_vlan': ['adicionar onu vlan', 'add onu vlan', 'criar onu vlan', 'cadastrar onu vlan'],
|
||||||
'ping': ['ping', 'testar', 'test', 'conectividade'],
|
'ping': ['ping', 'testar', 'test', 'conectividade'],
|
||||||
'admin': ['admin', 'administração', 'administracao', 'painel'],
|
'admin': ['admin', 'administração', 'administracao', 'painel'],
|
||||||
'usuarios_autorizados': ['usuarios autorizados', 'users autorizados', 'lista usuarios', 'listar usuarios autorizados'],
|
'usuarios_autorizados': ['usuarios autorizados', 'users autorizados', 'lista usuarios', 'listar usuarios autorizados'],
|
||||||
@@ -55,6 +56,9 @@ class NLPProcessor {
|
|||||||
// Padrões específicos para ver sinal
|
// Padrões específicos para ver sinal
|
||||||
/^(ver|verificar|check)\s+(sinal|signal)\s+([A-Z0-9]+)$/i,
|
/^(ver|verificar|check)\s+(sinal|signal)\s+([A-Z0-9]+)$/i,
|
||||||
/^(sinal|signal)\s+([A-Z0-9]+)$/i,
|
/^(sinal|signal)\s+([A-Z0-9]+)$/i,
|
||||||
|
// Padrões específicos para adicionar ONU com VLAN customizada
|
||||||
|
/^(adicionar|add|criar|cadastrar|registrar)\s+(onu|ont)\s+vlan\s+(\d+)\s+([A-Z0-9]+)$/i,
|
||||||
|
/^(adicionar|add|criar)\s+vlan\s+(\d+)\s+([A-Z0-9]+)$/i,
|
||||||
// Padrões específicos para adicionar ONU
|
// Padrões específicos para adicionar ONU
|
||||||
/^(adicionar|add|criar|cadastrar|registrar)\s+(onu|ont)\s+([A-Z0-9]+)$/i,
|
/^(adicionar|add|criar|cadastrar|registrar)\s+(onu|ont)\s+([A-Z0-9]+)$/i,
|
||||||
/^(adicionar|add|criar|cadastrar|registrar)\s+([A-Z0-9]+)$/i,
|
/^(adicionar|add|criar|cadastrar|registrar)\s+([A-Z0-9]+)$/i,
|
||||||
@@ -281,6 +285,32 @@ class NLPProcessor {
|
|||||||
|
|
||||||
// Padrões específicos para adicionar ONU
|
// Padrões específicos para adicionar ONU
|
||||||
if (/adicionar|add|criar|cadastrar|registrar/i.test(action)) {
|
if (/adicionar|add|criar|cadastrar|registrar/i.test(action)) {
|
||||||
|
// Padrão especial: "adicionar onu vlan XXX SERIAL" ou "add onu vlan XXX SERIAL"
|
||||||
|
if (/vlan/i.test(fullMatch)) {
|
||||||
|
let vlanId, serialNumber;
|
||||||
|
|
||||||
|
// Formato: "adicionar onu vlan XXX SERIAL"
|
||||||
|
if (match.length === 5 && /onu|ont/i.test(fullMatch)) {
|
||||||
|
vlanId = match[3]; // VLAN ID
|
||||||
|
serialNumber = match[4]; // Serial
|
||||||
|
}
|
||||||
|
// Formato: "adicionar vlan XXX SERIAL"
|
||||||
|
else if (match.length === 4) {
|
||||||
|
vlanId = match[2]; // VLAN ID
|
||||||
|
serialNumber = match[3]; // Serial
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vlanId && serialNumber) {
|
||||||
|
return {
|
||||||
|
action: 'adicionar_onu_vlan',
|
||||||
|
target: serialNumber.trim().toUpperCase(),
|
||||||
|
vlanId: parseInt(vlanId),
|
||||||
|
confidence: 0.95,
|
||||||
|
type: 'add_onu_vlan_pattern'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Padrão 1: "adicionar onu SERIAL" ou "add ont SERIAL"
|
// Padrão 1: "adicionar onu SERIAL" ou "add ont SERIAL"
|
||||||
if (/onu|ont/i.test(fullMatch)) {
|
if (/onu|ont/i.test(fullMatch)) {
|
||||||
let serialNumber = match[3]; // Terceiro grupo capturado (serial após "onu/ont")
|
let serialNumber = match[3]; // Terceiro grupo capturado (serial após "onu/ont")
|
||||||
|
|||||||
Reference in new issue
Block a user