@@ -20,14 +20,6 @@ try {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only release hold if there's an active hold/request; otherwise return success quietly
|
|
||||||
$userFlags = $db->fetch('SELECT on_hold, advisor_requested FROM users WHERE id = :id', ['id' => $userId]);
|
|
||||||
if (empty($userFlags) || (empty($userFlags['on_hold']) && empty($userFlags['advisor_requested']))) {
|
|
||||||
// Nothing to release
|
|
||||||
echo json_encode(['success' => true, 'info' => 'no_hold_active']);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use BotService to release hold (sends notification and clears flags)
|
// Use BotService to release hold (sends notification and clears flags)
|
||||||
try {
|
try {
|
||||||
require_once __DIR__ . '/../services/BotService.php';
|
require_once __DIR__ . '/../services/BotService.php';
|
||||||
|
|||||||
@@ -2006,9 +2006,6 @@
|
|||||||
this._userStateCache = this._userStateCache || {};
|
this._userStateCache = this._userStateCache || {};
|
||||||
this._userStateCache[userId] = { state: { in_service: false, advisor_requested: false, on_hold: false }, ts: Date.now() };
|
this._userStateCache[userId] = { state: { in_service: false, advisor_requested: false, on_hold: false }, ts: Date.now() };
|
||||||
|
|
||||||
// ocultar botón Liberar espera si existe
|
|
||||||
if (releaseBtn) releaseBtn.style.display = 'none';
|
|
||||||
|
|
||||||
await this.loadConversations();
|
await this.loadConversations();
|
||||||
await this.loadMessages(userId, true);
|
await this.loadMessages(userId, true);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+5
-12
@@ -69,11 +69,10 @@ class BotService {
|
|||||||
$this->requestAdvisor($phoneNumber, 3);
|
$this->requestAdvisor($phoneNumber, 3);
|
||||||
|
|
||||||
// Registrar mensaje de sistema para trazabilidad (no altera flujo de notificación)
|
// Registrar mensaje de sistema para trazabilidad (no altera flujo de notificación)
|
||||||
$now = date('Y-m-d H:i:s');
|
|
||||||
$sys = [
|
$sys = [
|
||||||
'system' => 'attention',
|
'system' => 'attention',
|
||||||
'type' => 'user_sent_documents',
|
'type' => 'user_sent_documents',
|
||||||
'text' => "📄 *Documentos recibidos*\n\nEl usuario confirmó que ha enviado documentación (mensaje: *ENVIADA*).\n\n• Usuario: {$phoneNumber} (ID: {$user['id']})\n• Hora: {$now}\n\nPor favor, revise los archivos en la conversación y atiéndalo lo antes posible."
|
'text' => 'El usuario indicó que ha enviado documentos o información; requiere atención.'
|
||||||
];
|
];
|
||||||
|
|
||||||
$this->db->insert('conversations', [
|
$this->db->insert('conversations', [
|
||||||
@@ -977,18 +976,13 @@ class BotService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function releaseHold($phoneNumber, $notify = true) {
|
public function releaseHold($phoneNumber) {
|
||||||
try {
|
try {
|
||||||
// Clear hold/advisor flags and also ensure in_service is cleared for consistency
|
// Clear hold/advisor flags and also ensure in_service is cleared for consistency
|
||||||
// Clear hold and reactivate bot
|
// Clear hold and reactivate bot
|
||||||
$this->db->update('users', ['on_hold' => 0, 'bot_paused_until' => null, 'advisor_requested' => 0, 'in_service' => 0, 'in_service_by' => null, 'in_service_at' => null, 'bot_enabled' => 1], 'phone_number = :phone', ['phone' => $phoneNumber]);
|
$this->db->update('users', ['on_hold' => 0, 'bot_paused_until' => null, 'advisor_requested' => 0, 'in_service' => 0, 'in_service_by' => null, 'in_service_at' => null, 'bot_enabled' => 1], 'phone_number = :phone', ['phone' => $phoneNumber]);
|
||||||
|
$this->whatsappService->sendTextMessage($phoneNumber, "🔔 Su conversación ha sido retomada por el equipo. Puede usar *MENU* para continuar.");
|
||||||
// Send notification only when requested (avoid duplicate messages after finish)
|
if (function_exists('writeLog')) writeLog('INFO', "Advisor released hold for $phoneNumber");
|
||||||
if ($notify) {
|
|
||||||
$this->whatsappService->sendTextMessage($phoneNumber, "🔔 Su conversación ha sido retomada por el equipo. Puede usar *MENU* para continuar.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (function_exists('writeLog')) writeLog('INFO', "Advisor released hold for $phoneNumber notify=" . ($notify ? '1' : '0'));
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
error_log('releaseHold failed: ' . $e->getMessage());
|
error_log('releaseHold failed: ' . $e->getMessage());
|
||||||
}
|
}
|
||||||
@@ -1080,8 +1074,7 @@ class BotService {
|
|||||||
|
|
||||||
// Ensure consistent behavior: release hold / clear flags when finishing attend
|
// Ensure consistent behavior: release hold / clear flags when finishing attend
|
||||||
try {
|
try {
|
||||||
// Release hold silently to avoid duplicate notification to the user
|
$this->releaseHold($phoneNumber);
|
||||||
$this->releaseHold($phoneNumber, false);
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
error_log('finishAttendConversation: releaseHold failed: ' . $e->getMessage());
|
error_log('finishAttendConversation: releaseHold failed: ' . $e->getMessage());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user