# Raccogliere informazioni con gli slot
Gli slot sono i dati che il bot deve ricavare dalla frase dell'utente (una città, un numero, una data). Se mancano, il bot li chiede.
Esempio: convertire una valuta
Nei dati degli intent annota le entità con [testo](TIPO):
nlu:
intents:
- intent: ask_currency_conversion
examples:
- quanto sono [100](NUMBER) [euro](CURRENCY_FROM) in [dollari](CURRENCY_TO)
- converti [50](NUMBER) [sterline](CURRENCY_FROM) in [euro](CURRENCY_TO)La regola dichiara quali slot servono:
rules:
ask_currency_conversion:
slots:
CURRENCY_FROM:
required: true
CURRENCY_TO:
required: true
NUMBER:
required: false
wait:
CURRENCY_FROM: ask_currency_conversion_wait_from_response
CURRENCY_TO: ask_currency_conversion_wait_to_response
default: __ask_currency_conversionSe l'utente scrive solo "voglio convertire dei soldi", il bot risponde con la risposta wait dello slot mancante e aspetta il valore.
I campi di uno slot
| Campo | Quando serve |
|---|---|
| `required` | `true` se senza il valore non si può rispondere |
| `entity` | solo se il tag NER ha un nome diverso dalla chiave dello slot |
| `type` | solo se diverso da `string`: `integer`, `float`, `boolean`, `list` |
Esempio con entity: la chiave dello slot è CITTA, ma il tag annotato nei dati è LOCATION.
slots:
CITTA:
required: true
entity: LOCATIONUsare lo slot in una risposta
responses:
prenota_response:
- "Ho prenotato per {NUMERO_PERSONE} persone."Valori diversi, risposte diverse
Con cases scegli la risposta in base al valore dello slot; fallback copre gli altri valori:
rules:
cerca_meteo:
slots:
CITTA:
required: true
entity: LOCATION
cases:
Roma: meteo_roma_response
Milano: meteo_milano_response
fallback: meteo_non_supportato_response
wait: meteo_citta_wait_responseCosa succede se l'utente cambia argomento
Mentre il bot aspetta uno slot, se il messaggio successivo viene riconosciuto come un altro intent con confidenza sufficiente (INPUTABLE_SWITCH_CONFIDENCE in config.py, 0.60), il bot abbandona la raccolta e segue il nuovo argomento invece di forzare il testo come valore. La risposta dell'API ha waiting_for_slot: true finché il bot sta aspettando un valore.
Prossimo passo: [Scrivere una operation](/guides/operations).