

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 為您的 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 管理主控台，並在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟AWS Lambda主控台。

1. 選擇左側邊欄中**的函數**。

1. 選取 **Create function** (建立函式)。

1. 您可以選取**從頭開始撰寫**以最小程式碼、**使用藍圖**從清單中選取常見使用案例的範例程式碼，或**選取容器映像**來選取要為函數部署的容器映像。如果您**從頭選取作者**，請繼續執行下列步驟：

   1. 為您的函數提供有意義的**函數名稱**，以描述其功能。

   1. 從**執行時間**下的下拉式選單中選擇語言，以寫入函數。

   1. 為您的函數選取指令集**架構**。

   1. 根據預設，Lambda 會建立具有基本許可的角色。若要使用現有角色或使用 AWS 政策範本建立角色，請展開**變更預設執行角色**功能表，然後選取 選項。

   1. 展開**進階設定**選單以設定更多選項。

1. 選取 **Create function** (建立函式)。

下圖顯示從頭開始建立新函數時看到的內容：

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


Lambda 處理常式函數會根據您使用的語言而有所不同。它至少需要 `event` JSON 物件做為引數。您可以在 Amazon Lex V2 `event` 提供的 中查看欄位[AWS LambdaLex V2 的輸入事件格式](lambda-input-format.md)。修改處理常式函數，以最終傳回符合 中所述格式的 `response` JSON 物件[AWS LambdaLex V2 的回應格式](lambda-response-format.md)。
+ 完成撰寫函數後，請選取**部署**以允許使用函數。

請記住，您可以將每個機器人別名與最多一個 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)