步驟 2a (選用):檢閱口語化資訊流程的詳細資訊 (主控台) - Amazon Lex V1

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

 

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

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

步驟 2a (選用):檢閱口語化資訊流程的詳細資訊 (主控台)

本節說明用戶端使用語音傳送請求時,用戶端和 Amazon Lex 之間的資訊流程。如需詳細資訊,請參閱PostContent

  1. 使用者說:我想要訂花。

    1. 用戶端 (主控台) 傳送以下 PostContent 請求給 Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream

      請求 URI 和本文都向 Amazon Lex 提供信息:

      • 請求 URI — 提供機器人名稱 (OrderFlowers)、bot 別名 ($LATEST) 和使用者名稱 (可識別使用者的隨機字串)。 content表示這是PostContent API 請求(不是PostText請求)。

      • 要求標頭

        • x-amz-lex-session-attributes— 以底 64 編碼的值代表「{}」。用戶端發出第一次請求時,沒有工作階段屬性。

        • Content-Type – 反映音訊格式。

      • 請求內文 – 使用者輸入音訊串流「我想要訂花。」

      注意

      如果使用者選擇傳送「我想要訂花」的文字給 PostContent API 而非使用語音,請求內文就會是使用者輸入。Content-Type 標頭會相應地進行設定:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "text/plain; charset=utf-8" Accept: accept Request body input stream
    2. 從輸入串流中,Amazon Lex 偵測到意圖 (OrderFlowers)。而後,其將選擇該意圖的其中一個槽 (本例中為 FlowerType) 和其中一個值引出提示,接著傳送具有以下標頭的回應:

      x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:I would like to order some flowers. x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:What type of flowers would you like to order? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:FlowerType x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjpudWxsLCJQaWNrdXBEYXRlIjpudWxsfQ==

      標頭值提供以下資訊:

      • x-amz-lex-input-transcript – 提供來自請求的音訊 (使用者輸入) 的文本

      • x-amz-lex-message— 提供在響應中返回的音頻 Amazon Lex 的成績單

      • x-amz-lex-slots – base64 編碼版本的槽和值:

        {"PickupTime":null,"FlowerType":null,"PickupDate":null}
      • x-amz-lex-session-attributes – base64 編碼版本的工作階段屬性 ({})

      用戶端播放回應內文中的音訊。

  2. 使用者說:玫瑰

    1. 用戶端 (主控台) 傳送以下 PostContent 請求給 Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream ("roses")

      請求內文是使用者輸入音訊串流「玫瑰」。sessionAttributes 仍為空白。

    2. Amazon Lex 會根據目前意圖的內容解譯輸入串流 (記得已向此使用者詢問與FlowerType插槽相關的資訊)。Amazon Lex 會先更新目前意圖的插槽值。而後,其將選擇另一個槽 (PickupDate) 以及該槽的其中一則提示訊息 (您想要在什麼時間拿取玫瑰?),並傳回具有以下標頭的回應:

      x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:roses x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:When do you want to pick up the roses? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:PickupDate x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6bnVsbH0=

      標頭值提供以下資訊:

      • x-amz-lex-slots – base64 編碼版本的槽和值:

        {"PickupTime":null,"FlowerType":"roses","PickupDate":null}
      • x-amz-lex-session-attributes – base64 編碼版本的工作階段屬性 ({})

      用戶端播放回應內文中的音訊。

  3. 使用者說:明天

    1. 用戶端 (主控台) 傳送以下 PostContent 請求給 Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream ("tomorrow")

      請求內文是使用者輸入音訊串流「明天」。sessionAttributes 仍為空白。

    2. Amazon Lex 會根據目前意圖的內容解譯輸入串流 (記得已向此使用者詢問與PickupDate插槽相關的資訊)。Amazon Lex 會針對目前的意圖更新插槽 (PickupDate) 值。而後,其將選擇另一個槽 (PickupTime) 來引出槽值,並且選擇其中一個值引出提示 (您想要在 2017 年 3 月 18 日什麼時間拿取玫瑰?),接著傳回具有以下標頭的回應:

      x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:tomorrow x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:When do you want to pick up the roses on 2017-03-18? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:PickupTime x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ== x-amzn-RequestId:3a205b70-0b69-11e7-b447-eb69face3e6f

      標頭值提供以下資訊:

      • x-amz-lex-slots – base64 編碼版本的槽和值:

        {"PickupTime":null,"FlowerType":"roses","PickupDate":"2017-03-18"}
      • x-amz-lex-session-attributes – base64 編碼版本的工作階段屬性 ({})

      用戶端播放回應內文中的音訊。

  4. 使用者說:下午 6 點

    1. 用戶端 (主控台) 傳送以下 PostContent 請求給 Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "text/plain; charset=utf-8" Accept: "audio/mpeg" Request body input stream ("6 pm")

      請求內文是使用者輸入音訊串流「下午 6 點」。sessionAttributes 仍為空白。

    2. Amazon Lex 會根據目前意圖的內容解譯輸入串流 (記得已向此使用者詢問與PickupTime插槽相關的資訊)。其將首先更新目前意圖的槽值。

      現在,Amazon Lex 偵測到它具有所有插槽的資訊。不過,OrderFlowers 意圖設定了一則確認訊息。因此,Amazon Lex 需要使用者明確確認,才能繼續履行意圖。訂花之前,其將傳送具有以下要求確認標頭的回應:

      x-amz-lex-dialog-state:ConfirmIntent x-amz-lex-input-transcript:six p. m. x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:Okay, your roses will be ready for pickup by 18:00 on 2017-03-18. Does this sound okay? x-amz-lex-session-attributes:e30= x-amz-lex-slots:eyJQaWNrdXBUaW1lIjoiMTg6MDAiLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ== x-amzn-RequestId:083ca360-0b6a-11e7-b447-eb69face3e6f

      標頭值提供以下資訊:

      • x-amz-lex-slots – base64 編碼版本的槽和值:

        {"PickupTime":"18:00","FlowerType":"roses","PickupDate":"2017-03-18"}
      • x-amz-lex-session-attributes – base64 編碼版本的工作階段屬性 ({})

      用戶端播放回應內文中的音訊。

  5. 使用者說:好

    1. 用戶端 (主控台) 傳送以下 PostContent 請求給 Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream ("Yes")

      請求內文是使用者輸入音訊串流「好」。sessionAttributes 仍為空白。

    2. Amazon Lex 會解譯輸入串流,並瞭解使用者想要繼續執行訂單。OrderFlowers 意圖設定了 ReturnIntent 做為履行活動。這會指示 Amazon Lex 將所有意圖資料傳回給用戶端。Amazon Lex 返回具有以下內容的回應:

      x-amz-lex-dialog-state:ReadyForFulfillment x-amz-lex-input-transcript:yes x-amz-lex-intent-name:OrderFlowers x-amz-lex-session-attributes:e30= x-amz-lex-slots:eyJQaWNrdXBUaW1lIjoiMTg6MDAiLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ==

      x-amz-lex-dialog-state 回應標頭設為 ReadyForFulfillment。隨後用戶端即可實現意圖。

  6. 現在,重新測試機器人。要建立新的 (使用者) 內容,請由主控台選擇 Clear (清除) 連結。為 OrderFlowers 意圖提供資料,包括一些無效的資料。例如:

    • 花種為「茉莉」(此花種不受支援)

    • 想要取花的日期為「昨天」

    請注意,機器人會接受這些值,因為您沒有任何程式碼來初始化和驗證使用者資料。在下一節中,您可以新增 Lambda 函數來執行此操作。請注意 Lambda 函數的事項:

    • 函數將於使用者每次輸入後驗證槽資料。其將在結束時實現意圖。也就是說,機器人會處理訂花的下單,然後向使用者傳回一則訊息,而不單只是將槽資料傳回用戶端。如需詳細資訊,請參閱使用 Lambda 函數

    • 函數還將設定工作階段屬性。如需工作階段屬性的詳細資訊,請參閱 PostText

      完成入門章節後,您可以接著做其他練習 (其他示例:創建 Amazon Lex 機器人 )。預訂行程 將利用工作階段屬性,透過跨意圖共享資訊與使用者進行動態對話。

後續步驟

步驟 3:建立 Lambda 函數