

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Integrazione di una AWS Lambda funzione nel tuo bot Amazon Lex V2
<a name="lambda"></a>

Con [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)le funzioni, puoi estendere e controllare meglio il comportamento del tuo bot Amazon Lex V2 attraverso funzioni personalizzate da te definite. Amazon Lex V2 utilizza una funzione Lambda per alias bot per lingua anziché una funzione Lambda per ogni intento. Prima di iniziare, stabilisci da quali campi dell'[evento di input](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-input-format) desideri trarre informazioni e quali campi della [risposta](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-response-format) desideri manipolare e restituire dalla tua funzione Lambda

Per integrare una funzione Lambda con il tuo bot Amazon Lex V2, esegui i seguenti passaggi:

1. [Crea una funzione](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach) AWS Lambda utilizzando il linguaggio di programmazione che preferisci e scrivi lo script.

1. Assicurati che la funzione restituisca una struttura corrispondente al [formato di risposta](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-response-format).

1. Distribuire la funzione Lambda.

1. [Associa la funzione Lambda a un alias bot di Amazon Lex V2 alle operazioni della [console](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-console) o dell'API.](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-api)

1. Seleziona le fasi della conversazione in cui desideri richiamare la funzione Lambda con le operazioni [della console [o](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-api) dell'](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-attach-console)API.

1. Crea il tuo bot Amazon Lex V2 e verifica che la funzione Lambda funzioni come previsto. Esegui il [debug](https://docs.aws.amazon.com/lexv2/latest/dg/lambda-debug) della tua funzione con l'aiuto di Amazon CloudWatch.

**Topics**
+ [AWS Lambdaformato degli eventi di input per Lex V2](lambda-input-format.md)
+ [AWS Lambdaformato di risposta per Lex V2](lambda-response-format.md)
+ [Strutture comuni in una AWS Lambda funzione per Amazon Lex V2](lambda-common-structures.md)
+ [Creazione di una AWS Lambda funzione per il tuo bot Amazon Lex V2](lambda-attach.md)
+ [Eseguire il debug di una funzione Lambda utilizzando i log di Logs CloudWatch](lambda-debug.md)

# AWS Lambdaformato degli eventi di input per Lex V2
<a name="lambda-input-format"></a>

Il primo passaggio per integrare una funzione Lambda nel tuo bot Amazon Lex V2 consiste nel comprendere i campi dell'evento Amazon Lex V2 e determinare le informazioni da questi campi che desideri utilizzare durante la scrittura dello script. Il seguente oggetto JSON mostra il formato generale di un evento Amazon Lex V2 passato a una funzione Lambda:

**Nota**  
Il formato di input può cambiare senza una modifica corrispondente a. `messageVersion` Il codice non dovrebbe generare un errore se sono presenti nuovi campi.

```
{
    "messageVersion": "1.0",
    "invocationSource": "DialogCodeHook | FulfillmentCodeHook",
    "inputMode": "DTMF | Speech | Text",
    "responseContentType": "audio/mpeg | audio/ogg | audio/pcm | text/plain; charset=utf-8",
    "sessionId": string,
    "inputTranscript": string,
    "invocationLabel": string,
    "bot": {
        "id": string,
        "name": string,
        "localeId": string,
        "version": string,
        "aliasId": string,
        "aliasName": string
    },
    "interpretations": [
        {
            "interpretationSource": "Bedrock | Lex",
            "intent": {
                // see Intento for details about the structure
            },
            "nluConfidence": number,
            "sentimentResponse": {
                "sentiment": "MIXED | NEGATIVE | NEUTRAL | POSITIVE",
                "sentimentScore": {
                    "mixed": number,
                    "negative": number,
                    "neutral": number,
                    "positive": number
                }
            }
        },
        ...
    ],
    "proposedNextState": {
        "dialogAction": {
            "slotToElicit": string,
            "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
        },
        "intent": {
            // see Intento for details about the structure
        },
        "prompt": {
            "attempt": string 
        }
    },
    "requestAttributes": {
        string: string,
        ...
    },
    "sessionState": {
        // see Stato della sessione for details about the structure
    },
    "transcriptions": [
        {
            "transcription": string,
            "transcriptionConfidence": number,
            "resolvedContext": {
                "intent": string
            },
            "resolvedSlots": {
                slot name: {
                    // see Slot for details about the structure
                },
                ...
            }
        },
        ...
    ]
}
```

Ogni campo dell'evento di input è descritto di seguito:

## messageVersion
<a name="lambda-input-messageversion"></a>

La versione del messaggio che identifica il formato dei dati degli eventi che entrano nella funzione Lambda e il formato previsto della risposta da una funzione Lambda.

**Nota**  
Puoi configurare questo valore quando definisci un intento. Nell'attuale implementazione, Amazon Lex V2 supporta solo la versione 1.0 dei messaggi. Pertanto, la console presuppone il valore predefinito di 1.0 e non mostra la versione del messaggio.

## invocationSource
<a name="lambda-input-invocationsource"></a>

Il code hook che ha chiamato la funzione Lambda. I valori possibili sono i seguenti:

`DialogCodeHook`— Amazon Lex V2 ha chiamato la funzione Lambda dopo l'input dell'utente.

`FulfillmentCodeHook`— Amazon Lex V2 ha richiamato la funzione Lambda dopo aver riempito tutti gli slot richiesti e l'intento è pronto per l'adempimento.

## Modalità di input
<a name="lambda-input-inputmode"></a>

La modalità di espressione dell'utente. I valori possibili sono i seguenti:

`DTMF`— L'utente inserisce l'enunciato utilizzando una tastiera tattile (Dual Tone Multi-Frequency).

`Speech`— L'utente ha pronunciato l'enunciato.

`Text`— L'utente ha digitato l'enunciato.

## responseContentType
<a name="lambda-input-responsecontenttype"></a>

La modalità di risposta del bot all'utente. `text/plain; charset=utf-8`indica che l'ultima espressione è stata scritta, mentre un valore che inizia con `audio` indica che l'ultima espressione è stata pronunciata.

## sessionId
<a name="lambda-input-sessionid"></a>

L'identificatore alfanumerico di sessione utilizzato per la conversazione.

## inputTranscript
<a name="lambda-input-inputtranscript"></a>

Una trascrizione dell'input dell'utente.
+ Per l'immissione di testo, si tratta del testo digitato dall'utente. Per l'input DTMF, questa è la chiave immessa dall'utente.
+ Per l'input vocale, questo è il testo in cui Amazon Lex V2 converte l'enunciato dell'utente per richiamare un intento o riempire uno slot.

## Etichetta di invocazione
<a name="lambda-input-invocationlabel"></a>

Un valore che indica la risposta che ha richiamato la funzione Lambda. È possibile impostare etichette di chiamata per la risposta iniziale, gli slot e la risposta di conferma.

## bot
<a name="lambda-input-bot"></a>

Informazioni sul bot che ha elaborato la richiesta, costituite dai seguenti campi:
+ **id** — L'identificatore assegnato al bot al momento della sua creazione. Puoi visualizzare l'ID del bot nella console Amazon Lex V2 nella pagina **delle impostazioni** del bot.
+ **nome**: il nome che hai dato al bot quando lo hai creato.
+ **localeID**: l'identificatore del locale che hai usato per il bot. Per un elenco delle impostazioni locali, consulta. [Lingue e impostazioni locali supportate da Amazon Lex V2](how-languages.md)
+ **version** — La versione del bot che ha elaborato la richiesta.
+ **aliasID**: l'identificatore assegnato all'alias del bot al momento della creazione. Puoi visualizzare l'ID alias del bot nella console Amazon Lex V2 nella pagina **Alias**. **Se non riesci a visualizzare l'ID dell'alias nell'elenco, scegli l'icona a forma di ingranaggio in alto a destra e attiva l'ID alias.**
+ **AliasName: il nome** che hai assegnato all'alias del bot.

## interpretazioni
<a name="lambda-input-interpretations"></a>

Un elenco di informazioni sugli intenti che Amazon Lex V2 considera possibili corrispondenze all'enunciato dell'utente. Ogni elemento è una struttura che fornisce informazioni sulla corrispondenza dell'enunciato a un intento, con il seguente formato:

```
{
    "intent": {
        // see Intento for details about the structure
    },
    "interpretationSource": "Bedrock | Lex",
    "nluConfidence": number,
    "sentimentResponse": {
        "sentiment": "MIXED | NEGATIVE | NEUTRAL | POSITIVE",
        "sentimentScore": {
            "mixed": number,
            "negative": number,
            "neutral": number,
            "positive": number
        }
    }
}
```

I campi all'interno della struttura sono i seguenti:
+ **intento**: una struttura contenente informazioni sull'intento. [Intento](lambda-common-structures.md#lambda-intent)Per ulteriori dettagli sulla struttura, vedere.
+ **NLUConfidence**: un punteggio che indica quanto Amazon Lex V2 sia sicuro che l'intento corrisponda a quello dell'utente.
+ **SentimentResponse** — Un'analisi del sentimento della risposta, contenente i seguenti campi:
  + **sentiment**: indica se il sentimento dell'enunciato è,,, o. `POSITIVE` `NEGATIVE` `NEUTRAL` `MIXED`
  + **SentimentScore**: una struttura che associa ogni sentimento a un numero che indica quanto Amazon Lex V2 sia sicuro che l'enunciato trasmetta quel sentimento.
+ **InterpretationSource**: indica se uno slot viene risolto da Amazon Lex V2 o Amazon Bedrock.

## proposedNextState
<a name="lambda-input-proposednextstate"></a>

Se la funzione Lambda imposta `dialogAction` of `sessionState` to`Delegate`, questo campo viene visualizzato e mostra la proposta di Amazon Lex V2 per il passaggio successivo della conversazione. Altrimenti, lo stato successivo dipende dalle impostazioni restituite nella risposta della funzione Lambda. Questa struttura è presente solo se entrambe le seguenti affermazioni sono vere:

1. Il `invocationSource` valore è `DialogCodeHook`

1. Il previsto `type` di `dialogAction` è`ElicitSlot`.

Puoi utilizzare queste informazioni per aggiungere `runtimeHints` qualcosa al momento giusto della conversazione. [Miglioramento del riconoscimento dei valori degli slot con suggerimenti di runtime nella conversazione](using-hints.md)Per ulteriori informazioni, consulta. `proposedNextState`è una struttura contenente i seguenti campi:

La struttura di `proposedNextState` è la seguente:

```
"proposedNextState": {
    "dialogAction": {
        "slotToElicit": string,
        "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
    },
    "intent": {
        // see Intento for details about the structure
    },
    "prompt": {
        "attempt": string 
    }
}
```
+ **DialogAction**: contiene informazioni sulla fase successiva proposta da Amazon Lex V2. I campi della struttura sono i seguenti: 
  + **slotToElicit**— Lo slot da ottenere successivamente, come proposto da Amazon Lex V2. Questo campo viene visualizzato solo se è`type`. `ElicitSlot`
  + **type** — La fase successiva della conversazione proposta da Amazon Lex V2. I valori possibili sono i seguenti:

    `Delegate`— Amazon Lex V2 determina l'azione successiva.

    `ElicitIntent`— L'azione successiva consiste nel suscitare un'intenzione da parte dell'utente.

    `ElicitSlot`— L'azione successiva consiste nell'ottenere un valore di slot dall'utente.

    `Close`— Termina il processo di adempimento degli intenti e indica che non ci sarà alcuna risposta da parte dell'utente.

    `ConfirmIntent`— L'azione successiva consiste nel chiedere all'utente se gli slot sono corretti e l'intento è pronto per essere soddisfatto.
+ **intento**: l'intento che il bot ha stabilito e che l'utente sta cercando di soddisfare. Vedi [Intento](lambda-common-structures.md#lambda-intent) per i dettagli sulla struttura.
+ **prompt**: una struttura contenente il campo`attempt`, che corrisponde a un valore che specifica quante volte Amazon Lex V2 ha richiesto all'utente lo slot successivo. I valori possibili sono `Initial` per il primo tentativo e`Retry1`,, `Retry2` `Retry3``Retry4`, e `Retry5` per i tentativi successivi. 

## requestAttributes
<a name="lambda-input-requestattributes"></a>

Una struttura contenente gli attributi specifici della richiesta che il client invia nella richiesta. Utilizza gli attributi di richiesta per inviare informazioni che non devono essere conservate per l'intera sessione. Se non ci sono attributi della richiesta, il valore sarà null. Per ulteriori informazioni, consulta [Impostazione degli attributi di richiesta per il tuo bot Lex V2](context-mgmt-request-attribs.md).

## sessionState
<a name="lambda-input-sessionstate"></a>

Lo stato attuale della conversazione tra l'utente e il tuo bot Amazon Lex V2. [Stato della sessione](lambda-common-structures.md#lambda-session-state)Per ulteriori dettagli sulla struttura, consulta.

## trascrizioni
<a name="lambda-input-transcriptions"></a>

Un elenco di trascrizioni che Amazon Lex V2 considera possibili corrispondenze all'enunciato dell'utente. Per ulteriori informazioni, consulta [Usa i punteggi di confidenza nella trascrizione vocale per migliorare le conversazioni con il tuo bot Lex V2](using-transcript-confidence-scores.md). Ogni elemento è un oggetto con il seguente formato, contenente informazioni su una possibile trascrizione:

```
{
    "transcription": string,
    "transcriptionConfidence": number,
    "resolvedContext": {
        "intent": string
    },
    "resolvedSlots": {
        slot name: {
            // see Slot for details about the structure
        },
        ...
    }
}
```

I campi sono descritti di seguito.
+ **trascrizione**: una trascrizione che Amazon Lex V2 considera una possibile corrispondenza con l'enunciato audio dell'utente.
+ **TranscriptionConfidence**: un punteggio che indica quanto Amazon Lex V2 sia sicuro che l'intento corrisponda all'intento dell'utente.
+ **ResolvedContext**: una struttura contenente il campo`intent`, che corrisponde all'intento a cui si riferisce l'enunciato.
+ **resolvedSlots** — Una struttura le cui chiavi sono i nomi di ogni slot che viene risolto dall'enunciato. Ogni nome di slot corrisponde a una struttura contenente informazioni su quello slot. Vedi [Slot](lambda-common-structures.md#lambda-slot) per i dettagli sulla struttura.

# AWS Lambdaformato di risposta per Lex V2
<a name="lambda-response-format"></a>

Il secondo passaggio per integrare una funzione Lambda nel tuo bot Amazon Lex V2 consiste nel comprendere i campi nella risposta della funzione Lambda e determinare quali parametri desideri manipolare. Il seguente oggetto JSON mostra il formato generale di una risposta Lambda restituita ad Amazon Lex V2:

```
{
    "sessionState": {
        // see Stato della sessione for details about the structure
    },
    "messages": [
        {
            "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML",
            "content": string,
            "imageResponseCard": {
                "title": string,
                "subtitle": string,
                "imageUrl": string,
                "buttons": [
                    {
                        "text": string,
                        "value": string
                    },
                    ...
                ]
            }
        },
        ...
    ],
    "requestAttributes": {
        string: string,
        ...
    }
}
```

Ogni campo della risposta è descritto di seguito:

## sessionState
<a name="lambda-response-sessionstate"></a>

Lo stato della conversazione tra l'utente e il bot Amazon Lex V2 che desideri restituire. [Stato della sessione](lambda-common-structures.md#lambda-session-state)Per ulteriori dettagli sulla struttura, consulta. Questo campo è sempre obbligatorio.

## messages
<a name="lambda-response-messages"></a>

Un elenco di messaggi che Amazon Lex V2 restituisce al cliente per la fase successiva della conversazione. Se il messaggio `contentType` che fornisci è `PlainText``CustomPayload`, o`SSML`, scrivi il messaggio che desideri restituire al cliente nel `content` campo. Se `contentType` lo fornisci`ImageResponseCard`, inserisci i dettagli della carta nel `imageResponseCard` campo. Se non fornisci messaggi, Amazon Lex V2 utilizza il messaggio appropriato definito al momento della creazione del bot.

Il `messages` campo è obbligatorio se `dialogAction.type` è `ElicitIntent` o`ConfirmIntent`.

Ogni elemento dell'elenco è una struttura nel formato seguente, contenente informazioni su un messaggio da restituire all'utente. Ecco un esempio:

```
{
    "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML",
    "content": string,
    "imageResponseCard": {
        "title": string,
        "subtitle": string,
        "imageUrl": string,
        "buttons": [
            {
                "text": string,
                "value": string
            },
            ...
        ]
    }
}
```

Di seguito viene fornita una descrizione per ogni campo:
+ **contentType**: il tipo di messaggio da utilizzare.

  `CustomPayload`— Una stringa di risposta che è possibile personalizzare per includere dati o metadati per l'applicazione.

  `ImageResponseCard`— Un'immagine con pulsanti selezionabili dal cliente. Per ulteriori informazioni, consulta [ImageResponseCard](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_ImageResponseCard.html).

  `PlainText`— Una stringa di testo semplice.

  `SSML`— Una stringa che include Speech Synthesis Markup Language per personalizzare la risposta audio.
+ **content** — Il messaggio da inviare all'utente. Utilizza questo campo se il tipo di messaggio è `PlainText``CustomPayload`, o`SSML`.
+ **imageResponseCard**— Contiene la definizione della scheda di risposta da mostrare all'utente. Utilizza questo campo se il tipo di messaggio è`ImageResponseCard`. Esegue il mapping su una struttura contenente i seguenti campi:
  + **title**: il titolo della scheda di risposta.
  + **sottotitolo**: la richiesta all'utente di scegliere un pulsante.
  + **ImageURL** — Un collegamento a un'immagine per la scheda.
  + **buttons** — Un elenco di strutture contenenti informazioni su un pulsante. Ogni struttura contiene un `text` campo con il testo da visualizzare e un `value` campo con il valore da inviare ad Amazon Lex V2 se il cliente seleziona quel pulsante. Puoi includere fino a tre pulsanti.

## requestAttributes
<a name="lambda-response-requestattributes"></a>

Una struttura contenente gli attributi specifici della richiesta per la risposta al cliente. Per ulteriori informazioni, consulta [Impostazione degli attributi di richiesta per il tuo bot Lex V2](context-mgmt-request-attribs.md). Questo campo è facoltativo.

## Campi obbligatori nella risposta
<a name="lambda-response-required"></a>

Come minimo, la risposta Lambda deve includere `sessionState` un oggetto. All'interno di ciò, fornisci un `dialogAction` oggetto e specifica il `type` campo. A seconda `type` di `dialogAction` quello fornito, potrebbero esserci altri campi obbligatori per la risposta Lambda. Questi requisiti sono descritti di seguito, insieme a esempi di funzionamento minimi:

### Delegato
<a name="lambda-response-delegate"></a>

**Delegate** consente ad Amazon Lex V2 di determinare il passaggio successivo. Non sono richiesti altri campi.

```
{
    "sessionState": {
        "dialogAction": {
            "type": "Delegate"
    }
}
```

### ElicitIntent
<a name="lambda-response-elicitintent"></a>

**ElicitIntent**richiede al cliente di esprimere un'intenzione. È necessario includere almeno un messaggio nel `messages` campo per sollecitare l'individuazione di un intento.

```
{
    "sessionState": {
        "dialogAction": {
            "type": "ElicitIntent"
    },
    "messages": [
        {
            "contentType": PlainText,
            "content": "How can I help you?"
        }
    ]
}
```

### ElicitSlot
<a name="lambda-response-elicitslot"></a>

**ElicitSlot**richiede al cliente di fornire un valore di slot. È necessario includere il nome dello slot nel `slotToElicit` campo dell'oggetto. `dialogAction` È inoltre necessario includere il `name` di `intent` nell'`sessionState`oggetto.

```
{`
    "sessionState": {
        "dialogAction": {
            "slotToElicit": "OriginCity",
            "type": "ElicitSlot"
        },
        "intent": {
            "name": "BookFlight"
        }
    }
}
```

### ConfirmIntent
<a name="lambda-response-confirmintent"></a>

**ConfirmIntent**conferma i valori degli slot del cliente e se l'intento è pronto per essere soddisfatto. È necessario includere il `name` di `intent` nell'`sessionState`oggetto e il codice `slots` da confermare. È inoltre necessario includere almeno un messaggio nel `messages` campo per chiedere all'utente la conferma dei valori dello slot. Il messaggio dovrebbe richiedere una risposta «sì» o «no». Se l'utente risponde «sì», Amazon Lex V2 imposta l'`confirmationState`intento su. `Confirmed` Se l'utente risponde «no», Amazon Lex V2 imposta l'`confirmationState`intento su. `Denied`

```
{
    "sessionState": {
        "dialogAction": {
            "type": "ConfirmIntent"
        },
        "intent": {
            "name": "BookFlight",
            "slots": {
                "DepartureDate": {
                    "value": {
                        "originalValue": "tomorrow",
                        "interpretedValue": "2023-05-09",
                        "resolvedValues": [
                            "2023-05-09"
                    ]
                 }
                },
                "DestinationCity": {
                    "value": {
                        "originalValue": "sf",
                        "interpretedValue": "sf",
                        "resolvedValues": [
                            "sf"
                        ]
                    }
                },
                "OriginCity": {
                    "value": {
                        "originalValue": "nyc",
                        "interpretedValue": "nyc",
                        "resolvedValues": [
                            "nyc"
                        ]
                    }
                }
            }
        }
    },
    "messages": [
        {
            "contentType": PlainText,
            "content": "Okay, you want to fly from {OriginCity} to \
            {DestinationCity} on {DepartureDate}. Is that correct?"
        }
    ]
}
```

### Chiudi
<a name="lambda-response-close"></a>

**Close** termina il processo di adempimento dell'intento e indica che non sono previste ulteriori risposte da parte dell'utente. È necessario includere la `name` e `state` del `intent` nell'oggetto. `sessionState` Gli stati di intento compatibili sono `Failed``Fulfilled`, e`InProgress`.

```
"sessionState": {
    "dialogAction": {
        "type": "Close"
    },
    "intent": {
        "name": "BookFlight",
        "state": "Failed | Fulfilled | InProgress"
    }
}
```

# Strutture comuni in una AWS Lambda funzione per Amazon Lex V2
<a name="lambda-common-structures"></a>

All'interno della risposta Lambda, ci sono diverse strutture che si ripetono. I dettagli su queste strutture comuni sono forniti in questa sezione.

## Intento
<a name="lambda-intent"></a>

```
"intent": {
    "confirmationState": "Confirmed | Denied | None",
    "name": string,
    "slots": {
        // see Slot for details about the structure
    },
    "state": "Failed | Fulfilled | FulfillmentInProgress | InProgress | ReadyForFulfillment | Waiting",
    "kendraResponse": {
        // Only present when intent is KendraSearchIntent. For details, see
// https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax       }
}
```

Il `intent` campo è mappato su un oggetto con i seguenti campi:

### Stato di conferma
<a name="lambda-intent-confirmationstate"></a>

Indica se l'utente ha confermato gli slot per l'intento e l'intento è pronto per l'adempimento. I valori possibili sono i seguenti:

`Confirmed`— L'utente conferma che i valori degli slot sono corretti.

`Denied`— L'utente indica che i valori dello slot non sono corretti.

`None`— L'utente non ha ancora raggiunto la fase di conferma.

### nome
<a name="lambda-intent-name"></a>

Il nome dell'intento.

### slots
<a name="lambda-intent-slots"></a>

Informazioni sugli slot necessari per soddisfare l'intento. Vedi [Slot](#lambda-slot) per i dettagli sulla struttura.

### stato
<a name="lambda-intent-state"></a>

Indica lo stato di adempimento dell'intento. I valori possibili sono i seguenti:

`Failed`— Il bot non è riuscito a soddisfare l'intento.

`Fulfilled`— Il bot ha completato l'adempimento dell'intento.

`FulfillmentInProgress`— Il bot è nel bel mezzo del raggiungimento dell'intento.

`InProgress`— Il bot sta cercando di ottenere i valori dello slot necessari per soddisfare l'intento.

`ReadyForFulfillment`— Il bot ha ottenuto tutti i valori dello slot per l'intento ed è pronto a soddisfare l'intento.

`Waiting`— Il bot è in attesa di una risposta dall'utente (limitata alle conversazioni in streaming).

### kendraResponse
<a name="lambda-intent-kendraresponse"></a>

Contiene informazioni sui risultati della query di ricerca di Kendra. Questo campo viene visualizzato solo se l'intento è un. `KendraSearchIntent` Per ulteriori informazioni, consulta [la sintassi della risposta nella chiamata all'API Query per Kendra](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax).

## Slot
<a name="lambda-slot"></a>

Il `slots` campo esiste all'interno di una `intent` struttura ed è mappato su una struttura le cui chiavi sono i nomi degli slot relativi a tale scopo. Se lo slot non è uno slot multivalore (vedi [Utilizzo di più valori in uno slot](multi-valued-slots.md) per maggiori dettagli), viene mappato su una struttura con il seguente formato. Nota che lo è. `shape` `Scalar`

```
{
    slot name: {
        "shape": "Scalar",
        "value": {
            "originalValue": string,
            "interpretedValue": string,
            "resolvedValues": [
                string,
                ...
            ]
        }
    }
}
```

Se lo slot è uno slot multivalore, l'oggetto a cui è mappato contiene un altro campo chiamato`values`, che è mappato su un elenco di strutture, ciascuna contenente informazioni su uno slot che costituisce lo slot multivalore. Il formato di ogni oggetto nell'elenco corrisponde a quello dell'oggetto a cui è mappato uno slot normale. Nota che lo `shape` è`List`, ma lo `values` è `Scalar` lo slot `shape` dei componenti sottostanti.

```
{
    slot name: {
    "shape": "List",
    "value": {
        "originalValue": string,
        "interpretedValue": string,
        "resolvedValues": [
            string,
            ...
        ]
    },
    "values": [
        {
            "shape": "Scalar",
            "value": {
                "originalValue": string,
                "interpretedValue": string,
                "resolvedValues": [
                    string,
                    ...
                ]
            }
        },
        {
            "shape": "Scalar",
            "value": {
                "originalValue": string,
                "interpretedValue": string,
                "resolvedValues": [
                    string,
                    ...
                ]
            }
        },
        ...
    ]
}
```

I campi dell'oggetto slot sono descritti di seguito:

### shape
<a name="lambda-slots-shape"></a>

La forma dello slot. Questo valore è `List` se ci sono più valori nello slot (vedi [Utilizzo di più valori in uno slot](multi-valued-slots.md) per maggiori dettagli) e non lo `Scalar` è.

### value
<a name="lambda-slots-value"></a>

Un oggetto contenente informazioni sul valore fornito dall'utente per uno slot e sull'interpretazione di Amazon Lex V2, nel seguente formato:

```
{
    "originalValue": string,
    "interpretedValue": string,
    "resolvedValues": [
        string,
        ...
    ]
}
```

I campi sono descritti di seguito.
+ **OriginalValue**: la parte della risposta dell'utente all'elicitazione dello slot che Amazon Lex V2 determina è rilevante per il valore dello slot.
+ **InterpretedValue**: il valore che Amazon Lex V2 determina per lo slot, in base all'input dell'utente.
+ **ResolvedValues**: un elenco di valori che Amazon Lex V2 determina come possibili risoluzioni per l'input dell'utente.

### values
<a name="lambda-slots-values"></a>

Un elenco di oggetti contenente informazioni sugli slot che compongono lo slot multivalore. Il formato di ogni oggetto corrisponde a quello di uno slot normale, con i `value` campi `shape` e descritti sopra. `values`appare solo se lo slot è composto da più valori (vedi [Utilizzo di più valori in uno slot](multi-valued-slots.md) per maggiori dettagli). Il seguente oggetto JSON mostra due slot componenti:

```
"values": [
    {
        "shape": "Scalar",
        "value": {
            "originalValue": string,
            "interpretedValue": string,
            "resolvedValues": [
                string,
                ...
            ]
        }
    },
    {
        "shape": "Scalar",
        "value": {
            "originalValue": string,
            "interpretedValue": string,
            "resolvedValues": [
                string,
                ...
            ]
        }
    },
    ...
]
```

## Stato della sessione
<a name="lambda-session-state"></a>

Il `sessionState` campo è mappato su un oggetto contenente informazioni sullo stato della conversazione con l'utente. I campi effettivi che appaiono nell'oggetto dipendono dal tipo di azione di dialogo. Vedi [Campi obbligatori nella risposta](lambda-response-format.md#lambda-response-required) i campi obbligatori in una risposta Lambda. Il formato dell'`sessionState`oggetto è il seguente:

```
"sessionState": {
    "activeContexts": [
        {
            "name": string,
            "contextAttributes": {
                string: string
            },
            "timeToLive": {
                "timeToLiveInSeconds": number,
                "turnsToLive": number
            }
        },
        ...
    ],
    "sessionAttributes": {
        string: string,
        ...
    },
    "runtimeHints": {
        "slotHints": {
            intent name: {
                slot name: {
                    "runtimeHintValues": [
                        {
                            "phrase": string
                        },
                        ...
                    ]
                },
                ...
            },
            ...
        }
    },
    "dialogAction": {
        "slotElicitationStyle": "Default | SpellByLetter | SpellByWord",
        "slotToElicit": string,
        "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
    },
    "intent": {
        // see Intento for details about the structure
    },
    "originatingRequestId": string
}
```

I campi sono descritti di seguito.

### Contesti attivi
<a name="lambda-active-contexts"></a>

Un elenco di oggetti contenenti informazioni su un contesto utilizzato da un utente in una sessione. Utilizza i contesti per facilitare e controllare il riconoscimento degli intenti. Per ulteriori informazioni sui contesti, vedere. [Impostazione del contesto degli intenti per il tuo bot Lex V2](context-mgmt-active-context.md) Ogni oggetto è formattato come segue:

```
{
    "name": string,
    "contextAttributes": {
        string: string
    },
    "timeToLive": {
        "timeToLiveInSeconds": number,
        "turnsToLive": number
    }
}
```

I campi sono descritti di seguito.
+ **name** — Il nome del contesto.
+ **contextAttributes** — Un oggetto contenente i nomi degli attributi per il contesto e i valori a cui sono mappati.
+ **timeToLive**— Un oggetto che specifica per quanto tempo il contesto rimane attivo. Questo oggetto può contenere uno o entrambi i seguenti campi:
  + **timeToLiveInSeconds**— Il numero di secondi in cui il contesto rimane attivo.
  + **turnsToLive**— Il numero di turni in cui il contesto rimane attivo.

### sessionAttributes
<a name="lambda-session-attributes"></a>

Una mappa di key/value coppie che rappresentano informazioni di contesto specifiche della sessione. Per ulteriori informazioni, consulta [Impostazione degli attributi di sessione per il tuo bot Lex V2](context-mgmt-session-attribs.md). L'oggetto è formattato come segue:

```
{
    string: string,
    ...
}
```

### RuntimeHints
<a name="lambda-runtime-hints"></a>

Fornisce suggerimenti sulle frasi che un cliente probabilmente utilizzerà per uno slot per migliorare il riconoscimento audio. I valori forniti nei suggerimenti aumentano il riconoscimento audio di tali valori rispetto a parole dal suono simile. Il formato dell'`runtimeHints`oggetto è il seguente:

```
{
    "slotHints": {
        intent name: {
            slot name: {
                "runtimeHintValues": [
                    {
                        "phrase": string
                    },
                    ...
                ]
            },
            ...
        },
        ...
    }
}
```

Il `slotHints` campo è mappato su un oggetto i cui campi sono i nomi degli intenti nel bot. Ogni nome di intento è mappato a un oggetto i cui campi sono i nomi degli slot per quell'intento. Ogni nome di slot è mappato a una struttura con un singolo campo`runtimeHintValues`, che è un elenco di oggetti. Ogni oggetto contiene un `phrase` campo che corrisponde a un suggerimento.

### dialogAction
<a name="lambda-dialog-action"></a>

Determina l'azione successiva da intraprendere per Amazon Lex V2. Il formato dell'oggetto è il seguente:

```
{
    "slotElicitationStyle": "Default | SpellByLetter | SpellByWord",
    "slotToElicit": string,
    "type": "Close | ConfirmIntent | Delegate | ElicitIntent | ElicitSlot"
}
```

I campi sono descritti di seguito.
+  **slotElicitationStyle**— Determina il modo in cui Amazon Lex V2 interpreta l'input audio dell'utente, se l'`type`o è. `dialogAction` `ElicitSlot` Per ulteriori informazioni, consulta [Acquisizione dei valori degli slot con stili ortografici durante la conversazione](spelling-styles.md). I valori possibili sono i seguenti:

  `Default`— Amazon Lex V2 interpreta l'ingresso audio nel modo predefinito per soddisfare uno slot.

  `SpellByLetter`— Amazon Lex V2 ascolta l'ortografia del valore dello slot da parte dell'utente.

  `SpellByWord`— Amazon Lex V2 ascolta l'ortografia del valore dello slot da parte dell'utente utilizzando parole associate a ciascuna lettera (ad esempio, «a as in apple»).
+  **slotToElicit**— Definisce lo slot da richiedere all'utente se l'of è. `type` `dialogAction` `ElicitSlot` 
+ **tipo** — Definisce l'azione che il bot deve eseguire. I valori possibili sono i seguenti:

  `Delegate`— Consente ad Amazon Lex V2 di determinare il passaggio successivo.

  `ElicitIntent`— Richiede al cliente di esprimere un'intenzione.

  `ConfirmIntent`— Conferma i valori degli slot assegnati al cliente e se l'intento è pronto per l'adempimento.

  `ElicitSlot`— Richiede al cliente di fornire un valore di slot per un intento.

  `Close`— Termina il processo di adempimento degli intenti.

### intent
<a name="lambda-sessionstate-intent"></a>

Vedi [Intento](#lambda-intent) la struttura del campo. `intent`

### originatingRequestId
<a name="lambda-originating-request-id"></a>

Un identificatore univoco per la richiesta. Questo campo è facoltativo per la risposta Lambda.

# Creazione di una AWS Lambda funzione per il tuo bot Amazon Lex V2
<a name="lambda-attach"></a>

Per creare una funzione Lambda per il tuo bot Amazon Lex V2, accedi AWS Lambda dalla console di gestione AWS e crea una nuova funzione. Puoi fare riferimento alla [guida per AWS Lambda sviluppatori](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) per maggiori dettagli in merito. AWS Lambda

1. Accedi alla Console di gestione AWS e apri la AWS Lambda console all'indirizzo [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Scegli **Funzioni** nella barra laterale sinistra.

1. Seleziona **Crea funzione**.

1. Puoi selezionare **Author partendo da zero** per iniziare con un codice minimo, **Usa un blueprint** per selezionare da un elenco il codice di esempio per i casi d'uso più comuni o **Container image** per selezionare un'immagine del contenitore da distribuire per la tua funzione. Se selezioni **Autore da zero**, continua con i seguenti passaggi:

   1. Assegna alla funzione un **nome di funzione** significativo per descrivere cosa fa.

   1. Scegli una lingua dal menu a discesa sotto **Runtime** in cui scrivere la tua funzione.

   1. Seleziona un set di istruzioni **Architecture** per la tua funzione.

   1. Per impostazione predefinita, Lambda crea un ruolo con autorizzazioni di base. Per utilizzare un ruolo esistente o creare un ruolo utilizzando i modelli di policy AWS, espandi il menu **Change default execution role** e seleziona un'opzione.

   1. Espandi il menu **delle impostazioni avanzate** per configurare altre opzioni.

1. Seleziona **Crea funzione**.

L'immagine seguente mostra ciò che vedi quando crei una nuova funzione da zero:

![\[Una nuova funzione Lambda.\]](http://docs.aws.amazon.com/it_it/lexv2/latest/dg/images/lambda/lambda-new-function.png)


La funzione di gestione Lambda varia a seconda della lingua utilizzata. Accetta almeno un oggetto `event` JSON come argomento. Puoi visualizzare i campi forniti da Amazon Lex V2 all'indirizzo[AWS Lambdaformato degli eventi di input per Lex V2](lambda-input-format.md). `event` Modifica la funzione di gestione per restituire infine un oggetto `response` JSON che corrisponda al formato descritto in. [AWS Lambdaformato di risposta per Lex V2](lambda-response-format.md)
+ Una volta terminata la scrittura della funzione, selezionate **Deploy** per consentire l'utilizzo della funzione.

Ricorda che puoi associare ogni alias del bot al massimo a una funzione Lambda. Tuttavia, puoi definire tutte le funzioni necessarie per il tuo bot all'interno del codice Lambda e richiamare queste funzioni nella funzione di gestione Lambda. Ad esempio, mentre tutti gli intenti nello stesso alias bot devono chiamare la stessa funzione Lambda, puoi creare una funzione router che attivi una funzione separata per ogni intento. Di seguito è riportato un esempio di funzione router che potete utilizzare o modificare per la vostra applicazione:

```
import os
import json
import boto3

# reuse client connection as global
client = boto3.client('lambda')

def router(event):
    intent_name = event['sessionState']['intent']['name']
    fn_name = os.environ.get(intent_name)
    print(f"Intent: {intent_name} -> Lambda: {fn_name}")
    if (fn_name):
        # invoke lambda and return result
        invoke_response = client.invoke(FunctionName=fn_name, Payload = json.dumps(event))
        print(invoke_response)
        payload = json.load(invoke_response['Payload'])
        return payload
    raise Exception('No environment variable for intent: ' + intent_name)

def lambda_handler(event, context):
    print(event)
    response = router(event)
    return response
```

**Quando usare AWS Lambda le funzioni nelle conversazioni con i bot di Amazon Lex V2**

È possibile utilizzare le funzioni Lambda nei seguenti punti di una conversazione con un utente:
+ Nella risposta iniziale dopo il riconoscimento dell'intento. Ad esempio, dopo che l'utente ha dichiarato di voler ordinare una pizza.
+ Dopo aver ottenuto il valore di uno slot dall'utente. Ad esempio, dopo che l'utente ha detto al bot la dimensione della pizza che desidera ordinare.
+ Tra un tentativo e l'altro per ottenere uno slot. Ad esempio, se il cliente non utilizza una dimensione di pizza riconosciuta.
+ Quando si conferma un intento. Ad esempio, quando si conferma un ordine di pizza.
+ Per soddisfare un intento. Ad esempio, per ordinare una pizza.
+ Dopo il raggiungimento dell'intento e prima che il bot chiuda la conversazione. Ad esempio, per passare all'intenzione di ordinare un drink.

**Topics**
+ [Collega una AWS Lambda funzione a un bot Amazon Lex V2 utilizzando la console](lambda-attach-console.md)
+ [Collega una AWS Lambda funzione a un bot Amazon Lex V2 utilizzando le operazioni API](lambda-attach-api.md)

# Collega una AWS Lambda funzione a un bot Amazon Lex V2 utilizzando la console
<a name="lambda-attach-console"></a>

Devi prima collegare una funzione Lambda al tuo alias bot di Amazon Lex V2 prima di poterla richiamare. È possibile allegare una sola funzione Lambda a ciascun alias bot. Esegui questi passaggi per collegare la funzione Lambda utilizzando la console AWS. 

1. Accedi alla Console di gestione AWS e apri la console Amazon Lex all'indirizzo [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/).

1. Scegli **Bot** dal pannello laterale sinistro e dall'elenco dei bot, scegli il nome del bot a cui vuoi collegare una funzione Lambda.

1. **Dal pannello laterale sinistro, seleziona **Alias** nel menu Deployment.**

1. Dall'elenco degli alias, scegli il nome dell'alias a cui desideri associare una funzione Lambda.

1. Nel pannello **Lingue**, seleziona la lingua in cui desideri utilizzare una funzione Lambda. Seleziona **Gestisci le lingue nell'alias** per aggiungere una lingua se non è presente nel pannello.

1. Nel menu a discesa **Source**, scegli il nome della funzione Lambda che desideri allegare.

1. Nel menu a discesa **versione o alias della funzione Lambda**, scegli la versione o l'alias della funzione Lambda che desideri utilizzare. Quindi, seleziona **Salva**. La stessa funzione Lambda viene utilizzata a tutti gli effetti in un linguaggio supportato dal bot.

**Impostazione dell'intento di Amazon Lex V2 per richiamare una funzione Lambda utilizzando la console**

1. Dopo aver selezionato un bot, seleziona **Intents** nel menu a sinistra sotto la lingua del bot per cui desideri richiamare la funzione Lambda.

1. Scegliete l'intento in cui desiderate richiamare la funzione Lambda per aprire l'editor degli intenti.

1. Esistono due opzioni per impostare il code hook Lambda:

   1. Per richiamare la funzione Lambda dopo ogni fase della conversazione, scorri fino alla sezione **Code** hook nella parte inferiore dell'editor degli intenti e seleziona la casella di controllo **Usa una funzione Lambda per l'inizializzazione e** la convalida, come nell'immagine seguente:  
![\[La sezione code hook dell'editor di intenti di Amazon Lex V2.\]](http://docs.aws.amazon.com/it_it/lexv2/latest/dg/images/lambda/lambda-code-hooks-all.png)

   1. In alternativa, utilizzate la sezione **Dialog code hook** nelle fasi di conversazione in cui richiamare la funzione Lambda. La sezione **Dialog code hook** viene visualizzata come segue:  
![\[La sezione code hook dell'editor di intenti di Amazon Lex V2.\]](http://docs.aws.amazon.com/it_it/lexv2/latest/dg/images/lambda/lambda-code-hook-step.png)

      Esistono due modi per controllare il modo in cui Amazon Lex V2 chiama il code hook per una risposta:
      + *Attiva il pulsante **Attivo** per contrassegnarlo come *attivo o inattivo*.* Quando un code hook è *attivo*, Amazon Lex V2 lo richiamerà. Quando il code hook è *inattivo*, Amazon Lex V2 non lo esegue.
      + **Espandi la sezione **Lambda dialog code hook** e seleziona la casella di controllo **Invoke Lambda** function per contrassegnarla come abilitata o disabilitata.** Puoi abilitare o disabilitare un code hook solo quando è contrassegnato come attivo. Quando è contrassegnato come *abilitato*, il code hook viene eseguito normalmente. Quando è *disabilitato*, l'hook di codice non viene chiamato e Amazon Lex V2 agisce come se fosse stato restituito correttamente. **Per configurare le risposte dopo l'esito positivo, negativo o il timeout dell'hook di dialogo, seleziona Opzioni avanzate**

      L'hook di codice Lambda può essere richiamato nelle seguenti fasi di conversazione:
      + **Per richiamare la funzione come **risposta iniziale**, scorri fino alla sezione **Risposta iniziale**, espandi la freccia accanto a **Risposta per confermare la richiesta dell'utente** e seleziona Opzioni avanzate.** Trova la sezione **Dialog code hook** nella parte inferiore del menu che si apre.
      + **Per richiamare la funzione dopo l'attivazione **dello slot,** scorri fino alla sezione **Slot**, espandi la freccia accanto al relativo **prompt for slot** e seleziona Opzioni avanzate.** **Trova la sezione **Dialog code hook** nella parte inferiore del menu che appare, appena sopra i valori predefiniti.**

        Puoi anche richiamare la funzione dopo ogni elicitazione. A tale scopo, espandi **Bot elicits information** nella sezione **Slot prompt, seleziona **Altre opzioni di prompt** e seleziona la casella di controllo accanto a Invoke **Lambda** code hook dopo ogni** elicitazione.
      + **Per richiamare la funzione di conferma dell'**intento, scorri fino alla sezione **Conferma****, espandi la freccia accanto a Richieste per confermare l'intento e seleziona **Opzioni avanzate.**** Trova la sezione **Dialog code hook** nella parte inferiore del menu che si apre.
      + **Per richiamare la funzione per l'**adempimento degli intenti, scorri fino alla sezione Adempimento**.** *Attiva il pulsante **Attivo per attivare il code hook**.* **Espandi la freccia accanto a **In caso di evasione avvenuta con successo** e seleziona Opzioni avanzate.** *Seleziona la casella di controllo accanto a **Usa una funzione Lambda per l'adempimento nella sezione Fulfillment** **Lambda code hook per impostare l'hook di codice** su abilitato.*

1. Dopo aver impostato le fasi della conversazione in cui richiamare la funzione Lambda**,** crea nuovamente il bot per testare la funzione.

# Collega una AWS Lambda funzione a un bot Amazon Lex V2 utilizzando le operazioni API
<a name="lambda-attach-api"></a>

Devi prima collegare una funzione Lambda al tuo alias bot di Amazon Lex V2 prima di poterla richiamare. È possibile associare solo una funzione Lambda a ciascun alias bot. Esegui questi passaggi per collegare la funzione Lambda utilizzando le operazioni API. 

Se stai creando un nuovo alias bot, usa l'[CreateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBotAlias.html)operazione per allegare una funzione Lambda. Per collegare una funzione Lambda a un alias bot esistente, usa l'operazione. [UpdateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateBotAlias.html) Modifica il `botAliasLocaleSettings` campo in modo che contenga le impostazioni corrette:

```
{
    "botAliasLocaleSettings" : {
        locale: {
            "codeHookSpecification": {
                "lambdaCodeHook": {
                    "codeHookInterfaceVersion": "1.0",
                    "lambdaARN": "arn:aws:lambda:region:account-id:function:function-name"
                }
            },
            "enabled": true
        },
        ...
    }
}
```

1. Il `botAliasLocaleSettings` campo è mappato su un oggetto le cui chiavi sono le impostazioni locali in cui si desidera collegare la funzione Lambda. Consultate [Lingue e impostazioni locali supportate](how-languages.md#supported-languages) per un elenco delle impostazioni locali supportate e dei codici che costituiscono chiavi valide.

1. Per trovare la funzione `lambdaARN` for a Lambda, apri la AWS Lambda console nella [https://console.aws.amazon.com/lambda/home page](https://console.aws.amazon.com/lambda/home), seleziona **Funzioni** nella barra laterale sinistra e seleziona la funzione da associare all'alias bot. Sul lato destro della **panoramica delle funzioni**, trova la `lambdaARN` sezione **Funzione ARN**. Dovrebbe contenere una regione, un ID account e il nome della funzione.

1. Per consentire ad Amazon Lex V2 di richiamare la funzione Lambda per l'alias, imposta il campo su. `enabled` `true`

**Impostazione di un intento di Amazon Lex V2 per richiamare una funzione Lambda utilizzando operazioni API**

Per impostare la chiamata della funzione Lambda durante un intento, usa l'[CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)operazione se stai creando un nuovo intento o l'[UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html)operazione se stai invocando la funzione in un intento esistente. I campi che controllano l'invocazione della funzione Lambda nelle operazioni intent sono`dialogCodeHook`,, e. `initialResponseSetting` `intentConfirmationSetting` `fulfillmentCodeHook`

Se richiamate la funzione durante l'elicitazione di uno slot, utilizzate l'[CreateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html)operazione se state creando un nuovo slot o l'[UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html)operazione per richiamare la funzione in uno slot esistente. Il campo che controlla l'invocazione della funzione Lambda nelle operazioni dello slot è l'`slotCaptureSetting`oggetto. `valueElicitationSetting`

1. Per impostare l'hook del codice di dialogo Lambda in modo che venga eseguito dopo ogni turno della conversazione, imposta il `enabled` campo del seguente [DialogCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogCodeHookSettings.html)oggetto nel `dialogCodeHook` campo su: `true`

   ```
   "dialogCodeHook": {
       "enabled": boolean
   }
   ```

1. In alternativa, puoi impostare l'hook di dialogo Lambda in modo che venga eseguito solo in punti specifici delle conversazioni modificando il `codeHook` and/or `elicitationCodeHook` campo all'interno delle strutture che corrispondono alle fasi della conversazione in cui desideri richiamare la funzione. Per utilizzare l'hook di codici di dialogo Lambda per l'adempimento degli intenti, usa il `fulfillmentCodeHook` campo nell'operazione or. [CreateIntent[UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) Le strutture e gli usi di questi tre tipi di code hook sono i seguenti:

## CodeHook
<a name="lambda-code-hook"></a>

Il `codeHook` campo definisce le impostazioni per l'esecuzione del code hook in una determinata fase della conversazione. È un [DialogCodeHookInvocationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogCodeHookInvocationSetting.html)oggetto con la seguente struttura:

```
"codeHook": {
    "active": boolean,
    "enableCodeHookInvocation": boolean,
    "invocationLabel": string,
    "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
}
```
+ Cambia il `active` campo in modo `true` che Amazon Lex V2 richiami il code hook in quel momento della conversazione.
+ Cambia il `enableCodeHookInvocation` campo in `true` Amazon Lex V2 per consentire al code hook di funzionare normalmente. Se lo contrassegni`false`, Amazon Lex V2 si comporta come se il code hook fosse stato restituito correttamente.
+ `invocationLabel`Indica la fase di dialogo da cui viene richiamato l'hook di codice.
+ Utilizzate il `postCodeHookSpecification` campo per specificare le azioni e i messaggi che si verificano dopo il successo, l'errore o il timeout del code hook.

## elicitationCodeHook
<a name="lambda-elicitation-code-hook"></a>

Il `elicitationCodeHook` campo definisce le impostazioni per l'esecuzione del code hook nel caso in cui sia necessario richiamare nuovamente uno slot o più slot. Questo scenario può verificarsi se l'elicitazione degli slot fallisce o la conferma dell'intento viene negata. Il `elicitationCodeHook` campo è un [ElicitationCodeHookInvocationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ElicitationCodeHookInvocationSetting.html)oggetto con la seguente struttura:

```
"elicitationCodeHook": {
    "enableCodeHookInvocation": boolean,
    "invocationLabel": string
}
```
+ Cambia il `enableCodeHookInvocation` campo in `true` Amazon Lex V2 per consentire al code hook di funzionare normalmente. Se lo contrassegni`false`, Amazon Lex V2 si comporta come se il code hook fosse stato restituito correttamente.
+ `invocationLabel`Indica la fase di dialogo da cui viene richiamato l'hook di codice.

## fulfillmentCodeHook
<a name="lambda-fulfillment-code-hook"></a>

Il `fulfillmentCodeHook` campo definisce le impostazioni per l'esecuzione del code hook per soddisfare l'intento. È mappato al seguente [FulfillmentCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentCodeHookSettings.html)oggetto:

```
"fulfillmentCodeHook": {
    "active": boolean,
    "enabled": boolean,
    "fulfillmentUpdatesSpecification": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "postFulfillmentStatusSpecification": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html)
}
```
+ Cambia il `active` campo in modo `true` che Amazon Lex V2 richiami il code hook in quel momento della conversazione.
+ Cambia il `enabled` campo in `true` Amazon Lex V2 per consentire al code hook di funzionare normalmente. Se lo contrassegni`false`, Amazon Lex V2 si comporta come se il code hook fosse stato restituito correttamente.
+ Utilizza il `fulfillmentUpdatesSpecification` campo per specificare i messaggi che appaiono per aggiornare l'utente durante l'adempimento dell'intento e la tempistica ad essi associata.
+ Utilizzate il `postFulfillmentStatusSpecification` campo per specificare i messaggi e le azioni che si verificano dopo il successo, l'errore o il timeout del codehook.

Puoi richiamare il code hook Lambda nei seguenti punti di una conversazione impostando `active` i campi `enableCodeHookInvocation` e`enabled`/su: `true`

## Durante la risposta iniziale
<a name="lambda-hook-initial-response"></a>

Per richiamare la funzione Lambda nella risposta iniziale dopo il riconoscimento dell'intento, utilizzate `codeHook` la struttura nel campo `initialResponse` dell'[CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)operazione or. [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html) Il `initialResponse` campo è mappato al seguente oggetto: [InitialResponseSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_InitialResponseSetting.html)

```
"initialResponse": {
    "codeHook": {
        "active": boolean,
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string,
        "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
    },
    "initialResponse": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "nextStep": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html),
    "conditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html)
}
```

## Dopo l'elicitazione dello slot o durante la rielicitazione dello slot
<a name="lambda-hook-elicit-slot"></a>

Per richiamare la funzione Lambda dopo aver ottenuto un valore di slot, utilizzate `slotCaptureSetting` il campo all'interno del campo `valueElicitation` dell'[CreateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateSlot.html)operazione or. [UpdateSlot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateSlot.html) Il `slotCaptureSetting` campo è mappato al seguente oggetto: [SlotCaptureSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_SlotCaptureSetting.html)

```
"slotCaptureSetting": {
    "captureConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "captureNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "captureResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ResponseSpecification.html),
    "codeHook": {
        "active": true,
        "enableCodeHookInvocation": true,
        "invocationLabel": string,
        "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
    },
    "elicitationCodeHook": {
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string
    },
    "failureConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "failureNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "failureResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ResponseSpecification.html)
}
```
+ Per richiamare la funzione Lambda dopo che l'elicitazione dello slot ha avuto esito positivo, utilizzate il campo. `codeHook`
+ Per richiamare la funzione Lambda dopo che l'elicitazione dello slot fallisce e Amazon Lex V2 tenta di riprovare l'elicitazione dello slot, usa il campo. `elicitationCodeHook`

## Dopo la conferma o il rifiuto dell'intenzione
<a name="lambda-hook-confirm-intent"></a>

Per richiamare la funzione Lambda quando si conferma un intento, utilizzare `intentConfirmationSetting` il campo dell'operazione or. [CreateIntent[UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html) Il `intentConfirmation` campo è mappato al seguente oggetto: [IntentConfirmationSetting](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_IntentConfirmationSetting.html)

```
"intentConfirmationSetting": {
    "active": boolean,
    "codeHook": {
        "active": boolean,
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string,
        "postCodeHookSpecification": [PostDialogCodeHookInvocationSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostDialogCodeHookInvocationSpecification.html),
    },
    "confirmationConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "confirmationNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "confirmationResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialResponseSpecificationogState.html),
    "declinationConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "declinationNextStep": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "declinationResponse": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html),
    "elicitationCodeHook": {
        "enableCodeHookInvocation": boolean,
        "invocationLabel": string,
    },
    "failureConditional": [ConditionalSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ConditionalSpecification.html),
    "failureNextStep": [DialogState object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DialogState.html),
    "failureResponse": [ResponseSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ResponseSpecification.html),
    "promptSpecification": [PromptSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PromptSpecification.html)
}
```
+ Per richiamare la funzione Lambda dopo che l'utente ha confermato l'intento e i relativi slot, usa il campo. `codeHook`
+ Per richiamare la funzione Lambda dopo che l'utente ha negato la conferma dell'intento e Amazon Lex V2 ha tentato di ripetere l'elicitazione dello slot, usa il campo. `elicitationCodeHook`

## Durante l'adempimento dell'intento
<a name="lambda-hook-fulfill-intent"></a>

Per richiamare la funzione Lambda per soddisfare un intento, usa `fulfillmentCodeHook` il campo nell'[CreateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateIntent.html)operazione or. [UpdateIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateIntent.html) Il `fulfillmentCodeHook` campo è mappato al seguente oggetto: [FulfillmentCodeHookSettings](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentCodeHookSettings.html)

```
{
    "active": boolean,
    "enabled": boolean,
    "fulfillmentUpdatesSpecification": [FulfillmentUpdatesSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_FulfillmentUpdatesSpecification.html),
    "postFulfillmentStatusSpecification": [PostFulfillmentStatusSpecification object](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_PostFulfillmentStatusSpecification.html)
}
```

3. Una volta impostate le fasi della conversazione in cui richiamare la funzione Lambda, utilizzate `BuildBotLocale` l'operazione per ricostruire il bot per testare la funzione.

# Eseguire il debug di una funzione Lambda utilizzando i log di Logs CloudWatch
<a name="lambda-debug"></a>

[Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) è uno strumento per tracciare le chiamate e i parametri delle API che puoi utilizzare per eseguire il debug delle funzioni Lambda. Quando esegui il test del bot nella console o con chiamate API, CloudWatch registra ogni fase della conversazione. Se usi una funzione di stampa nel tuo codice Lambda, la CloudWatch visualizza anche.

**Per visualizzare CloudWatch i log della funzione Lambda**

1. Accedi alla Console di gestione AWS e apri la CloudWatch console all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Nel menu **Logs** nella barra laterale sinistra, seleziona **Gruppi di log**.

1. Seleziona il gruppo di log delle funzioni Lambda, che dovrebbe avere il formato. `/aws/lambda/function-name`

1. L'elenco dei **flussi di log** contiene un registro per ogni sessione con un bot. Scegli un flusso di log per visualizzarlo.

1. Nell'elenco degli **eventi di registro**, seleziona la freccia destra accanto al **timestamp** per espandere i dettagli dell'evento. Tutto ciò che stampi dal codice Lambda verrà visualizzato come evento di registro. Usa queste informazioni per eseguire il debug del codice.

1. Dopo aver eseguito il debug del codice, ricordati di **implementare** la funzione Lambda e, se stai usando la console, di ricaricare la finestra **Test prima di testare** nuovamente il comportamento del bot.