

终止支持通知：2025年9月15日， AWS 我们将停止对Amazon Lex V1的支持。2025 年 9 月 15 日之后，您将无法再访问 Amazon Lex V1 控制台或 Amazon Lex V1 资源。如果您使用的是 Amazon Lex V2，请改为参阅 [Amazon Lex V2 指南](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 练习 3：添加 Lambda 函数 (AWS CLI)
<a name="gs-cli-update-lambda"></a>

向机器人添加用于验证用户输入和履行用户意图的 Lambda 函数。

添加 Lambda 表达式的过程分为五步。

1. [使用 Lambda [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)函数启用调用 Lambda 调用操作的`OrderFlowers`意图。](https://docs.aws.amazon.com/lambda/latest/dg/lambda-api-permissions-ref.html)

1. 使用 [GetIntent](API_GetIntent.md) 操作从 Amazon Lex 获取意图。

1. 更新意图以添加 Lambda 函数。

1. 使用 [PutIntent](API_PutIntent.md) 操作将更新后的意图发送回 Amazon Lex。

1. 使用 [GetBot](API_GetBot.md) 和 [PutBot](API_PutBot.md) 操作重建使用该目的的所有自动程序。

要运行本练习中的命令，您需要知道将在其中运行命令的区域。有关区域列表，请参阅[模型构建配额](gl-limits.md#gl-limits-model-building)。

如果您在添加 `InvokeFunction` 权限前向意图添加 Lambda 函数，会得到以下错误消息：

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

来自 `GetIntent` 操作的响应包含一个名为 `checksum` 的字段，该字段标识目的的一个特定修订版。在使用 [PutIntent](API_PutIntent.md) 操作更新目的时必须提供校验和值。如果不提供，您会收到以下错误消息：

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

本练习使用 [练习 1：使用蓝图创建 Amazon Lex 机器人（控制台）](gs-bp.md) 中的 Lambda 函数。有关创建 Lambda 函数的说明，请参阅[步骤 3：创建 Lambda 函数（控制台）](gs-bp-create-lambda-function.md)。

**注意**  
以下 AWS CLI 示例是针对 Unix、Linux 和 macOS 进行格式化的。对于 Windows，请将 `"\$LATEST"` 改为 `$LATEST`。

**向意图添加 Lambda 函数**

1. 在中 AWS CLI，添加`OrderFlowers`意图`InvokeFunction`权限：

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

   Lambda 会发送以下响应：

   ```
   {
       "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. 从 Amazon Lex 获取意图。Amazon Lex 将输出发送到一个名为 **OrderFlowers-V3.json** 的文件。

   ```
   aws lex-models get-intent \
       --region region \
       --name OrderFlowers \
       --intent-version "\$LATEST" > OrderFlowers-V3.json
   ```

1. 在文本编辑器中，打开 **OrderFlowers-V3.json**。

   1. 找到并删除 `createdDate`、`lastUpdatedDate` 和 `version` 字段。

   1. 更新 `fulfillmentActivity` 字段：

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

   1. 保存该文件。

1. 在中 AWS CLI，将更新的意图发送给 Amazon Lex：

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

现在您已更新了目的，接下来要重建自动程序。

**重建 `OrderFlowersBot` 自动程序**

1. 在中 AWS CLI，获取`OrderFlowersBot`机器人的定义并将其保存到文件中：

   ```
   aws lex-models get-bot \
       --region region \
       --name OrderFlowersBot \
       --version-or-alias "\$LATEST" > OrderFlowersBot-V3.json
   ```

1. 在文本编辑器中，打开 **OrderFlowersBot-V3.json**。删除 `createdDate`、`lastUpdatedDate`、`status` 和 `version` 字段。

1. 在文本编辑器中，将下面一行添加到自动程序定义中：

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

1. 在中 AWS CLI，构建该机器人的新修订版：

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

   服务器的响应如下：

## 下一个步骤
<a name="gs-cli-next-exercise-4"></a>

[练习 4：发布版本 (AWS CLI)](gs-cli-publish.md)