diff --git a/server.js b/server.js index 7daba77..b6d6743 100644 --- a/server.js +++ b/server.js @@ -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;