From 7307d87c80138ebe0e184031664816ffe1758f76 Mon Sep 17 00:00:00 2001 From: Lizandro Date: Sun, 19 Jul 2026 18:56:16 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20chat=20bloqueado=20en=20'Iniciando=20cha?= =?UTF-8?q?t...'=20cuando=20sesi=C3=B3n=20pierde=20chat=5Fconv=5Fid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Si el usuario tiene chat_user_id en sesión pero no chat_conv_id (sesión expirada o servidor reiniciado), mount() ahora busca la conversación activa del contacto en la BD o crea una nueva. Antes quedaba sin convId y el enviar no hacía nada. Co-Authored-By: Claude Sonnet 4.6 --- app/Http/Livewire/Chat/PublicChat.php | 29 +++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/app/Http/Livewire/Chat/PublicChat.php b/app/Http/Livewire/Chat/PublicChat.php index 49c4b97..b8d563d 100755 --- a/app/Http/Livewire/Chat/PublicChat.php +++ b/app/Http/Livewire/Chat/PublicChat.php @@ -80,16 +80,29 @@ class PublicChat extends Component $this->paso = 'chat'; $convId = session('chat_conv_id'); - if ($convId) { - $conv = ChatConversation::find($convId); - if ($conv) { - $this->convId = $conv->id; - $this->estadoConv = $conv->estado; - $this->cargarMensajes(); - } else { - session()->forget('chat_conv_id'); + $conv = $convId ? ChatConversation::find($convId) : null; + + if (! $conv) { + // Sesión perdida o expirada: buscar conversación activa existente o crear una nueva + session()->forget('chat_conv_id'); + $contact = ChatContact::where('canal', 'web')->where('user_id', $user->id)->first(); + if ($contact) { + $conv = $contact->activeConversation() + ?? ChatConversation::create([ + 'contact_id' => $contact->id, + 'canal' => 'web', + 'estado' => 'bot', + 'ultimo_mensaje_at' => now(), + ]); } } + + if ($conv) { + $this->convId = $conv->id; + $this->estadoConv = $conv->estado; + session()->put('chat_conv_id', $conv->id); + $this->cargarMensajes(); + } } protected $rules = [