Fix: no tratar como comando de admin la respuesta del cliente si el admin usa su propio numero como

This commit is contained in:
2026-09-12 17:34:33 +00:00
parent d39fe2eb88
commit d87c85f5ea

View File

@@ -5991,9 +5991,33 @@ app.post("/webhook/evolution", async (req, res) => {
const adminPhoneQ = await pool.query("SELECT phone FROM users WHERE id = $1", [ownerId]); const adminPhoneQ = await pool.query("SELECT phone FROM users WHERE id = $1", [ownerId]);
const adminPhoneClean = (adminPhoneQ.rows[0]?.phone || "").replace(/\D/g, "").slice(-9); const adminPhoneClean = (adminPhoneQ.rows[0]?.phone || "").replace(/\D/g, "").slice(-9);
if (adminPhoneClean && adminPhoneClean === cleanPhone) { if (adminPhoneClean && adminPhoneClean === cleanPhone) {
const pendingAdmin = adminIntakeState.get(ownerId);
const pareceComandoNuevo = /\b(escribe|escr[íi]bele|manda|mand[aá]le|env[íi]a|env[íi]ale|contacta)\b/i.test((mensajeTexto || "").trim());
// 🆕 Si el admin usa su propio número también como "cliente" (p.ej. para
// probar el flujo escribiéndose a sí mismo) y ya hay un expediente abierto
// con ese mismo teléfono, dejamos que el mensaje siga el flujo normal de
// cliente en vez de tratarlo siempre como comando — si no, cualquier
// respuesta suya como "cliente" se la comía este bloque en silencio.
// Seguimos tratándolo como comando de admin si está en medio del diálogo
// de alta (esperando el motivo) o si el texto parece un comando nuevo.
let hayExpedienteAbierto = false;
if (!pendingAdmin && !pareceComandoNuevo) {
const abiertoQ = await pool.query(`
SELECT 1 FROM scraped_services
WHERE owner_id = $1 AND status != 'archived'
AND RIGHT(REGEXP_REPLACE(COALESCE(raw_data->>'Teléfono', raw_data->>'TELEFONO', raw_data->>'TELEFONOS', ''), '\\D', '', 'g'), 9) = $2
LIMIT 1
`, [ownerId, cleanPhone]);
hayExpedienteAbierto = abiertoQ.rowCount > 0;
}
if (pendingAdmin || pareceComandoNuevo || !hayExpedienteAbierto) {
await manejarComandoAdmin({ ownerId, mensajeTexto, esAudioSinTexto, telefonoAdmin: telefonoCliente, instanceName }); await manejarComandoAdmin({ ownerId, mensajeTexto, esAudioSinTexto, telefonoAdmin: telefonoCliente, instanceName });
return; return;
} }
// Si no: no hacemos return, dejamos caer al flujo normal de cliente de abajo.
}
} catch (eAdmin) { } catch (eAdmin) {
console.error("❌ Error comprobando comando de admin:", eAdmin.message); console.error("❌ Error comprobando comando de admin:", eAdmin.message);
} }