adicionado opção de salvar resolução nas mensagens do cliente
This commit is contained in:
@@ -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 }); }
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -816,6 +816,7 @@ async function carregarConfig() {
|
||||
'<div class="form-group"><label>Mensagem após escolha</label><textarea id="cfgTriagemAfter" rows="2" style="width:100%;padding:10px;border:2px solid #e5e7eb;border-radius:8px;font-size:13px;resize:vertical">' + (cfg.triagemMsgAfter || '') + '</textarea></div>' +
|
||||
'<div class="form-group"><label>Número da opção "Segunda via de Boleto"</label><input type="text" id="cfgTriagemBoletoNum" value="' + (cfg.triagemBoletoNumero || '0') + '" style="width:100%;padding:10px;border:2px solid #e5e7eb;border-radius:8px;font-size:14px"></div>' +
|
||||
'</div>' +
|
||||
'<div class="form-group"><div class="toggle"><input type="checkbox" id="cfgResolucaoSalvarMSC" ' + (cfg.resolucaoSalvarMSC === 'S' ? 'checked' : '') + '> <label for="cfgResolucaoSalvarMSC">💾 Salvar resolução de atendimento na tabela MENSAGENS_CLIENTES (como aviso)</label></div></div>' +
|
||||
'<div class="form-group"><div class="toggle"><input type="checkbox" id="cfgCsat" ' + (cfg.csatAtivo === 'S' ? 'checked' : '') + '> <label for="cfgCsat">Ativar CSAT (Pesquisa de satisfação)</label></div></div>' +
|
||||
'<div class="form-group"><label>Mensagem CSAT</label><textarea id="cfgCsatMsg">' + (cfg.csatMensagem || '') + '</textarea></div>' +
|
||||
'<div id="configFeedback" class="feedback-msg"></div><button class="btn btn-primary" onclick="salvarConfig()">💾 Salvar Configurações</button>';
|
||||
@@ -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) });
|
||||
|
||||
@@ -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)`);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user