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.
-
Utilice la función de Lambda AddPermission para permitir que la intención
OrderFlowers
llame a la operación Invoke de Lambda. -
Utilice la operación GetIntent para obtener la intención de Amazon Lex.
-
Actualice la intención para agregar la función de Lambda.
-
Use la operación PutIntent para enviar la intención actualizada de vuelta a Amazon Lex.
-
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 functionLambda function ARN
in the context of intentintent 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: Intentintent name
already exists. If you are trying to updateintent 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
-
En la AWS CLI, añada el permiso
InvokeFunction
a la intenciónOrderFlowers
: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-accountaccount 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:*\"}}}" } -
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 -
Abra
OrderFlowers-V3.json
en un editor de texto.-
Busque y elimine los campos
createdDate
,lastUpdatedDate
yversion
. -
Actualice el campo
fulfillmentActivity
:"fulfillmentActivity": { "type": "CodeHook", "codeHook": { "uri": "arn:aws:lambda:
region
:account ID
:function:OrderFlowersCodeHook", "messageVersion": "1.0" } } -
Guarde el archivo.
-
-
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
-
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 -
En un editor de texto, abra
OrderFlowersBot-V3.json
. Elimine los camposcreatedDate
,lastUpdatedDate
,status
yversion
. -
En el editor de texto, añada la siguiente línea a la definición del bot:
"processBehavior": "BUILD",
-
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.jsonLa 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)