使用 Amazon Lex API 管理工作階段 - Amazon Lex V1

如果您使用的是 Amazon Lex V2,請改參閱 Amazon Lex V2 指南

 

如果您使用的是 Amazon Lex V1,建議您將機器人升級至 Amazon Lex V2。我們不再將新功能新增至 V1,強烈建議所有新機器人都使用 V2。

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

使用 Amazon Lex API 管理工作階段

使用者開始與您的機器人對話時,Amazon Lex 會建立會議。您的應用程式與 Amazon Lex 之間交換的資訊構成對話的工作階段狀態。您發出請求時,會以您指定的機器人名稱與使用者識別符組合識別此工作階段。如需使用者識別符的詳細資訊,請參閱 PostContentPostText 操作中的 userId 欄位。

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

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

有兩種方式可以更新工作階段狀態。第一種方法是使用 Lambda 函數與PostContent或者PostText操作,該操作將在對話的每一輪後調用。如需詳細資訊,請參閱 使用 Lambda 函數。另一種方式則是在您的應用程式中使用 Amazon Lex 執行時間 API,來變更工作階段狀態。

Amazon Lex 運行時間 API 提供可讓您管理與機器人對話的工作階段資訊。這些操作為 PutSession 操作、GetSession 操作及 DeleteSession 操作。您使用這些操作取得您使用者的機器人工作階段資訊,並對狀態進行細微控制。

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

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

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

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

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

工作階段操作可搭配您的履行 Lambda 函數使用。例如,如果 Lambda 函數返回Failed作為配送狀態,您可以使用PutSession操作,將對話方塊動作類型設為closefulfillmentStateReadyForFulfillment以重試完成步驟。

以下是您可以使用工作階段操作進行的一些動作:

  • 讓機器人開始對話,而非等候使用者。

  • 在對話期間切換意圖。

  • 回到先前的意圖。

  • 在互動的過程中間開始或重新開始對話。

  • 驗證槽值並讓機器人針對無效的值重新提示。

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

切換意圖

您可以使用 PutSession 操作,來將一種意圖切換成另一種意圖。您也可以使用它切回上一個意圖。您可以使用 PutSession 操作來設定工作階段屬性或新意圖的槽值。

  • 呼叫 PutSession 操作。將意圖名稱設為新意圖的名稱,然後將對話方塊動作設為 Delegate。您也可以設定新意圖所需的任何槽值或工作階段屬性。

  • Amazon Lex 將在新意圖期間開始與使用者對話。

繼續先前的意圖

若要繼續先前的意圖,請使用 GetSession 操作來取得意圖的摘要,然後使用 PutSession 操作來將意圖設為其之前的對話方塊狀態。

  • 呼叫 GetSession 操作。來自操作的回應包括使用者所互動之最後三次意圖的對話方塊狀態摘要。

  • 使用意圖摘要的資訊呼叫 PutSession 操作。這將把在對話中同一處的先前意圖傳回給使用者。

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

若要繼續工作階段,請使用與下列相似的步驟:

  • 您的應用程式會判斷使用者是否需要與客服代表交談。

  • 使用 GetSession 操作來取得意圖目前的對話方塊狀態。

  • 客服代表與使用者交談,並解決問題。

  • 使用 PutSession 操作來設定意圖的對話方塊狀態。這可能包括設定槽值、設定工作階段屬性或變更意圖。

  • 機器人繼續與使用者對話。

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

意圖必須存在於 GetSession 操作傳回的 recentIntentSummaryView 結構中。如果您在 GetSession 操作請求中指定檢查點標籤,則它最多會傳回包含該檢查點標籤的三個意圖。

  • 使用 GetSession 操作來取得工作階段目前的狀態。

  • 使用 PutSession 操作來將檢查點標籤新增至上一個意圖。必要時,您可以使用此 PutSession 呼叫,切換至不同的意圖。

  • 該是切換回標示的意圖時,請呼叫 GetSession 操作來傳回最近的意圖清單。您可以使用checkpointLabelFilter參數,以使 Amazon Lex 僅返回具有指定檢查點標籤的意圖。

開啟新的工作階段

如果您想要讓機器人開始與您的使用者對話,則可以使用 PutSession 操作。

  • 建立無槽的歡迎意圖及提示使用者的結論訊息,以陳述意圖。例如,「您想要訂購什麼? 您可以說「訂購飲料」或「訂購披薩」。

  • 呼叫 PutSession 操作。將意圖名稱設為歡迎意圖的名稱,然後將對話方塊動作設為 Delegate

  • Amazon Lex 將以歡迎意圖的提示回應,以開始與您的使用者對話。

驗證槽值

您可以使用用戶端應用程式驗證對您機器人所做的回應。如果回應無效,您可以使用 PutSession 操作來從您的使用者取得新的回應。例如,假設您的訂花機器人只能賣鬱金香、玫瑰花及水仙花。如果使用者訂購康乃馨,您的應用程式可以執行下列動作:

  • 檢查從 PostTextPostContent 回應傳回的槽值。

  • 如果槽值無效,則呼叫 PutSession 操作。您的應用程式應清除槽值,請設定 slotToElicit 欄位,然後將 dialogAction.type 值設為 elicitSlot。或者,您可以設置messagemessageFormat欄位,如果您想要使用來引出槽值,請執行此資訊。