

支援終止通知：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)。

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

# 程式設計模型
<a name="programming-model"></a>

*機器人*是 Amazon Lex 中的主要資源類型。Amazon Lex 中的其他資源類型包括*意圖*、*槽類型*、*別名*和*機器人管道關聯*。

您可以使用 Amazon Lex 主控台或模型建置 API 來建立機器人。主控台提供圖形化使用者界面，您可用來為應用程式建立生產就緒的機器人。如果您願意，可以透過 AWS CLI 或自己的自訂程式使用模型建置 API 來建立機器人。

建立機器人之後，您將其部署在其中一個[支援的平台](https://docs.aws.amazon.com/lex/latest/dg/chatbot-service.html)，或將它整合到您自己的應用程式。當使用者與機器人互動時，用戶端應用程式會使用 Amazon Lex 執行時間 API 將請求傳送至機器人。例如，當使用者說「我想要訂購比薩」時，您的用戶端會使用其中一個執行時間 API 操作將此輸入傳送至 Amazon Lex。使用者可以語音或文字的形式提供輸入。

您也可以建立 Lambda 函數，並將其用於 意圖。使用這些 Lambda 函數程式碼掛勾來執行執行時間活動，例如初始化、驗證使用者輸入和意圖履行。下列各節提供了額外的資訊。

**Topics**
+ [模型建置 API 操作](#programming-model-build-time-api)
+ [執行時間 API 操作](#programming-model-runtime-api)
+ [Lambda 函數做為程式碼掛鉤](#prog-model-lambda)

## 模型建置 API 操作
<a name="programming-model-build-time-api"></a>

要透過程式設計方式建立機器人、意圖和槽類型，請使用模型建置 API 操作。您也可以使用模型建置 API 來管理、更新和刪除機器人的資源。模型建置 API 操作包括：
+ [PutBot](API_PutBot.md)、[PutBotAlias](API_PutBotAlias.md)、[PutIntent](API_PutIntent.md) 和 [PutSlotType](API_PutSlotType.md) 分別會建立和更新機器人、機器人別名、意圖和槽類型。
+ [CreateBotVersion](API_CreateBotVersion.md)、[CreateIntentVersion](API_CreateIntentVersion.md) 和 [CreateSlotTypeVersion](API_CreateSlotTypeVersion.md) 分別會建立和發佈機器人版本、意圖和槽類型。
+ [GetBot](API_GetBot.md) 和 [GetBots](API_GetBots.md) 分別會取得您已建立的特定機器人或機器人清單。
+ [GetIntent](API_GetIntent.md) 和 [GetIntents](API_GetIntents.md) 分別會取得您已建立的特定意圖或意圖清單。
+ [GetSlotType](API_GetSlotType.md) 和 [GetSlotTypes](API_GetSlotTypes.md) 分別會取得您已建立的特定槽類型或槽類型清單。
+ [GetBuiltinIntent](API_GetBuiltinIntent.md)[GetBuiltinIntents](API_GetBuiltinIntents.md)、 和 [GetBuiltinSlotTypes](API_GetBuiltinSlotTypes.md)分別取得 Amazon Lex 內建意圖、Amazon Lex 內建意圖清單，或您可以在機器人中使用的內建槽類型清單。
+ [GetBotChannelAssociation](API_GetBotChannelAssociation.md) 和 [GetBotChannelAssociations](API_GetBotChannelAssociations.md) 分別會取得機器人與簡訊平台之間的關聯，或機器人與簡訊平台之間的關聯清單。
+ [DeleteBot](API_DeleteBot.md)、[DeleteBotAlias](API_DeleteBotAlias.md)、[DeleteBotChannelAssociation](API_DeleteBotChannelAssociation.md)、[DeleteIntent](API_DeleteIntent.md) 和 [DeleteSlotType](API_DeleteSlotType.md) 會移除您帳戶中不需要的資源。

您可以使用模型建置 API 來建立自訂工具，以管理您的 Amazon Lex 資源。舉例來說，槽、意圖和槽類型各有 100 個版本的限制。您可以使用模型建置 API 來建置工具，在機器人接近限制時自動刪除舊版本。

為了確保一次只有一個操作更新資源，Amazon Lex 會使用檢查總和。當您使用 `Put` API[PutBot](API_PutBot.md) [PutBotAlias](API_PutBotAlias.md) 操作 —[PutIntent](API_PutIntent.md)、 或 [PutSlotType](API_PutSlotType.md)— 來更新資源時，您必須在請求中傳遞資源的目前檢查總和。如果同時有兩個工具嘗試更新資源，兩個都會提供相同的目前檢查總和。到達 Amazon Lex 的第一個請求符合資源的目前檢查總和。等到第二個請求抵達時，檢查總和已不同。第二個工具會收到 `PreconditionFailedException` 例外狀況，並且更新會終止。

`Get` 操作 [GetBot](API_GetBot.md)-[GetIntent](API_GetIntent.md)、 和 [GetSlotType](API_GetSlotType.md)- 最終一致。如果您在使用其中一個 `Get` 操作建立或修改資源之後立即使用 `Put` 操作，可能不會傳回變更。在 `Get` 操作傳回最新的更新之後，在資源再度經過修改之前，它一律會傳回更新過的資源。您可以查看檢查總和來判斷傳回的是否為更新的資源。

## 執行時間 API 操作
<a name="programming-model-runtime-api"></a>

 用戶端應用程式使用以下執行時間 API 操作與 Amazon Lex 通訊：
+ [PostContent](API_runtime_PostContent.md) – 接受語音或文字輸入，並傳回意圖資訊和要傳達給使用者的文字或語音訊息。Amazon Lex 目前支援以下音訊格式：

   

  輸入音訊格式 – LPCM 和 Opus 

  輸出音訊格式 – MPEG、OGG 和 PCM

   

  `PostContent` 操作支援 8 kHz 和 16 kHz 的音訊輸入。最終使用者透過電話與 Amazon Lex 交談的應用程式，例如自動呼叫中心，可以直接傳遞 8 kHz 音訊。

   
+ [PostText](API_runtime_PostText.md) – 接受文字輸入並傳回意圖資訊和文字訊息，以傳達給使用者。

您的用戶端應用程式使用執行時間 API 呼叫特定的 Amazon Lex 機器人來處理表達用語：使用者文字或語音輸入。例如，假設使用者說「我要訂購比薩」。用戶端會使用其中一個 Amazon Lex 執行時間 API 操作，將此使用者輸入傳送至機器人。從使用者輸入，Amazon Lex 會辨識使用者請求是用於機器人中定義的`OrderPizza`意圖。Amazon Lex 會與使用者進行對話，以收集所需資訊或槽資料，例如比薩大小、配料和比薩數量。使用者提供所有必要的槽資料後，Amazon Lex 會叫用 Lambda 函數程式碼掛勾以滿足意圖，或根據意圖的設定，將意圖資料傳回給用戶端。

當機器人使用語音輸入時，使用 [PostContent](API_runtime_PostContent.md) 操作。例如，自動呼叫中心應用程式可以將語音傳送至 Amazon Lex 機器人，而不是客服人員來處理客戶查詢。您可以使用 8 kHz 音訊格式，直接從電話將音訊傳送至 Amazon Lex。

Amazon Lex 主控台中的測試視窗使用 [PostContent](API_runtime_PostContent.md) API 將文字和語音請求傳送至 Amazon Lex。您可以在[Amazon Lex 入門](getting-started.md) 練習中使用此測試視窗。

## Lambda 函數做為程式碼掛鉤
<a name="prog-model-lambda"></a>

您可以設定 Amazon Lex 機器人以叫用 Lambda 函數做為程式碼掛勾。程式碼掛勾有多個用途：
+ 自訂使用者互動 - 例如，當 Joe 要求可用的比薩配料時，您可以使用先前對 Joe 選擇的知識來顯示配料的子集。
+ 驗證使用者的輸入 - 假設 Jen 想要在幾小時後挑選花。您可以驗證 Jen 輸入的時間並傳送適當的回應。
+ 滿足使用者的意圖 - 在 Joe 提供其比薩訂單的所有資訊之後，Amazon Lex 可以叫用 Lambda 函數來使用本機比薩來下訂單。

當您設定意圖時，您可以在下列位置將 Lambda 函數指定為程式碼掛勾：
+ 用於初始化和驗證的對話方塊程式碼掛勾 - 每個使用者輸入都會叫用此 Lambda 函數，假設 Amazon Lex 了解使用者意圖。
+ 履行程式碼掛勾 - 在使用者提供滿足意圖所需的所有槽資料之後，就會叫用此 Lambda 函數。

您可以選擇意圖，並在 Amazon Lex 主控台中設定程式碼掛勾，如下列螢幕擷取畫面所示：

![顯示 Lambda 函數程式碼掛勾的 Amazon Lex 主控台。](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/how-works-10.png)


您也可以在 `dialogCodeHook` 操作中使用 `fulfillmentActivity` 和 [PutIntent](API_PutIntent.md) 欄位來設定程式碼掛勾。

一個 Lambda 函數可以執行初始化、驗證和履行。Lambda 函數接收的事件資料具有 欄位，可將發起人識別為對話方塊或履行程式碼掛勾。您可以使用此資訊來執行程式碼的適當部分。

您可以使用 Lambda 函數來建置可導覽複雜對話方塊的機器人。您可以使用 Lambda 函數回應中的 `dialogAction` 欄位，指示 Amazon Lex 採取特定動作。例如，您可以使用`ElicitSlot`對話方塊動作，指示 Amazon Lex 向使用者要求不需要的槽值。如果您已定義釐清提示，則可以在使用者完成前一個意圖時，使用 `ElicitIntent` 對話方塊動作來引出新的意圖。

如需詳細資訊，請參閱[使用 Lambda 函數](using-lambda.md)。