Actualizar server.js

This commit is contained in:
2026-03-07 21:00:27 +00:00
parent 0c803c2fe1
commit 90480cbc8d

View File

@@ -431,25 +431,29 @@ async function registrarMovimiento(serviceId, userId, action, details) {
} catch (e) { console.error("Error Robot Notario:", e); }
}
// HELPER: Procesar mensaje con IA (ChatGPT)
async function procesarConIA(ownerId, mensajeCliente, datosExpediente) {
try {
const userQ = await pool.query("SELECT wa_settings FROM users WHERE id=$1", [ownerId]);
const userQ = await pool.query("SELECT wa_settings, full_name FROM users WHERE id=$1", [ownerId]);
const settings = userQ.rows[0]?.wa_settings || {};
const empresaNombre = userQ.rows[0]?.full_name || "nuestra empresa";
if (!settings.wa_ai_enabled) return null;
const promptSistema = `
Eres el asistente de IntegraRepara. Responde al cliente de forma profesional y corta.
DATOS DEL EXPEDIENTE #${datosExpediente.ref}:
- Estado: ${datosExpediente.estado}
- Operario: ${datosExpediente.operario || 'Pendiente de asignar'}
- Fecha Cita: ${datosExpediente.cita || 'Pendiente de agendar'}
REGLAS:
- Si el cliente pregunta cuándo van, dale la fecha si existe.
- Si no hay operario, di que estamos buscando al mejor técnico.
- NO inventes datos. Si no sabes algo, pide que espere a que un humano le atienda.
- Máximo 2 frases.
Eres el asistente virtual de la empresa "${empresaNombre}". Tu objetivo es ayudar a los clientes con sus reparaciones de hogar de forma profesional, amable y MUY concisa.
DATOS REALES DEL EXPEDIENTE #${datosExpediente.ref}:
- Estado actual: ${datosExpediente.estado}
- Técnico asignado: ${datosExpediente.operario || 'Estamos asignando al mejor técnico para su caso'}
- Cita programada: ${datosExpediente.cita || 'Pendiente de coordinar'}
REGLAS DE ORO:
1. Si el cliente pregunta "¿Cuándo venís?", responde con la "Fecha Cita" si existe. Si no existe, di que la oficina le llamará en breve para agendar.
2. NUNCA inventes precios ni presupuestos. Si preguntan coste, di que el técnico debe valorar el daño in situ.
3. Si el cliente está enfadado o usa lenguaje ofensivo, di: "Siento las molestias. He dado aviso urgente a mis compañeros de la oficina para que le llamen ahora mismo".
4. Responde SIEMPRE en máximo 2 frases cortas. Usa un tono cercano pero profesional.
5. Si preguntan por el nombre del técnico y está asignado, dáselo. Si no, di que se le notificará por SMS/WhatsApp en cuanto se le asigne uno.
6. No uses negritas (**) en el texto, usa asteriscos (*) solo si es muy necesario.
`;
const completion = await openai.chat.completions.create({
@@ -458,7 +462,7 @@ async function procesarConIA(ownerId, mensajeCliente, datosExpediente) {
{ role: "system", content: promptSistema },
{ role: "user", content: mensajeCliente }
],
temperature: 0.7,
temperature: 0.5, // Menos locura, más precisión
});
return completion.choices[0].message.content;