

Aviso de fin de soporte: el 15 de septiembre de 2025, AWS dejaremos de ofrecer soporte para Amazon Lex V1. Después del 15 de septiembre de 2025, ya no podrá acceder a la consola de Amazon Lex V1 ni a los recursos de Amazon Lex V1. Si utiliza Amazon Lex V2, consulte en su lugar la [guía Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html). 

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ejercicio 3: adición de una función de Lambda (AWS CLI)
<a name="gs-cli-update-lambda"></a>

Agregue al bot una función de Lambda que valide las entradas del usuario y cumpla la intención del usuario.

El proceso de agregar una expresión de Lambda consta de cinco pasos.

1. [Utilice la [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)función Lambda para activar la `OrderFlowers` intención de llamar a la operación Lambda Invoke.](https://docs.aws.amazon.com/lambda/latest/dg/lambda-api-permissions-ref.html)

1. Utilice la operación [GetIntent](API_GetIntent.md) para obtener la intención de Amazon Lex.

1. Actualice la intención para agregar la función de Lambda.

1. Use la operación [PutIntent](API_PutIntent.md) para enviar la intención actualizada de vuelta a Amazon Lex.

1. Use las operaciones [GetBot](API_GetBot.md) y [PutBot](API_PutBot.md) para volver a compilar los bots que usen la intención.

Para ejecutar los comandos de este ejercicio, debe conocer la región donde se ejecutarán los comandos. Para obtener una lista de regiones, consulte [Cuotas de creación de modelos](gl-limits.md#gl-limits-model-building).

Si agrega una función de Lambda a una intención antes de agregar el permiso `InvokeFunction`, obtendrá el siguiente mensaje de error:

```
            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 respuesta de la operación `GetIntent` contiene un campo llamado `checksum` que identifica una revisión específica de la intención. Cuando se usa la operación [PutIntent](API_PutIntent.md) para actualizar una intención, debe proporcionar el valor de la suma de comprobación. Si no, recibirá el siguiente mensaje de error:

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

En este ejercicio se utiliza la función de Lambda desde [Ejercicio 1: creación de un bot de Amazon Lex mediante un esquema (consola)](gs-bp.md). Para obtener instrucciones para crear la función de Lambda, consulte [Paso 3: creación de una función de Lambda (consola)](gs-bp-create-lambda-function.md).

**nota**  
El siguiente AWS CLI ejemplo está formateado para Unix, Linux y macOS. Para Windows, cambie `"\$LATEST"` por `$LATEST`.

**Adición de una función de Lambda a una intención**

1. En el AWS CLI, agrega el `InvokeFunction` permiso para la `OrderFlowers` intención:

   ```
   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 envía la siguiente respuesta:

   ```
   {
       "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. Obtenga la intención de Amazon Lex. Amazon Lex envía el resultado a un archivo llamado **OrderFlowers-V3.json**.

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

1. Abra **OrderFlowers-V3.json** en un editor de texto.

   1. Busque y elimine los campos `createdDate`, `lastUpdatedDate` y `version`.

   1. Actualice el campo `fulfillmentActivity`:

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

   1. Guarde el archivo.

1. En el AWS CLI, envíe la intención actualizada a Amazon Lex:

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

Ahora que ha actualizado la intención, recompile el bot. 

**Para recompilar el bot `OrderFlowersBot`**

1. En el AWS CLI, obtén la definición del `OrderFlowersBot` bot y guárdala en un archivo:

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

1. En un editor de texto, abra **OrderFlowersBot-V3.json**. Elimine los campos `createdDate`, `lastUpdatedDate`, `status` y `version`.

1. En el editor de texto, añada la siguiente línea a la definición del bot:

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

1. En el AWS CLI, crea una nueva revisión del bot:

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

   La respuesta del servidor es:

## Paso siguiente
<a name="gs-cli-next-exercise-4"></a>

[Ejercicio 4: Publicar una versión (AWS CLI)](gs-cli-publish.md)