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

# send() e on()

> Descrive come combinare send() / sendAndWait() e on() di Laravel Copilot SDK per gestire eventi intermedi e risposta finale.

## `send()` e `on()` della Session

`sendAndWait()` è chiaro perché restituisce immediatamente la risposta, ma riceve solo **l'ultimo messaggio dell'assistente**.

```php theme={null}
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;

Copilot::start(function (CopilotSession $session) {
    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');
    dump($response->content());
});
```

Se vuoi ricevere anche i messaggi intermedi, registra un listener eventi con `on()`.

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

Copilot::start(function (CopilotSession $session) {
    $session->on(function (SessionEvent $event): void {
        if ($event->isAssistantMessage()) {
            dump($event->content());
        } else {
            dump($event);
        }
    });

    $message_id = $session->send(prompt: 'Tell me something about Laravel.');

    // Attendi la ricezione dei messaggi in loop
    $session->wait(timeout: 60.0);
});
```

In PHP questo risulta poco intuitivo, quindi è consigliata la combinazione di `on()` e `sendAndWait()`.

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

Copilot::start(function (CopilotSession $session) {
    $session->on(function (SessionEvent $event): void {
        if ($event->isAssistantMessage()) {
            dump($event->content());
        } else {
            dump($event);
        }
    });

    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');

    // Il ciclo di attesa è gestito all'interno di sendAndWait(), quindi a questo punto è arrivato anche l'ultimo messaggio.
    // I messaggi intermedi vengono ricevuti dall'on() sopra.

    // L'ultimo messaggio di sendAndWait non serve.
    // dump($response->content());
});
```

## Specificare un tipo di evento in `on()`

Puoi sottoscrivere solo un tipo di evento specificando l'enum `SessionEventType` o una stringa.

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

$session->on(SessionEventType::ASSISTANT_MESSAGE, function (SessionEvent $event): void {
    dump($event->content());
});

$session->on('assistant.message', function (SessionEvent $event): void {
    dump($event->content());
});
```

## Sottoscrivere tutti i tipi di evento

Se non specifichi il tipo, li sottoscrivi tutti.

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

$session->on(function (SessionEvent $event): void {
});

// Puoi anche usare argomenti nominati
$session->on(handler: function (SessionEvent $event): void {
});

// È possibile anche una specifica dinamica che ammette null.
$type = null;
$session->on(type: $type, handler: function (SessionEvent $event): void {
});
```

<Info>
  Per le informazioni più recenti fai riferimento al [repository GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Pattern Pipeline](/it/advanced/pipeline.md)
- [Steering e queueing](/it/packages/laravel-copilot-sdk/steering.md)
- [FAQ sulla nuova struttura dell'app da Laravel 11](/it/advanced/app-structure-faq.md)
- [Reset della password](/it/passwords.md)
- [Struttura dell'applicazione da Laravel 11](/it/advanced/app-structure.md)
