api: fix clients markdown

Signed-off-by: Rodrigo B. de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
rodrigo committed 2025-08-30 20:44:24 -03:00
1 parent 9d092a349f
commit ae47ff6640
1 file changed
+89 -36
+89 -36
View File
@@ -448,7 +448,7 @@ Digite /help para ver todos os comandos disponíveis!
• "fiberhome status" - Status das conexões Fiberhome • "fiberhome status" - Status das conexões Fiberhome
• Use "ver sinal" para interface unificada • Use "ver sinal" para interface unificada
�🔒 SEGURANÇA: 🔒 **SEGURANÇA:**
🛡️ Bot restrito a usuários autorizados 🛡️ Bot restrito a usuários autorizados
🆔 Para solicitar acesso, forneça seu ID`; 🆔 Para solicitar acesso, forneça seu ID`;
@@ -2535,9 +2535,9 @@ Digite /help para ver todos os comandos disponíveis!
// Se encontrou apenas um cliente, mostrar dados detalhados // Se encontrou apenas um cliente, mostrar dados detalhados
// Se encontrou apenas um cliente, mostrar dados detalhados // Se encontrou apenas um cliente, mostrar dados detalhados
const cliente = resultado.clientes[0]; const cliente = resultado.clientes[0];
let message = `� **Cliente Encontrado**\n\n`; let message = `👤 **Cliente Encontrado**\n\n`;
message += `🆔 **ID**: \`${cliente.id}\`\n`; message += `🆔 **ID**: \`${cliente.id}\`\n`;
message += `� **Nome**: ${cliente.nome}\n`; message += `👤 **Nome**: ${cliente.nome}\n`;
if (cliente.cpf) { if (cliente.cpf) {
message += `📄 **CPF**: \`${cliente.cpf}\`\n`; message += `📄 **CPF**: \`${cliente.cpf}\`\n`;
@@ -2579,6 +2579,35 @@ Digite /help para ver todos os comandos disponíveis!
} }
} }
/**
* Escapar caracteres problemáticos para Markdown do Telegram
*/
escapeMarkdown(text) {
if (!text) return text;
// Escapar caracteres especiais que podem causar problemas no Markdown
return text.toString()
.replace(/\\/g, '\\\\') // Escape backslash
.replace(/\*/g, '\\*') // Escape asterisco
.replace(/_/g, '\\_') // Escape underscore
.replace(/\[/g, '\\[') // Escape colchete
.replace(/\]/g, '\\]') // Escape colchete
.replace(/\(/g, '\\(') // Escape parêntese
.replace(/\)/g, '\\)') // Escape parêntese
.replace(/~/g, '\\~') // Escape til
.replace(/>/g, '\\>') // Escape maior que
.replace(/#/g, '\\#') // Escape hashtag
.replace(/\+/g, '\\+') // Escape mais
.replace(/-/g, '\\-') // Escape hífen
.replace(/=/g, '\\=') // Escape igual
.replace(/\|/g, '\\|') // Escape pipe
.replace(/\{/g, '\\{') // Escape chaves
.replace(/\}/g, '\\}') // Escape chaves
.replace(/\./g, '\\.') // Escape ponto
.replace(/!/g, '\\!') // Escape exclamação
.replace(/@/g, '\\@'); // Escape arroba
}
/** /**
* Mostrar dados cadastrais completos do cliente * Mostrar dados cadastrais completos do cliente
*/ */
@@ -2590,9 +2619,8 @@ Digite /help para ver todos os comandos disponíveis!
if (!resultado.success) { if (!resultado.success) {
await this.bot.sendMessage(chatId, await this.bot.sendMessage(chatId,
`❌ **Erro ao buscar dados**\n\n` + `❌ Erro ao buscar dados\n\n` +
`⚠️ ${resultado.error}`, `⚠️ ${resultado.error}`
{ parse_mode: 'Markdown' }
); );
return; return;
} }
@@ -2600,24 +2628,34 @@ Digite /help para ver todos os comandos disponíveis!
const cliente = resultado.cliente; const cliente = resultado.cliente;
const servicos = resultado.servicos || []; const servicos = resultado.servicos || [];
let message = `📋 **Dados Cadastrais Completos**\n\n`; let message = `📋 Dados Cadastrais Completos\n\n`;
// Dados do cliente // Dados do cliente
message += `👤 **CLIENTE**\n`; message += `👤 CLIENTE\n`;
message += `🆔 ID: \`${cliente.id}\`\n`; message += `🆔 ID: ${cliente.id}\n`;
message += `👤 Nome: ${cliente.nome}\n`; message += `👤 Nome: ${cliente.nome || 'Não informado'}\n`;
if (cliente.cpf) { if (cliente.cpf) {
message += `📄 CPF: \`${cliente.cpf}\`\n`; message += `📄 CPF: \`${cliente.cpf}\`\n`;
} }
if (cliente.rg) { if (cliente.rg) {
message += `📄 RG: \`${cliente.rg}\`\n`; message += `📄 RG: ${cliente.rg}\n`;
} }
message += `📧 Email: ${cliente.email || 'Não informado'}\n`; message += `📧 Email: ${cliente.email || 'Não informado'}\n`;
message += `📞 Telefone: ${cliente.telefone || 'Não informado'}\n`;
message += `📱 Celular: ${cliente.celular || 'Não informado'}\n`; if (cliente.telefone && cliente.telefone !== 'Não informado') {
message += `📞 Telefone: \`${cliente.telefone}\`\n`;
} else {
message += `📞 Telefone: Não informado\n`;
}
if (cliente.celular && cliente.celular !== 'Não informado') {
message += `📱 Celular: \`${cliente.celular}\`\n`;
} else {
message += `📱 Celular: Não informado\n`;
}
// Endereço // Endereço
if (cliente.endereco) { if (cliente.endereco) {
@@ -2651,27 +2689,27 @@ Digite /help para ver todos os comandos disponíveis!
message += `📝 Observações: ${cliente.observacoes}\n`; message += `📝 Observações: ${cliente.observacoes}\n`;
} }
message += `\n🌐 **Instância**: ${resultado.instancia}\n\n`; message += `\n🌐 Instância: ${resultado.instancia}\n\n`;
// Dados dos serviços // Dados dos serviços
if (servicos.length > 0) { if (servicos.length > 0) {
message += `⚙️ **SERVIÇOS CONTRATADOS**\n\n`; message += `⚙️ SERVIÇOS CONTRATADOS\n\n`;
servicos.forEach((servico, index) => { servicos.forEach((servico, index) => {
message += `📦 **Serviço ${index + 1}**\n`; message += `📦 Serviço ${index + 1}\n`;
message += `🏷️ Plano: ${servico.planoNome}\n`; message += `🏷️ Plano: ${servico.planoNome}\n`;
message += `📊 Status: ${servico.statusFormatado}\n`; message += `📊 Status: ${servico.statusFormatado}\n`;
if (servico.login) { if (servico.login) {
message += `👤 Login: \`${servico.login}\`\n`; message += `👤 Login: ${servico.login}\n`;
} }
if (servico.senha) { if (servico.senha) {
message += `🔑 Senha: \`${servico.senha}\`\n`; message += `🔑 Senha: ${servico.senha}\n`;
} }
if (servico.ip) { if (servico.ip) {
message += `🌐 IP: \`${servico.ip}\`\n`; message += `🌐 IP: ${servico.ip}\n`;
} }
if (servico.vencimento) { if (servico.vencimento) {
@@ -2682,7 +2720,7 @@ Digite /help para ver todos os comandos disponíveis!
message += `💰 Valor: R$ ${parseFloat(servico.valor).toFixed(2)}\n`; message += `💰 Valor: R$ ${parseFloat(servico.valor).toFixed(2)}\n`;
} }
message += `� Tecnologia: ${servico.tecnologia}\n`; message += `🔧 Tecnologia: ${servico.tecnologia}\n`;
if (servico.velocidade_down) { if (servico.velocidade_down) {
message += `⬇️ Download: ${servico.velocidade_down} Mbps\n`; message += `⬇️ Download: ${servico.velocidade_down} Mbps\n`;
@@ -2694,7 +2732,7 @@ Digite /help para ver todos os comandos disponíveis!
// Dados FTTH - usando campos reais da API // Dados FTTH - usando campos reais da API
if (servico.tecnologia === 'FTTH' || servico.pon || servico.serial) { if (servico.tecnologia === 'FTTH' || servico.pon || servico.serial) {
message += `\n📡 **Dados FTTH:**\n`; message += `\n📡 Dados FTTH:\n`;
if (servico.base || servico.id_ap) { if (servico.base || servico.id_ap) {
message += `🔌 Base/AP: ${servico.base || `AP ${servico.id_ap}`}\n`; message += `🔌 Base/AP: ${servico.base || `AP ${servico.id_ap}`}\n`;
@@ -2717,7 +2755,7 @@ Digite /help para ver todos os comandos disponíveis!
} }
if (servico.ultimo_rx_power) { if (servico.ultimo_rx_power) {
message += `� Último RX: ${servico.ultimo_rx_power} dBm\n`; message += `📶 Último RX: ${servico.ultimo_rx_power} dBm\n`;
} }
if (servico.ultimo_tx_power) { if (servico.ultimo_tx_power) {
@@ -2734,21 +2772,21 @@ Digite /help para ver todos os comandos disponíveis!
} }
if (servico.ultimo_acesso) { if (servico.ultimo_acesso) {
message += `� Último acesso: ${servico.ultimo_acesso}\n`; message += `🕐 Último acesso: ${servico.ultimo_acesso}\n`;
} }
if (servico.ultimo_ip) { if (servico.ultimo_ip) {
message += `🌐 Último IP: \`${servico.ultimo_ip}\`\n`; message += `🌐 Último IP: ${servico.ultimo_ip}\n`;
} }
} }
// Dados de instalação // Dados de instalação
if (servico.instalacao_endereco) { if (servico.instalacao_endereco) {
message += `\n📍 **Endereço de Instalação:**\n`; message += `\n📍 Endereço de Instalação:\n`;
message += `🏠 ${servico.instalacao_endereco}, ${servico.instalacao_numero || 'S/N'}\n`; message += `🏠 ${servico.instalacao_endereco}, ${servico.instalacao_numero || 'S/N'}\n`;
if (servico.instalacao_complemento) { if (servico.instalacao_complemento) {
message += `� Complemento: ${servico.instalacao_complemento}\n`; message += `📝 Complemento: ${servico.instalacao_complemento}\n`;
} }
message += `🏘️ ${servico.instalacao_bairro}, ${servico.instalacao_cidade}/${servico.instalacao_uf}\n`; message += `🏘️ ${servico.instalacao_bairro}, ${servico.instalacao_cidade}/${servico.instalacao_uf}\n`;
@@ -2765,7 +2803,7 @@ Digite /help para ver todos os comandos disponíveis!
message += `\n`; message += `\n`;
}); });
} else { } else {
message += `⚙️ **SERVIÇOS**: Nenhum serviço encontrado\n\n`; message += `⚙️ SERVIÇOS: Nenhum serviço encontrado\n\n`;
} }
// Botões de ação // Botões de ação
@@ -2780,19 +2818,34 @@ Digite /help para ver todos os comandos disponíveis!
] ]
]; ];
await this.bot.sendMessage(chatId, message, { console.log('📝 Enviando dados do cliente');
parse_mode: 'Markdown',
reply_markup: { try {
inline_keyboard: keyboard await this.bot.sendMessage(chatId, message, {
} parse_mode: 'Markdown',
}); reply_markup: {
inline_keyboard: keyboard
}
});
} catch (telegramError) {
console.error('❌ Erro de Markdown no Telegram:', telegramError.message);
console.log('🔧 Enviando sem Markdown como fallback...');
// Fallback: enviar sem Markdown, removendo apenas os backticks
const fallbackMessage = message.replace(/`/g, '');
await this.bot.sendMessage(chatId, fallbackMessage, {
reply_markup: {
inline_keyboard: keyboard
}
});
}
} catch (error) { } catch (error) {
console.error('❌ Erro ao buscar dados do cliente:', error); console.error('❌ Erro ao buscar dados do cliente:', error);
await this.bot.sendMessage(chatId, await this.bot.sendMessage(chatId,
`❌ **Erro ao buscar dados do cliente**\n\n` + `❌ Erro ao buscar dados do cliente\n\n` +
`⚠️ ${error.message}`, `⚠️ ${error.message}`
{ parse_mode: 'Markdown' }
); );
} }
} }