

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

# 为你的 Amazon Lex V2 机器人创建AWS Lambda函数
<a name="lambda-attach"></a>

要为您的 Amazon Lex V2 机器人创建 Lambda 函数，AWS Lambda请从 AWS 管理控制台访问并创建一个新函数。您可以参阅[AWS Lambda开发者指南](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)，了解有关的更多详细信息AWS Lambda。

1. 登录 AWS 管理控制台并在上打开AWS Lambda控制台[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)。

1. 在左侧边栏中选择**函数**。

1. 选择**创建函数**。

1. 您可以选择**从头开始创作**以最少的代码开始，选择**使用蓝图**以从列表中选择常见用例的示例代码，或者选择**容器镜像**为您的函数选择要部署的容器镜像。如果您选择**从头开始创作**，请继续执行以下步骤：

   1. 给您的函数起一个有意义的**函数名称**来描述它的作用。

   1. 从**运行时**下拉菜单中选择一种语言来编写函数。

   1. 为您的函数选择一个指令集**架构**。

   1. 默认情况下，Lambda 创建具有基本权限的新角色。要使用现有角色或使用 AWS 策略模板创建角色，请展开**更改默认执行角色**菜单并选择一个选项。

   1. 展开**高级设置**菜单以配置更多选项。

1. 选择**创建函数**。

从头开始创建新函数时所看到的内容如下图所示。

![新的 Lambda 函数。](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/lambda/lambda-new-function.png)


Lambda 处理程序函数因您使用的语言而异。它至少需要一个 `event` JSON 对象作为参数。您可以进入 [AWS LambdaLex V2 的输入事件格式](lambda-input-format.md) 查看 Amazon Lex V2 提供的 `event` 中包含的字段。修改处理程序函数，最终返回与 [AWS LambdaLex V2 的响应格式](lambda-response-format.md) 中所述格式相匹配的 `response` JSON 对象。
+ 编写完函数后，选择**部署**以允许使用该函数。

请记住，您最多可以将每个机器人别名与一个 Lambda 函数相关联。但是，您可以在 Lambda 代码中为机器人定义任意数量的函数，然后在 Lambda 处理程序函数中调用这些函数。例如，虽然同一个机器人别名中的所有意图都必须调用相同的 Lambda 函数，但您可以创建一个路由器函数来为每个意图激活单独的函数。可以为应用程序使用或修改的路由器函数示例如下所示：

```
import os
import json
import boto3

# reuse client connection as global
client = boto3.client('lambda')

def router(event):
    intent_name = event['sessionState']['intent']['name']
    fn_name = os.environ.get(intent_name)
    print(f"Intent: {intent_name} -> Lambda: {fn_name}")
    if (fn_name):
        # invoke lambda and return result
        invoke_response = client.invoke(FunctionName=fn_name, Payload = json.dumps(event))
        print(invoke_response)
        payload = json.load(invoke_response['Payload'])
        return payload
    raise Exception('No environment variable for intent: ' + intent_name)

def lambda_handler(event, context):
    print(event)
    response = router(event)
    return response
```

**何时在 Amazon Lex V2 机器人对话中使用AWS Lambda功能**

在与用户的对话中，您可以在以下时间使用 Lambda 函数：
+ 在识别意图后的初始响应中，例如，在用户说要订购披萨之后。
+ 从用户引发槽位值后，例如，在用户告诉机器人他们要订购的披萨大小之后。
+ 在每次重试之间引发一个槽位时，例如，客户没有使用公认的披萨尺寸时。
+ 确认意图时，例如，在确认披萨订单时。
+ 要履行意图时，例如，要订购披萨时。
+ 在履行意图之后以及机器人结束对话之前。例如，切换到点饮料的意图时。

**Topics**
+ [使用控制台将AWS Lambda函数附加到 Amazon Lex V2 机器人](lambda-attach-console.md)
+ [使用 API 操作将AWS Lambda函数附加到 Amazon Lex V2 机器人](lambda-attach-api.md)