topsapp: fix suporte
Signed-off-by: Rodrigo B. de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
1 parent
3d35fc24cc
commit
9d092a349f
3 files changed
+132
-35
No files matched your search
+52
-29
@@ -5183,31 +5183,32 @@ Digite /help para ver todos os comandos disponíveis!
|
||||
if (!session) return;
|
||||
|
||||
if (!input) {
|
||||
// Primeira vez nesta etapa - buscar técnicos
|
||||
await this.bot.sendMessage(session.chatId, `🔍 Buscando técnicos disponíveis...`);
|
||||
// Primeira vez nesta etapa - buscar tipos de atendimento
|
||||
await this.bot.sendMessage(session.chatId, `🔍 Buscando tipos de atendimento disponíveis...`);
|
||||
|
||||
try {
|
||||
// Tentar obter técnicos primeiro, se falhar, usar operadores
|
||||
let resultado = await this.topsapp.obterTecnicos();
|
||||
// Usar tipos de atendimento ao invés de técnicos
|
||||
let resultado = await this.topsapp.obterSuporteTiposAtendimento();
|
||||
|
||||
if (!resultado.success || !resultado.data || resultado.data.length === 0) {
|
||||
// Fallback para operadores
|
||||
resultado = await this.topsapp.obterOperadores();
|
||||
}
|
||||
|
||||
if (!resultado.success) {
|
||||
await this.bot.sendMessage(session.chatId,
|
||||
`❌ **Erro ao buscar técnicos**\n\n` +
|
||||
`⚠️ ${resultado.error}\n\n` +
|
||||
`🔄 Reiniciando processo...`
|
||||
);
|
||||
this.suporteSessions.delete(sessionId);
|
||||
return;
|
||||
if (!resultado.success || !resultado.data?.dados || resultado.data.dados.length === 0) {
|
||||
// Fallback para técnicos se tipos de atendimento não funcionarem
|
||||
console.log('🔄 Fallback para técnicos...');
|
||||
resultado = await this.topsapp.obterTecnicos();
|
||||
|
||||
if (!resultado.success) {
|
||||
await this.bot.sendMessage(session.chatId,
|
||||
`❌ **Erro ao buscar tipos de atendimento**\n\n` +
|
||||
`⚠️ ${resultado.error}\n\n` +
|
||||
`🔄 Reiniciando processo...`
|
||||
);
|
||||
this.suporteSessions.delete(sessionId);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!resultado.data?.dados || resultado.data.dados.length === 0) {
|
||||
await this.bot.sendMessage(session.chatId,
|
||||
`❌ **Nenhum técnico encontrado**\n\n` +
|
||||
`❌ **Nenhum tipo de atendimento encontrado**\n\n` +
|
||||
`🔄 Reiniciando processo...`
|
||||
);
|
||||
this.suporteSessions.delete(sessionId);
|
||||
@@ -5219,7 +5220,7 @@ Digite /help para ver todos os comandos disponíveis!
|
||||
|
||||
} catch (error) {
|
||||
await this.bot.sendMessage(session.chatId,
|
||||
`❌ **Erro ao buscar técnicos**\n\n` +
|
||||
`❌ **Erro ao buscar tipos de atendimento**\n\n` +
|
||||
`⚠️ ${error.message}\n\n` +
|
||||
`🔄 Reiniciando processo...`
|
||||
);
|
||||
@@ -5229,6 +5230,9 @@ Digite /help para ver todos os comandos disponíveis!
|
||||
// Usuário selecionou um técnico
|
||||
const numero = parseInt(input.trim());
|
||||
|
||||
console.log(`🔍 Técnico - Input do usuário: "${input}", Número convertido: ${numero}`);
|
||||
console.log(`🔍 Técnico - Lista completa de técnicos:`, session.dados.tecnicos);
|
||||
|
||||
if (isNaN(numero) || numero < 1 || numero > session.dados.tecnicos.length) {
|
||||
await this.bot.sendMessage(session.chatId,
|
||||
`❌ **Número inválido**\n\n` +
|
||||
@@ -5237,17 +5241,20 @@ Digite /help para ver todos os comandos disponíveis!
|
||||
return;
|
||||
}
|
||||
|
||||
session.dados.tecnicoSelecionado = session.dados.tecnicos[numero - 1];
|
||||
const tecnicoSelecionado = session.dados.tecnicos[numero - 1];
|
||||
console.log(`🎯 Técnico selecionado - Índice: ${numero - 1}, Dados:`, tecnicoSelecionado);
|
||||
|
||||
session.dados.tecnicoSelecionado = tecnicoSelecionado;
|
||||
session.etapa = 'definir_data_hora';
|
||||
await this.processarEtapaDefinirDataHora(sessionId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mostrar opções de técnicos
|
||||
* Mostrar opções de técnicos/tipos de atendimento
|
||||
*/
|
||||
async mostrarOpcoesTecnicos(session) {
|
||||
let message = `👨🔧 **Técnicos disponíveis:**\n\n`;
|
||||
let message = `👨🔧 **Tipos de atendimento disponíveis:**\n\n`;
|
||||
|
||||
// Validar se técnicos é um array
|
||||
if (!Array.isArray(session.dados.tecnicos)) {
|
||||
@@ -5255,16 +5262,18 @@ Digite /help para ver todos os comandos disponíveis!
|
||||
type: typeof session.dados.tecnicos,
|
||||
value: session.dados.tecnicos
|
||||
});
|
||||
throw new Error(`Dados de técnicos inválidos: ${typeof session.dados.tecnicos}`);
|
||||
throw new Error(`Dados de tipos de atendimento inválidos: ${typeof session.dados.tecnicos}`);
|
||||
}
|
||||
|
||||
session.dados.tecnicos.forEach((tecnico, index) => {
|
||||
message += `**${index + 1}.** ${tecnico.nome || tecnico.tecnico}\n`;
|
||||
// Mostrar nome ou descrição do tipo de atendimento
|
||||
const nome = tecnico.nome || tecnico.descricao || tecnico.tipo || tecnico.tecnico;
|
||||
message += `**${index + 1}.** ${nome}\n`;
|
||||
if (tecnico.email) message += ` 📧 ${tecnico.email}\n`;
|
||||
message += `\n`;
|
||||
});
|
||||
|
||||
message += `Digite o **número** do técnico responsável (1-${session.dados.tecnicos.length}):`;
|
||||
message += `Digite o **número** do tipo de atendimento (1-${session.dados.tecnicos.length}):`;
|
||||
|
||||
await this.bot.sendMessage(session.chatId, message, { parse_mode: 'Markdown' });
|
||||
}
|
||||
@@ -5399,12 +5408,26 @@ Digite /help para ver todos os comandos disponíveis!
|
||||
idCliente: dados.clienteSelecionado.id,
|
||||
idServico: dados.servicoSelecionado.id,
|
||||
idCategoria: dados.categoriaSelecionada.id,
|
||||
contato: dados.clienteSelecionado.nome,
|
||||
contatoTelefone: dados.clienteSelecionado.telefone || '',
|
||||
descricao: `${dados.descricao}\n\nData/Hora agendada: ${this.dateProcessor.formatarData(dados.dataHora)}\nTécnico: ${dados.tecnicoSelecionado.nome || dados.tecnicoSelecionado.tecnico}`,
|
||||
outrasInformacoes: `Criado via Bot Telegram\nData original: ${dados.dataHoraTexto}`
|
||||
descricao: `${dados.descricao}\n\nData/Hora agendada: ${this.dateProcessor.formatarData(dados.dataHora)}\nTécnico: ${dados.tecnicoSelecionado.nome || dados.tecnicoSelecionado.tecnico}`
|
||||
};
|
||||
|
||||
// Adicionar campos opcionais se existirem
|
||||
if (dados.tecnicoSelecionado?.id) {
|
||||
dadosSuporte.idTecnico = dados.tecnicoSelecionado.id;
|
||||
}
|
||||
|
||||
if (dados.clienteSelecionado?.nome) {
|
||||
dadosSuporte.contato = dados.clienteSelecionado.nome;
|
||||
}
|
||||
|
||||
if (dados.clienteSelecionado?.telefone) {
|
||||
dadosSuporte.contatoTelefone = dados.clienteSelecionado.telefone;
|
||||
}
|
||||
|
||||
dadosSuporte.outrasInformacoes = `Criado via Bot Telegram\nData original: ${dados.dataHoraTexto}`;
|
||||
|
||||
console.log('🎫 Dados finais para criação do suporte:', dadosSuporte);
|
||||
|
||||
const resultado = await this.topsapp.adicionarSuporte(dadosSuporte);
|
||||
|
||||
if (resultado.success) {
|
||||
|
||||
+55
-6
@@ -681,6 +681,22 @@ class TopSappAPI {
|
||||
}, instance, credentials);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obter tipos de atendimento do suporte
|
||||
*/
|
||||
async obterSuporteTiposAtendimento(location = '', credentials) {
|
||||
const instance = this.getInstanceByLocation(location);
|
||||
|
||||
// Obter o idUsuario da sessão atual
|
||||
const session = await this.getValidSession(instance, credentials);
|
||||
|
||||
const dados = {
|
||||
idUsuario: session.idUsuario || 1
|
||||
};
|
||||
|
||||
return await this.makeRequest('ObterSuporteTiposAtendimento', dados, instance, credentials);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adicionar novo suporte
|
||||
*/
|
||||
@@ -695,14 +711,47 @@ class TopSappAPI {
|
||||
idCliente: dadosSuporte.idCliente,
|
||||
idServico: dadosSuporte.idServico,
|
||||
idCategoria: dadosSuporte.idCategoria,
|
||||
contato: dadosSuporte.contato || '',
|
||||
contatoTelefone: dadosSuporte.contatoTelefone || '',
|
||||
descricao: dadosSuporte.descricao,
|
||||
outrasInformacoes: dadosSuporte.outrasInformacoes || '',
|
||||
...dadosSuporte // Permite campos adicionais como idAtendimento
|
||||
descricao: dadosSuporte.descricao
|
||||
};
|
||||
|
||||
return await this.makeRequest('AdicionarSuporte', dados, instance, credentials);
|
||||
// Tentar com idTecnico se fornecido
|
||||
if (dadosSuporte.idTecnico && Number.isInteger(dadosSuporte.idTecnico)) {
|
||||
dados.idTecnico = dadosSuporte.idTecnico;
|
||||
console.log('🎫 API - Incluindo idTecnico:', dadosSuporte.idTecnico);
|
||||
}
|
||||
|
||||
if (dadosSuporte.contato && dadosSuporte.contato.trim() !== '') {
|
||||
dados.contato = dadosSuporte.contato;
|
||||
}
|
||||
|
||||
if (dadosSuporte.contatoTelefone && dadosSuporte.contatoTelefone.trim() !== '') {
|
||||
dados.contatoTelefone = dadosSuporte.contatoTelefone;
|
||||
}
|
||||
|
||||
if (dadosSuporte.outrasInformacoes && dadosSuporte.outrasInformacoes.trim() !== '') {
|
||||
dados.outrasInformacoes = dadosSuporte.outrasInformacoes;
|
||||
}
|
||||
|
||||
console.log('🎫 API - Dados finais para envio:', dados);
|
||||
|
||||
try {
|
||||
const result = await this.makeRequest('AdicionarSuporte', dados, instance, credentials);
|
||||
console.log('✅ API - Suporte criado com sucesso:', result);
|
||||
return result;
|
||||
} catch (error) {
|
||||
console.error('❌ API - Erro ao criar suporte:', error.message);
|
||||
|
||||
// Se deu erro e temos idAtendimento, tentar sem ele
|
||||
if (dados.idAtendimento) {
|
||||
console.log('🔄 API - Tentando criar suporte SEM idAtendimento...');
|
||||
delete dados.idAtendimento;
|
||||
const retryResult = await this.makeRequest('AdicionarSuporte', dados, instance, credentials);
|
||||
console.log('✅ API - Suporte criado sem técnico:', retryResult);
|
||||
return retryResult;
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -957,6 +957,31 @@ class TopSappManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Obter tipos de atendimento do suporte
|
||||
*/
|
||||
async obterSuporteTiposAtendimento(location = '') {
|
||||
if (!this.isReady()) {
|
||||
return {
|
||||
success: false,
|
||||
error: 'TopSapp não está configurado'
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const credentials = this.config.getCredentialsByLocation(location);
|
||||
const result = await this.api.obterSuporteTiposAtendimento(location, credentials);
|
||||
|
||||
return result;
|
||||
|
||||
} catch (error) {
|
||||
return {
|
||||
success: false,
|
||||
error: error.message
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Obter técnicos disponíveis
|
||||
*/
|
||||
|
||||
Reference in new issue
Block a user