Actualizar server.js
This commit is contained in:
39
server.js
39
server.js
@@ -3977,7 +3977,8 @@ app.post("/webhook/evolution", async (req, res) => {
|
|||||||
if (msgCmd.includes('🔴')) {
|
if (msgCmd.includes('🔴')) {
|
||||||
try {
|
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(`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}`);
|
console.log(`🔴 [IA PAUSADA] Semáforo rojo activado para exp ${service.service_ref}`);
|
||||||
} catch(err) { console.error("Error pausando IA:", err); }
|
} catch(err) { console.error("Error pausando IA:", err); }
|
||||||
return;
|
return;
|
||||||
@@ -3987,7 +3988,8 @@ app.post("/webhook/evolution", async (req, res) => {
|
|||||||
if (msgCmd.includes('🟢')) {
|
if (msgCmd.includes('🟢')) {
|
||||||
try {
|
try {
|
||||||
await pool.query(`UPDATE scraped_services SET raw_data = raw_data - 'ia_paused' WHERE id = $1`, [service.id]);
|
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}`);
|
console.log(`🟢 [IA ACTIVADA] Semáforo verde activado para exp ${service.service_ref}`);
|
||||||
} catch(err) { console.error("Error activando IA:", err); }
|
} catch(err) { console.error("Error activando IA:", err); }
|
||||||
return;
|
return;
|
||||||
@@ -4004,6 +4006,39 @@ app.post("/webhook/evolution", async (req, res) => {
|
|||||||
if (candadosIA.has(service.id)) return;
|
if (candadosIA.has(service.id)) return;
|
||||||
candadosIA.add(service.id);
|
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 {
|
try {
|
||||||
// 🛑 COMPROBAR SI LA HEMOS PAUSADO CON EL SEMÁFORO ROJO
|
// 🛑 COMPROBAR SI LA HEMOS PAUSADO CON EL SEMÁFORO ROJO
|
||||||
if (service.ia_paused === 'true' || service.ia_paused === true) {
|
if (service.ia_paused === 'true' || service.ia_paused === true) {
|
||||||
|
|||||||
Reference in New Issue
Block a user