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 (!session) return;
|
||||||
|
|
||||||
if (!input) {
|
if (!input) {
|
||||||
// Primeira vez nesta etapa - buscar técnicos
|
// Primeira vez nesta etapa - buscar tipos de atendimento
|
||||||
await this.bot.sendMessage(session.chatId, `🔍 Buscando técnicos disponíveis...`);
|
await this.bot.sendMessage(session.chatId, `🔍 Buscando tipos de atendimento disponíveis...`);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Tentar obter técnicos primeiro, se falhar, usar operadores
|
// Usar tipos de atendimento ao invés de técnicos
|
||||||
let resultado = await this.topsapp.obterTecnicos();
|
let resultado = await this.topsapp.obterSuporteTiposAtendimento();
|
||||||
|
|
||||||
if (!resultado.success || !resultado.data || resultado.data.length === 0) {
|
if (!resultado.success || !resultado.data?.dados || resultado.data.dados.length === 0) {
|
||||||
// Fallback para operadores
|
// Fallback para técnicos se tipos de atendimento não funcionarem
|
||||||
resultado = await this.topsapp.obterOperadores();
|
console.log('🔄 Fallback para técnicos...');
|
||||||
}
|
resultado = await this.topsapp.obterTecnicos();
|
||||||
|
|
||||||
if (!resultado.success) {
|
if (!resultado.success) {
|
||||||
await this.bot.sendMessage(session.chatId,
|
await this.bot.sendMessage(session.chatId,
|
||||||
`❌ **Erro ao buscar técnicos**\n\n` +
|
`❌ **Erro ao buscar tipos de atendimento**\n\n` +
|
||||||
`⚠️ ${resultado.error}\n\n` +
|
`⚠️ ${resultado.error}\n\n` +
|
||||||
`🔄 Reiniciando processo...`
|
`🔄 Reiniciando processo...`
|
||||||
);
|
);
|
||||||
this.suporteSessions.delete(sessionId);
|
this.suporteSessions.delete(sessionId);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!resultado.data?.dados || resultado.data.dados.length === 0) {
|
if (!resultado.data?.dados || resultado.data.dados.length === 0) {
|
||||||
await this.bot.sendMessage(session.chatId,
|
await this.bot.sendMessage(session.chatId,
|
||||||
`❌ **Nenhum técnico encontrado**\n\n` +
|
`❌ **Nenhum tipo de atendimento encontrado**\n\n` +
|
||||||
`🔄 Reiniciando processo...`
|
`🔄 Reiniciando processo...`
|
||||||
);
|
);
|
||||||
this.suporteSessions.delete(sessionId);
|
this.suporteSessions.delete(sessionId);
|
||||||
@@ -5219,7 +5220,7 @@ Digite /help para ver todos os comandos disponíveis!
|
|||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
await this.bot.sendMessage(session.chatId,
|
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` +
|
`⚠️ ${error.message}\n\n` +
|
||||||
`🔄 Reiniciando processo...`
|
`🔄 Reiniciando processo...`
|
||||||
);
|
);
|
||||||
@@ -5229,6 +5230,9 @@ Digite /help para ver todos os comandos disponíveis!
|
|||||||
// Usuário selecionou um técnico
|
// Usuário selecionou um técnico
|
||||||
const numero = parseInt(input.trim());
|
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) {
|
if (isNaN(numero) || numero < 1 || numero > session.dados.tecnicos.length) {
|
||||||
await this.bot.sendMessage(session.chatId,
|
await this.bot.sendMessage(session.chatId,
|
||||||
`❌ **Número inválido**\n\n` +
|
`❌ **Número inválido**\n\n` +
|
||||||
@@ -5237,17 +5241,20 @@ Digite /help para ver todos os comandos disponíveis!
|
|||||||
return;
|
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';
|
session.etapa = 'definir_data_hora';
|
||||||
await this.processarEtapaDefinirDataHora(sessionId);
|
await this.processarEtapaDefinirDataHora(sessionId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mostrar opções de técnicos
|
* Mostrar opções de técnicos/tipos de atendimento
|
||||||
*/
|
*/
|
||||||
async mostrarOpcoesTecnicos(session) {
|
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
|
// Validar se técnicos é um array
|
||||||
if (!Array.isArray(session.dados.tecnicos)) {
|
if (!Array.isArray(session.dados.tecnicos)) {
|
||||||
@@ -5255,16 +5262,18 @@ Digite /help para ver todos os comandos disponíveis!
|
|||||||
type: typeof session.dados.tecnicos,
|
type: typeof session.dados.tecnicos,
|
||||||
value: 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) => {
|
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`;
|
if (tecnico.email) message += ` 📧 ${tecnico.email}\n`;
|
||||||
message += `\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' });
|
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,
|
idCliente: dados.clienteSelecionado.id,
|
||||||
idServico: dados.servicoSelecionado.id,
|
idServico: dados.servicoSelecionado.id,
|
||||||
idCategoria: dados.categoriaSelecionada.id,
|
idCategoria: dados.categoriaSelecionada.id,
|
||||||
contato: dados.clienteSelecionado.nome,
|
descricao: `${dados.descricao}\n\nData/Hora agendada: ${this.dateProcessor.formatarData(dados.dataHora)}\nTécnico: ${dados.tecnicoSelecionado.nome || dados.tecnicoSelecionado.tecnico}`
|
||||||
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}`
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 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);
|
const resultado = await this.topsapp.adicionarSuporte(dadosSuporte);
|
||||||
|
|
||||||
if (resultado.success) {
|
if (resultado.success) {
|
||||||
|
|||||||
+55
-6
@@ -681,6 +681,22 @@ class TopSappAPI {
|
|||||||
}, instance, credentials);
|
}, 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
|
* Adicionar novo suporte
|
||||||
*/
|
*/
|
||||||
@@ -695,14 +711,47 @@ class TopSappAPI {
|
|||||||
idCliente: dadosSuporte.idCliente,
|
idCliente: dadosSuporte.idCliente,
|
||||||
idServico: dadosSuporte.idServico,
|
idServico: dadosSuporte.idServico,
|
||||||
idCategoria: dadosSuporte.idCategoria,
|
idCategoria: dadosSuporte.idCategoria,
|
||||||
contato: dadosSuporte.contato || '',
|
descricao: dadosSuporte.descricao
|
||||||
contatoTelefone: dadosSuporte.contatoTelefone || '',
|
|
||||||
descricao: dadosSuporte.descricao,
|
|
||||||
outrasInformacoes: dadosSuporte.outrasInformacoes || '',
|
|
||||||
...dadosSuporte // Permite campos adicionais como idAtendimento
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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
|
* Obter técnicos disponíveis
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in new issue
Block a user