Uso do AWS Lambda com o Amazon Lex - AWS Lambda

Uso do AWS Lambda com o Amazon Lex

É possível usar o Amazon Lex para integrar um bot de conversação ao seu aplicativo. O bot do Amazon Lex fornece uma interface de conversação com os usuários. O Amazon Lex fornece integração pré-criada com o Lambda, que permite usar uma função do Lambda com o bot do Amazon Lex.

Ao configurar um bot do Amazon Lex, é possível especificar uma função do Lambda para executar validação, atendimento ou ambos. Para validação, o Amazon Lex invoca a função do Lambda após cada resposta do usuário. A função do Lambda pode validar a resposta e fornecer feedback corretivo para o usuário, se necessário. Para atendimento, o Amazon Lex invoca a função do Lambda para atender à solicitação do usuário depois que o bot coleta com êxito todas as informações necessárias e recebe a confirmação do usuário.

É possível gerenciar a simultaneidade da função do Lambda para controlar o número máximo de conversas simultâneas do bot atendidas. A API do Amazon Lex retornará um código de status HTTP 429 — Too Many Requests (Excesso de solicitações) se a função estiver na simultaneidade máxima.

A API retornará um código de status HTTP 424 — Dependency Failed Exception (Exceção com falha de dependência) se a função do Lambda lançar uma exceção.

O bot do Amazon Lex invoca a função do Lambda de forma síncrona. O parâmetro de evento contém informações sobre o bot e o valor de cada slot na caixa de diálogo. O parâmetro invocationSource indica se a função do Lambda deve validar as entradas (DialogCodeHook) ou atender à intenção (FulfillmentCodeHook).

exemplo Evento de mensagem do 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" } }

O Amazon Lex espera uma resposta de uma função do Lambda no formato a seguir. O campo dialogAction é obrigatório. Os campos sessionAttributes e recentIntentSummaryView são opcionais.

exemplo Evento de mensagem do 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" } ] } ] } } }

Os campos adicionais necessários para dialogAction variam com base no valor do campo type. Para obter mais informações sobre os campos de evento e resposta, consulte Formato de evento e resposta do Lambda no Guia do desenvolvedor do Amazon Lex. Para obter um exemplo de tutorial que mostra como usar o Lambda com o Amazon Lex, consulte Exercício 1: criar um bot do Amazon Lex usando um esquema no Guia do desenvolvedor do Amazon Lex.

Funções e permissões

É necessário configurar uma função vinculada ao serviço como função de execução da função. O Amazon Lex define a função vinculada ao serviço com permissões predefinidas. Ao criar um bot do Amazon Lex usando o console, a função vinculada ao serviço é criada automaticamente. Para criar uma função vinculada ao serviço com a CLI da AWS, use o comando create-service-linked-role.

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

Esse comando cria a função a seguir.

{ "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" }

Se a função do Lambda usar outros serviços da AWS, será necessário adicionar as permissões correspondentes à função vinculada ao serviço.

Use uma política de permissões baseada em recursos para permitir que a intenção do Amazon Lex invoque a função do Lambda. Se você usar o console do Amazon Lex, a política de permissões será criada automaticamente. Na CLI da AWS, use o comando add-permission do Lambda para definir a permissão. O exemplo a seguir define permissão para a intenção 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:*"