From 06ae6f00a1bde074b6f015842f3c543ba42dea6c Mon Sep 17 00:00:00 2001 From: marsalva Date: Mon, 16 Feb 2026 22:49:55 +0000 Subject: [PATCH] Actualizar server.js --- server.js | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/server.js b/server.js index 4879f87..94cf0af 100644 --- a/server.js +++ b/server.js @@ -310,46 +310,55 @@ async function sendWhatsAppCode(phone, code) { } catch (e) { console.error("Error envío WA:", e.message); } } -async function sendWhatsAppAuto(phone, text, instanceName, useDelay = true) { // <--- Nuevo parámetro useDelay +async function sendWhatsAppAuto(phone, text, instanceName, useDelay = true) { if (!EVOLUTION_BASE_URL || !EVOLUTION_API_KEY || !instanceName) { - console.error("❌ Faltan datos para enviar WhatsApp automático"); + console.error("❌ Faltan datos para enviar WhatsApp automático (Revisa URLs o instancia)"); return; } try { - console.log(`\n📲 Intentando enviar WA a ${phone} [Modo Delay: ${useDelay}]...`); + console.log(`\n📲 Intentando enviar WA a ${phone} desde la instancia [${instanceName}] | Modo Lento: ${useDelay}...`); - let payload; + let payloadConEscribiendo; + const typingTimeMs = Math.min(Math.max(text.length * 30, 1500), 8000); - if (useDelay) { - // PLAN A: Escribiendo lento - const typingTimeMs = Math.min(Math.max(text.length * 30, 1500), 8000); - payload = { + if(useDelay) { + payloadConEscribiendo = { number: phone.replace("+", ""), text: text, options: { delay: typingTimeMs, presence: "composing" } }; } else { - // PLAN B: Directo e instantáneo - payload = { number: phone.replace("+", ""), text: text }; + payloadConEscribiendo = { number: phone.replace("+", ""), text: text }; } const res = await fetch(`${EVOLUTION_BASE_URL.replace(/\/$/, "")}/message/sendText/${instanceName}`, { method: "POST", headers: { "Content-Type": "application/json", "apikey": EVOLUTION_API_KEY }, - body: JSON.stringify(payload) + body: JSON.stringify(payloadConEscribiendo) }); if (!res.ok && useDelay) { - console.warn(`⚠️ Evolution rechazó el modo "Escribiendo". Reenviando instantáneo...`); + const errCode = res.status; + console.warn(`⚠️ Evolution rechazó el modo "Escribiendo" (Código ${errCode}). Activando Plan B (Modo seguro instantáneo)...`); + const payloadSeguro = { number: phone.replace("+", ""), text: text }; - await fetch(`${EVOLUTION_BASE_URL.replace(/\/$/, "")}/message/sendText/${instanceName}`, { - method: "POST", headers: { "Content-Type": "application/json", "apikey": EVOLUTION_API_KEY }, + const res2 = await fetch(`${EVOLUTION_BASE_URL.replace(/\/$/, "")}/message/sendText/${instanceName}`, { + method: "POST", + headers: { "Content-Type": "application/json", "apikey": EVOLUTION_API_KEY }, body: JSON.stringify(payloadSeguro) }); + + if (!res2.ok) console.error("❌ Error definitivo en Evolution API:", await res2.text()); + else console.log("✅ WA enviado correctamente (Plan B Seguro)."); + } else if (res.ok) { + console.log(`✅ WA enviado con éxito (${useDelay ? 'Modo Humano' : 'Modo Rápido'}).`); + } else { + console.error("❌ Error en Evolution API:", await res.text()); } - console.log("✅ WA procesado por Evolution."); - } catch (e) { console.error("❌ Error WA:", e.message); } + } catch (e) { + console.error("❌ Error crítico en función WA:", e.message); + } } async function ensureInstance(instanceName) { @@ -534,7 +543,7 @@ app.get("/providers/scraped", authMiddleware, async (req, res) => { app.post("/providers/automate/:id", authMiddleware, async (req, res) => { try { const { id } = req.params; - const { guild_id, cp } = req.body; + const { guild_id, cp, useDelay } = req.body; if (!guild_id || !cp) return res.status(400).json({ ok: false, error: "Faltan datos (Gremio o CP)" }); @@ -594,7 +603,7 @@ app.post("/providers/automate/:id", authMiddleware, async (req, res) => { // SAAS: INSTANCIA DE CLIENTE ESPECÍFICA SIN AWAIT PARA NO BLOQUEAR const instanceName = `cliente_${req.user.accountId}`; - sendWhatsAppAuto(worker.phone, mensaje, instanceName).catch(console.error); + sendWhatsAppAuto(worker.phone, mensaje, instanceName, useDelay).catch(console.error); res.json({ ok: true, message: "Automatismo iniciado con " + worker.full_name }); } catch (e) {