load('sender'); $this->message = $message; } /** * The channel the event should broadcast on. */ public function broadcastOn() { return [ new PrivateChannel('ticket.' . $this->message->ticket_id), new PrivateChannel('admin.chat') // 👈 ADD THIS ]; } /** * Data sent to frontend (Blade + Flutter) */ public function broadcastWith() { \Log::info('APP_URL USED IN EVENT', [ 'url' => config('app.url'), ]); \Log::info("DEBUG: NewChatMessage broadcasting on channel ticket.".$this->message->ticket_id); \Log::info("EVENT BROADCAST FIRED", [ 'channel' => 'ticket.'.$this->message->ticket_id, 'sender_type' => $this->message->sender_type, 'sender_id' => $this->message->sender_id, ]); return [ 'id' => $this->message->id, 'ticket_id' => $this->message->ticket_id, 'sender_id' => $this->message->sender_id, 'sender_type' => $this->message->sender_type, 'message' => $this->message->message, 'client_id' => $this->message->client_id, // ✅ relative path only 'file_path' => $this->message->file_path ?? null, 'file_type' => $this->message->file_type ?? null, 'sender' => [ 'id' => $this->message->sender->id, 'name' => $this->getSenderName(), 'is_admin' => $this->message->sender_type === \App\Models\Admin::class, ], 'created_at' => $this->message->created_at->toDateTimeString(), ]; } /** * Helper to extract sender name */ private function getSenderName() { $sender = $this->message->sender; // User has customer_name (in your app) if ($this->message->sender_type === \App\Models\User::class) { return $sender->customer_name ?? $sender->name ?? "User"; } // Admin model has ->name return $sender->name ?? "Admin"; } public function broadcastAs() { return 'NewChatMessage'; } }