From 5b887db2ce59e6957d779491577117435d57f894 Mon Sep 17 00:00:00 2001 From: marsalva Date: Wed, 4 Mar 2026 21:46:47 +0000 Subject: [PATCH] Actualizar server.js --- server.js | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/server.js b/server.js index 1a81e37..40a59ba 100644 --- a/server.js +++ b/server.js @@ -1443,6 +1443,9 @@ app.put("/services/set-appointment/:id", authMiddleware, async (req, res) => { } }); +// ========================================== +// 📞 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]); // Intentamos enviar el WhatsApp usando la plantilla - const phone = raw["Teléfono"] || raw["TELEFONOS"] || raw["TELEFONO"] || ""; - if (phone) { - // Buscamos si existe la plantilla (tendrás que crearla en el panel de admin luego) + let rawPhone = raw["Teléfono"] || raw["TELEFONOS"] || raw["TELEFONO"] || ""; + let cleanPhoneToMatch = String(rawPhone).replace(/\D/g, ""); + 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]); let text = tplQ.rowCount > 0 && 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}}`; - const phoneClean = phone.replace('+34', '').trim(); + const finalPhoneToSend = "34" + cleanPhoneToMatch; 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) { 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 insertC = await pool.query( "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; } @@ -1497,16 +1503,28 @@ app.post("/services/not-found/:id", authMiddleware, async (req, res) => { const settings = userQ.rows[0]?.wa_settings || {}; 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 --- await registrarMovimiento(id, req.user.sub, "Intento de Contacto", `El operario reporta que el cliente no contesta. Total intentos: ${currentCalls}`); // --- FIN TRAZABILIDAD --- - 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 }); + } }); // ==========================================