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

> Trabaja con SessionEvent de Laravel Copilot SDK usando helpers al estilo Laravel, comprobación de tipo y broadcasting.

## SessionEvent

Todos los mensajes que llegan desde Copilot son de la clase `Revolution\Copilot\Types\SessionEvent`.
Como es la clase que más se usa, incluye funcionalidades cómodas al estilo Laravel.

## `content()`

Obtiene el mensaje de respuesta más importante de la IA.

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

Con la conversión implícita a string mediante `__toString()` también se devuelve el contenido del mensaje.

```php theme={null}
echo (string) $response; // '2'
// Esta forma no puede ser null
```

## Detección del event type

Puedes usar `isAssistantMessage()`, `isUserMessage()`, `isIdle()`, `isAssistantMessageDelta()`.
Si hay algún event type que se usa mucho, puede que se añadan más helpers.

Con `is()` puedes comprobar cualquier `EventType`.

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

if ($response->is(SessionEventType::HOOK_START)) {
    // Procesado del evento de inicio de hook
}
```

`type()` devuelve el valor string del enum `SessionEventType`.

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

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

Cuando el tipo de evento es `SESSION_ERROR`, `failed()` devuelve true.
`successful()` es lo contrario.

Para adecuarse al estilo de nombres de Laravel, se renombró desde `isError()`.

## `throw()`

Igual que en las APIs HTTP y Process de Laravel, el error se conserva y puedes lanzarlo como excepción con `throw()`.
Si no hay error, no hace nada, así que puedes escribir:

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

Cuando el tipo de evento es `SESSION_ERROR`, se lanza `Revolution\Copilot\Exceptions\SessionErrorException`.
En caso de timeout, se lanza `Revolution\Copilot\Exceptions\SessionTimeoutException`.

Ante un error JSON-RPC, se lanza `Revolution\Copilot\Exceptions\JsonRpcException`.

## Conditionable

Puedes usar `when()` y `unless()`.

```php theme={null}
$response->when($response->isAssistantMessage(), function (SessionEvent $event) {
    // Procesado cuando es un mensaje del assistant
});
```

## Dumpable

Puedes usar `dump()` y `dd()`.

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

## Tappable

Puedes usar `tap()`.

```php theme={null}
return $response->tap(function (SessionEvent $event) {
    // Alguna operación
    info($event->content());
});
```

## InteractsWithData

Esta función solo se aplica a la propiedad `$data` de SessionEvent.

Puedes usar helpers habituales como `all()`, `has()`, `only()`, `collect()`.
Para más detalles, consulta [InteractsWithData](/es/advanced/interacts-with-data).

Como la estructura de `$data` de SessionEvent varía según el `EventType`, es útil para acceder a los valores según el evento.

`content()` también usa InteractsWithData internamente.

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

// Si indicas un default, content() no será null
echo $response->content('');
```

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

Puedes convertir todo el SessionEvent en array o JSON.

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

No hay un método `collect()` para el evento completo.
Se debe a que `$data` tiene el `collect()` de InteractsWithData.
Si quieres operar sobre todo el evento como colección, usa el helper `collect()` de Laravel.

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

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

Puedes emitir con la misma interfaz que `StreamEvent` de Laravel AI SDK.
En AI SDK se usa durante el streaming, pero en SessionEvent puedes usarlo con cualquier `EventType`.

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

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

`broadcastNow()` emite inmediatamente, sin pasar por la cola.

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

Ejemplo de uso durante el 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>
  Consulta la información más reciente en el [repositorio de GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Contexto de sesión y filtrado](/es/packages/laravel-copilot-sdk/session-context.md)
- [Eventos de streaming](/es/packages/laravel-copilot-sdk/streaming-events.md)
- [Agentes personalizados](/es/packages/laravel-copilot-sdk/custom-agents.md)
- [Primeros pasos - GitHub Copilot SDK for Laravel](/es/packages/laravel-copilot-sdk/getting-started.md)
- [Concurrency](/es/packages/laravel-copilot-sdk/concurrency.md)
