> ## 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() et on()

> Découvrez comment combiner send() / sendAndWait() et on() de Laravel Copilot SDK pour gérer les événements intermédiaires et la réponse finale.

## `send()` et `on()` d'une Session

`sendAndWait()` renvoie immédiatement la réponse et reste simple, mais vous ne récupérez que **le dernier message de l'assistant**.

```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());
});
```

Pour recevoir aussi les messages intermédiaires, enregistrez un listener avec `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.');

    // Boucle en attente de réception des messages
    $session->wait(timeout: 60.0);
});
```

Comme cela peut être moins clair en PHP, la combinaison de `on()` et `sendAndWait()` est recommandée.

```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.');

    // La boucle d'attente est déjà gérée par sendAndWait(), le dernier message est donc arrivé ici.
    // Les messages intermédiaires ont été reçus dans on() ci-dessus.

    // Le message final renvoyé par sendAndWait n'est pas nécessaire.
    // dump($response->content());
});
```

## Cibler un type d'événement précis dans `on()`

Vous pouvez ne vous abonner qu'à un type précis en passant l'enum `SessionEventType` ou une chaîne.

```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());
});
```

## S'abonner à tous les types d'événements

Sans type spécifié, tout est reçu.

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

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

// Vous pouvez aussi utiliser un argument nommé
$session->on(handler: function (SessionEvent $event): void {
});

// Un type dynamique acceptant null est également possible.
$type = null;
$session->on(type: $type, handler: function (SessionEvent $event): void {
});
```

<Info>
  Pour les dernières informations, consultez le [dépôt GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Steering et mise en file](/fr/packages/laravel-copilot-sdk/steering.md)
- [Queues et jobs](/fr/queues.md)
- [BlueskyManager et HasShortHand](/fr/packages/laravel-bluesky/bluesky-manager.md)
- [Structure d'application Laravel 11+](/fr/advanced/app-structure.md)
- [Pattern Pipeline](/fr/advanced/pipeline.md)
