Actualizar server.js
This commit is contained in:
22
server.js
22
server.js
@@ -4136,21 +4136,39 @@ setInterval(async () => {
|
|||||||
|
|
||||||
for (const ping of expiredPings.rows) {
|
for (const ping of expiredPings.rows) {
|
||||||
await client.query("UPDATE assignment_pings SET status = 'expired' WHERE id = $1", [ping.id]);
|
await client.query("UPDATE assignment_pings SET status = 'expired' WHERE id = $1", [ping.id]);
|
||||||
|
|
||||||
|
// 🛑 FIX: Extraer Gremio y CP del raw_data para buscar al SIGUIENTE operario CORRECTO
|
||||||
|
const raw = ping.raw_data || {};
|
||||||
|
const guildId = raw.guild_id || null;
|
||||||
|
|
||||||
|
// Lógica para extraer CP exactamente igual que al inicio
|
||||||
|
const todoElTexto = JSON.stringify(raw).toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
||||||
|
const cpMatch = todoElTexto.match(/\b\d{5}\b/);
|
||||||
|
const cpFinal = cpMatch ? cpMatch[0] : "00000";
|
||||||
|
|
||||||
|
// Si por algún motivo no hay gremio guardado, abortamos la bolsa para este servicio
|
||||||
|
if (!guildId) {
|
||||||
|
await client.query("UPDATE scraped_services SET automation_status = 'failed' WHERE id = $1", [ping.scraped_id]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const nextWorkerQ = await client.query(`
|
const nextWorkerQ = await client.query(`
|
||||||
SELECT u.id, u.phone, u.full_name
|
SELECT u.id, u.phone, u.full_name
|
||||||
FROM users u
|
FROM users u
|
||||||
JOIN user_guilds ug ON u.id = ug.user_id
|
JOIN user_guilds ug ON u.id = ug.user_id
|
||||||
WHERE u.owner_id = $1 AND u.status = 'active'
|
WHERE u.owner_id = $1 AND u.status = 'active'
|
||||||
|
AND ug.guild_id = $3 AND u.zones::jsonb @> $4::jsonb
|
||||||
AND u.id NOT IN (SELECT user_id FROM assignment_pings WHERE scraped_id = $2)
|
AND u.id NOT IN (SELECT user_id FROM assignment_pings WHERE scraped_id = $2)
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
`, [ping.owner_id, ping.scraped_id]);
|
`, [ping.owner_id, ping.scraped_id, guildId, JSON.stringify([{ cps: cpFinal }])]);
|
||||||
|
|
||||||
if (nextWorkerQ.rowCount > 0) {
|
if (nextWorkerQ.rowCount > 0) {
|
||||||
const nextW = nextWorkerQ.rows[0];
|
const nextW = nextWorkerQ.rows[0];
|
||||||
const newToken = crypto.randomBytes(16).toString('hex');
|
const newToken = crypto.randomBytes(16).toString('hex');
|
||||||
await client.query(`INSERT INTO assignment_pings (scraped_id, user_id, token, expires_at) VALUES ($1, $2, $3, CURRENT_TIMESTAMP + INTERVAL '5 minutes')`, [ping.scraped_id, nextW.id, newToken]);
|
await client.query(`INSERT INTO assignment_pings (scraped_id, user_id, token, expires_at) VALUES ($1, $2, $3, CURRENT_TIMESTAMP + INTERVAL '5 minutes')`, [ping.scraped_id, nextW.id, newToken]);
|
||||||
|
|
||||||
const mensaje = `🛠️ *SERVICIO DISPONIBLE*\nEl anterior compañero no respondió. Es tu turno:\n🔗 https://integrarepara.es/aceptar.html?t=${newToken}`;
|
// 🛑 FIX: URL corregida a web.integrarepara.es
|
||||||
|
const mensaje = `🛠️ *SERVICIO DISPONIBLE*\nEl anterior compañero no respondió. Es tu turno:\n🔗 https://web.integrarepara.es/aceptar.html?t=${newToken}`;
|
||||||
const instanceName = `cliente_${ping.owner_id}`;
|
const instanceName = `cliente_${ping.owner_id}`;
|
||||||
sendWhatsAppAuto(nextW.phone, mensaje, instanceName).catch(console.error);
|
sendWhatsAppAuto(nextW.phone, mensaje, instanceName).catch(console.error);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user