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

# Ask user

> Rispondi alle domande all'utente tramite lo strumento ask_user con l'handler onUserInputRequest di Laravel Copilot SDK.

## Richieste di input dell'utente

Se imposti l'handler `onUserInputRequest`, l'agente può rivolgere domande all'utente tramite lo strumento `ask_user`.

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

Copilot::start(function (CopilotSession $session) {
    $response = $session->sendAndWait(prompt: 'Chiedi all\'utente quale linguaggio preferisce');
    dump($response->content());
}, config: [
    'model' => 'gpt-5',
    'onUserInputRequest' => function (UserInputRequest $request): UserInputResponse {
        // $request->question - contenuto della domanda
        // $request->choices - array di opzioni multiple (opzionale)
        // $request->allowFreeform - se è consentito l'input libero (default: true)

        dump("Question from agent: {$request->question}");
        if ($request->choices) {
            dump('Choices: '.implode(', ', $request->choices));
        }

        // Restituisci la risposta dell'utente
        return new UserInputResponse(
            answer: 'PHP',
            wasFreeform: true, // true se input libero anziché scelta da opzioni
        );
    },
]);
```

## Classe UserInputRequest

Rappresenta una richiesta di input dell'utente da parte dell'agente.

| Proprietà       | Tipo     | Descrizione                                      |
| --------------- | -------- | ------------------------------------------------ |
| `question`      | `string` | La domanda da porre all'utente                   |
| `choices`       | `?array` | Opzioni in caso di scelta multipla (opzionale)   |
| `allowFreeform` | `?bool`  | Se è consentito l'input libero (default: `true`) |

## Classe UserInputResponse

Rappresenta la risposta a una richiesta di input dell'utente.

| Proprietà     | Tipo     | Descrizione                                                          |
| ------------- | -------- | -------------------------------------------------------------------- |
| `answer`      | `string` | La risposta dell'utente                                              |
| `wasFreeform` | `bool`   | `true` se la risposta è input libero (non selezionata dalle opzioni) |

## Esempio pratico

Uso all'interno di un comando interattivo.

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

// All'interno di un comando Artisan
Copilot::start(function (CopilotSession $session) use ($command) {
    $response = $session->sendAndWait(prompt: 'Configurazione del progetto');
    $command->info($response->content());
}, config: [
    'onUserInputRequest' => function (UserInputRequest $request) use ($command): UserInputResponse {
        if ($request->choices) {
            // Se ci sono opzioni, usa il metodo choice
            $answer = $command->choice(
                $request->question,
                $request->choices,
                $request->choices[0] ?? null
            );

            return new UserInputResponse(answer: $answer, wasFreeform: false);
        }

        // Input libero
        $answer = $command->ask($request->question);

        return new UserInputResponse(answer: $answer, wasFreeform: true);
    },
]);
```

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


## Related topics

- [Laravel Prompts](/it/prompts.md)
- [Hook di sessione](/it/packages/laravel-copilot-sdk/hooks.md)
- [Console Artisan](/it/artisan.md)
- [Add User Dict Word](/it/packages/laravel-voicevox/engine-api/user-dictionary/add-user-dict-word.md)
- [Import User Dict Words](/it/packages/laravel-voicevox/engine-api/user-dictionary/import-user-dict-words.md)
