Exercício 3: Adicione uma função do Lambda (AWS CLI) - Amazon Lex V1

Aviso de fim do suporte: em 15 de setembro de 2025, o suporte para o Amazon Lex V1 AWS será interrompido. Após 15 de setembro de 2025, você não poderá mais acessar o console do Amazon Lex V1 nem os respectivos recursos. Se você estiver usando o Amazon Lex V2, consulte o guia do Amazon Lex V2 em vez disso.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Exercício 3: Adicione uma função do Lambda (AWS CLI)

Adicione uma função do Lambda que valide a entrada do usuário e atenda à intenção do usuário ao bot.

A adição de uma expressão função do Lambda é um processo de cinco etapas.

  1. Use a AddPermissionfunção Lambda para ativar a OrderFlowers intenção de chamar a operação Lambda Invoke.

  2. Use a operação GetIntent para obter a intenção do Amazon Lex.

  3. Atualize a intenção para adicionar a função do Lambda.

  4. Use a operação PutIntent para enviar a intenção atualizada de volta ao Amazon Lex.

  5. Use as operações GetBot e PutBot para recriar qualquer bot que use a intenção.

Para executar os comandos neste exercício, você precisa saber em que região os comandos serão executados. Para obter uma lista de regiões, consulte Cotas de criação de modelos.

Se você adicionar uma função do Lambda a uma intenção antes de adicionar a permissão InvokeFunction, verá a seguinte mensagem de erro:

            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.
        

A resposta da operação GetIntent contém um campo chamado checksum que identifica uma revisão específica da intenção. Quando usa a operação PutIntent para atualizar uma intenção, você deve fornecer o valor de soma de verificação. Se não fizer isso, você receberá a seguinte mensagem de erro:

            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.
        

Este exercício usa a função do Lambda do Exercício 1: Criar um bot do Amazon Lex usando um esquema (Console).. Para obter instruções para criar a função do Lambda, consulte Etapa 3: Crie uma função do Lambda (console).

nota

O AWS CLI exemplo a seguir está formatado para Unix, Linux e macOS. Para Windows, altere "\$LATEST" para $LATEST.

Para adicionar uma função do Lambda a uma intenção
  1. No AWS CLI, adicione a InvokeFunction permissão para a OrderFlowers intenção:

    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

    O Lambda envia a seguinte resposta:

    {
        "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. Obtenha a intenção do Amazon Lex. O Amazon Lex envia a saída para um arquivo chamado OrderFlowers-V3.json.

    aws lex-models get-intent \ --region region \ --name OrderFlowers \ --intent-version "\$LATEST" > OrderFlowers-V3.json
  3. Em um editor de texto, abra o OrderFlowers-V3.json.

    1. Encontre e exclua os campos createdDate, lastUpdatedDatee version.

    2. Atualize o campo fulfillmentActivity:

      "fulfillmentActivity": { "type": "CodeHook", "codeHook": { "uri": "arn:aws:lambda:region:account ID:function:OrderFlowersCodeHook", "messageVersion": "1.0" } }
    3. Salve o arquivo.

  4. Em AWS CLI, envie a intenção atualizada para o Amazon Lex:

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

Agora que você atualizou a intenção, recrie o bot.

Para recriar o bot OrderFlowersBot
  1. No AWS CLI, obtenha a definição do OrderFlowersBot bot e salve-a em um arquivo:

    aws lex-models get-bot \ --region region \ --name OrderFlowersBot \ --version-or-alias "\$LATEST" > OrderFlowersBot-V3.json
  2. Em um editor de texto, abra OrderFlowersBot-V3.json. Remova os campos createdDate, lastUpdatedDate, status e version.

  3. No editor de texto, adicione a seguinte linha à definição do bot:

    "processBehavior": "BUILD",
  4. No AWS CLI, crie uma nova revisão do bot:

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

    A resposta do servidor é:

Próxima etapa

Exercício 4: Publicar uma versão (AWS CLI)