This commit is contained in:
odzugkoev
2026-05-01 10:48:11 -04:00
parent 1b40187ade
commit 26badf8e6a
3 changed files with 34 additions and 13 deletions

View File

@@ -1,6 +1,13 @@
const config = require('./config');
const apiClient = require('./api-client');
function parseOptionalNonNegativeNumber(value) {
if (value === undefined || value === null || value === '') return null;
const parsed = Number(value);
if (!Number.isFinite(parsed) || parsed < 0) return null;
return parsed;
}
class AbandonedCallPoller {
constructor(database, printer) {
this.db = database;
@@ -53,7 +60,7 @@ class AbandonedCallPoller {
const result = await apiClient.getAbandonedCalls(
appConfig.authToken,
appConfig.selectedBotId,
{ limit: 50 }
{ limit: 200 }
);
if (result.error) {
@@ -98,18 +105,22 @@ class AbandonedCallPoller {
const printerConfigs = this.db.getAbandonedCallPrinters();
if (!printerConfigs || printerConfigs.length === 0) return;
const cooldownSeconds = parseInt(appConfig.abandonedCallPrintCooldown, 10) || 300;
const lastPrintTime = this.db.getLastAbandonedCallPrintTime();
const now = Math.floor(Date.now() / 1000);
const printablePriorities = new Set(['critical', 'high', 'medium']);
const configuredCooldown = parseOptionalNonNegativeNumber(appConfig.abandonedCallPrintCooldown);
const cooldownSeconds = configuredCooldown === null ? 0 : configuredCooldown;
const minScoreForPrint = parseOptionalNonNegativeNumber(appConfig.abandonedCallMinScoreForPrint);
let lastPrintTime = this.db.getLastAbandonedCallPrintTime();
for (const call of calls) {
if (!call || !call.id) continue;
if (this.db.hasAbandonedCallPrint(call.id)) continue;
const priority = call.callback_priority || 'none';
if (!printablePriorities.has(priority)) continue;
const score = Number(call.callback_score) || 0;
if (minScoreForPrint !== null && score < minScoreForPrint) {
console.log(`Abandoned call #${call.id}: skipping print (score ${score} below configured minimum ${minScoreForPrint})`);
continue;
}
const now = Math.floor(Date.now() / 1000);
if (lastPrintTime && (now - lastPrintTime) < cooldownSeconds) {
console.log(`Abandoned call #${call.id}: skipping print (cooldown active)`);
continue;
@@ -117,9 +128,18 @@ class AbandonedCallPoller {
try {
const result = await this.printer.printAbandonedCallReceipt(call, printerConfigs);
const printedCount = result ? (result.successCount || printerConfigs.length) : 0;
this.db.addAbandonedCallPrint(call.id, printedCount);
console.log(`Abandoned call #${call.id}: printed on ${printedCount} printer(s)`);
const printedCount = result && typeof result.successCount === 'number'
? result.successCount
: (result && result.success ? printerConfigs.length : 0);
if (result && result.success && printedCount > 0) {
this.db.addAbandonedCallPrint(call.id, printedCount);
lastPrintTime = Math.floor(Date.now() / 1000);
console.log(`Abandoned call #${call.id}: printed on ${printedCount} printer(s)`);
} else {
const message = result && result.error ? result.error : 'No printers succeeded';
console.error(`Abandoned call #${call.id}: print failed: ${message}`);
}
} catch (err) {
console.error(`Abandoned call #${call.id}: print failed:`, err.message);
}