Actualizar server.js
This commit is contained in:
30
server.js
30
server.js
@@ -431,25 +431,29 @@ async function registrarMovimiento(serviceId, userId, action, details) {
|
|||||||
} catch (e) { console.error("Error Robot Notario:", e); }
|
} catch (e) { console.error("Error Robot Notario:", e); }
|
||||||
}
|
}
|
||||||
|
|
||||||
// HELPER: Procesar mensaje con IA (ChatGPT)
|
|
||||||
async function procesarConIA(ownerId, mensajeCliente, datosExpediente) {
|
async function procesarConIA(ownerId, mensajeCliente, datosExpediente) {
|
||||||
try {
|
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 settings = userQ.rows[0]?.wa_settings || {};
|
||||||
|
const empresaNombre = userQ.rows[0]?.full_name || "nuestra empresa";
|
||||||
|
|
||||||
if (!settings.wa_ai_enabled) return null;
|
if (!settings.wa_ai_enabled) return null;
|
||||||
|
|
||||||
const promptSistema = `
|
const promptSistema = `
|
||||||
Eres el asistente de IntegraRepara. Responde al cliente de forma profesional y corta.
|
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 DEL EXPEDIENTE #${datosExpediente.ref}:
|
|
||||||
- Estado: ${datosExpediente.estado}
|
|
||||||
- Operario: ${datosExpediente.operario || 'Pendiente de asignar'}
|
|
||||||
- Fecha Cita: ${datosExpediente.cita || 'Pendiente de agendar'}
|
|
||||||
|
|
||||||
REGLAS:
|
DATOS REALES DEL EXPEDIENTE #${datosExpediente.ref}:
|
||||||
- Si el cliente pregunta cuándo van, dale la fecha si existe.
|
- Estado actual: ${datosExpediente.estado}
|
||||||
- Si no hay operario, di que estamos buscando al mejor técnico.
|
- Técnico asignado: ${datosExpediente.operario || 'Estamos asignando al mejor técnico para su caso'}
|
||||||
- NO inventes datos. Si no sabes algo, pide que espere a que un humano le atienda.
|
- Cita programada: ${datosExpediente.cita || 'Pendiente de coordinar'}
|
||||||
- Máximo 2 frases.
|
|
||||||
|
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({
|
const completion = await openai.chat.completions.create({
|
||||||
@@ -458,7 +462,7 @@ async function procesarConIA(ownerId, mensajeCliente, datosExpediente) {
|
|||||||
{ role: "system", content: promptSistema },
|
{ role: "system", content: promptSistema },
|
||||||
{ role: "user", content: mensajeCliente }
|
{ role: "user", content: mensajeCliente }
|
||||||
],
|
],
|
||||||
temperature: 0.7,
|
temperature: 0.5, // Menos locura, más precisión
|
||||||
});
|
});
|
||||||
|
|
||||||
return completion.choices[0].message.content;
|
return completion.choices[0].message.content;
|
||||||
|
|||||||
Reference in New Issue
Block a user