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("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, 'file_url' => $this->message->file_path ? asset('storage/' . $this->message->file_path) : null, 'file_type' => $this->message->file_type, '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'; } }