Saltar al contenido principal

Session send() y on()

sendAndWait() devuelve la respuesta directamente y es cómodo, pero solo recibe el último mensaje del assistant.
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());
});
Si también quieres recibir los mensajes intermedios, registra un listener de eventos con on().
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.');

    // Espera con un bucle a que lleguen los mensajes
    $session->wait(timeout: 60.0);
});
Como en PHP esto resulta poco intuitivo, se recomienda combinar on() con sendAndWait().
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 espera en bucle se maneja dentro de sendAndWait(), así que en este punto ya ha llegado el último mensaje.
    // Los mensajes intermedios se reciben en el on() de arriba.

    // El último mensaje devuelto por sendAndWait no es necesario.
    // dump($response->content());
});

Especificar un tipo de evento concreto en on()

Si indicas el tipo de evento con el enum SessionEventType o como cadena, te suscribes solo a ese evento.
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());
});

Suscribirse a todos los tipos de evento

Si no indicas ningún tipo de evento, se suscribe a todos.
use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Types\SessionEvent;

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

// También puedes usar argumentos con nombre:
$session->on(handler: function (SessionEvent $event): void {
});

// Es posible una asignación dinámica de tipo que admita null:
$type = null;
$session->on(type: $type, handler: function (SessionEvent $event): void {
});
Consulta la información más reciente en el repositorio de GitHub.
Última modificación el 13 de julio de 2026