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

> Gestisci SessionEvent di Laravel Copilot SDK con helper in stile Laravel, verifica del tipo e broadcast.

## SessionEvent

Tutti i messaggi provenienti da Copilot sono istanze di `Revolution\Copilot\Types\SessionEvent`.
Poiché questa classe è la più utilizzata, sono state aggiunte funzionalità comode in stile Laravel.

## `content()`

Recupera il messaggio di risposta più importante dell'AI.

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

Anche la conversione implicita tramite `__toString()` restituisce il contenuto del messaggio.

```php theme={null}
echo (string) $response; // '2'
// In questo caso non è null
```

## Verifica del tipo di evento

Sono disponibili `isAssistantMessage()`, `isUserMessage()`, `isIdle()`, `isAssistantMessageDelta()`.
Per i tipi di evento più usati potrebbero essere aggiunti ulteriori helper.

Con `is()` puoi verificare qualsiasi `EventType`.

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

if ($response->is(SessionEventType::HOOK_START)) {
    // Gestisci l'evento di avvio hook
}
```

`type()` restituisce il valore stringa dell'enum `SessionEventType`.

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

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

`failed()` è true quando il tipo di evento è `SESSION_ERROR`.
`successful()` è l'opposto.

Per allinearsi alle convenzioni di naming di Laravel, è stato rinominato da `isError()`.

## `throw()`

Come nelle API HTTP e Process di Laravel, gli errori sono conservati e puoi sollevarli come eccezione con `throw()`.
Se non ci sono errori non fa nulla, quindi puoi scrivere così.

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

Se il tipo di evento è `SESSION_ERROR`, viene sollevata `Revolution\Copilot\Exceptions\SessionErrorException`.
In caso di timeout viene sollevata `Revolution\Copilot\Exceptions\SessionTimeoutException`.

Per errori JSON-RPC viene sollevata `Revolution\Copilot\Exceptions\JsonRpcException`.

## Conditionable

Sono disponibili `when()` e `unless()`.

```php theme={null}
$response->when($response->isAssistantMessage(), function (SessionEvent $event) {
    // Gestisci l'evento assistant message
});
```

## Dumpable

Sono disponibili `dump()` e `dd()`.

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

## Tappable

È disponibile `tap()`.

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

## InteractsWithData

Questa funzionalità si applica solo alla proprietà `$data` di SessionEvent.

Puoi usare helper familiari come `all()`, `has()`, `only()`, `collect()`.
Per i dettagli consulta [InteractsWithData](/it/advanced/interacts-with-data).

Poiché `$data` di SessionEvent ha struttura diversa per `EventType`, è comodo per l'accesso ai valori dei singoli eventi.

Anche `content()` usa internamente InteractsWithData.

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

// Specificando un default, content() non è null
echo $response->content('');
```

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

Puoi convertire l'intero SessionEvent in array o JSON.

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

Non esiste un metodo `collect()` per l'intero evento.
Il motivo è che `$data` dispone del `collect()` di InteractsWithData.
Se vuoi operare sull'intero evento come collezione, usa l'helper `collect()` di Laravel.

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

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

Puoi effettuare il broadcast con la stessa interfaccia di `StreamEvent` di Laravel AI SDK.
Nell'AI SDK si usa durante lo streaming, mentre in SessionEvent è utilizzabile per qualsiasi `EventType`.

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

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

`broadcastNow()` effettua il broadcast immediato senza passare per la coda.

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

Esempio d'uso in 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>
  Per le informazioni più recenti fai riferimento al [repository GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Contesto e filtraggio della sessione](/it/packages/laravel-copilot-sdk/session-context.md)
- [Eventi di streaming](/it/packages/laravel-copilot-sdk/streaming-events.md)
- [Agenti personalizzati](/it/packages/laravel-copilot-sdk/custom-agents.md)
- [Introduzione - GitHub Copilot SDK for Laravel](/it/packages/laravel-copilot-sdk/getting-started.md)
- [Concurrency](/it/packages/laravel-copilot-sdk/concurrency.md)
