# 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):

yaml
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:

yaml
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_conversion

Se 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

CampoQuando 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.

yaml
slots:
  CITTA:
    required: true
    entity: LOCATION

Usare lo slot in una risposta

yaml
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:

yaml
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_response

Cosa 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).