管理訊息 - Amazon Lex V1

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

 

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

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

管理訊息

當建立機器人時,您可以設定要它傳送給用戶端的釐清或資訊訊息。請考量下列範例:

  • 您可以使用以下釐清提示設定機器人:

    I don't understand. What would you like to do?

    如果 Amazon Lex 不了解使用者的意圖,就會將此訊息傳送給用戶端。

     

  • 假設您建立機器人來支援稱為 OrderPizza 的意圖。對於比薩訂單,您需要使用者提供如比薩大小、配料和餅皮種類等資訊。您可以設定以下提示:

    What size pizza do you want? What toppings do you want? Do you want thick or thin crust?

    Amazon Lex 確定使用者訂購披薩的意圖後,就會將這些訊息傳送給用戶端,以取得使用者的資訊。

本節說明在機器人組態中設計使用者互動。

訊息的類型

訊息可以是提示或陳述。

  • 提示通常是問題並且預期使用者回應。

  • 陳述是提供資訊。它不預期回應。

訊息可以包括槽、工作階段屬性和請求屬性的參考。在執行階段,Amazon Lex 會以實際值取代這些參考。

若要參考已設定的槽值,請使用下列語法:

{SlotName}

若要參考工作階段屬性,請使用下列語法:

[SessionAttributeName]

若要參考請求屬性,請使用下列語法:

((RequestAttributeName))

訊息可以同時包括槽值、工作階段屬性和請求屬性。

例如,假設您在機器人 OrderPizza 意圖中設定以下訊息:

"Hey [FirstName], your {PizzaTopping} pizza will arrive in [DeliveryTime] minutes."

此訊息會同時參考槽 (PizzaTopping) 和工作階段屬性 (FirstNameDeliveryTime)。在執行階段,Amazon Lex 會以值取代這些預留位置,並將下列訊息傳回給用戶端:

"Hey John, your cheese pizza will arrive in 30 minutes."

若要在訊息中包含方括號 ([]) 或括號 ({}),請使用反斜線 (\) 逸出字元。例如,以下訊息包含大括號和方括號:

\{Text\} \[Text\]

傳回給用戶端應用程式的文字看起來如下:

{Text} [Text]

如需有關會話屬性的資訊,請參閱執行時間 API 操作 PostTextPostContent。如需範例,請參閱 預訂行程

Lambda 函數也可以產生訊息,並將其傳回給 Amazon Lex 以傳送給使用者。如果您在設定意圖時新增 Lambda 函數,則可以動態建立訊息。透過在設定機器人時提供訊息,您就不需要在 Lambda 函數中建構提示。

用於設定訊息的內容

當您建立機器人時,您可以在不同的前後關聯中建立訊息,例如機器人中的澄清提示、插槽值提示,以及來自意圖的訊息。Amazon Lex 會在每個環境中選擇適當的訊息以傳回給使用者。您可以針對每個內容提供一組訊息。如果這樣做,Amazon Lex 會隨機從群組中選擇一則訊息。您也可以指定訊息格式或將訊息群組在一起。如需詳細資訊,請參閱支援的訊息格式

如果您有與意圖相關聯的 Lambda 函數,則可以覆寫在建置階段設定的任何訊息。但是,Lambda 函數不需要使用任何這些消息。

機器人訊息

您可以使用澄清提示和工作階段結束訊息來設定您的機器人。在執行階段,如果 Amazon Lex 不瞭解使用者的意圖,就會使用澄清提示。您可以設定 Amazon Lex 在傳送工作階段結束訊息之前要求澄清的次數。您可以在 Amazon Lex 主控台的「錯誤處理」區段中設定機器人層級訊息,如下圖所示:

主控台編輯器索引標籤中的錯誤處理區段。可以指定澄清提示和掛斷詞組。

使用 API 時,您透過設定 clarificationPrompt 操作中的 abortStatementPutBot 欄位來設定訊息。

如果您使用含意圖的 Lambda 函數,Lambda 函數可能會傳回回應,指示 Amazon Lex 詢問使用者意圖。如果 Lambda 函數未提供此類訊息,Amazon Lex 會使用澄清提示。

槽提示

您必須為意圖中每個必要的槽指定至少一個提示訊息。在執行階段,Amazon Lex 會使用這些訊息之一來提示使用者提供插槽的值。例如,對於 cityName 槽,以下是有效的提示:

Which city would you like to fly to?

您可以使用主控台為每個槽設定一或多個提示。您也可以使用 PutIntent 操作建立提示群組。如需詳細資訊,請參閱訊息群組

回應

在主控台中,使用 Responses (回應) 區段為您的機器人建立動態、互動的對話。您可以針對一個回應建立一或多個訊息群組。在執行階段,Amazon Lex 透過從每個訊息群組中選取一則訊息來建立回應。如需有關訊息群組的詳細資訊,請參閱訊息群組

例如,您的第一個訊息群組可以包含不同的問候語:「哈囉」、「嗨」和「您好」。第二個訊息群組可以包含不同形式的簡介:「我是預約機器人」和「這是預約機器人。」 第三個訊息群組可以溝通機器人的功能:「我可以協助租車和飯店預訂」、「您可以租車與飯店預訂」和「我可以幫您租車和預訂飯店」。

Lex 會從每個訊息群組使用一則訊息,以動態方式在對談中建立回應。例如,一個互動可能是以下內容:

與機器人進行一次可能的對話。

另一個可能是以下內容:

與機器人的另一個可能的對話。

在這兩種情況下,使用者可以新意圖加以回應,例如 BookCarBookHotel 意圖。

您可以設定機器人在回應中詢問後續問題。例如,對於上述互動,您可以建立使用下列問題第四個訊息群組:「我可以協助租車或預訂飯店?」、「您想要現在預訂嗎?」和「有什麼我可以幫忙的地方嗎?」。對於包括「否」做為回應的訊息,您可以建立後續追蹤提示。以下是範例:

與機器人對話中的後續提示。

若要建立後續追蹤提示,請選擇 Wait for user reply (等待使用者回覆)。然後輸入當使用者說「否」時,您要傳送的訊息。當建立回應用作為後續追蹤提示時,您還必須在對陳述的回答為「否」時,指定適當的陳述。如需範例,請參閱下列影像:

使用者說「否」時的訊息組態。

若要使用 API 新增對意圖的回應,請使用 PutIntent 操作。若要指定回應,請在 conclusionStatement 請求中設定 PutIntent 欄位。若要設定後續追蹤提示,請設定 followUpPrompt 欄位,並包含當使用者表示「否」時要傳送的陳述。您無法同時在相同的意圖上設定 conclusionStatement 欄位和 followUpPrompt 欄位。

支援的訊息格式

當您使用PostText操作時,或在Accept標頭設為的情況下使用PostContent操作時text/plain;charset=utf8,Amazon Lex 支援以下格式的訊息:

  • PlainText郵件包含純 UTF-8 文字。

  • SSML訊息包含為語音輸出格式化的文字。

  • CustomPayload訊息包含您為用戶端建立的自訂格式。您可以定義承載,以符合應用程式的需求。

  • Composite訊息是訊息的集合,來自每個訊息群組。如需有關訊息群組的詳細資訊,請參閱訊息群組

根據預設,Amazon Lex 會傳回針對特定提示定義的任何一則訊息。例如,如果您定義五則訊息來引出插槽值,Amazon Lex 會隨機選擇其中一則訊息並將其傳回給用戶端。

如果您希望 Amazon Lex 在執行階段請求中將特定類型的訊息傳回給用戶端,請設定x-amzn-lex:accept-content-types請求參數。回應僅限於所請求的類型。如果有多個指定類型的 Amazon Lex 訊息,Amazon Lex 會隨機傳回一則訊息。如需有關 x-amz-lex:accept-content-types 標頭的詳細資訊,請參閱設定回應類型

訊息群組

訊息群組 是對特定提示的一組適當回應。當您希望機器人在對話中以動態方式建立回應時,請使用訊息群組。Amazon Lex 傳回對用戶端應用程式的回應時,會從每個群組隨機選擇一則訊息。您可以為每個回應建立最多 5 個訊息群組。每個群組最多可包含 5 個訊息。如需在主控台中建立訊息群組的範例,請參閱回應

若要建立訊息群組,您可以使用主控台或使用 PutBotPutIntentPutSlotType 操作為訊息指派群組號碼。如果您不建立訊息群組,或只建立一個訊息群組,Amazon Lex 會在Message欄位中傳送單一訊息。用戶端應用程式只會在主控台中已建立多個訊息群組,或是當您使用 PutIntent 操作建立或更新意圖時建立多個訊息群組時,才會在回應中獲得多個訊息。

Amazon Lex 從群組傳送訊息時,回應的Message欄位會包含含有訊息的逸出 JSON 物件。下例顯示當包含多個訊息時,Message 欄位的內容。

注意

範例已經過格式化以利閱讀。回應不包含換行字元 (CR)。

{\"messages\":[ {\"type\":\"PlainText\",\"group\":0,\"value\":\"Plain text\"}, {\"type\":\"SSML\",\"group\":1,\"value\":\"SSML text\"}, {\"type\":\"CustomPayload\",\"group\":2,\"value\":\"Custom payload\"} ]}

您可以設定訊息的格式。格式可為下列其中之一:

  • PlainText訊息以 UTF-8 純文字格式顯示。

  • SSML — 訊息為語音合成標記語言 (SSML)。

  • CustomPayload訊息採用您指定的自訂格式。

若要控制在 PostContent 欄位中 PostTextMessage 操作所傳回的訊息格式,請設定 x-amz-lex:accept-content-types 請求屬性。例如,如果將標頭設定如下,您只會在回應中收到純文字和 SSML 訊息:

x-amz-lex:accept-content-types: PlainText,SSML

如果您要求特定的訊息格式,而訊息群組不包含具備該格式的訊息,您會收到 NoUsableMessageException 例外狀況。當使用訊息群組依類型將訊息分組時,請勿使用 x-amz-lex:accept-content-types 標頭。

如需有關 x-amz-lex:accept-content-types 標頭的詳細資訊,請參閱設定回應類型

回應卡

注意

回應卡不適用於 Amazon Connect 聊天。不過,有關類似功能,請參閱新增互動式訊息至聊天室

回應卡包含一組對提示適當的回應。使用回應卡透過減少文字互動中的輸入錯誤,可簡化使用者的互動,並提高機器人的準確性。您可以針對 Amazon Lex 傳送到用戶端應用程式的每個提示傳送回應卡。您可以搭配 Facebook、Twilio、Messenger、Slack 和自己的用戶端應用程式使用回應卡。

例如,在計程車應用程式中,您可以在回應卡中設定「家」的選項,並將值設定為使用者的住家地址。當使用者選取此選項時,Amazon Lex 會接收整個地址做為輸入文字。請參閱下圖:

範例回應卡。

您可以定義回應卡用於以下提示:

  • 結論陳述

  • 確認提示

  • 後續追蹤提示

  • 拒絕陳述

  • 槽類型表達用語

您只能為每個提示定義一個回應卡。

您是在設定意圖時建立回應卡。您可以在建置時間使用主控台或 PutIntent 操作定義靜態回應卡。或者,您可以在 Lambda 函數中在執行階段定義動態回應卡。如果您同時定義靜態和動態回應卡,會以動態回應卡為優先。

Amazon Lex 會以客戶瞭解的格式傳送回應卡。它會針對 Facebook Messenger、Slack 和 Twilio 轉換回應卡。對於其他用戶端,Amazon Lex 會在PostText回應中傳送 JSON 結構。例如,如果客戶端是 Facebook 信使,Amazon Lex 將響應卡轉換為通用模板。如需有關 Facebook Messenger 一般範本的詳細資訊,請參閱 Facebook 網站上的一般範本。如需使用 JSON 結構的範例,請參閱動態產生回應卡

您只能搭配 PostText 操作使用回應卡。您無法搭配 PostContent 操作使用回應卡。

定義靜態回應卡

在建立意圖時,使用PutBot作業或 Amazon Lex 主控台定義靜態回應卡。靜態回應卡是與意圖同時定義。請在回應為固定時使用靜態回應卡。假設您要建立具有一個意圖的機器人,當中有個口味的槽。您在定義口味槽時指定提示,如以下主控台螢幕擷取畫面所示:

在主控台中的意圖編輯器。

定義提示時,您可以選擇將回應卡關聯並定義詳細資料與PutBot作業,或者在 Amazon Lex 主控台中定義詳細資訊,如下列範例所示:

主控台顯示回應卡編輯器。

現在,假設您已將機器人與 Facebook Messenger 整合。使用者可以按一下按鈕來選擇口味,如下圖所示:

Facebook Messenger 中的回應卡。

若要自訂回應卡的內容,您可以參考工作階段屬性。在執行階段,Amazon Lex 會以工作階段屬性中的適當值取代這些參考。如需詳細資訊,請參閱設定工作階段屬性。如需範例,請參閱 使用回應卡

動態產生回應卡

若要在執行階段動態產生回應卡,請針對意圖使用初始化和驗證 Lambda 函數。在 Lambda 函數中執行時決定回應時,請使用動態回應卡。為了回應使用者的輸入,Lambda 函數會產生回應卡,並在回應dialogAction區段中傳回回應卡。如需詳細資訊,請參閱回應格式

以下是來自顯示responseCard元素的 Lambda 函數的部分回應。它產生與前一節所示的使用者體驗類似。

responseCard: { "version": 1, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title": "What Flavor?", "subtitle": "What flavor do you want?", "imageUrl": "Link to image", "attachmentLinkUrl": "Link to attachment", "buttons": [ { "text": "Lemon", "value": "lemon" }, { "text": "Raspberry", "value": "raspberry" }, { "text": "Plain", "value": "plain" } ] } ] }

如需範例,請參閱 安排預約