From 7318f4e528b1df580bdd1c6e9c76eb902973792c Mon Sep 17 00:00:00 2001 From: marsalva Date: Sun, 15 Feb 2026 21:06:48 +0000 Subject: [PATCH] Actualizar server.js --- server.js | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/server.js b/server.js index 9873a7d..e5e984e 100644 --- a/server.js +++ b/server.js @@ -434,6 +434,20 @@ app.post("/providers/automate/:id", authMiddleware, async (req, res) => { if (!guild_id || !cp) return res.status(400).json({ ok: false, error: "Faltan datos (Gremio o CP)" }); + // 1. Obtener datos del expediente para el mensaje + const serviceQ = await pool.query("SELECT raw_data, provider FROM scraped_services WHERE id = $1", [id]); + if (serviceQ.rowCount === 0) return res.status(404).json({ ok: false, error: "Expediente no encontrado" }); + + const raw = serviceQ.rows[0].raw_data; + const nombreCliente = raw["Nombre Cliente"] || raw["CLIENTE"] || "Cliente"; + const poblacion = raw["Población"] || raw["POBLACION-PROVINCIA"] || "---"; + const gremioNombre = raw["Gremio"] || "Servicio General"; + + // Limpiar dirección: Quitar números y pisos (regex para detectar números y lo que sigue) + const direccionCompleta = raw["Dirección"] || raw["DOMICILIO"] || ""; + const direccionLimpia = direccionCompleta.split(/[0-9]/)[0].trim(); + + // 2. Buscar operarios disponibles const workersQ = await pool.query(` SELECT u.id, u.full_name, u.phone FROM users u @@ -448,15 +462,36 @@ app.post("/providers/automate/:id", authMiddleware, async (req, res) => { const worker = workersQ.rows[Math.floor(Math.random() * workersQ.rows.length)]; const token = crypto.randomBytes(16).toString('hex'); - const expiresAt = new Date(Date.now() + 5 * 60 * 1000); + const expiresAt = new Date(Date.now() + 5 * 60 * 1000); // 5 Minutos + + // Formatear hora de caducidad (HH:mm) + const horaCaducidad = expiresAt.toLocaleTimeString('es-ES', { hour: '2-digit', minute: '2-digit' }); await pool.query(`INSERT INTO assignment_pings (scraped_id, user_id, token, expires_at) VALUES ($1, $2, $3, $4)`, [id, worker.id, token, expiresAt]); + // 3. Construir mensaje de WhatsApp con toda la información solicitada const link = `https://web.integrarepara.es/aceptar.html?t=${token}`; - await sendWhatsAppAuto(worker.phone, `🛠️ *NUEVO SERVICIO*\nCP: ${cp}\n🔗 ${link}`); + const mensaje = `🛠️ *NUEVO SERVICIO ASIGNADO A TI* + +👤 *Operario:* ${worker.full_name} +📋 *Gremio:* ${gremioNombre} + +*DATOS DEL CLIENTE:* +👤 *Nombre:* ${nombreCliente} +📍 *Zona:* ${direccionLimpia} +🏙️ *Población:* ${poblacion} (CP: ${cp}) + +⚠️ *ATENCIÓN:* Tienes hasta las *${horaCaducidad}* para revisar los datos completos y ACEPTAR el servicio en el siguiente enlace: + +🔗 ${link}`; + + await sendWhatsAppAuto(worker.phone, mensaje); res.json({ ok: true, message: "Automatismo iniciado con " + worker.full_name }); - } catch (e) { res.status(500).json({ ok: false, error: e.message }); } + } catch (e) { + console.error("Error Automate:", e.message); + res.status(500).json({ ok: false, error: e.message }); + } }); app.post("/providers/import/:id", authMiddleware, async (req, res) => {