atualizacoes
This commit is contained in:
@@ -639,6 +639,9 @@ class ChatController {
|
||||
}
|
||||
} catch(e) {}
|
||||
|
||||
// Processa placeholders: [CLIENTE], [CONTATO], [EMPRESAR], [EMPRESAF]
|
||||
textoFinal = await ChatController.processarPlaceholders(alias, id, textoFinal);
|
||||
|
||||
// Insere mensagem no banco
|
||||
await db.execute(alias, `
|
||||
INSERT INTO CHATC2_CONVERSAS_MENSAGENS (CME_CODIGO_ID, CME_CONVERSA_ID, CME_REMETENTE, CME_USUARIO_ID, CME_TEXTO, CME_TIPO, CME_PRIVADA, CME_SITUACAO, CME_DT_ENVIO, CME_MIDIA_ID)
|
||||
@@ -902,10 +905,11 @@ class ChatController {
|
||||
|
||||
// Adiciona mensagem na conversa existente
|
||||
const msgId = await db.nextId(alias, 'GEN_CONVERSAS_MENSAGENS');
|
||||
const textoProcessado = await ChatController.processarPlaceholders(alias, conversaId, mensagem);
|
||||
await db.execute(alias, `
|
||||
INSERT INTO CHATC2_CONVERSAS_MENSAGENS (CME_CODIGO_ID, CME_CONVERSA_ID, CME_REMETENTE, CME_USUARIO_ID, CME_TEXTO, CME_TIPO, CME_SITUACAO, CME_DT_ENVIO)
|
||||
VALUES (?, ?, 'U', ?, ?, 'text', 'A', CURRENT_TIMESTAMP)
|
||||
`, [msgId, conversaId, req.user?.id, mensagem]);
|
||||
`, [msgId, conversaId, req.user?.id, textoProcessado]);
|
||||
|
||||
await db.execute(alias,
|
||||
'UPDATE CHATC2_CONVERSAS SET CON_DT_ULTIMA_MSG = CURRENT_TIMESTAMP WHERE CON_CODIGO_ID = ?',
|
||||
@@ -915,7 +919,7 @@ class ChatController {
|
||||
const resultado = await db.query(alias,
|
||||
'SELECT * FROM CHATC2_INSTANCIAS WHERE INS_CODIGO_ID = ?', [instanciaId || null]);
|
||||
if (resultado.length > 0) {
|
||||
sendEvolutionMessage(resultado[0], numeroLimpo, mensagem, 'text', null).catch(function(){});
|
||||
sendEvolutionMessage(resultado[0], numeroLimpo, textoProcessado, 'text', null).catch(function(){});
|
||||
}
|
||||
|
||||
return res.json({ success: true, data: { id: conversaId, reutilizada: true } });
|
||||
@@ -941,18 +945,19 @@ class ChatController {
|
||||
|
||||
// Insere primeira mensagem
|
||||
const msgId = await db.nextId(alias, 'GEN_CONVERSAS_MENSAGENS');
|
||||
const textoProcessadoNew = await ChatController.processarPlaceholders(alias, newId, mensagem);
|
||||
|
||||
await db.execute(alias, `
|
||||
INSERT INTO CHATC2_CONVERSAS_MENSAGENS (CME_CODIGO_ID, CME_CONVERSA_ID, CME_REMETENTE, CME_USUARIO_ID, CME_TEXTO, CME_TIPO, CME_SITUACAO, CME_DT_ENVIO)
|
||||
VALUES (?, ?, 'U', ?, ?, 'text', 'A', CURRENT_TIMESTAMP)
|
||||
`, [msgId, newId, req.user?.id, mensagem]);
|
||||
`, [msgId, newId, req.user?.id, textoProcessadoNew]);
|
||||
|
||||
// Envia via Evolution API
|
||||
try {
|
||||
const resultado = await db.query(alias,
|
||||
'SELECT * FROM CHATC2_INSTANCIAS WHERE INS_CODIGO_ID = ?', [instId]);
|
||||
if (resultado.length > 0) {
|
||||
await sendEvolutionMessage(resultado[0], numeroLimpo, mensagem, 'text', null);
|
||||
await sendEvolutionMessage(resultado[0], numeroLimpo, textoProcessadoNew, 'text', null);
|
||||
}
|
||||
} catch (evoErr) {
|
||||
console.error('Erro ao enviar primeira mensagem via Evolution:', evoErr.message);
|
||||
@@ -1428,6 +1433,26 @@ class ChatController {
|
||||
} catch (err) { res.status(500).json({ success: false, error: err.message }); }
|
||||
}
|
||||
|
||||
/**
|
||||
* Recebe avaliação CSAT via formulário web
|
||||
* POST /api/:alias/csat/avaliar
|
||||
*/
|
||||
static async csatCheck(req, res) {
|
||||
try {
|
||||
const { alias } = req.params;
|
||||
const conversaId = parseInt(req.query.conversa);
|
||||
if (!conversaId) return res.status(400).json({ success: false, error: 'conversa obrigatório.' });
|
||||
|
||||
const existe = await db.query(alias,
|
||||
'SELECT CSA_NOTA, CSA_COMENTARIO FROM CHATC2_CSAT_AVALIACOES WHERE CSA_CONVERSA_ID = ?',
|
||||
[conversaId]);
|
||||
|
||||
res.json({ success: true, avaliado: existe.length > 0 });
|
||||
} catch (err) {
|
||||
res.status(500).json({ success: false, error: err.message });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Recebe avaliação CSAT via formulário web
|
||||
* POST /api/:alias/csat/avaliar
|
||||
@@ -1470,6 +1495,67 @@ class ChatController {
|
||||
res.status(500).json({ success: false, error: err.message });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Substitui placeholders no texto da mensagem.
|
||||
* [CLIENTE] → nome do cliente cadastrado (ou [CONTATO] se não tiver)
|
||||
* [CONTATO] → nome do contato WhatsApp
|
||||
* [EMPRESAR] → razão social da empresa
|
||||
* [EMPRESAF] → nome fantasia da empresa
|
||||
*/
|
||||
static async processarPlaceholders(alias, conversaId, texto) {
|
||||
if (!texto || (!texto.includes('[') && !texto.includes(']'))) return texto;
|
||||
|
||||
try {
|
||||
const conv = await db.query(alias,
|
||||
'SELECT CON_CLIENTE_ID, CON_NOME_CONTATO, CON_EMPRESA_ID FROM CHATC2_CONVERSAS WHERE CON_CODIGO_ID = ?',
|
||||
[conversaId]);
|
||||
if (conv.length === 0) return texto;
|
||||
|
||||
const contato = (conv[0].CON_NOME_CONTATO || '').trim();
|
||||
const empresaId = conv[0].CON_EMPRESA_ID;
|
||||
|
||||
// Busca nome do cliente
|
||||
let clienteNome = '';
|
||||
if (conv[0].CON_CLIENTE_ID) {
|
||||
const cli = await db.query(alias,
|
||||
'SELECT CLI_NOME, CLI_NOME_FANTASIA FROM CLIENTES WHERE CLI_CODIGO_ID = ?',
|
||||
[conv[0].CON_CLIENTE_ID]);
|
||||
if (cli.length > 0) {
|
||||
clienteNome = (cli[0].CLI_NOME_FANTASIA || cli[0].CLI_NOME || '').trim();
|
||||
}
|
||||
}
|
||||
|
||||
// Busca dados da empresa
|
||||
let empresaR = '', empresaF = '';
|
||||
if (empresaId) {
|
||||
const emp = await db.query(alias,
|
||||
'SELECT EMP_NOME, EMP_NOME_FANTASIA FROM EMPRESAS WHERE EMP_CODIGO_ID = ?',
|
||||
[empresaId]);
|
||||
if (emp.length > 0) {
|
||||
empresaR = (emp[0].EMP_NOME || '').trim();
|
||||
empresaF = (emp[0].EMP_NOME_FANTASIA || emp[0].EMP_NOME || '').trim();
|
||||
} else {
|
||||
console.log('[Placeholder] Empresa nao encontrada para ID:', empresaId);
|
||||
}
|
||||
} else {
|
||||
console.log('[Placeholder] Conversa sem CON_EMPRESA_ID');
|
||||
}
|
||||
|
||||
// Substitui: [CLIENTE] usa nome do cadastro, senão cai para [CONTATO]
|
||||
let result = texto;
|
||||
result = result.replace(/\[CLIENTE\]/gi, clienteNome || contato || '');
|
||||
result = result.replace(/\[CONTATO\]/gi, contato || '');
|
||||
result = result.replace(/\[EMPRESAR\]/gi, empresaR || empresaF || '');
|
||||
result = result.replace(/\[EMPRESAF\]/gi, empresaF || empresaR || '');
|
||||
|
||||
console.log('[Placeholder] conversa:', conversaId, '| contato:', contato, '| cliente:', clienteNome, '| empresaR:', empresaR, '| empresaF:', empresaF, '| antes:', texto.substring(0, 80), '| depois:', result.substring(0, 80));
|
||||
|
||||
return result;
|
||||
} catch (e) {
|
||||
return texto; // fallback: retorna sem substituir
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Helper: normaliza número para formato WhatsApp (DDI + 9º dígito)
|
||||
|
||||
Reference in New Issue
Block a user