本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為您的 Amazon Lex V2 機器人建立 Lambda 函數, AWS Lambda 請從 存取 AWS Management Console 並建立新的函數。如需詳細資訊,請參閱AWS Lambda 開發人員指南 AWS Lambda。
-
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/lambda/
開啟 AWS Lambda 主控台。 -
選擇左側側邊欄中的函數。
-
選取 Create function (建立函式)。
-
您可以選取從頭開始撰寫,以最小程式碼開頭、使用藍圖從清單中選取常見使用案例的範例程式碼,或選取容器映像來選取要為您的函數部署的容器映像。如果您從頭選取作者,請繼續執行下列步驟:
-
為您的函數提供有意義的函數名稱,以描述其功能。
-
從執行時間下的下拉式選單中選擇語言,以寫入函數。
-
為您的函數選取指示集架構。
-
根據預設,Lambda 會建立具有基本許可的角色。若要使用現有角色或使用 AWS 政策範本建立角色,請展開變更預設執行角色功能表,然後選取 選項。
-
展開進階設定選單以設定更多選項。
-
-
選取 Create function (建立函式)。
下圖顯示從頭開始建立新函數時看到的內容:

Lambda 處理常式函數會根據您使用的語言而有所不同。其至少需要 event
JSON 物件做為引數。您可以在 Amazon Lex V2 event
提供的 中查看欄位AWS Lambda Lex V2 的輸入事件格式。修改處理常式函數,以最終傳回符合 中所述格式的 response
JSON 物件AWS Lambda Lex V2 的回應格式。
-
完成撰寫函數後,請選取部署以允許使用函數。
請記住,您可以將每個機器人別名與最多一個 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
在機器人對話中使用 AWS Lambda 函數的時機
您可以在與使用者對話的下列時間點使用 Lambda 函數:
-
在辨識意圖後的初始回應中。例如,在使用者說他們想要訂購比薩之後。
-
從使用者引出槽值後。例如,在使用者告知機器人要訂購的比薩大小之後。
-
在每次重試之間引出槽。例如,如果客戶不使用可辨識的比薩大小。
-
確認意圖時。例如,確認披薩訂單時。
-
實現意圖。例如,為比薩下訂單。
-
滿足意圖之後,以及機器人關閉對話之前。例如,切換到訂購飲料的意圖。