Actualizar server.js

This commit is contained in:
2026-03-26 08:41:51 +00:00
parent f2a975ac71
commit 3ae13f6ffe

View File

@@ -3977,7 +3977,8 @@ app.post("/webhook/evolution", async (req, res) => {
if (msgCmd.includes('🔴')) {
try {
await pool.query(`UPDATE scraped_services SET raw_data = COALESCE(raw_data, '{}'::jsonb) || '{"ia_paused": true}'::jsonb WHERE id = $1`, [service.id]);
await pool.query(`INSERT INTO service_communications (scraped_id, owner_id, sender_name, sender_role, message, is_internal) VALUES ($1, $2, $3, $4, $5, true)`, [service.id, ownerId, "Sistema", "admin", "🔴 IA Pausada manualmente con Emoji."]);
// 🛑 Guardamos como 'system' para que NO active el escudo humano de 2 horas
await pool.query(`INSERT INTO service_communications (scraped_id, owner_id, sender_name, sender_role, message, is_internal) VALUES ($1, $2, $3, $4, $5, true)`, [service.id, ownerId, "Sistema", "system", "🔴 IA Pausada manualmente con Emoji."]);
console.log(`🔴 [IA PAUSADA] Semáforo rojo activado para exp ${service.service_ref}`);
} catch(err) { console.error("Error pausando IA:", err); }
return;
@@ -3987,7 +3988,8 @@ app.post("/webhook/evolution", async (req, res) => {
if (msgCmd.includes('🟢')) {
try {
await pool.query(`UPDATE scraped_services SET raw_data = raw_data - 'ia_paused' WHERE id = $1`, [service.id]);
await pool.query(`INSERT INTO service_communications (scraped_id, owner_id, sender_name, sender_role, message, is_internal) VALUES ($1, $2, $3, $4, $5, true)`, [service.id, ownerId, "Sistema", "admin", "🟢 IA Reactivada manualmente con Emoji."]);
// 🟢 Guardamos como 'system' para EVITAR que la IA se autobloquee al despertarla
await pool.query(`INSERT INTO service_communications (scraped_id, owner_id, sender_name, sender_role, message, is_internal) VALUES ($1, $2, $3, $4, $5, true)`, [service.id, ownerId, "Sistema", "system", "🟢 IA Reactivada manualmente con Emoji."]);
console.log(`🟢 [IA ACTIVADA] Semáforo verde activado para exp ${service.service_ref}`);
} catch(err) { console.error("Error activando IA:", err); }
return;
@@ -4004,6 +4006,39 @@ app.post("/webhook/evolution", async (req, res) => {
if (candadosIA.has(service.id)) return;
candadosIA.add(service.id);
try {
// 🛑 COMPROBAR SI LA HEMOS PAUSADO CON EL SEMÁFORO ROJO
if (service.ia_paused === 'true' || service.ia_paused === true) {
console.log(`🤫 [IA MUTEADA] El cliente ha hablado, pero la IA está en semáforo rojo para ${service.service_ref}`);
return;
}
// 🛡️ VERIFICAR INTERVENCIÓN HUMANA (ESCUDO INTELIGENTE)
// Buscamos el último mensaje, PERO ignoramos al 'system' y al 'user'
const checkHumanQ = await pool.query(`
SELECT sender_role, created_at FROM service_communications
WHERE scraped_id = $1 AND sender_role NOT IN ('user', 'system')
ORDER BY created_at DESC LIMIT 1
`, [service.id]);
if (checkHumanQ.rowCount > 0) {
const lastMsg = checkHumanQ.rows[0];
const diffMinutos = (new Date() - new Date(lastMsg.created_at)) / (1000 * 60);
// 🛑 ESCUDO ACTIVADO: 120 minutos de silencio desde tu último mensaje real
if (['admin', 'superadmin', 'operario'].includes(lastMsg.sender_role) && diffMinutos < 120) {
console.log(`🛡️ [ESCUDO IA] Silenciando a la IA porque un humano habló hace ${Math.round(diffMinutos)} minutos.`);
return;
}
}
[service.id, ownerId, "Técnico (WhatsApp)", "operario", mensajeTexto]);
} catch(err) { console.error("Error guardando mensaje de admin:", err); }
return;
}
if (candadosIA.has(service.id)) return;
candadosIA.add(service.id);
try {
// 🛑 COMPROBAR SI LA HEMOS PAUSADO CON EL SEMÁFORO ROJO
if (service.ia_paused === 'true' || service.ia_paused === true) {