Ejercicio 3: adición de una función de Lambda (AWS CLI) - Amazon Lex V1

Si utiliza Amazon Lex V2, consulte la guía de Amazon Lex V2.

 

Si utiliza Amazon Lex V1, le recomendamos que actualice los bots a Amazon Lex V2. Hemos dejado de agregar nuevas características a V1, por lo que recomendamos encarecidamente utilizar V2 para todos los nuevos bots.

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)

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 función de Lambda AddPermission para permitir que la intención OrderFlowers llame a la operación Invoke de Lambda.

  2. Utilice la operación GetIntent para obtener la intención de Amazon Lex.

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

  4. Use la operación PutIntent para enviar la intención actualizada de vuelta a Amazon Lex.

  5. Use las operaciones GetBot y PutBot 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 .

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 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). Para obtener instrucciones para crear la función de Lambda, consulte Paso 3: creación de una función de Lambda (consola).

nota

El ejemplo de AWS CLI siguiente tiene formato 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 la AWS CLI, añada el permiso InvokeFunction a la intención OrderFlowers:

    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:*\"}}}"
    }
  2. 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
  3. Abra OrderFlowers-V3.json en un editor de texto.

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

    2. Actualice el campo fulfillmentActivity:

      "fulfillmentActivity": { "type": "CodeHook", "codeHook": { "uri": "arn:aws:lambda:region:account ID:function:OrderFlowersCodeHook", "messageVersion": "1.0" } }
    3. Guarde el archivo.

  4. En la 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 la AWS CLI, obtenga la definición del bot OrderFlowersBot y guárdela en un archivo:

    aws lex-models get-bot \ --region region \ --name OrderFlowersBot \ --version-or-alias "\$LATEST" > OrderFlowersBot-V3.json
  2. En un editor de texto, abra OrderFlowersBot-V3.json. Elimine los campos createdDate, lastUpdatedDate, status y version.

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

    "processBehavior": "BUILD",
  4. En la AWS CLI, cree 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:

    {
        "status": "READY", 
        "intents": [
            {
                "intentVersion": "$LATEST", 
                "intentName": "OrderFlowers"
            }
        ], 
        "name": "OrderFlowersBot", 
        "locale": "en-US", 
        "checksum": "checksum", 
        "abortStatement": {
            "messages": [
                {
                    "content": "Sorry, I'm not able to assist at this time", 
                    "contentType": "PlainText"
                }
            ]
        }, 
        "version": "$LATEST", 
        "lastUpdatedDate": timestamp, 
        "createdDate": timestamp, 
        "clarificationPrompt": {
            "maxAttempts": 2, 
            "messages": [
                {
                    "content": "I didn't understand you, what would you like to do?", 
                    "contentType": "PlainText"
                }
            ]
        }, 
        "voiceId": "Salli", 
        "childDirected": false, 
        "idleSessionTTLInSeconds": 600, 
        "description": "Bot to order flowers on the behalf of a user"
    }
    

Paso siguiente

Ejercicio 4: Publicar una versión (AWS CLI)