diff --git a/app/Http/Livewire/Chat/PublicChat.php b/app/Http/Livewire/Chat/PublicChat.php index d9c7fbc..721f9cf 100755 --- a/app/Http/Livewire/Chat/PublicChat.php +++ b/app/Http/Livewire/Chat/PublicChat.php @@ -545,6 +545,14 @@ class PublicChat extends Component return; } + // Guard contra doble disparo (Livewire a veces llama este hook 2 veces + // en la misma subida): si ya hay una validacion en curso, no lances otro + // job para el mismo comprobante o vas a tener dos jobs pisandose. + if ($this->flujo === 'pago.procesando') { + $this->dispatchBrowserEvent('comprobante-listo'); + return; + } + try { if (\App\Models\ChatConfig::get('validacion_foto_habilitada', '0') !== '1') { $this->guardarMensajeBot($this->convId, "El analisis de comprobantes no esta habilitado. Contacta a un asesor."); @@ -1633,8 +1641,10 @@ class PublicChat extends Component 'servicios.listar' => '/servicio|plan(es)?|cat[aá]logo|qu[eé]\s*(hay|tienen|tienes)|ver\s*plan|streaming|aplicacion|aplicaci[oó]n/', // Promociones 'promo.listar' => '/promo(ci[oó]n)?|oferta|descuento|especial/', - // Historial de compras - 'historial.ver' => '/historial|compra(s)?|pedido(s)?|lo\s*que\s*(compr[eé]|he\s*comprado)|mis\s*compras/', + // Historial de compras. \b es clave: sin el limite de palabra, + // "compra(s)?" hacia match dentro de "comprar" y "no puedo entrar + // a comprar hbo" caia aqui en vez de abrir el servicio. + 'historial.ver' => '/historial|\bcompra(s)?\b|pedido(s)?|lo\s*que\s*(compr[eé]|he\s*comprado)|mis\s*compras/', // Perfil 'perfil.ver' => '/perfil|mis\s*datos|mi\s*informaci[oó]n|mis\s*datos\s*personales/', // Asesor humano @@ -1645,6 +1655,16 @@ class PublicChat extends Component foreach ($patrones as $action => $pattern) { if (preg_match($pattern, $t)) { + // "comprar plan de netflix" matchea aqui por la palabra "plan", + // pero si el mensaje ademas nombra un servicio concreto hay que + // abrir ese servicio directo, no el listado generico. + if ($action === 'servicios.listar') { + $porNombre = $this->detectarServicioPorNombre($texto); + if ($porNombre) { + return $porNombre; + } + } + $data = []; if ($action === 'recarga.iniciar') { if (preg_match('/\$?\s*(\d{1,3}(?:[.,]\d{3})+|\d{4,})\b/', $t, $m)) { diff --git a/app/Jobs/ValidarPagoWebJob.php b/app/Jobs/ValidarPagoWebJob.php index 1a0542e..2340998 100644 --- a/app/Jobs/ValidarPagoWebJob.php +++ b/app/Jobs/ValidarPagoWebJob.php @@ -67,6 +67,7 @@ class ValidarPagoWebJob implements ShouldQueue if (! $solicitud || $solicitud->id !== $this->solicitudId) { Log::info("[ValidarPagoWebJob] conv={$this->convId}: la solicitud ya no está pendiente, abortando."); + $this->bot("Tu solicitud de recarga ya no está activa (puede que hayas iniciado una nueva). Si ya transferiste, escribe a un asesor para confirmar tu pago manualmente."); $this->resolver('cancelado'); return; }