Fix: no tratar como comando de admin la respuesta del cliente si el admin usa su propio numero como
This commit is contained in:
24
server.js
24
server.js
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user