

Avviso di fine del supporto: il 15 settembre 2025 AWS interromperà il supporto per Amazon Lex V1. Dopo il 15 settembre 2025, non potrai più accedere alla console di Amazon Lex V1 o alle risorse di Amazon Lex V1. Se utilizzi Amazon Lex V2, consulta invece la [guida Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html). 

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

# Esercizio 3: Aggiungere una funzione Lambda ()AWS CLI
<a name="gs-cli-update-lambda"></a>

Aggiungi una funzione Lambda che convalida l'input dell'utente e soddisfa l'intento dell'utente nei confronti del bot.

L'aggiunta di un'espressione Lambda è un processo in cinque fasi.

1. [Utilizzate la [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)funzione Lambda per abilitare l'`OrderFlowers`intento di chiamare l'operazione Lambda Invoke.](https://docs.aws.amazon.com/lambda/latest/dg/lambda-api-permissions-ref.html)

1. Usa l'[GetIntent](API_GetIntent.md)operazione per ottenere l'intento da Amazon Lex.

1. Aggiorna l'intento di aggiungere la funzione Lambda.

1. Utilizza l'[PutIntent](API_PutIntent.md)operazione per inviare l'intento aggiornato ad Amazon Lex.

1. Usa le operazioni [GetBot](API_GetBot.md) e [PutBot](API_PutBot.md) per ricreare qualsiasi bot che utilizza l'intento.

Per eseguire i comandi di questo esercizio, devi conoscere la regione in cui verranno eseguiti i comandi. Per l'elenco delle regioni, consulta [Quote per la creazione di modelli](gl-limits.md#gl-limits-model-building).

Se si aggiunge una funzione Lambda a un intento prima di aggiungere l'`InvokeFunction`autorizzazione, viene visualizzato il seguente messaggio di errore:

```
            An error occurred (BadRequestException) when calling the 
            PutIntent operation: Lex is unable to access the Lambda 
            function {{Lambda function ARN}} in the context of intent 
            {{intent ARN}}.  Please check the resource-based policy on 
            the function.
```

La risposta dell'operazione `GetIntent` contiene un campo denominato `checksum` che identifica una specifica revisione dell'intento. È necessario fornire il valore checksum quando si utilizza l'operazione [PutIntent](API_PutIntent.md) per aggiornare un intento. In caso contrario, verrà visualizzato il messaggio di errore seguente:

```
            An error occurred (PreconditionFailedException) when calling 
            the PutIntent operation: Intent {{intent name}} already exists. 
            If you are trying to update {{intent name}} you must specify the 
            checksum.
```

Questo esercizio utilizza la funzione Lambda di. [Esercizio 1: Creare un bot Amazon Lex utilizzando un blueprint (console)](gs-bp.md) Per istruzioni su come creare la funzione Lambda, vedere. [Fase 3: Creare una funzione Lambda (console)](gs-bp-create-lambda-function.md)

**Nota**  
L' AWS CLI esempio seguente è formattato per Unix, Linux e macOS. Per Windows, modifica `"\$LATEST"` in `$LATEST`.

**Per aggiungere una funzione Lambda a un intento**

1. In AWS CLI, aggiungi l'`InvokeFunction`autorizzazione per l'`OrderFlowers`intento:

   ```
   aws lambda add-permission \
       --region {{region}} \
       --function-name OrderFlowersCodeHook \
       --statement-id LexGettingStarted-OrderFlowersBot \
       --action lambda:InvokeFunction \
       --principal lex.amazonaws.com \
       --source-arn "arn:aws:lex:{{region}}:{{account ID}}:intent:OrderFlowers:*"
       --source-account {{account ID}}
   ```

   Lambda invia la seguente risposta:

   ```
   {
       "Statement": "{\"Sid\":\"LexGettingStarted-OrderFlowersBot\",
         \"Resource\":\"arn:aws:lambda:{{region}}:{{account ID}}:function:OrderFlowersCodeHook\",
         \"Effect\":\"Allow\",
         \"Principal\":{\"Service\":\"lex.amazonaws.com\"},
         \"Action\":[\"lambda:InvokeFunction\"],
         \"Condition\":{\"StringEquals\":
           {\"AWS:SourceAccount\": \"{{account ID}}\"},
           {\"AWS:SourceArn\":
             \"arn:aws:lex:{{region}}:{{account ID}}:intent:OrderFlowers:*\"}}}"
   }
   ```

1. Ottieni l'intento da Amazon Lex. Amazon Lex invia l'output a un file chiamato**OrderFlowers-V3.json**.

   ```
   aws lex-models get-intent \
       --region {{region}} \
       --name OrderFlowers \
       --intent-version "\$LATEST" > OrderFlowers-V3.json
   ```

1. In un editor di testo aprire il file **OrderFlowers-V3.json**.

   1. Individua e cancella i campi `createdDate`, `lastUpdatedDate` e `version`.

   1. Aggiorna il campo `fulfillmentActivity`:

      ```
          "fulfillmentActivity": {
              "type": "CodeHook",
              "codeHook": {
                  "uri": "arn:aws:lambda:{{region}}:{{account ID}}:function:OrderFlowersCodeHook",
                  "messageVersion": "1.0"
              }
          }
      ```

   1. Salvare il file.

1. Nel AWS CLI, invia l'intento aggiornato ad Amazon Lex:

   ```
   aws lex-models put-intent \
       --region {{region}} \
       --name OrderFlowers \
       --cli-input-json file://OrderFlowers-V3.json
   ```

Ora che l'intento è stato aggiornato, ricrea il bot. 

**Per ricreare il bot `OrderFlowersBot`**

1. In AWS CLI, ottieni la definizione del `OrderFlowersBot` bot e salvala in un file:

   ```
   aws lex-models get-bot \
       --region {{region}} \
       --name OrderFlowersBot \
       --version-or-alias "\$LATEST" > OrderFlowersBot-V3.json
   ```

1. In un editor di testo, apri **OrderFlowersBot-V3.json**. Rimuovi i campi `createdDate`, `lastUpdatedDate`, `status` e `version`.

1. Nell'editor di testo, aggiungi la seguente riga alla definizione del bot:

   ```
   "processBehavior": "BUILD",
   ```

1. In AWS CLI, crea una nuova revisione del bot:

   ```
   aws lex-models put-bot \
       --region {{region}} \
       --name OrderFlowersBot \
       --cli-input-json file://OrderFlowersBot-V3.json
   ```

   La risposta del server è:

## Fase succcessiva
<a name="gs-cli-next-exercise-4"></a>

[Esercizio 4. Pubblicazione di una versione (AWS CLI)](gs-cli-publish.md)