fix: chat web - mensaje al cancelar validacion, doble job, e intencion de compra
- ValidarPagoWebJob: avisa al usuario si la solicitud ya no esta pendiente en vez de saltar en silencio a "Menu principal". - PublicChat: guard para no despachar dos jobs de validacion del mismo comprobante si Livewire dispara updatedFotoComprobante() dos veces (causaba que apareciera "Menu principal" y luego se corrigiera solo). - PublicChat: "comprar hbo" caia en historial.ver porque compra(s)? sin \b matcheaba dentro de "comprar". Agregado limite de palabra. - PublicChat: "comprar plan de netflix" caia en el listado generico de servicios por la palabra "plan". Ahora, si el mensaje nombra un servicio concreto, se abre ese servicio directo en vez del listado. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
f5e746abcd
commit
7b21cd9773
@@ -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)) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user