> ## 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

> Werk met de SessionEvent van de Laravel Copilot SDK via Laravel-achtige helpers, typecontroles en broadcasting.

## SessionEvent

Alle berichten van Copilot zijn instanties van de klasse `Revolution\Copilot\Types\SessionEvent`.
Omdat deze klasse het meest wordt gebruikt, zijn er handige Laravel-achtige functies aan toegevoegd.

## `content()`

Haalt het belangrijkste antwoordbericht van de AI op.

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

Ook de impliciete typeconversie via `__toString()` retourneert de inhoud van het bericht.

```php theme={null}
echo (string) $response; // '2'
// Deze wordt nooit null
```

## Het eventtype bepalen

Je kunt `isAssistantMessage()`, `isUserMessage()`, `isIdle()` en `isAssistantMessageDelta()` gebruiken.
Voor veelgebruikte eventtypes kunnen er nog meer helpers worden toegevoegd.

Met `is()` kun je op elk willekeurig `EventType` controleren.

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

if ($response->is(SessionEventType::HOOK_START)) {
    // Verwerking bij een hook-start-event
}
```

`type()` retourneert de stringwaarde van de `SessionEventType`-enum.

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

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

Wanneer het eventtype `SESSION_ERROR` is, geeft `failed()` true terug.
`successful()` is het omgekeerde daarvan.

Om aan te sluiten bij de Laravel-naamgeving is deze hernoemd van `isError()`.

## `throw()`

Net als bij de HTTP API en Process API van Laravel worden fouten bewaard en kun je met `throw()` een exception gooien.
Als er geen fout is, gebeurt er niets, dus je kunt dit zo schrijven:

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

Bij het eventtype `SESSION_ERROR` wordt een `Revolution\Copilot\Exceptions\SessionErrorException` gegooid.
Bij een timeout wordt een `Revolution\Copilot\Exceptions\SessionTimeoutException` gegooid.

Bij JSON-RPC-fouten wordt een `Revolution\Copilot\Exceptions\JsonRpcException` gegooid.

## Conditionable

Je kunt `when()` en `unless()` gebruiken.

```php theme={null}
$response->when($response->isAssistantMessage(), function (SessionEvent $event) {
    // Verwerking bij een assistentbericht
});
```

## Dumpable

Je kunt `dump()` en `dd()` gebruiken.

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

## Tappable

Je kunt `tap()` gebruiken.

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

## InteractsWithData

Deze functionaliteit geldt alleen voor de property `$data` van SessionEvent.

Je kunt vertrouwde helpers gebruiken zoals `all()`, `has()`, `only()` en `collect()`.
Zie [InteractsWithData](/nl/advanced/interacts-with-data) voor details.

Omdat de structuur van `$data` van SessionEvent per `EventType` verschilt, is dit handig om per event waarden op te vragen.

`content()` gebruikt intern ook InteractsWithData.

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

// Als je een default opgeeft, wordt content() nooit null
echo $response->content('');
```

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

Je kunt de hele SessionEvent omzetten naar een array of JSON.

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

Er is geen `collect()`-methode voor het hele event.
`$data` heeft namelijk al de `collect()` van InteractsWithData.
Wil je het hele event als collectie bewerken, gebruik dan de `collect()`-helper van Laravel.

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

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

Je kunt broadcasten met dezelfde interface als het `StreamEvent` van de Laravel AI SDK.
In de AI SDK gebruik je dit bij streaming, maar bij SessionEvent kan het bij elk `EventType`.

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

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

`broadcastNow()` broadcast direct, zonder via een queue te gaan.

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

Voorbeeld bij 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>
  Raadpleeg de [GitHub-repository](https://github.com/invokable/laravel-copilot-sdk) voor de meest actuele informatie.
</Info>


## Related topics

- [Streaming events](/nl/packages/laravel-copilot-sdk/streaming-events.md)
- [Custom agents](/nl/packages/laravel-copilot-sdk/custom-agents.md)
- [Aan de slag - GitHub Copilot SDK voor Laravel](/nl/packages/laravel-copilot-sdk/getting-started.md)
- [Concurrency](/nl/packages/laravel-copilot-sdk/concurrency.md)
- [Session lifecycle events](/nl/packages/laravel-copilot-sdk/session-lifecycle-event.md)
