Actualizar server.js

This commit is contained in:
2026-02-16 22:43:53 +00:00
parent 2131994756
commit f0e314b8d5

View File

@@ -310,59 +310,46 @@ async function sendWhatsAppCode(phone, code) {
} catch (e) { console.error("Error envío WA:", e.message); } } catch (e) { console.error("Error envío WA:", e.message); }
} }
async function sendWhatsAppAuto(phone, text, instanceName) { async function sendWhatsAppAuto(phone, text, instanceName, useDelay = true) { // <--- Nuevo parámetro useDelay
if (!EVOLUTION_BASE_URL || !EVOLUTION_API_KEY || !instanceName) { if (!EVOLUTION_BASE_URL || !EVOLUTION_API_KEY || !instanceName) {
console.error("❌ Faltan datos para enviar WhatsApp automático (Revisa URLs o instancia)"); console.error("❌ Faltan datos para enviar WhatsApp automático");
return; return;
} }
try { try {
console.log(`\n📲 Intentando enviar WA a ${phone} desde la instancia [${instanceName}]...`); console.log(`\n📲 Intentando enviar WA a ${phone} [Modo Delay: ${useDelay}]...`);
// MATEMÁTICA HUMANA: Tiempo simulado de escritura let payload;
if (useDelay) {
// PLAN A: Escribiendo lento
const typingTimeMs = Math.min(Math.max(text.length * 30, 1500), 8000); const typingTimeMs = Math.min(Math.max(text.length * 30, 1500), 8000);
payload = {
// Payload en formato Evolution v2 (con options)
const payloadConEscribiendo = {
number: phone.replace("+", ""), number: phone.replace("+", ""),
text: text, text: text,
options: { options: { delay: typingTimeMs, presence: "composing" }
delay: typingTimeMs,
presence: "composing"
}
}; };
} else {
// PLAN B: Directo e instantáneo
payload = { number: phone.replace("+", ""), text: text };
}
const res = await fetch(`${EVOLUTION_BASE_URL.replace(/\/$/, "")}/message/sendText/${instanceName}`, { const res = await fetch(`${EVOLUTION_BASE_URL.replace(/\/$/, "")}/message/sendText/${instanceName}`, {
method: "POST", method: "POST",
headers: { "Content-Type": "application/json", "apikey": EVOLUTION_API_KEY }, headers: { "Content-Type": "application/json", "apikey": EVOLUTION_API_KEY },
body: JSON.stringify(payloadConEscribiendo) body: JSON.stringify(payload)
}); });
// Si Evolution rechaza el formato con "delay"... if (!res.ok && useDelay) {
if (!res.ok) { 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)...`);
// PLAN B: Reenviamos sin el delay, formato puro.
const payloadSeguro = { number: phone.replace("+", ""), text: text }; const payloadSeguro = { number: phone.replace("+", ""), text: text };
const res2 = await fetch(`${EVOLUTION_BASE_URL.replace(/\/$/, "")}/message/sendText/${instanceName}`, { await fetch(`${EVOLUTION_BASE_URL.replace(/\/$/, "")}/message/sendText/${instanceName}`, {
method: "POST", method: "POST", headers: { "Content-Type": "application/json", "apikey": EVOLUTION_API_KEY },
headers: { "Content-Type": "application/json", "apikey": EVOLUTION_API_KEY },
body: JSON.stringify(payloadSeguro) body: JSON.stringify(payloadSeguro)
}); });
if (!res2.ok) {
const errText = await res2.text();
console.error("❌ Error definitivo en Evolution API:", errText);
} else {
console.log("✅ WA enviado correctamente (Modo Seguro Instantáneo).");
}
} else {
console.log("✅ WA enviado con éxito (Modo Humano con Escribiendo...).");
}
} catch (e) {
console.error("❌ Error crítico en función WA:", e.message);
} }
console.log("✅ WA procesado por Evolution.");
} catch (e) { console.error("❌ Error WA:", e.message); }
} }
async function ensureInstance(instanceName) { async function ensureInstance(instanceName) {