Uso de AWS Lambda con Amazon Lex - AWS Lambda

Uso de AWS Lambda con Amazon Lex

Puede utilizar Amazon Lex para integrar un bot de conversación en su aplicación. El bot de Amazon Lex proporciona una interfaz de conversación con sus usuarios. Amazon Lex proporciona una integración prediseñada con Lambda que permite usar una función de Lambda con el bot de Amazon Lex.

Al configurar un bot de Amazon Lex, puede especificar una función de Lambda para llevar a cabo la validación, el procesamiento o ambos. Para la validación, Amazon Lex invoca la función de Lambda después de cada respuesta del usuario. La función de Lambda puede validar la respuesta y proporcionar retroalimentación correctiva al usuario, si es necesario. Para el procesamiento, Amazon Lex invoca la función de Lambda para procesar la solicitud del usuario una vez que el bot haya recopilado correctamente toda la información requerida y haya recibido la confirmación del usuario.

Puede administrar la simultaneidad de la función de Lambda para controlar el número máximo de conversaciones de bot simultáneas que se pueden atender. La API de Amazon Lex devuelve un código de estado HTTP 429 (Too Many Requests (Demasiadas solicitudes)) si se alcanza la simultaneidad máxima de la función.

La API devuelve un código de estado HTTP 424 (Dependency Failed Exception (Excepción con error de dependencia)) si la función Lambda genera una excepción.

El bot de Amazon Lex invoca la función de Lambda de forma síncrona. El parámetro de evento contiene información sobre el bot y el valor de cada ranura del diálogo. El parámetro invocationSource indica si la función de Lambda debe validar las entradas (DialogCodeHook) o procesar la intención (FulfillmentCodeHook).

ejemplo Evento de mensaje de Amazon Lex

{ "messageVersion": "1.0", "invocationSource": "FulfillmentCodeHook", "userId": "ABCD1234", "sessionAttributes": { "key1": "value1", "key2": "value2", }, "bot": { "name": "OrderFlowers", "alias": "prod", "version": "1" }, "outputDialogMode": "Text", "currentIntent": { "name": "OrderFlowers", "slots": { "FlowerType": "lilies", "PickupDate": "2030-11-08", "PickupTime": "10:00" }, "confirmationStatus": "Confirmed" } }

Amazon Lex espera una respuesta de una función de Lambda con el siguiente formato: El campo dialogAction es obligatorio. Los campos sessionAttributes y recentIntentSummaryView son opcionales.

ejemplo Evento de mensaje de Amazon Lex

{ "sessionAttributes": { "key1": "value1", "key2": "value2" ... }, "recentIntentSummaryView": [ { "intentName": "Name", "checkpointLabel": "Label", "slots": { "slot name": "value", "slot name": "value" }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)", "dialogActionType": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close", "fulfillmentState": "Fulfilled or Failed", "slotToElicit": "Next slot to elicit } ], "dialogAction": { "type": "Close", "fulfillmentState": "Fulfilled", "message": { "contentType": "PlainText", "content": "Thanks, your pizza has been ordered." }, "responseCard": { "version": integer-value, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title", "subTitle":"card-sub-title", "imageUrl":"URL of the image to be shown", "attachmentLinkUrl":"URL of the attachment to be associated with the card", "buttons":[ { "text":"button-text", "value":"Value sent to server on button click" } ] } ] } } }

Tenga en cuenta que los campos adicionales necesarios para dialogAction varían según el valor del campo type. Para obtener más información acerca de los campos de evento y respuesta, consulte Formato del evento de entrada y de la respuesta de la Lambda en la Guía para desarrolladores de Amazon Lex. Para ver un tutorial de ejemplo que muestra cómo utilizar Lambda con Amazon Lex, consulte Ejercicio 1: creación de un bot de Amazon Lex mediante un proyecto en la Guía para desarrolladores de Amazon Lex.

Roles y permisos

Debe configurar un rol vinculado a servicio como rol de ejecución de la función. Amazon Lex define el rol vinculado a servicio con permisos predefinidos. Al crear un bot de Amazon Lex mediante la consola, el rol vinculado a servicio se crea automáticamente. Para crear un rol vinculado a servicio con la CLI de AWS, utilice el comando create-service-linked-role.

aws iam create-service-linked-role --aws-service-name lex.amazonaws.com

Este comando crea el siguiente rol.

{ "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "lex.amazonaws.com" } } ] }, "RoleName": "AWSServiceRoleForLexBots", "Path": "/aws-service-role/lex.amazonaws.com/", "Arn": "arn:aws:iam::account-id:role/aws-service-role/lex.amazonaws.com/AWSServiceRoleForLexBots" }

Si la función de Lambda utiliza otros servicios de AWS, debe agregar los permisos correspondientes al rol vinculado a servicio.

Utilice una política de permisos basada en recursos para permitir que la intención de Amazon Lex invoque la función de Lambda. Si utiliza la consola de Amazon Lex, la política de permisos se crea automáticamente. En la CLI de AWS, utilice el comando Lambda add-permission para establecer el permiso. En el ejemplo siguiente, se establece el permiso para la intención OrderFlowers.

aws lambda add-permission \ --function-name OrderFlowersCodeHook \ --statement-id LexGettingStarted-OrderFlowersBot \ --action lambda:InvokeFunction \ --principal lex.amazonaws.com \ --source-arn "arn:aws:lex:us-east-1:123456789012 ID:intent:OrderFlowers:*"