建立 Lambda 函數並將其附加至機器人別名 - Amazon Lex

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

建立 Lambda 函數並將其附加至機器人別名

建立 Lambda 函數

若要為您的 Amazon Lex V2 機器人建立 Lambda 函數,請AWS Lambda從您的機器人存取AWS Management Console並建立新函數。有關更多詳細信息,請參閱AWS Lambda開發人員指南AWS Lambda。

  1. 請登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/lambda/ 的 AWS Lambda 主控台。

  2. 選擇左側邊欄中的「功能」。

  3. 選取 Create function (建立函數)。

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

    1. 給你的函數一個有意義的函數名稱來描述它的作用。

    2. 從「執行階段」下的下拉式功能表中選擇一種語言,以將函數寫入。

    3. 為您的函數選取指令集架構

    4. 根據預設,Lambda 會建立具有基本權限的角色。若要使用現有角色或使用AWS原則範本建立角色,請展開 [變更預設執行角色] 功能表,然後選取選項。

    5. 展開 [進階設定] 功能表以設定更多選項。

  5. 選取 Create function (建立函數)。

下圖顯示了從頭開始創建新函數時所看到的內容:

一個新的 Lambda 函數。

Lambda 處理常式函數會因您使用的語言而有所不同。它最低限度地需要一個 event JSON 對象作為參數。您可以看到在 Amazon Lex V2 提供的欄位解譯輸入事件格式event修改處理常式函數,最終傳回符合中所述格式的 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

添加和調用一個 Lambda 函數

若要呼叫 Amazon Lex V2 機器人中的 Lambda 函數,您必須先將函數附加到機器人別名,然後在機器人叫用函數的交談中設定點。您可以透過主控台或 API 作業來執行這些步驟。

您可以在與使用者交談的下列時間點使用 Lambda 函數:

  • 在意圖被識別後的初始響應。例如,在用戶說他們要訂購比薩餅之後。

  • 從用戶引出插槽值之後。例如,在用戶告訴機器人他們想要訂購的比薩餅大小之後。

  • 在每次重試之間引出一個插槽。例如,如果客戶不使用公認的比薩餅尺寸。

  • 確認意圖時。例如,在確認披薩訂單時。

  • 為了實現一個意圖。例如,要放置一個比薩餅的訂單。

  • 在實現意圖之後,並在您的機器人關閉對話之前。例如,切換到訂購飲料的意圖。