From 71778cbd24f58c1a2b39361c3b1540619e16320c Mon Sep 17 00:00:00 2001 From: Ayron Santoss Date: Thu, 25 Jun 2026 14:32:42 +0000 Subject: [PATCH] =?UTF-8?q?adicionado=20op=C3=A7=C3=A3o=20de=20salvar=20re?= =?UTF-8?q?solu=C3=A7=C3=A3o=20nas=20mensagens=20do=20cliente?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/chatController.js | 15 ++++++++++++++- src/controllers/configController.js | 16 ++++++++++------ src/public/settings.html | 2 ++ src/resolucaoSetup.js | 3 +++ 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/controllers/chatController.js b/src/controllers/chatController.js index 1fe0b26..d08f4d7 100644 --- a/src/controllers/chatController.js +++ b/src/controllers/chatController.js @@ -696,7 +696,7 @@ class ChatController { const resolucao = (req.body && req.body.resolucao != null) ? String(req.body.resolucao).trim() : ''; const flagsRows = await db.query(alias, - 'SELECT CFE_MOTIVO_VISUALIZAR, CFE_MOTIVO_OBRIGATORIO, CFE_RESOLUCAO_VISUALIZAR, CFE_RESOLUCAO_OBRIGATORIO FROM CHATC2_CONFIGURACOES_EMPRESA WHERE CFE_EMPRESA_ID = ?', + 'SELECT CFE_MOTIVO_VISUALIZAR, CFE_MOTIVO_OBRIGATORIO, CFE_RESOLUCAO_VISUALIZAR, CFE_RESOLUCAO_OBRIGATORIO, CFE_RESOLUCAO_SALVAR_MSC FROM CHATC2_CONFIGURACOES_EMPRESA WHERE CFE_EMPRESA_ID = ?', [c.CON_EMPRESA_ID]); const fl = flagsRows[0] || {}; const isS = (v) => String(v || 'N').trim() === 'S'; @@ -785,6 +785,19 @@ class ChatController { } } + // Salva resolução na tabela MENSAGENS_CLIENTES como aviso (se configurado) + if (isS(fl.CFE_RESOLUCAO_SALVAR_MSC) && resolucao && c.CON_CLIENTE_ID) { + try { + await db.execute(alias, + `INSERT INTO MENSAGENS_CLIENTES (MSC_CLIENTE_ID, MSC_USUARIO_ID, MSC_DT_MENSAGEM, MSC_AVISO, MSC_MENSAGEM) + VALUES (?, ?, CURRENT_TIMESTAMP, 'S', ?)`, + [c.CON_CLIENTE_ID, c.CON_USUARIO_ID || null, resolucao]); + console.log('[Resolucao] Aviso salvo em MENSAGENS_CLIENTES para cliente', c.CON_CLIENTE_ID); + } catch (mscErr) { + console.error('[Resolucao] Erro ao salvar em MENSAGENS_CLIENTES:', mscErr.message); + } + } + res.json({ success: true, message: 'Conversa finalizada.' }); } catch (err) { res.status(500).json({ success: false, error: err.message }); } } diff --git a/src/controllers/configController.js b/src/controllers/configController.js index 3843f03..9dd1605 100644 --- a/src/controllers/configController.js +++ b/src/controllers/configController.js @@ -171,7 +171,7 @@ class ConfigController { 'SELECT * FROM CHATC2_CONFIGURACOES_EMPRESA WHERE CFE_EMPRESA_ID = ?', [empresaId] ); - const flagsPadrao = { motivoVisualizar: 'N', motivoObrigatorio: 'N', resolucaoVisualizar: 'N', resolucaoObrigatorio: 'N', enviarBoleto: 'N' }; + const flagsPadrao = { motivoVisualizar: 'N', motivoObrigatorio: 'N', resolucaoVisualizar: 'N', resolucaoObrigatorio: 'N', enviarBoleto: 'N', resolucaoSalvarMSC: 'N' }; if (config.length === 0) { const cfg = Object.assign({ empresaId, fotoCelular: 'N', saudacaoAtiva: 'S', saudacaoMensagem: '', csatAtivo: 'N', csatMensagem: '', enviarNomeUsuario: 'N', triagemAtiva: 'N', triagemMsgWelcome: '', triagemMsgAfter: '', triagemBoletoNumero: '0', instanciaPadraoId: null }, flagsPadrao); @@ -197,6 +197,7 @@ class ConfigController { motivoObrigatorio: (c.CFE_MOTIVO_OBRIGATORIO || 'N').trim(), resolucaoVisualizar: (c.CFE_RESOLUCAO_VISUALIZAR || 'N').trim(), resolucaoObrigatorio: (c.CFE_RESOLUCAO_OBRIGATORIO || 'N').trim(), + resolucaoSalvarMSC: (c.CFE_RESOLUCAO_SALVAR_MSC || 'N').trim(), }}); } } catch (err) { res.status(500).json({ success: false, error: err.message }); } @@ -278,6 +279,7 @@ class ConfigController { const data = req.body; const empresaId = data.empresaId || req.user?.empresas?.[0]; const enviarBoleto = (data.enviarBoleto === 'S' || data.enviarBoleto === true) ? 'S' : 'N'; + const resolucaoSalvarMSC = (data.resolucaoSalvarMSC === 'S' || data.resolucaoSalvarMSC === true) ? 'S' : 'N'; // Upsert const exists = await db.query(alias, 'SELECT COUNT(*) AS T FROM CHATC2_CONFIGURACOES_EMPRESA WHERE CFE_EMPRESA_ID = ?', [empresaId]); @@ -288,16 +290,18 @@ class ConfigController { CFE_INSTANCIA_PADRAO_ID = ?, CFE_FOTO_CELULAR = ?, CFE_SAUDACAO_ATIVA = ?, CFE_SAUDACAO_MENSAGEM = ?, CFE_CSAT_ATIVO = ?, CFE_CSAT_MENSAGEM = ?, CFE_ENVIAR_NOME_USUARIO = ?, CFE_TRIAGEM_ATIVA = ?, CFE_TRIAGEM_MSG_WELCOME = ?, - CFE_TRIAGEM_MSG_AFTER = ?, CFE_TRIAGEM_BOLETO_NUMERO = ?, CFE_ENVIAR_BOLETO = ? + CFE_TRIAGEM_MSG_AFTER = ?, CFE_TRIAGEM_BOLETO_NUMERO = ?, CFE_ENVIAR_BOLETO = ?, + CFE_RESOLUCAO_SALVAR_MSC = ? WHERE CFE_EMPRESA_ID = ? - `, [data.instanciaPadraoId || null, data.fotoCelular || 'N', data.saudacaoAtiva || 'S', data.saudacaoMensagem || '', data.csatAtivo || 'N', data.csatMensagem || '', data.enviarNomeUsuario || 'N', data.triagemAtiva || 'N', data.triagemMsgWelcome || '', data.triagemMsgAfter || '', data.triagemBoletoNumero || '0', enviarBoleto, empresaId]); + `, [data.instanciaPadraoId || null, data.fotoCelular || 'N', data.saudacaoAtiva || 'S', data.saudacaoMensagem || '', data.csatAtivo || 'N', data.csatMensagem || '', data.enviarNomeUsuario || 'N', data.triagemAtiva || 'N', data.triagemMsgWelcome || '', data.triagemMsgAfter || '', data.triagemBoletoNumero || '0', enviarBoleto, resolucaoSalvarMSC, empresaId]); } else { await db.execute(alias, ` INSERT INTO CHATC2_CONFIGURACOES_EMPRESA (CFE_EMPRESA_ID, CFE_INSTANCIA_PADRAO_ID, CFE_FOTO_CELULAR, CFE_SAUDACAO_ATIVA, CFE_SAUDACAO_MENSAGEM, CFE_CSAT_ATIVO, CFE_CSAT_MENSAGEM, CFE_ENVIAR_NOME_USUARIO, - CFE_TRIAGEM_ATIVA, CFE_TRIAGEM_MSG_WELCOME, CFE_TRIAGEM_MSG_AFTER, CFE_TRIAGEM_BOLETO_NUMERO, CFE_ENVIAR_BOLETO) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `, [empresaId, data.instanciaPadraoId || null, data.fotoCelular || 'N', data.saudacaoAtiva || 'S', data.saudacaoMensagem || '', data.csatAtivo || 'N', data.csatMensagem || '', data.enviarNomeUsuario || 'N', data.triagemAtiva || 'N', data.triagemMsgWelcome || '', data.triagemMsgAfter || '', data.triagemBoletoNumero || '0', enviarBoleto]); + CFE_TRIAGEM_ATIVA, CFE_TRIAGEM_MSG_WELCOME, CFE_TRIAGEM_MSG_AFTER, CFE_TRIAGEM_BOLETO_NUMERO, CFE_ENVIAR_BOLETO, + CFE_RESOLUCAO_SALVAR_MSC) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `, [empresaId, data.instanciaPadraoId || null, data.fotoCelular || 'N', data.saudacaoAtiva || 'S', data.saudacaoMensagem || '', data.csatAtivo || 'N', data.csatMensagem || '', data.enviarNomeUsuario || 'N', data.triagemAtiva || 'N', data.triagemMsgWelcome || '', data.triagemMsgAfter || '', data.triagemBoletoNumero || '0', enviarBoleto, resolucaoSalvarMSC]); } configService.invalidarConfig(alias, empresaId); diff --git a/src/public/settings.html b/src/public/settings.html index 6849cb2..8d17246 100644 --- a/src/public/settings.html +++ b/src/public/settings.html @@ -816,6 +816,7 @@ async function carregarConfig() { '
' + '
' + '' + + '
' + '
' + '
' + '
'; @@ -854,6 +855,7 @@ window.salvarConfig = async function() { triagemBoletoNumero: document.getElementById('cfgTriagemBoletoNum').value, csatAtivo: document.getElementById('cfgCsat').checked ? 'S' : 'N', csatMensagem: document.getElementById('cfgCsatMsg').value, + resolucaoSalvarMSC: document.getElementById('cfgResolucaoSalvarMSC').checked ? 'S' : 'N', }; var r = await api('/company/config', { method: 'POST', body: JSON.stringify(data) }); diff --git a/src/resolucaoSetup.js b/src/resolucaoSetup.js index ac25bb4..ab423c2 100644 --- a/src/resolucaoSetup.js +++ b/src/resolucaoSetup.js @@ -36,6 +36,9 @@ async function garantirEstrutura(alias) { // Envio de boleto na conversa (checkbox em Configurações > Empresa) await tentar(alias, `ALTER TABLE CHATC2_CONFIGURACOES_EMPRESA ADD CFE_ENVIAR_BOLETO CHAR(1) DEFAULT 'N'`); + // Salvar resolução na tabela MENSAGENS_CLIENTES como aviso (checkbox em Configurações > Empresa) + await tentar(alias, `ALTER TABLE CHATC2_CONFIGURACOES_EMPRESA ADD CFE_RESOLUCAO_SALVAR_MSC CHAR(1) DEFAULT 'N'`); + await tentar(alias, `ALTER TABLE CHATC2_CONVERSAS ADD CON_MOTIVO_ID INTEGER`); await tentar(alias, `ALTER TABLE CHATC2_CONVERSAS ADD CON_RESOLUCAO VARCHAR(4000)`);