

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

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

# 資訊流程的詳細資訊
<a name="book-trip-detail-flow"></a>

在本練習中，您使用 Amazon Lex 主控台中提供的測試時段用戶端與 Amazon Lex BookTrip 機器人進行對話。本節說明下列各項：
+ 用戶端與 Amazon Lex 之間的資料流程。

   

  本節假設用戶端使用`PostText`執行時間 API 將請求傳送至 Amazon Lex，並相應地顯示請求和回應詳細資訊。如需有關 `PostText` 執行時間 API 的詳細資訊，請參閱 [PostText](API_runtime_PostText.md)。
**注意**  
如需用戶端與用戶端使用 `PostContent` API 的 Amazon Lex 之間資訊流程的範例，請參閱 [步驟 2a (選用)：檢閱口語化資訊流程的詳細資訊 (主控台)](gs-bp-details-postcontent-flow.md)。

   
+ Amazon Lex 和 Lambda 函數之間的資料流程。如需詳細資訊，請參閱[Lambda 函數輸入事件和回應格式](lambda-input-response-format.md)。

**Topics**
+ [資料流程：預訂飯店意圖](#data-flow-book-hotel)
+ [資料流程：預訂租車意圖](#data-flow-book-car)

## 資料流程：預訂飯店意圖
<a name="data-flow-book-hotel"></a>

本節說明在使用者每次輸入之後，會發生什麼情況。

1. 使用者：「預訂飯店」

   1. 用戶端 (主控台) 傳送以下 [PostText](API_runtime_PostText.md) 請求給 Amazon Lex：

      ```
      POST /bot/{{BookTrip}}/alias/{{$LATEST}}/user/{{wch89kjqcpkds8seny7dly5x3otq68j3}}/text
      "Content-Type":"application/json"
      "Content-Encoding":"amz-1.0"
      
      {
         "inputText":"book a hotel",
         "sessionAttributes":{}
      }
      ```

      請求 URI 和內文都會提供資訊給 Amazon Lex：
      + 請求 URI – 提供機器人名稱 (BookTrip)、機器人別名 ($LATEST) 和使用者名稱。末尾的 `text` 表示其為 `PostText` API 請求 (而非 `PostContent`)。
      + 請求本文 – 包含使用者輸入 (`inputText`) 和空的 `sessionAttributes`。一開始，這是一個空的物件，Lambda 函數會先設定工作階段屬性。

      

   1. 從 `inputText`，Amazon Lex 會偵測意圖 (BookHotel)。此意圖是以 Lambda 函數設定為使用者資料初始化/驗證的程式碼掛勾。因此，Amazon Lex 會透過傳遞下列資訊做為事件參數來叫用該 Lambda 函數 （請參閱 [輸入事件格式](lambda-input-response-format.md#using-lambda-input-event-format))：

      ```
      {
         "messageVersion":"1.0",
         "invocationSource":"DialogCodeHook",
         "userId":"wch89kjqcpkds8seny7dly5x3otq68j3",
         "sessionAttributes":{
         },
         "bot":{
            "name":"BookTrip",
            "alias":null,
            "version":"$LATEST"
         },
         "outputDialogMode":"Text",
         "currentIntent":{
            "name":"BookHotel",
            "slots":{
               "RoomType":null,
               "CheckInDate":null,
               "Nights":null,
               "Location":null
            },
            "confirmationStatus":"None"
         }
      }
      ```

      除了用戶端傳送的資訊之外，Amazon Lex 還包含下列其他資料：
      + `messageVersion` – 目前 Amazon Lex 僅支援 1.0 版本。
      + `invocationSource` – 指出 Lambda 函數調用的目的。在這種情況下，它是執行使用者資料初始化和驗證 （此時 Amazon Lex 知道使用者尚未提供所有槽資料以滿足意圖）。
      + `currentIntent` – 所有槽值設定為 null。

   1. 此時，所有槽值都是 null。Lambda 函數不需要驗證。Lambda 函數會傳回下列回應給 Amazon Lex。如需有關回應格式的資訊，請參閱[回應格式](lambda-input-response-format.md#using-lambda-response-format)。

      ```
      {
         "sessionAttributes":{
            "currentReservation":"{\"ReservationType\":\"Hotel\",\"Location\":null,\"RoomType\":null,\"CheckInDate\":null,\"Nights\":null}"
         },
         "dialogAction":{
            "type":"Delegate",
            "slots":{
               "RoomType":null,
               "CheckInDate":null,
               "Nights":null,
               "Location":null
            }
         }
      }
      ```
**注意**  
`currentReservation` – Lambda 函數包含此工作階段屬性。其值是目前槽資訊和預訂類型的副本。  
只有 Lambda 函數和用戶端可以更新這些工作階段屬性。Amazon Lex 只會傳遞這些值。
`dialogAction.type` – 透過將此值設定為 `Delegate`，Lambda 函數會將後續動作的責任委派給 Amazon Lex。  
如果 Lambda 函數在使用者資料驗證中偵測到任何內容，它會指示 Amazon Lex 接下來要做什麼。

   1. 根據 `dialogAction.type`，Amazon Lex 會決定下一個動作過程，從使用者取得`Location`槽的資料。它根據意圖組態選擇其中一個提示訊息 (「您會待在哪個城市？」) 給這個槽，然後傳送以下回應使用者：  
![包含對話方塊狀態、意圖名稱、訊息、回應卡、工作階段屬性、引出槽和槽的 JSON 回應。](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/book-hotel-10.png)

      工作階段屬性傳遞給用戶端。

      用戶端讀取回應，然後顯示「您要在哪個城市留宿？」

1. 使用者：「莫斯科」

   1. 用戶端會將下列`PostText`請求傳送至 Amazon Lex （為便於閱讀而新增換行）：

      ```
      POST /bot/{{BookTrip}}/alias/{{$LATEST}}/user/{{wch89kjqcpkds8seny7dly5x3otq68j3}}/text
      "Content-Type":"application/json"
      "Content-Encoding":"amz-1.0"
      
      {
         "inputText":"Moscow",
         "sessionAttributes":{
             "currentReservation":"{\"ReservationType\":\"Hotel\",
                                    \"Location\":null,
                                    \"RoomType\":null,
                                    \"CheckInDate\":null,
                                    \"Nights\":null}"
         }
      }
      ```

      除了 `inputText` 之外，用戶端還包含了它所收到的相同 `currentReservation` 工作階段屬性。

   1. Amazon Lex 會先在目前意圖的內容`inputText`中解譯 （服務會記住已向特定使用者詢問`Location`槽的相關資訊）。它會更新目前意圖的槽值，並使用下列事件叫用 Lambda 函數：

      ```
      {
          "messageVersion": "1.0",
          "invocationSource": "DialogCodeHook",
          "userId": "wch89kjqcpkds8seny7dly5x3otq68j3",
          "sessionAttributes": {
              "currentReservation": "{\"ReservationType\":\"Hotel\",\"Location\":null,\"RoomType\":null,\"CheckInDate\":null,\"Nights\":null}"
          },
          "bot": {
              "name": "BookTrip",
              "alias": null,
              "version": "$LATEST"
          },
          "outputDialogMode": "Text",
          "currentIntent": {
              "name": "BookHotel",
              "slots": {
                  "RoomType": null,
                  "CheckInDate": null,
                  "Nights": null,
                  "Location": "Moscow"
              },
              "confirmationStatus": "None"
          }
      }
      ```
**注意**  
`invocationSource` 繼續做為 `DialogCodeHook`。在此步驟中，我們只需驗證使用者資料。
Amazon Lex 只是將工作階段屬性傳遞至 Lambda 函數。
對於 `currentIntent.slots`，Amazon Lex 已將`Location`插槽更新為 `Moscow`。

   1. Lambda 函數會執行使用者資料驗證，並判斷 `Moscow` 是無效的位置。
**注意**  
本練習中的 Lambda 函數具有有效城市的簡單清單，`Moscow`且不在清單中。在生產應用程式中，您可以使用後端資料庫來取得此資訊。

      它會將槽值重設回 null，並指示 Amazon Lex 透過傳送下列回應，再次提示使用者輸入另一個值：

      ```
      {
          "sessionAttributes": {
              "currentReservation": "{\"ReservationType\":\"Hotel\",\"Location\":\"Moscow\",\"RoomType\":null,\"CheckInDate\":null,\"Nights\":null}"
          },
          "dialogAction": {
              "type": "ElicitSlot",
              "intentName": "BookHotel",
              "slots": {
                  "RoomType": null,
                  "CheckInDate": null,
                  "Nights": null,
                  "Location": null
              },
              "slotToElicit": "Location",
              "message": {
                  "contentType": "PlainText",
                  "content": "We currently do not support Moscow as a valid destination.  Can you try a different city?"
              }
          }
      }
      ```
**注意**  
`currentIntent.slots.Location` 重設為 null。
`dialogAction.type` 設定為 `ElicitSlot`，這會指示 Amazon Lex 透過提供下列項目再次提示使用者：  
`dialogAction.slotToElicit` – 向使用者引出資料的槽。
`dialogAction.message` – 傳達給使用者的 `message`。

   1. Amazon Lex 注意到 ，`dialogAction.type`並在下列回應中將資訊傳遞給用戶端：  
![包含對話方塊狀態、意圖名稱、訊息、回應卡、工作階段屬性、引出槽和槽的 JSON 回應。](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/book-hotel-20.png)

      用戶端直接顯示訊息：「莫斯科目前不是我們支援的有效目的地。您可以嘗試不同的城市嗎？」

1. 使用者：「芝加哥」

   1. 用戶端會將下列`PostText`請求傳送至 Amazon Lex：

      ```
      POST /bot/{{BookTrip}}/alias/{{$LATEST}}/user/{{wch89kjqcpkds8seny7dly5x3otq68j3}}/text
      "Content-Type":"application/json"
      "Content-Encoding":"amz-1.0"
      
      {
         "inputText":"Chicago",
         "sessionAttributes":{
             "currentReservation":"{\"ReservationType\":\"Hotel\",
                                    \"Location\":\"Moscow\",
                                    \"RoomType\":null,
                                    \"CheckInDate\":null,
                                    \"Nights\":null}"
         }
      }
      ```

      

   1. Amazon Lex 知道內容，它正在引出`Location`槽的資料。在此情況下，服務知道 `inputText` 值是用於 `Location` 槽。然後，它會傳送下列事件來叫用 Lambda 函數：

      ```
      {
          "messageVersion": "1.0",
          "invocationSource": "DialogCodeHook",
          "userId": "wch89kjqcpkds8seny7dly5x3otq68j3",
          "sessionAttributes": {
              "currentReservation": "{\"ReservationType\":\"Hotel\",\"Location\":Moscow,\"RoomType\":null,\"CheckInDate\":null,\"Nights\":null}"
          },
          "bot": {
              "name": "BookTrip",
              "alias": null,
              "version": "$LATEST"
          },
          "outputDialogMode": "Text",
          "currentIntent": {
              "name": "BookHotel",
              "slots": {
                  "RoomType": null,
                  "CheckInDate": null,
                  "Nights": null,
                  "Location": "Chicago"
              },
              "confirmationStatus": "None"
          }
      }
      ```

      Amazon Lex 透過將`Location`插槽設定為 `currentIntent.slots`來更新 `Chicago`。

   1. 根據 `invocationSource`的值`DialogCodeHook`，Lambda 函數會執行使用者資料驗證。它會辨識`Chicago`為有效的槽值，相應地更新工作階段屬性，然後將以下回應傳回給 Amazon Lex。

      ```
      {
          "sessionAttributes": {
              "currentReservation": "{\"ReservationType\":\"Hotel\",\"Location\":\"Chicago\",\"RoomType\":null,\"CheckInDate\":null,\"Nights\":null}"
          },
          "dialogAction": {
              "type": "Delegate",
              "slots": {
                  "RoomType": null,
                  "CheckInDate": null,
                  "Nights": null,
                  "Location": "Chicago"
              }
          }
      }
      ```
**注意**  
`currentReservation` – Lambda 函數會將 設定為 `Location`來更新此工作階段屬性`Chicago`。
`dialogAction.type` – 已設定為 `Delegate`。使用者資料有效，Lambda 函數會指示 Amazon Lex 選擇下一個動作。

       

   1. 根據 `dialogAction.type`，Amazon Lex 選擇下一個動作。Amazon Lex 知道它需要更多槽資料，並根據意圖組態挑選具有最高優先順序的下一個未填充槽 (`CheckInDate`)。它根據意圖組態選擇其中一個提示訊息 (「您入住的日期是哪一天？」) 給這個槽，然後將以下回應傳回給使用者：  
![包含對話方塊狀態、意圖名稱、訊息、回應卡、工作階段屬性、引出槽和槽的 JSON 回應。位置插槽現在已填入為芝加哥。](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/book-hotel-30.png)

      用戶端顯示訊息：「您要在哪一天入住？」 

   

1. 使用者互動會繼續 – 使用者提供資料，Lambda 函數會驗證資料，然後將下一個動作過程委派給 Amazon Lex。最後，使用者提供所有槽資料，Lambda 函數會驗證所有使用者輸入，然後 Amazon Lex 會辨識其具有所有槽資料。
**注意**  
在本練習中，使用者提供所有槽資料後，Lambda 函數會計算飯店保留的價格，並將其傳回為另一個工作階段屬性 (`currentReservationPrice`)。

   此時，意圖已準備好履行，但 BookHotel 意圖已設定為需要使用者確認才能 Amazon Lex 履行意圖的確認提示。因此，Amazon Lex 會在預訂飯店之前，將下列訊息傳送給請求確認的用戶端：  
![包含對話方塊狀態、意圖名稱、訊息、回應卡、工作階段屬性、引出槽和槽的 JSON 回應。現在已填入所有插槽。](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/book-hotel-40.png)

   用戶端顯示訊息：「好的，您要在芝加哥預訂 5 晚，從 2016-12-18 開始。要我預訂嗎？」

1. 使用者：「是」

   1. 用戶端會將下列`PostText`請求傳送至 Amazon Lex：

      ```
      POST /bot/{{BookTrip}}/alias/{{$LATEST}}/user/{{wch89kjqcpkds8seny7dly5x3otq68j3}}/text
      "Content-Type":"application/json"
      "Content-Encoding":"amz-1.0"
      
      {
         "inputText":"Yes",
         "sessionAttributes":{
             "currentReservation":"{\"ReservationType\":\"Hotel\",
                                    \"Location\":\"Chicago\",
                                    \"RoomType\":\"queen\",
                                    \"CheckInDate\":\"2016-12-18\",
                                    \"Nights\":\"5\"}",
            "currentReservationPrice":"1195"
         }
      }
      ```

   1. Amazon Lex `inputText`會在確認目前意圖的情況下解譯 。Amazon Lex 了解使用者想要繼續保留。這次，Amazon Lex 會呼叫 Lambda 函數，透過傳送下列事件來實現意圖。透過在 事件`FulfillmentCodeHook`中`invocationSource`將 設定為 ，它會傳送至 Lambda 函數。Amazon Lex 也會將 `confirmationStatus`設定為 `Confirmed`。

      ```
      {
          "messageVersion": "1.0",
          "invocationSource": "FulfillmentCodeHook",
          "userId": "wch89kjqcpkds8seny7dly5x3otq68j3",
          "sessionAttributes": {
              "currentReservation": "{\"ReservationType\":\"Hotel\",\"Location\":\"Chicago\",\"RoomType\":\"queen\",\"CheckInDate\":\"2016-12-18\",\"Nights\":\"5\"}",
              "currentReservationPrice": "956"
          },
          "bot": {
              "name": "BookTrip",
              "alias": null,
              "version": "$LATEST"
          },
          "outputDialogMode": "Text",
          "currentIntent": {
              "name": "BookHotel",
              "slots": {
                  "RoomType": "queen",
                  "CheckInDate": "2016-12-18",
                  "Nights": "5",
                  "Location": "Chicago"
              },
              "confirmationStatus": "Confirmed"
          }
      }
      ```
**注意**  
`invocationSource` – 這次，Amazon Lex 將此值設定為 `FulfillmentCodeHook`，指示 Lambda 函數實現意圖。
`confirmationStatus` – 已設定為 `Confirmed`。

   1. 這次，Lambda 函數滿足 BookHotel 意圖，Amazon Lex 完成保留，然後傳回下列回應：

      ```
      {
          "sessionAttributes": {
              "lastConfirmedReservation": "{\"ReservationType\":\"Hotel\",\"Location\":\"Chicago\",\"RoomType\":\"queen\",\"CheckInDate\":\"2016-12-18\",\"Nights\":\"5\"}"
          },
          "dialogAction": {
              "type": "Close",
              "fulfillmentState": "Fulfilled",
              "message": {
                  "contentType": "PlainText",
                  "content": "Thanks, I have placed your reservation.   Please let me know if you would like to book a car rental, or another hotel."
              }
          }
      }
      ```
**注意**  
 `lastConfirmedReservation` – 是 Lambda 函數新增的新工作階段屬性 （而非 `currentReservation`、)`currentReservationPrice`。
`dialogAction.type` – Lambda 函數將此值設定為 `Close`，表示 Amazon Lex 不會預期使用者回應。
`dialogAction.fulfillmentState` – 已設定為 `Fulfilled` 並包含適當的 `message` 以傳達給使用者。

      

      

   1. Amazon Lex 會檢閱 `fulfillmentState`，並將下列回應傳送給用戶端：  
![包含對話方塊狀態、意圖名稱、訊息、回應卡、工作階段屬性、引出槽和槽的 JSON 回應。所有槽都已填入，工作階段屬性下的最後確認保留欄位現在已填入。](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/book-hotel-60.png)
**注意**  
`dialogState` – Amazon Lex 將此值設定為 `Fulfilled`。
`message` – 與 Lambda 函數提供的訊息相同。

       用戶端將顯示該訊息。

## 資料流程：預訂租車意圖
<a name="data-flow-book-car"></a>

此練習中的 BookTrip 機器人支援兩個意圖 (BookHotel 和 BookCar)。預訂飯店之後，使用者可以繼續預訂租車的對話。只要工作階段未逾時，用戶端就會在每個後續的請求中繼續傳送工作階段屬性 (在這個範例中，即 `lastConfirmedReservation`)。Lambda 函數可以使用此資訊來初始化 BookCar 意圖的槽資料。這說明您如何能夠在跨意圖資料分享中使用工作階段屬性。

具體而言，當使用者選擇 BookCar 意圖時，Lambda 函數會使用工作階段屬性中的相關資訊來預先填入 BookCar 意圖的槽 (PickUpDate、ReturnDate 和 PickUpCity)。

**注意**  
Amazon Lex 主控台提供**清除**連結，您可以用來清除任何先前的工作階段屬性。

按照此程序中的步驟，繼續對話。

1. 使用者：「還要預訂租車」

   1. 用戶端會將下列`PostText`請求傳送至 Amazon Lex。

      ```
      POST /bot/{{BookTrip}}/alias/{{$LATEST}}/user/{{wch89kjqcpkds8seny7dly5x3otq68j3}}/text
      "Content-Type":"application/json"
      "Content-Encoding":"amz-1.0"
      
      {
         "inputText":"also book a car",
         "sessionAttributes":{
             "lastConfirmedReservation":""{\"ReservationType\":\"Hotel\",
                                           \"Location\":\"Chicago\",
                                           \"RoomType\":\"queen\",
                                           \"CheckInDate\":\"2016-12-18\",
                                           \"Nights\":\"5\"}"
         }
      }
      ```

      用戶端包含 `lastConfirmedReservation` 工作階段屬性。

   1. Amazon Lex 從 偵測意圖 (BookCar)`inputText`。此意圖也會設定為叫用 Lambda 函數，以執行使用者資料的初始化和驗證。Amazon Lex 使用下列事件叫用 Lambda 函數：

      ```
      {
          "messageVersion": "1.0",
          "invocationSource": "DialogCodeHook",
          "userId": "wch89kjqcpkds8seny7dly5x3otq68j3",
          "sessionAttributes": {
              "lastConfirmedReservation": "{\"ReservationType\":\"Hotel\",\"Location\":\"Chicago\",\"RoomType\":\"queen\",\"CheckInDate\":\"2016-12-18\",\"Nights\":\"5\"}"
          },
          "bot": {
              "name": "BookTrip",
              "alias": null,
              "version": "$LATEST"
          },
          "outputDialogMode": "Text",
          "currentIntent": {
              "name": "BookCar",
              "slots": {
                  "PickUpDate": null,
                  "ReturnDate": null,
                  "DriverAge": null,
                  "CarType": null,
                  "PickUpCity": null
              },
              "confirmationStatus": "None"
          }
      }
      ```
**注意**  
 `messageVersion` – 目前 Amazon Lex 僅支援 1.0 版本。
`invocationSource` – 指出呼叫的目的是執行初始化和使用者資料驗證。
`currentIntent` – 它包含意圖名稱和槽。此時，所有插槽值都是 null。

      

   1. Lambda 函數會注意到所有 null 槽值，無需驗證。然而，它使用工作階段屬性來初始化一些槽值 (`PickUpDate`、`ReturnDate` 和 `PickUpCity`)，然後傳回以下回應：

      ```
      {
          "sessionAttributes": {
              "lastConfirmedReservation": "{\"ReservationType\":\"Hotel\",\"Location\":\"Chicago\",\"RoomType\":\"queen\",\"CheckInDate\":\"2016-12-18\",\"Nights\":\"5\"}",
              "currentReservation": "{\"ReservationType\":\"Car\",\"PickUpCity\":null,\"PickUpDate\":null,\"ReturnDate\":null,\"CarType\":null}",
              "confirmationContext": "AutoPopulate"
          },
          "dialogAction": {
              "type": "ConfirmIntent",
              "intentName": "BookCar",
              "slots": {
                  "PickUpCity": "Chicago",
                  "PickUpDate": "2016-12-18",
                  "ReturnDate": "2016-12-22",
                  "CarType": null,
                  "DriverAge": null
              },
              "message": {
                  "contentType": "PlainText",
                  "content": "Is this car rental for your 5 night stay in Chicago on 2016-12-18?"
              }
          }
      }
      ```
**注意**  
除了 之外`lastConfirmedReservation`，Lambda 函數還包含更多工作階段屬性 (`currentReservation` 和 `confirmationContext`)。
`dialogAction.type` 設定為 `ConfirmIntent`，這會通知 Amazon Lex 使用者不需要回覆 (confirmationContext 設定為 AutoPopulate，Lambda 函數知道是/否使用者回覆是取得執行的 Lambda 函數初始化 （自動填入槽資料） 的使用者確認。  
   
Lambda 函數也在回應中包含 中的資訊性訊息，`dialogAction.message`以便 Amazon Lex 傳回用戶端。  
`ConfirmIntent` 一詞 (`dialogAction.type` 的值) 不與任何機器人意圖相關。在此範例中，Lambda 函數會使用此術語指示 Amazon Lex 取得使用者的是/否回覆。

   1. 根據 `dialogAction.type`，Amazon Lex 會傳回下列回應給用戶端：  
![包含對話方塊狀態、意圖名稱、訊息、回應卡、工作階段屬性、引出槽和槽的 JSON 回應。](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/book-car-10.png)

      用戶端顯示訊息：「此次租車是用於您在 2016-12-18 於芝加哥留宿 5 晚嗎？」

1. 使用者：「是」

   1. 用戶端會將下列`PostText`請求傳送至 Amazon Lex。

      ```
      POST /bot/{{BookTrip}}/alias/{{$LATEST}}/user/{{wch89kjqcpkds8seny7dly5x3otq68j3}}/text
      "Content-Type":"application/json"
      "Content-Encoding":"amz-1.0"
      
      {
         "inputText":"yes",
         "sessionAttributes":{
            "confirmationContext":"AutoPopulate",
            "currentReservation":"{\"ReservationType\":\"Car\",
                                   \"PickUpCity\":null,
                                   \"PickUpDate\":null,
                                   \"ReturnDate\":null,
                                   \"CarType\":null}",
            "lastConfirmedReservation":"{\"ReservationType\":\"Hotel\",
                                         \"Location\":\"Chicago\",
                                         \"RoomType\":\"queen\",
                                         \"CheckInDate\":\"2016-12-18\",
                                         \"Nights\":\"5\"}"
         }
      }
      ```

   1. Amazon Lex 會讀取 `inputText`並知道內容 （要求使用者確認自動人口）。Amazon Lex 會傳送下列事件來叫用 Lambda 函數：

      ```
      {
          "messageVersion": "1.0",
          "invocationSource": "DialogCodeHook",
          "userId": "wch89kjqcpkds8seny7dly5x3otq68j3",
          "sessionAttributes": {
              "confirmationContext": "AutoPopulate",
              "currentReservation": "{\"ReservationType\":\"Car\",\"PickUpCity\":null,\"PickUpDate\":null,\"ReturnDate\":null,\"CarType\":null}",
              "lastConfirmedReservation": "{\"ReservationType\":\"Hotel\",\"Location\":\"Chicago\",\"RoomType\":\"queen\",\"CheckInDate\":\"2016-12-18\",\"Nights\":\"5\"}"
          },
          "bot": {
              "name": "BookTrip",
              "alias": null,
              "version": "$LATEST"
          },
          "outputDialogMode": "Text",
          "currentIntent": {
              "name": "BookCar",
              "slots": {
                  "PickUpDate": "2016-12-18",
                  "ReturnDate": "2016-12-22",
                  "DriverAge": null,
                  "CarType": null,
                  "PickUpCity": "Chicago"
              },
              "confirmationStatus": "Confirmed"
          }
      }
      ```

      由於使用者回覆是，Amazon Lex 會將 `confirmationStatus`設定為 `Confirmed`。

      

   1. 從 `confirmationStatus`，Lambda 函數知道預先填入的值是正確的。Lambda 函數會執行下列動作：
      + 以它預先填入的槽值更新 `currentReservation` 工作階段屬性。
      + 將 `dialogAction.type` 設定為 `ElicitSlot`
      + 將 `slotToElicit` 值設定為 `DriverAge`。

      傳送以下回應：

      ```
      {
          "sessionAttributes": {
              "currentReservation": "{\"ReservationType\":\"Car\",\"PickUpCity\":\"Chicago\",\"PickUpDate\":\"2016-12-18\",\"ReturnDate\":\"2016-12-22\",\"CarType\":null}",
              "lastConfirmedReservation": "{\"ReservationType\":\"Hotel\",\"Location\":\"Chicago\",\"RoomType\":\"queen\",\"CheckInDate\":\"2016-12-18\",\"Nights\":\"5\"}"
          },
          "dialogAction": {
              "type": "ElicitSlot",
              "intentName": "BookCar",
              "slots": {
                  "PickUpDate": "2016-12-18",
                  "ReturnDate": "2016-12-22",
                  "DriverAge": null,
                  "CarType": null,
                  "PickUpCity": "Chicago"
              },
              "slotToElicit": "DriverAge",
              "message": {
                  "contentType": "PlainText",
                  "content": "How old is the driver of this car rental?"
              }
          }
      }
      ```

   1. Amazon Lex 傳回下列回應：  
![JSON 回應顯示預訂租車的意圖，以及引發驅動程式存留期插槽的訊息。](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/book-car-20.png)

      用戶端會顯示訊息「此租車的駕駛人多大？」 而對談繼續。