

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](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html) 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)
<a name="gs-cli-update-lambda"></a>

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 [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)função Lambda para ativar a `OrderFlowers` intenção de chamar a operação Lambda Invoke.](https://docs.aws.amazon.com/lambda/latest/dg/lambda-api-permissions-ref.html)

1. Use a operação [GetIntent](API_GetIntent.md) para obter a intenção do Amazon Lex.

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

1. Use a operação [PutIntent](API_PutIntent.md) para enviar a intenção atualizada de volta ao Amazon Lex.

1. Use as operações [GetBot](API_GetBot.md) e [PutBot](API_PutBot.md) 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](gl-limits.md#gl-limits-model-building).

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](API_PutIntent.md) 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).](gs-bp.md). Para obter instruções para criar a função do Lambda, consulte [Etapa 3: Crie uma função do Lambda (console)](gs-bp-create-lambda-function.md).

**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:*\"}}}"
   }
   ```

1. 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
   ```

1. Em um editor de texto, abra o **OrderFlowers-V3.json**.

   1. Encontre e exclua os campos `createdDate`, `lastUpdatedDate`e `version`.

   1. Atualize o campo `fulfillmentActivity`:

      ```
          "fulfillmentActivity": {
              "type": "CodeHook",
              "codeHook": {
                  "uri": "arn:aws:lambda:{{region}}:{{account ID}}:function:OrderFlowersCodeHook",
                  "messageVersion": "1.0"
              }
          }
      ```

   1. Salve o arquivo.

1. 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
   ```

1. Em um editor de texto, abra **OrderFlowersBot-V3.json**. Remova os campos `createdDate`, `lastUpdatedDate`, `status` e `version`.

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

   ```
   "processBehavior": "BUILD",
   ```

1. 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
<a name="gs-cli-next-exercise-4"></a>

[Exercício 4: Publicar uma versão (AWS CLI)](gs-cli-publish.md)