up
This commit is contained in:
+42
-21
@@ -36,14 +36,25 @@ class BotService {
|
||||
return;
|
||||
}
|
||||
|
||||
// Si el usuario está en espera por un asesor, no procesar
|
||||
// Si el usuario está en espera por un asesor, y el periodo no expiró, no procesar.
|
||||
if (!empty($user['on_hold']) && $user['on_hold']) {
|
||||
try {
|
||||
$this->whatsappService->sendTextMessage($phoneNumber, "⚠️ Has sido puesto en espera por un asesor. En breve te contactarán.");
|
||||
} catch (Exception $e) {
|
||||
// ignore
|
||||
$now = time();
|
||||
$until = null;
|
||||
if (!empty($user['bot_paused_until'])) {
|
||||
$until = strtotime($user['bot_paused_until']);
|
||||
}
|
||||
// Si hay un tiempo de expiración y aún no pasó, notificar y retornar
|
||||
if ($until && $until > $now) {
|
||||
try {
|
||||
$this->whatsappService->sendTextMessage($phoneNumber, "⚠️ Has sido puesto en espera por un asesor. Estarás en espera hasta " . date('H:i', $until) . ". Si no hay respuesta, podrás usar *menu*." );
|
||||
} catch (Exception $e) {
|
||||
// ignore
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
// El hold expiró, liberar y continuar
|
||||
$this->releaseHold($phoneNumber);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Si el bot está pausado por bot_paused_until, no responder automáticamente
|
||||
@@ -67,8 +78,9 @@ class BotService {
|
||||
if ($user['current_menu_id']) {
|
||||
$this->processMenuSelection($user, $messageText);
|
||||
} else {
|
||||
// Procesar respuestas automáticas o comando menu
|
||||
$this->processAutoResponses($phoneNumber, $messageText);
|
||||
// No usar las "respuestas rápidas" (autoresponses) automáticamente desde el bot.
|
||||
// Estas respuestas solo se mostrarán en la UI del chat como "respuestas rápidas".
|
||||
$this->sendDefaultNoMatch($phoneNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,9 +138,9 @@ class BotService {
|
||||
|
||||
case 'asesor':
|
||||
case 'ayuda':
|
||||
// Poner la conversación en espera y notificar al usuario
|
||||
$this->putOnHold($phoneNumber);
|
||||
return true;
|
||||
// Solicitar asesor: poner espera temporal de 5 minutos (no permanente)
|
||||
$this->putOnHold($phoneNumber, 5);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -326,11 +338,18 @@ class BotService {
|
||||
$this->showMainMenu($phoneNumber);
|
||||
}
|
||||
} else {
|
||||
// Respuesta por defecto para mensajes no reconocidos
|
||||
$defaultMessage = "🤖 No entendí tu mensaje. Escribe *menu* para ver las opciones disponibles o *ayuda* para obtener ayuda.";
|
||||
$this->whatsappService->sendTextMessage($phoneNumber, $defaultMessage);
|
||||
// Respuesta por defecto para mensajes no reconocidos cuando se llama explícitamente
|
||||
$this->sendDefaultNoMatch($phoneNumber);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enviar mensaje por defecto cuando no hay coincidencias
|
||||
*/
|
||||
private function sendDefaultNoMatch($phoneNumber) {
|
||||
$defaultMessage = "🤖 No entendí tu mensaje. Escribe *menu* para ver las opciones disponibles o *ayuda* para obtener ayuda.";
|
||||
$this->whatsappService->sendTextMessage($phoneNumber, $defaultMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Salir del menú actual
|
||||
@@ -358,13 +377,15 @@ class BotService {
|
||||
}
|
||||
|
||||
/**
|
||||
* Poner conversación en espera (asesor solicitado)
|
||||
* Poner conversación en espera (asesor solicitado) por X minutos
|
||||
*/
|
||||
public function putOnHold($phoneNumber) {
|
||||
public function putOnHold($phoneNumber, $minutes = 5) {
|
||||
try {
|
||||
$this->db->update('users', ['on_hold' => 1], 'phone_number = :phone', ['phone' => $phoneNumber]);
|
||||
$this->whatsappService->sendTextMessage($phoneNumber, "🔔 Se ha solicitado un asesor. Te hemos puesto en espera. Te contactaremos en breve.");
|
||||
if (function_exists('writeLog')) writeLog('INFO', "Advisor requested for $phoneNumber");
|
||||
$pausedUntil = date('Y-m-d H:i:s', strtotime("+{$minutes} minutes"));
|
||||
// Guardar bandera y tiempo de expiración (usamos bot_paused_until que ya existe)
|
||||
$this->db->update('users', ['on_hold' => 1, 'bot_paused_until' => $pausedUntil], 'phone_number = :phone', ['phone' => $phoneNumber]);
|
||||
$this->whatsappService->sendTextMessage($phoneNumber, "🔔 Se ha solicitado un asesor. Te hemos puesto en espera por {$minutes} minutos. Si no hay respuesta, podrás volver a usar *menu*." );
|
||||
if (function_exists('writeLog')) writeLog('INFO', "Advisor requested for $phoneNumber until $pausedUntil");
|
||||
} catch (Exception $e) {
|
||||
error_log('putOnHold failed: ' . $e->getMessage());
|
||||
}
|
||||
@@ -372,8 +393,8 @@ class BotService {
|
||||
|
||||
public function releaseHold($phoneNumber) {
|
||||
try {
|
||||
$this->db->update('users', ['on_hold' => 0], 'phone_number = :phone', ['phone' => $phoneNumber]);
|
||||
$this->whatsappService->sendTextMessage($phoneNumber, "🔔 Tu conversación ha sido retomada por el equipo.");
|
||||
$this->db->update('users', ['on_hold' => 0, 'bot_paused_until' => null], 'phone_number = :phone', ['phone' => $phoneNumber]);
|
||||
$this->whatsappService->sendTextMessage($phoneNumber, "🔔 Tu conversación ha sido retomada por el equipo. Puedes usar *menu* para continuar.");
|
||||
if (function_exists('writeLog')) writeLog('INFO', "Advisor released hold for $phoneNumber");
|
||||
} catch (Exception $e) {
|
||||
error_log('releaseHold failed: ' . $e->getMessage());
|
||||
|
||||
Reference in New Issue
Block a user