$properties */ public function capture(string $distinctId, string $event, array $properties = [], ?Account $account = null): void { if (! self::isEnabled()) { return; } $payload = [ 'distinctId' => $distinctId, 'event' => $event, 'properties' => $properties, ]; if ($account) { $payload['properties']['$groups'] = ['account' => (string) $account->id]; $payload['properties']['account_id'] = (string) $account->id; $payload['properties']['plan'] = $account->plan?->name; } $this->dispatch('capture', $payload); } /** * @param array $properties */ public function identify(string $distinctId, array $properties = []): void { if (! self::isEnabled()) { return; } $this->dispatch('identify', [ 'distinctId' => $distinctId, 'properties' => $properties, ]); } /** * @param array $properties */ public function groupIdentify(string $groupType, string $groupKey, array $properties = []): void { if (! self::isEnabled()) { return; } $this->dispatch('groupIdentify', [ 'groupType' => $groupType, 'groupKey' => $groupKey, 'properties' => $properties, ]); } /** * @param array $payload */ private function dispatch(string $method, array $payload): void { try { SendEvent::dispatch($method, $payload); } catch (\Throwable $e) { Log::warning('PostHogService: failed to dispatch event', ['method' => $method, 'error' => $e->getMessage()]); } } }