

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

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

# 步驟 2a (選用)：檢閱口語化資訊流程的詳細資訊 (主控台)
<a name="gs-bp-details-postcontent-flow"></a>

本節說明當用戶端使用語音傳送請求時，用戶端與 Amazon Lex 之間的資訊流程。如需詳細資訊，請參閱[PostContent](API_runtime_PostContent.md)。

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

   1. 用戶端 (主控台) 傳送以下 [PostContent](API_runtime_PostContent.md) 請求給 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`)、機器人別名 (`$LATEST`) 和使用者名稱 （識別使用者的隨機字串）。 `content`表示這是 `PostContent` API 請求 （而非`PostText`請求）。
      + 請求標頭
        + `x-amz-lex-session-attributes` – base64 編碼值代表 "{}"。用戶端發出第一次請求時，沒有工作階段屬性。
        + `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}}
      ```

   1. 從輸入串流中，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 編碼版本的工作階段屬性 ({})

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

1. 使用者說：玫瑰

   1. 用戶端 (主控台) 傳送以下 [PostContent](API_runtime_PostContent.md) 請求給 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` 仍為空白。

   1. 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 編碼版本的工作階段屬性 ({})

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

1. 使用者說：明天

   1. 用戶端 (主控台) 傳送以下 [PostContent](API_runtime_PostContent.md) 請求給 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` 仍為空白。

   1. 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 編碼版本的工作階段屬性 ({})

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

1. 使用者說：下午 6 點

   1. 用戶端 (主控台) 傳送以下 [PostContent](API_runtime_PostContent.md) 請求給 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` 仍為空白。

   1. 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 編碼版本的工作階段屬性 ({})

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

1. 使用者說：好

   1. 用戶端 (主控台) 傳送以下 [PostContent](API_runtime_PostContent.md) 請求給 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` 仍為空白。

   1. 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`。隨後用戶端即可實現意圖。

1. 現在，重新測試機器人。要建立新的 (使用者) 內容，請由主控台選擇 **Clear (清除)** 連結。為 `OrderFlowers` 意圖提供資料，包括一些無效的資料。例如：
   + 花種為「茉莉」(此花種不受支援)
   + 想要取花的日期為「昨天」

   請注意，機器人會接受這些值，因為您沒有任何程式碼來初始化和驗證使用者資料。在下一節中，您可以新增 Lambda 函數來執行此操作。請注意下列有關 Lambda 函數的事項：
   + 函數將於使用者每次輸入後驗證槽資料。其將在結束時實現意圖。也就是說，機器人會處理訂花的下單，然後向使用者傳回一則訊息，而不單只是將槽資料傳回用戶端。如需詳細資訊，請參閱[使用 Lambda 函數](using-lambda.md)。
   + 函數還將設定工作階段屬性。如需工作階段屬性的詳細資訊，請參閱 [PostText](API_runtime_PostText.md)。

      完成入門章節後，您可以接著做其他練習 ([其他範例：建立 Amazon Lex 機器人](additional-exercises.md) )。[預訂行程](ex-book-trip.md) 將利用工作階段屬性，透過跨意圖共享資訊與使用者進行動態對話。

**後續步驟**  
[步驟 3：建立 Lambda 函數 （主控台）](gs-bp-create-lambda-function.md)