Actualizar server.js
This commit is contained in:
37
server.js
37
server.js
@@ -853,8 +853,37 @@ async function procesarConIA(ownerId, mensajeCliente, datosExpediente) {
|
|||||||
tramoConfirmado = 'una hora por confirmar';
|
tramoConfirmado = 'una hora por confirmar';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 🛑 NUEVO: MÁQUINA DEL TIEMPO (Saber si la cita ya pasó)
|
||||||
|
let citaYaPaso = false;
|
||||||
|
if (tieneCitaConfirmada && datosExpediente.cita) {
|
||||||
|
const hoyTime = new Date().setHours(0,0,0,0);
|
||||||
|
const [y, m, d] = datosExpediente.cita.split('-');
|
||||||
|
const citaTime = new Date(y, m - 1, d).setHours(0,0,0,0);
|
||||||
|
if (citaTime < hoyTime) citaYaPaso = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 🛑 NUEVO: DETECTOR DE ESTADO FINALIZADO
|
||||||
|
const esEstadoFinal = datosExpediente.estado && (datosExpediente.estado.toLowerCase().includes('finalizado') || datosExpediente.estado.toLowerCase().includes('terminado') || datosExpediente.estado.toLowerCase().includes('anulado'));
|
||||||
|
|
||||||
|
// 🛑 NUEVO: DETECTOR DE SEGURO VS PARTICULAR
|
||||||
|
const nombreCia = datosExpediente.compania || "su Aseguradora";
|
||||||
|
const esSeguro = !nombreCia.toLowerCase().includes('particular');
|
||||||
|
|
||||||
let directivaEstricta = "";
|
let directivaEstricta = "";
|
||||||
if (esUrgencia) {
|
|
||||||
|
if (esEstadoFinal) {
|
||||||
|
if (esSeguro) {
|
||||||
|
directivaEstricta = `🛑 ESTADO ACTUAL: SERVICIO CERRADO POR EL TÉCNICO.\nTU ÚNICO OBJETIVO: Informar al cliente que el informe ya ha sido enviado a ${nombreCia} y que estamos a la espera de que ellos nos den respuesta o autorización para continuar los trabajos.\nPROHIBICIÓN ABSOLUTA: NO intentes agendar cita ni dar horas. No asumas que la reparación está 100% terminada.`;
|
||||||
|
} else {
|
||||||
|
directivaEstricta = `🛑 ESTADO ACTUAL: SERVICIO FINALIZADO O ANULADO.\nTU ÚNICO OBJETIVO: Despedirte amablemente o dar soporte post-servicio si el cliente particular tiene alguna duda.\nPROHIBICIÓN ABSOLUTA: NO intentes agendar cita ni dar horas. El trabajo ya se ha terminado.`;
|
||||||
|
}
|
||||||
|
} else if (citaYaPaso) {
|
||||||
|
if (esSeguro) {
|
||||||
|
directivaEstricta = `🛑 ESTADO ACTUAL: LA CITA YA HA PASADO.\n📅 La cita fue el día: ${datosExpediente.cita}.\nTU ÚNICO OBJETIVO: Informar que el técnico ya acudió a la visita y que actualmente estamos tramitando el informe con ${nombreCia}, a la espera de sus instrucciones.\nPROHIBICIÓN ABSOLUTA: No hables en futuro ni propongas más citas.`;
|
||||||
|
} else {
|
||||||
|
directivaEstricta = `🛑 ESTADO ACTUAL: LA CITA YA HA PASADO.\n📅 La cita fue el día: ${datosExpediente.cita}.\nTU ÚNICO OBJETIVO: Preguntar amablemente al cliente particular si el técnico acudió y si el problema quedó resuelto o si estamos elaborando su presupuesto.\nPROHIBICIÓN ABSOLUTA: No hables en futuro ni agendes.`;
|
||||||
|
}
|
||||||
|
} else if (esUrgencia) {
|
||||||
directivaEstricta = `🛑 ESTADO ACTUAL: SERVICIO DE URGENCIA.\nTU ÚNICO OBJETIVO: Tranquilizar al cliente. Dile que al ser urgencia el técnico está avisado.\nPROHIBICIÓN ABSOLUTA: No des cita ni propongas horas.`;
|
directivaEstricta = `🛑 ESTADO ACTUAL: SERVICIO DE URGENCIA.\nTU ÚNICO OBJETIVO: Tranquilizar al cliente. Dile que al ser urgencia el técnico está avisado.\nPROHIBICIÓN ABSOLUTA: No des cita ni propongas horas.`;
|
||||||
} else if (hayCitaPendiente) {
|
} else if (hayCitaPendiente) {
|
||||||
directivaEstricta = `🛑 ESTADO ACTUAL: CITA PENDIENTE DE APROBACIÓN POR TÉCNICO.\n📅 Propuesta actual: El día ${datosExpediente.cita_pendiente_fecha} ${tramoPendiente}.\nTU ÚNICO OBJETIVO: Informar al cliente que estamos esperando confirmación del técnico.\n⚠️ REGLA CRÍTICA: Ignora el historial si no coincide con esta propuesta.\nPROHIBICIÓN ABSOLUTA: No agendes de nuevo.`;
|
directivaEstricta = `🛑 ESTADO ACTUAL: CITA PENDIENTE DE APROBACIÓN POR TÉCNICO.\n📅 Propuesta actual: El día ${datosExpediente.cita_pendiente_fecha} ${tramoPendiente}.\nTU ÚNICO OBJETIVO: Informar al cliente que estamos esperando confirmación del técnico.\n⚠️ REGLA CRÍTICA: Ignora el historial si no coincide con esta propuesta.\nPROHIBICIÓN ABSOLUTA: No agendes de nuevo.`;
|
||||||
@@ -3768,7 +3797,8 @@ app.post("/webhook/evolution", async (req, res) => {
|
|||||||
s.raw_data->>'Población' as poblacion,
|
s.raw_data->>'Población' as poblacion,
|
||||||
s.raw_data->>'appointment_status' as appointment_status,
|
s.raw_data->>'appointment_status' as appointment_status,
|
||||||
s.raw_data->>'requested_date' as cita_pendiente_fecha,
|
s.raw_data->>'requested_date' as cita_pendiente_fecha,
|
||||||
s.raw_data->>'requested_time' as cita_pendiente_hora
|
s.raw_data->>'requested_time' as cita_pendiente_hora,
|
||||||
|
s.raw_data->>'Compañía' as compania
|
||||||
FROM scraped_services s
|
FROM scraped_services s
|
||||||
LEFT JOIN users u ON s.assigned_to = u.id
|
LEFT JOIN users u ON s.assigned_to = u.id
|
||||||
LEFT JOIN service_statuses st ON (s.raw_data->>'status_operativo')::text = st.id::text
|
LEFT JOIN service_statuses st ON (s.raw_data->>'status_operativo')::text = st.id::text
|
||||||
@@ -3825,7 +3855,8 @@ app.post("/webhook/evolution", async (req, res) => {
|
|||||||
is_urgent: service.is_urgent,
|
is_urgent: service.is_urgent,
|
||||||
appointment_status: service.appointment_status,
|
appointment_status: service.appointment_status,
|
||||||
cita_pendiente_fecha: service.cita_pendiente_fecha,
|
cita_pendiente_fecha: service.cita_pendiente_fecha,
|
||||||
cita_pendiente_hora: service.cita_pendiente_hora
|
cita_pendiente_hora: service.cita_pendiente_hora,
|
||||||
|
compania: service.compania // 👈 NUEVO: PASAMOS LA COMPAÑÍA
|
||||||
});
|
});
|
||||||
|
|
||||||
if (respuestaIA) {
|
if (respuestaIA) {
|
||||||
|
|||||||
Reference in New Issue
Block a user