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

> Beschreibt, wie Sie im Laravel Copilot SDK send()/sendAndWait() und on() kombinieren, um Zwischen-Ereignisse und die finale Antwort zu verarbeiten.

## Session `send()` und `on()`

`sendAndWait()` liefert die Antwort direkt zurück und ist daher intuitiv, gibt jedoch **nur die letzte Assistenten-Nachricht** zurück.

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

Wenn Sie auch Zwischen-Nachrichten empfangen möchten, registrieren Sie einen Event-Listener mit `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.');

    // In einer Schleife auf eingehende Nachrichten warten
    $session->wait(timeout: 60.0);
});
```

In PHP ist dies unübersichtlich; empfohlen ist daher die Kombination aus `on()` und `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.');

    // Da das Warten in sendAndWait() erledigt wird, ist an dieser Stelle die letzte Nachricht bereits eingegangen.
    // Zwischen-Nachrichten wurden bereits über das obige on() empfangen.

    // Die letzte Nachricht aus sendAndWait wird hier nicht mehr benötigt.
    // dump($response->content());
});
```

## Bestimmte Event-Typen in `on()` angeben

Wenn Sie einen Event-Typ per `SessionEventType`-Enum oder String angeben, werden nur diese Events abonniert.

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

## Alle Event-Typen abonnieren

Ohne Angabe eines Event-Typs werden alle abonniert.

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

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

// Angabe per benannten Argumenten ist ebenfalls möglich
$session->on(handler: function (SessionEvent $event): void {
});

// Dynamische Typangabe mit null ist zulässig.
$type = null;
$session->on(type: $type, handler: function (SessionEvent $event): void {
});
```

<Info>
  Aktuelle Informationen finden Sie im [GitHub-Repository](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Migrations-Guide von laravel/ui zu Fortify](/de/blog/ui-to-fortify.md)
- [Steering und Queueing](/de/packages/laravel-copilot-sdk/steering.md)
- [Queues und Jobs](/de/queues.md)
- [Events und Listener](/de/events.md)
- [BlueskyManager und HasShortHand](/de/packages/laravel-bluesky/bluesky-manager.md)
