> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# SessionEvent

> Nutzen Sie SessionEvent im Laravel Copilot SDK mit Laravel-typischen Helpern, Typprüfungen und Broadcasting.

## SessionEvent

Alle Nachrichten von Copilot sind Instanzen der Klasse `Revolution\Copilot\Types\SessionEvent`.
Da sie am häufigsten verwendet wird, wurden Laravel-typische Komfortfunktionen ergänzt.

## `content()`

Ruft die wichtigste Antwortnachricht der KI ab.

```php theme={null}
$response = Copilot::run('1 + 1');
echo $response->content(); // '2'
// content() kann null sein
```

Auch die implizite Typumwandlung via `__toString()` liefert den Nachrichteninhalt zurück.

```php theme={null}
echo (string) $response; // '2'
// Dieser Weg liefert kein null
```

## Event-Typ prüfen

`isAssistantMessage()`, `isUserMessage()`, `isIdle()`, `isAssistantMessageDelta()` stehen zur Verfügung.
Für häufig genutzte Event-Typen können weitere Helper hinzugefügt werden.

Mit `is()` können Sie einen beliebigen `EventType` prüfen.

```php theme={null}
use Revolution\Copilot\Enums\SessionEventType;

if ($response->is(SessionEventType::HOOK_START)) {
    // Verarbeitung beim Hook-Start-Event
}
```

`type()` gibt den String-Wert des Enums `SessionEventType` zurück.

```php theme={null}
echo $response->type(); // 'assistant.message'
```

## `failed()` / `successful()`

Wenn der Event-Typ `SESSION_ERROR` ist, wird `failed()` zu true.
`successful()` ist die Negation.

Zur Ausrichtung an Laravel-Konventionen wurde die Methode von `isError()` umbenannt.

## `throw()`

Wie bei Laravels HTTP- und Process-API wird der Fehler beibehalten und kann via `throw()` als Exception geworfen werden.
Da bei fehlerfreiem Zustand nichts passiert, lässt sich schreiben:

```php theme={null}
$content = $response->throw()->content();
```

Bei Event-Typ `SESSION_ERROR` wird `Revolution\Copilot\Exceptions\SessionErrorException` geworfen.
Bei Timeout wird `Revolution\Copilot\Exceptions\SessionTimeoutException` geworfen.

Bei JSON-RPC-Fehlern wird `Revolution\Copilot\Exceptions\JsonRpcException` geworfen.

## Conditionable

`when()` und `unless()` sind verfügbar.

```php theme={null}
$response->when($response->isAssistantMessage(), function (SessionEvent $event) {
    // Verarbeitung bei einer Assistenten-Nachricht
});
```

## Dumpable

`dump()` und `dd()` sind verfügbar.

```php theme={null}
$response->dump();
```

## Tappable

`tap()` ist verfügbar.

```php theme={null}
return $response->tap(function (SessionEvent $event) {
    // Irgendeine Verarbeitung
    info($event->content());
});
```

## InteractsWithData

Diese Funktion bezieht sich ausschließlich auf die Eigenschaft `$data` von SessionEvent.

Sie können vertraute Helper wie `all()`, `has()`, `only()`, `collect()` verwenden.
Details siehe [InteractsWithData](/de/advanced/interacts-with-data).

Da die Struktur von `$data` je nach `EventType` unterschiedlich ist, ist dies für den ereignisspezifischen Zugriff auf Werte hilfreich.

Auch `content()` verwendet intern InteractsWithData.

```php theme={null}
return $this->data('content', $default);

// Wenn Sie einen Default angeben, wird content() nicht null
echo $response->content('');
```

## `toArray()` / `toJson()`

Sie können den gesamten SessionEvent in ein Array oder JSON umwandeln.

```php theme={null}
$array = $response->toArray();
$json = $response->toJson();
```

Eine `collect()`-Methode für das gesamte Event existiert nicht.
Grund: `$data` hat bereits `collect()` aus InteractsWithData.
Wenn Sie das gesamte Event mit Collection-Operationen bearbeiten möchten, nutzen Sie den Laravel-Helper `collect()`.

```php theme={null}
$collect = collect($response->toArray());
```

## `broadcast()` / `broadcastNow()`

Sie können mit derselben Schnittstelle wie beim `StreamEvent` des Laravel AI SDK broadcasten.
Beim AI SDK wird es beim Streaming verwendet, beim SessionEvent aber für beliebige `EventType`s.

```php theme={null}
use Illuminate\Broadcasting\Channel;

$event->broadcast(new Channel('channel-name'));
```

`broadcastNow()` broadcastet sofort, ohne den Weg über die Queue.

```php theme={null}
$event->broadcastNow(new Channel('channel-name'));
```

Anwendungsbeispiel beim Streaming:

```php theme={null}
use Illuminate\Broadcasting\Channel;
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\SessionEvent;

Copilot::start(function (CopilotSession $session) {
    $session->on(function (SessionEvent $event): void {
        if ($event->isAssistantMessageDelta()) {
            $event->broadcastNow(new Channel('copilot'));
        }
    });

    $session->sendAndWait(prompt: 'Tell me something about Laravel.');
}, config: new SessionConfig(streaming: true));
```

<Info>
  Aktuelle Informationen finden Sie im [GitHub-Repository](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Session-Lebenszyklus-Ereignisse](/de/packages/laravel-copilot-sdk/session-lifecycle-event.md)
- [Session-Kontext und Filterung](/de/packages/laravel-copilot-sdk/session-context.md)
- [Streaming-Ereignisse](/de/packages/laravel-copilot-sdk/streaming-events.md)
- [Benutzerdefinierte Agenten](/de/packages/laravel-copilot-sdk/custom-agents.md)
- [Erste Schritte - GitHub Copilot SDK für Laravel](/de/packages/laravel-copilot-sdk/getting-started.md)
