Actualizar server.js
This commit is contained in:
30
server.js
30
server.js
@@ -954,11 +954,11 @@ async function procesarConIA(ownerId, mensajeCliente, datosExpediente) {
|
||||
} else if (esUrgencia) {
|
||||
directivaEstricta = `🛑 ESTADO ACTUAL: URGENCIA. Tranquiliza al cliente sobre su avería (${datosExpediente.averia}) y dile que el técnico está avisado. NO PROPONGAS HORAS.`;
|
||||
} else if (hayCitaPendiente) {
|
||||
directivaEstricta = `🛑 ESTADO ACTUAL: CITA PENDIENTE DE APROBACIÓN.\n📅 Propuesta actual: El día ${datosExpediente.cita_pendiente_fecha} ${tramoPendiente}.\nTU OBJETIVO: Informar que esperamos confirmación de la oficina para reparar su avería (${datosExpediente.averia}).\n⚠️ EXCEPCIÓN: Si el cliente pide CAMBIAR o CANCELAR, ofrécele un hueco nuevo.`;
|
||||
directivaEstricta = `🛑 ESTADO ACTUAL: CITA PENDIENTE DE APROBACIÓN.\n📅 Propuesta actual: El día ${datosExpediente.cita_pendiente_fecha} ${tramoPendiente}.\nTU OBJETIVO: Informar que esperamos confirmación del técnico para reparar su avería (${datosExpediente.averia}).\n⚠️ EXCEPCIÓN: Si el cliente pide CAMBIAR o CANCELAR, ofrécele un hueco nuevo.`;
|
||||
} else if (tieneCitaConfirmada) {
|
||||
directivaEstricta = `🛑 ESTADO ACTUAL: CITA CONFIRMADA para el ${datosExpediente.cita} ${tramoConfirmado}. Recuerda la cita para su avería (${datosExpediente.averia}).\n⚠️ EXCEPCIÓN: Si el cliente pide CAMBIARLA o CANCELARLA, ofrécele un hueco nuevo.`;
|
||||
} else {
|
||||
directivaEstricta = `🟢 ESTADO ACTUAL: PENDIENTE DE AGENDAR CITA.\nTU OBJETIVO: Acordar fecha y hora para reparar su avería (${datosExpediente.averia}). NUNCA ofrezcas horas ocupadas. Fines de semana solo URGENCIAS.`;
|
||||
directivaEstricta = `🟢 ESTADO ACTUAL: PENDIENTE DE AGENDAR CITA.\nTU OBJETIVO: Acordar fecha y hora para reparar su avería (${datosExpediente.averia}). NUNCA ofrezcas horas ocupadas. Fines de semana solo URGENCIAS.\n⚠️ MUY IMPORTANTE: Cuando el cliente elija un hueco, NO le digas que la cita está confirmada. Dile que le pasas la nota al técnico para que él lo valide.`;
|
||||
}
|
||||
|
||||
const promptSistema = `
|
||||
@@ -978,8 +978,8 @@ async function procesarConIA(ownerId, mensajeCliente, datosExpediente) {
|
||||
--- ⚡ REGLA CRÍTICA DE AGENDA (COMANDO SECRETO) ---
|
||||
Si (y solo si) has propuesto un hueco y el cliente ACEPTA FIRMEMENTE, DEBES añadir AL FINAL ABSOLUTO de tu respuesta este texto literal:
|
||||
[PROPUESTA:YYYY-MM-DD HH:mm]
|
||||
Ejemplo de respuesta tuya: "Perfecto, te agendo para el miércoles entre las 10:00 y las 11:00. ¡Nos vemos! [PROPUESTA:2026-03-25 10:00]"
|
||||
⛔ PROHIBICIÓN: NUNCA menciones al cliente las palabras "código", "confirmación" ni "propuesta". Solo pega los corchetes al final de tu mensaje y ya está.
|
||||
Ejemplo de respuesta tuya: "Perfecto, le paso la nota al técnico para que te confirme el miércoles entre las 10:00 y las 11:00 aprox. ¡Te decimos algo pronto! [PROPUESTA:2026-03-25 10:00]"
|
||||
⛔ PROHIBICIÓN: NUNCA le digas "te agendo" ni "cita confirmada". El cliente debe saber que dependemos del técnico. NUNCA menciones las palabras "código" o "etiqueta".
|
||||
|
||||
--- ⚙️ REGLAS DE COMUNICACIÓN ---
|
||||
1. MÁXIMO 2 FRASES. Mensajes cortos y directos.
|
||||
@@ -4002,19 +4002,15 @@ app.post("/webhook/evolution", async (req, res) => {
|
||||
const fechaSugerida = matchPropuesta[1];
|
||||
const horaSugerida = matchPropuesta[2];
|
||||
|
||||
// 🚀 GUARDADO DIRECTO A CITA CONFIRMADA (Va al calendario del Operario sin preguntar)
|
||||
const statusQ = await pool.query("SELECT id FROM service_statuses WHERE owner_id=$1 AND name ILIKE '%citado%' LIMIT 1", [ownerId]);
|
||||
const idCitado = statusQ.rowCount > 0 ? String(statusQ.rows[0].id) : null;
|
||||
|
||||
const rawQ = await pool.query("SELECT raw_data FROM scraped_services WHERE id=$1", [service.id]);
|
||||
let rawActual = rawQ.rows[0].raw_data || {};
|
||||
|
||||
rawActual.scheduled_date = fechaSugerida;
|
||||
rawActual.scheduled_time = horaSugerida;
|
||||
rawActual.appointment_status = 'approved';
|
||||
if (idCitado) rawActual.status_operativo = idCitado;
|
||||
|
||||
await pool.query("UPDATE scraped_services SET raw_data = $1 WHERE id = $2", [JSON.stringify(rawActual), service.id]);
|
||||
// 🚀 GUARDADO COMO PENDIENTE (Espera a que el Técnico la apruebe en la App o en la Oficina)
|
||||
await pool.query(`
|
||||
UPDATE scraped_services
|
||||
SET raw_data = raw_data || jsonb_build_object(
|
||||
'requested_date', $1::text,
|
||||
'requested_time', $2::text,
|
||||
'appointment_status', 'pending'
|
||||
) WHERE id = $3
|
||||
`, [fechaSugerida, horaSugerida, service.id]);
|
||||
}
|
||||
|
||||
// 🧹 BORRAMOS EL TEXTO DEL CÓDIGO PARA QUE EL CLIENTE NO LO VEA NUNCA
|
||||
|
||||
Reference in New Issue
Block a user