Actualizar server.js

This commit is contained in:
2026-03-04 21:46:47 +00:00
parent dfb1474787
commit 5b887db2ce

View File

@@ -1443,6 +1443,9 @@ app.put("/services/set-appointment/:id", authMiddleware, async (req, res) => {
} }
}); });
// ==========================================
// 📞 RUTA PARA CLIENTE NO LOCALIZADO
// ==========================================
// ========================================== // ==========================================
// 📞 RUTA PARA CLIENTE NO LOCALIZADO // 📞 RUTA PARA CLIENTE NO LOCALIZADO
// ========================================== // ==========================================
@@ -1463,17 +1466,20 @@ app.post("/services/not-found/:id", authMiddleware, async (req, res) => {
await pool.query("UPDATE scraped_services SET raw_data=$1 WHERE id=$2", [JSON.stringify(raw), id]); await pool.query("UPDATE scraped_services SET raw_data=$1 WHERE id=$2", [JSON.stringify(raw), id]);
// Intentamos enviar el WhatsApp usando la plantilla // Intentamos enviar el WhatsApp usando la plantilla
const phone = raw["Teléfono"] || raw["TELEFONOS"] || raw["TELEFONO"] || ""; let rawPhone = raw["Teléfono"] || raw["TELEFONOS"] || raw["TELEFONO"] || "";
if (phone) { let cleanPhoneToMatch = String(rawPhone).replace(/\D/g, "");
// Buscamos si existe la plantilla (tendrás que crearla en el panel de admin luego) if (cleanPhoneToMatch.length > 9) cleanPhoneToMatch = cleanPhoneToMatch.slice(-9);
if (cleanPhoneToMatch.length >= 9) { // Solo intentamos enviar si hay un número válido
const tplQ = await pool.query("SELECT content FROM message_templates WHERE owner_id=$1 AND type='not_found'", [req.user.accountId]); const tplQ = await pool.query("SELECT content FROM message_templates WHERE owner_id=$1 AND type='not_found'", [req.user.accountId]);
let text = tplQ.rowCount > 0 && tplQ.rows[0].content let text = tplQ.rowCount > 0 && tplQ.rows[0].content
? tplQ.rows[0].content ? tplQ.rows[0].content
: `Hola {{NOMBRE}}, soy el técnico de {{COMPANIA}}. He intentado contactar contigo para agendar tu reparación (Exp. {{REFERENCIA}}), pero no ha sido posible. Por favor, pulsa aquí para elegir tu cita: {{ENLACE}}`; : `Hola {{NOMBRE}}, soy el técnico de {{COMPANIA}}. He intentado contactar contigo para agendar tu reparación (Exp. {{REFERENCIA}}), pero no ha sido posible. Por favor, pulsa aquí para elegir tu cita: {{ENLACE}}`;
const phoneClean = phone.replace('+34', '').trim(); const finalPhoneToSend = "34" + cleanPhoneToMatch;
let token = "ERROR"; let token = "ERROR";
const clientQ = await pool.query("SELECT portal_token FROM clients WHERE phone LIKE $1 AND owner_id=$2 LIMIT 1", [`%${phoneClean}%`, req.user.accountId]); const clientQ = await pool.query("SELECT portal_token FROM clients WHERE phone LIKE $1 AND owner_id=$2 LIMIT 1", [`%${cleanPhoneToMatch}%`, req.user.accountId]);
if (clientQ.rowCount > 0) { if (clientQ.rowCount > 0) {
token = clientQ.rows[0].portal_token; token = clientQ.rows[0].portal_token;
@@ -1481,7 +1487,7 @@ app.post("/services/not-found/:id", authMiddleware, async (req, res) => {
const newToken = crypto.randomBytes(6).toString('hex'); const newToken = crypto.randomBytes(6).toString('hex');
const insertC = await pool.query( const insertC = await pool.query(
"INSERT INTO clients (owner_id, full_name, phone, addresses, portal_token) VALUES ($1, $2, $3, '[]', $4) RETURNING portal_token", "INSERT INTO clients (owner_id, full_name, phone, addresses, portal_token) VALUES ($1, $2, $3, '[]', $4) RETURNING portal_token",
[req.user.accountId, raw["Nombre Cliente"] || "Cliente", phone, newToken] [req.user.accountId, raw["Nombre Cliente"] || "Cliente", finalPhoneToSend, newToken]
); );
token = insertC.rows[0].portal_token; token = insertC.rows[0].portal_token;
} }
@@ -1497,16 +1503,28 @@ app.post("/services/not-found/:id", authMiddleware, async (req, res) => {
const settings = userQ.rows[0]?.wa_settings || {}; const settings = userQ.rows[0]?.wa_settings || {};
const useDelay = settings.wa_delay_enabled !== false; const useDelay = settings.wa_delay_enabled !== false;
sendWhatsAppAuto(phone, text, `cliente_${req.user.accountId}`, useDelay).catch(console.error); // MODO PRUEBAS: Redirigir el mensaje a tu móvil si está activado
const MODO_PRUEBAS = true;
const MI_TELEFONO = "34667248132";
if (MODO_PRUEBAS) {
console.log(`🛡️ [MODO PRUEBAS NO LOCALIZADO] Desvío a tu móvil (${MI_TELEFONO})`);
const textoPrueba = `*(SIMULACIÓN NO LOCALIZADO PARA: ${finalPhoneToSend})*\n\n` + text;
sendWhatsAppAuto(MI_TELEFONO, textoPrueba, `cliente_${req.user.accountId}`, useDelay).catch(console.error);
} else {
sendWhatsAppAuto(finalPhoneToSend, text, `cliente_${req.user.accountId}`, useDelay).catch(console.error);
}
} }
// --- INICIO TRAZABILIDAD --- // --- INICIO TRAZABILIDAD ---
await registrarMovimiento(id, req.user.sub, "Intento de Contacto", `El operario reporta que el cliente no contesta. Total intentos: ${currentCalls}`); await registrarMovimiento(id, req.user.sub, "Intento de Contacto", `El operario reporta que el cliente no contesta. Total intentos: ${currentCalls}`);
// --- FIN TRAZABILIDAD --- // --- FIN TRAZABILIDAD ---
res.json({ ok: true, called_times: currentCalls }); res.json({ ok: true, called_times: currentCalls });
} catch (e) { res.status(500).json({ ok: false }); } } catch (e) {
console.error("Error No Localizado:", e);
res.status(500).json({ ok: false });
}
}); });
// ========================================== // ==========================================