

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

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

# 使用 Amazon Lex API 管理工作階段
<a name="how-session-api"></a>

當使用者開始與您的機器人對話時，Amazon Lex 會建立*工作階段*。應用程式與 Amazon Lex 之間交換的資訊構成對話的工作階段狀態。您發出請求時，會以您指定的機器人名稱與使用者識別符組合識別此工作階段。如需使用者識別符的詳細資訊，請參閱 [PostContent](API_runtime_PostContent.md) 或 [PostText](API_runtime_PostText.md) 操作中的 `userId` 欄位。

工作階段操作的回應包括唯一的工作階段識別符。此識別符用以識別使用者的特定工作階段。您可以在測試時使用此識別符，或協助進行機器人的疑難排解。

您可以修改在應用程式與機器人之間傳送的工作階段。例如，您可以修改包含工作階段自訂資訊的工作階段屬性，也可以設定解釋下一個表達用語的對話方塊內容，來變更對話流程。

有兩種方式可以更新工作階段狀態。首先，使用 Lambda 函數搭配 `PostContent`或 `PostText`操作，該操作會在每次對話後呼叫。如需詳細資訊，請參閱[使用 Lambda 函數](using-lambda.md)。另一個是使用應用程式中的 Amazon Lex 執行期 API 來變更工作階段狀態。

Amazon Lex 執行時間 API 提供可讓您管理工作階段資訊以與機器人對話的操作。這些操作為 [PutSession](API_runtime_PutSession.md) 操作、[GetSession](API_runtime_GetSession.md) 操作及 [DeleteSession](API_runtime_DeleteSession.md) 操作。您使用這些操作取得您使用者的機器人工作階段資訊，並對狀態進行細微控制。

當您想要取得工作階段目前的狀態時，請使用 `GetSession` 操作。此操作會傳回工作階段目前的狀態，包括您使用者的對話方塊狀態、已設定的任何工作階段狀態，以及使用者最近三次互動之意圖的槽值。

此 `PutSession` 操作可讓您直接運用目前的工作階段狀態。您可以設定機器人接下來要執行的對話方塊類型。如此一來，您可以控制與機器人的對話流程。將對話方塊動作`type`欄位設定為 `Delegate`，讓 Amazon Lex 決定機器人的下一個動作。

您可以使用 `PutSession` 操作來建立包含機器人的新工作階段，並設定機器人開始時的意圖。您也可以使用 `PutSession` 操作，來將一種意圖變更成另一種意圖。建立工作階段或變更意圖時，您也可以設定工作階段狀態，例如槽值和工作階段屬性。完成新的意圖時，您可以選擇重新啟動先前的意圖。您可以使用 `GetSession`操作，從 Amazon Lex 取得先前意圖的對話方塊狀態，並使用此資訊來設定意圖的對話方塊狀態。

來自 `PutSession` 操作的回應包含如 `PostContent` 操作的相同資訊。正如您會對 `PostContent` 操作的回應一樣，您可以使用此項資訊向使用者提示下一筆資訊。

使用 `DeleteSession` 操作移除現有工作階段，並重新啟動新的工作階段。例如，當您正在測試機器人時，您可以使用 `DeleteSession` 操作從機器人移除測試工作階段。

工作階段操作會與您的履行 Lambda 函數搭配使用。例如，如果您的 Lambda 函數傳回 `Failed`做為履行狀態，您可以使用 `PutSession`操作，將對話方塊動作類型設定為 `close`，並將對話方塊動作類型設定為 `ReadyForFulfillment` `fulfillmentState`，以重試履行步驟。

以下是您可以使用工作階段操作進行的一些動作：
+ 讓機器人開始對話，而非等候使用者。
+ 在對話期間切換意圖。
+ 回到先前的意圖。
+ 在互動的過程中間開始或重新開始對話。
+ 驗證槽值並讓機器人針對無效的值重新提示。

以下進一步說明上述各個動作。

## 切換意圖
<a name="session-switch"></a>

您可以使用 `PutSession` 操作，來將一種意圖切換成另一種意圖。您也可以使用它切回上一個意圖。您可以使用 `PutSession` 操作來設定工作階段屬性或新意圖的槽值。
+ 呼叫 `PutSession` 操作。將意圖名稱設為新意圖的名稱，然後將對話方塊動作設為 `Delegate`。您也可以設定新意圖所需的任何槽值或工作階段屬性。
+ Amazon Lex 將使用新意圖開始與使用者的對話。

## 繼續先前的意圖
<a name="session-return"></a>

若要繼續先前的意圖，請使用 `GetSession` 操作來取得意圖的摘要，然後使用 `PutSession` 操作來將意圖設為其之前的對話方塊狀態。
+ 呼叫 `GetSession` 操作。來自操作的回應包括使用者所互動之最後三次意圖的對話方塊狀態摘要。
+ 使用意圖摘要的資訊呼叫 `PutSession` 操作。這將把在對話中同一處的先前意圖傳回給使用者。

在某些情況下，可能需要繼續您使用者與機器人的對話。例如，假設您已建立客服機器人。您的應用程式會判斷使用者是否需要與客服代表談話。與使用者交談後，客服代表可以連同收集到的資訊，將對話轉回機器人。

若要繼續工作階段，請使用與下列相似的步驟：
+ 您的應用程式會判斷使用者是否需要與客服代表交談。
+ 使用 `GetSession` 操作來取得意圖目前的對話方塊狀態。
+ 客服代表與使用者交談，並解決問題。
+ 使用 `PutSession` 操作來設定意圖的對話方塊狀態。這可能包括設定槽值、設定工作階段屬性或變更意圖。
+ 機器人繼續與使用者對話。

您可以使用 `PutSession` 操作 `checkpointLabel` 參數來標示意圖，以便於稍後可以找到意圖。例如，詢問客戶相關資訊的機器人可能會進入 `Waiting` 意圖，同時客戶蒐集資訊。機器人會為目前意圖建立檢查點標籤，然後啟動 `Waiting` 單元。客戶返回時，機器人可以使用檢查點標籤尋找上一個意圖並切換回來。

意圖必須存在於 `GetSession` 操作傳回的 `recentIntentSummaryView` 結構中。如果您在 `GetSession` 操作請求中指定檢查點標籤，則它最多會傳回包含該檢查點標籤的三個意圖。
+ 使用 `GetSession` 操作來取得工作階段目前的狀態。
+ 使用 `PutSession` 操作來將檢查點標籤新增至上一個意圖。必要時，您可以使用此 `PutSession` 呼叫，切換至不同的意圖。
+ 該是切換回標示的意圖時，請呼叫 `GetSession` 操作來傳回最近的意圖清單。您可以使用 `checkpointLabelFilter` 參數，讓 Amazon Lex 只傳回具有指定檢查點標籤的意圖。

## 開啟新的工作階段
<a name="session-start"></a>

如果您想要讓機器人開始與您的使用者對話，則可以使用 `PutSession` 操作。
+ 建立無槽的歡迎意圖及提示使用者的結論訊息，以陳述意圖。例如，「您想要訂購什麼？ 您可以說「訂購飲料」或「訂購披薩」。
+ 呼叫 `PutSession` 操作。將意圖名稱設為歡迎意圖的名稱，然後將對話方塊動作設為 `Delegate`。
+ Amazon Lex 將以您的歡迎意圖中的提示回應，以開始與您的使用者的對話。

## 驗證槽值
<a name="session-validation"></a>

您可以使用用戶端應用程式驗證對您機器人所做的回應。如果回應無效，您可以使用 `PutSession` 操作來從您的使用者取得新的回應。例如，假設您的訂花機器人只能賣鬱金香、玫瑰花及水仙花。如果使用者訂購康乃馨，您的應用程式可以執行下列動作：
+ 檢查從 `PostText` 或 `PostContent` 回應傳回的槽值。
+ 如果槽值無效，則呼叫 `PutSession` 操作。您的應用程式應清除槽值，請設定 `slotToElicit` 欄位，然後將 `dialogAction.type` 值設為 `elicitSlot`。或者，如果您想要變更 Amazon Lex 用來引發槽值的訊息，您可以設定 `message`和 `messageFormat` 欄位。