정보 흐름의 세부 정보 - Amazon Lex V1

Amazon Lex V2를 사용하는 경우 Amazon Lex V2 가이드를 대신 참조하십시오.

 

Amazon Lex V1을 사용하는 경우 봇을 Amazon Lex V2로 업그레이드하는하는 것이 좋습니다. 더 이상 V1에 새로운 기능을 추가하지 않으므로 모든 새 봇에 V2를 사용할 것을 강력히 권장합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

정보 흐름의 세부 정보

이 연습에서는 Amazon Lex 콘솔에서 제공되는 테스트 창 클라이언트를 사용하여 Amazon Lex BookTrip 봇과의 대화에 참여했습니다. 이 섹션에서는 다음에 대해 설명합니다.

  • 클라이언트와 Amazon Lex 간의 데이터 흐름.

     

    이 섹션에서는 클라이언트가 PostText 런타임 API를 사용하여 Amazon Lex에 요청을 보내고 그에 따라 요청 및 응답의 세부 정보를 보여 준다고 가정합니다. PostText 런타임 API에 대한 자세한 내용은 PostText을 참조하십시오.

    참고

    클라이언트가 PostContent API를 사용할 때의 클라이언트와 Amazon Lex 간의 정보 흐름의 예는 2a단계(선택 사항): 음성 정보 흐름의 세부 정보 검토(콘솔) 을 참조하십시오.

     

  • Amazon Lex와 Lamba 함수 간의 데이터 흐름. 자세한 내용은 Lambda 함수 입력 이벤트 및 응답 형식을 참조하세요.

데이터 흐름: 호텔 예약 의도

이 섹션에서는 각 사용자가 입력한 후에 일어나는 일을 설명합니다.

  1. 사용자: "호텔 예약해줘"

    1. 클라이언트(콘솔)는 Amazon Lex에 다음 PostText 요청을 보냅니다.

      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 함수가 먼저 세션 속성을 설정합니다.

    2. inputText에서 Amazon Lex는 의도(BookHotel)를 감지합니다. 이 의도는 사용자 데이터 초기화/검증을 위한 코드 후크인 Lambda 함수로 구성됩니다. 따라서 Amazon Lex는 다음 정보를 이벤트 파라미터로 전달하여 Lambda 함수를 호출합니다(입력 이벤트 형식 참조).

      { "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로 설정됩니다.

    3. 이때 모든 슬롯 값은 null입니다. Lambda 함수가 검증할 것이 없습니다. Lambda 함수는 Amazon Lex에 다음 응답을 반환합니다. 응답 형식에 대한 자세한 내용은 응답 형식섹션을 참조하십시오.

      { "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 – Lambda 함수는 이 값을 Delegate로 설정하여 일련의 다음 조치에 대한 책임을 Amazon Lex에 위임합니다.

        Lambda 함수가 사용자 데이터 검증에서 무언가 감지한 경우 다음에 해야 할 조치를 Amazon Lex에게 지시합니다.

    4. Amazon Lex는 dialogAction.type에 따라 일련의 다음 조치를 결정하고, Location 슬롯에 대한 사용자의 데이터를 유도합니다. 의도 구성에 따라 이 슬롯에 대한 프롬프트 메시지 중 하나("어떤 도시에서 묵고 싶으세요?")를 선택한 다음, 사용자에게 다음과 같은 응답을 보냅니다.

      대화 상태, 의도 이름, 메시지, 응답 카드, 세션 속성, 이끌어 낼 슬롯, 슬롯을 포함하는 JSON 응답

      세션 속성이 클라이언트에 전달됩니다.

      클라이언트는 응답을 읽은 다음 "어떤 도시에서 묵고 싶으세요?"이라는 메시지를 표시합니다.

  2. 사용자: "모스크바"

    1. 클라이언트는 Amazon Lex에 다음 PostText 요청을 보냅니다(가독성을 위해 줄 바꿈이 추가됨).

      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 세션 속성이 포함됩니다.

    2. Amazon Lex는 먼저 현재 의도의 맥락에서 inputText를 해석합니다(이 서비스는 특정 사용자에게 슬롯에 대한 정보를 요청했음을 기억). 현재 의도에 대한 슬롯 값을 업데이트하고, 다음 이벤트를 사용하여 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로 업데이트했습니다.

    3. 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.typeElicitSlot으로 설정됩니다. 이는 다음을 제공하여 사용자에게 메시지를 다시 표시하도록 Amazon Lex에 지시합니다.

        • dialogAction.slotToElicit – 사용자의 데이터를 유도하는 슬롯입니다.

        • dialogAction.message – 사용자에게 전달할 message입니다.

    4. Amazon Lex는 dialogAction.type을 확인하고 다음 응답에서 클라이언트에 정보를 전달합니다.

      대화 상태, 의도 이름, 메시지, 응답 카드, 세션 속성, 이끌어 낼 슬롯, 슬롯을 포함하는 JSON 응답

      클라이언트는 단순히 "현재 유효한 목적지로 모스크바는 지원되지 않습니다. 다른 도시를 선택하시겠어요?"라는 메시지를 표시합니다.

  3. 사용자: "시카고"

    1. 클라이언트(콘솔)는 Amazon Lex에 다음 PostText 요청을 보냅니다.

      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}" } }

    2. 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는 currentIntent.slots슬롯을 Location로 설정하여 Chicago를 업데이트했습니다.

    3. DialogCodeHookinvocationSource값에 따라 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 함수는 LocationChicago로 설정하여 이 세션 속성을 업데이트합니다.

      • dialogAction.typeDelegate로 설정됩니다. 사용자 데이터가 유효했으므로 Lambda 함수는 일련의 다음 조치를 선택하도록 Amazon Lex에 지시합니다.

       

    4. dialogAction.type에 따라 Amazon Lex는 일련의 다음 조치를 선택합니다. Amazon Lex는 더 많은 슬롯 데이터가 필요함을 알고, 의도 구성에 따라 우선 순위가 가장 높은 채워지지 않은 다음 슬롯(CheckInDate)을 선택합니다. 의도 구성에 따라 이 슬롯에 대한 프롬프트 메시지 중 하나("어떤 도시에서 묵고 싶으세요?")를 선택하고, 클라이언트에 다음 응답을 다시 보냅니다.

      대화 상태, 의도 이름, 메시지, 응답 카드, 세션 속성, 이끌어 낼 슬롯, 슬롯을 포함하는 JSON 응답 위치 슬롯은 이제 시카고로 채워집니다.

      클라이언트는 "어떤 도시에서 묵고 싶으세요?"라는 메시지를 표시합니다.

  4. 사용자의 상호 작용은 사용자가 데이터를 제공하며 계속됩니다. Lambda 함수는 데이터를 검증한 다음, 일련의 다음 조치를Amazon Lex에 위임합니다. 결과적으로 사용자가 모든 슬롯 데이터를 제공하고 Lambda 함수가 모든 사용자 입력을 검증하면 Amazon Lex는 모든 슬롯 데이터를 보유했음을 인식합니다.

    참고

    이 연습에서는 사용자가 모든 슬롯 데이터를 제공하면 Lambda 함수가 호텔 예약 가격을 계산하고 다른 세션 속성(currentReservationPrice)으로 이를 반환합니다.

    이 시점에서 의도를 이행할 준비가 되었으나, Amazon Lex가 의도를 이행하기 전에 BookHotel 의도가 사용자 확인을 요구하는 확인 프롬프트로 구성됩니다. 따라서 Amazon Lex는 호텔을 예약하기 전에 확인을 요청하는 다음 메시지를 클라이언트에 보냅니다.

    대화 상태, 의도 이름, 메시지, 응답 카드, 세션 속성, 이끌어 낼 슬롯, 슬롯을 포함하는 JSON 응답 이제 모든 슬롯이 채워졌습니다.

    클라이언트는 "네, 시작 날짜 2016-12-18, 시카고에서 5박 확인했습니다. 예약을 진행할까요?"

  5. 사용자: "예"

    1. 클라이언트(콘솔)는 Amazon Lex에 다음 PostText 요청을 보냅니다.

      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" } }
    2. Amazon Lex는 현재 의도를 확인하는 컨텍스트에서 inputText를 해석합니다. Amazon Lex는 사용자가 예약을 진행하기를 원한다고 이해합니다. 이때 Amazon Lex는 다음 이벤트를 보내 의도를 이행하도록 Lambda 함수를 호출합니다. 이벤트에서 invocationSourceFulfillmentCodeHook로 설정하여 Lambda 함수에 보냅니다. Amazon Lex는 또한 다음과 같이 confirmationStatusConfirmed로 설정합니다.

      { "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 함수에 지시합니다.

      • confirmationStatusConfirmed로 설정됩니다.

    3. 이때 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.fulfillmentStateFulfilled로 설정되고, 사용자에게 전달할 적절한 message를 포함합니다.

    4. Amazon Lex는 fulfillmentState를 검토하고 클라이언트에 다음 응답을 보냅니다.

      대화 상태, 의도 이름, 메시지, 응답 카드, 세션 속성, 이끌어 낼 슬롯, 슬롯을 포함하는 JSON 응답 이제 모든 슬롯이 채워지고 세션 속성 아래의 마지막으로 확인된 예약 필드가 채워집니다.
      참고
      • dialogState – Amazon Lex는 이 값을 Fulfilled로 설정합니다.

      • message – Lambda 함수가 제공한 동일한 메시지입니다.

      클라이언트가 이 메시지를 표시합니다.

데이터 흐름: 차량 예약 의도

이 연습에서 BookTrip 봇은 두 가지 의도(BookHotel 및 BookCar)를 지원합니다. 사용자는 호텔을 예약한 후 대화를 계속하여 차량을 예약할 수 있습니다. 세션이 시간 초과되지 않는 한 각 후속 요청에서 클라이언트는 계속해서 세션 속성(여기서는 lastConfirmedReservation)을 보냅니다. Lambda 함수는 이 정보를 사용하여 BookCar 의도에 대한 슬롯 데이터를 초기화할 수 있습니다. 이는 의도 전반에 걸친 데이터 공유에서 세션 속성을 사용하는 방법을 보여 줍니다.

특히, 사용자가 BookCar 의도를 선택하면 Lambda 함수는 세션 속성의 관련 정보를 사용하여 BookCar 의도에 대한 슬롯(PickUpDate, ReturnDate, PickUpCity)을 미리 채웁니다.

참고

Amazon Lex 콘솔은 지우기 링크를 제공하며, 사용자는 이 링크를 사용하여 이전 세션 속성을 지울 수 있습니다.

대화를 계속하려면 이 절차의 단계를 따릅니다.

  1. 사용자: "차량도 예약해줘"

    1. 클라이언트(콘솔)는 Amazon Lex에 다음 PostText 요청을 보냅니다.

      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 세션 속성이 포함되어 있습니다.

    2. Amazon Lex는 inputText에서 의도(BookCar)를 감지합니다. 이 의도는 사용자 데이터의 초기화 및 검증을 수행하기 위해 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입니다.

    3. 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 함수는 더 많은 세션 속성(currentReservationconfirmationContext)을 포함합니다.

      • dialogAction.typeConfirmIntent로 설정되어, 사용자의 예/아니요 응답이 필요함을 Amazon Lex에 알립니다(confirmationContext는 AutoPopulate로 설정됨). 이때 Lambda 함수는 이것이 Lambda 함수가 수행한 초기화(슬롯 데이터 자동 입력)에 대해 사용자가 예/아니요로 확인하는 응답임을 알고 있습니다.

         

        또한 Lambda 함수는 dialogAction.message의 정보 메시지를 응답에 포함시켜 Amazon Lex가 클라이언트에 반환하도록 합니다.

        참고

        용어 ConfirmIntent(dialogAction.type의 값)는 봇 의도와 관련이 없습니다. 이 예에서 Lambda 함수는 이 용어를 사용하여 사용자로부터 예 또는 아니요 응답을 얻도록 Amazon Lex에 지시합니다.

    4. dialogAction.type에 따라 Amazon Lex는 클라이언트에 다음 응답을 반환합니다.

      대화 상태, 의도 이름, 메시지, 응답 카드, 세션 속성, 이끌어 낼 슬롯, 슬롯을 포함하는 JSON 응답

      클라이언트는 "2016-12-18에 시작하는 시카고에서의 5박 동안 사용할 차량의 렌트인가요?"라는 메시지를 표시합니다.

  2. 사용자: "예"

    1. 클라이언트(콘솔)는 Amazon Lex에 다음 PostText 요청을 보냅니다.

      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\"}" } }
    2. 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는 confirmationStatusConfirmed로 설정합니다.

    3. Lambda 함수는 confirmationStatus로부터 미리 채워진 값이 옳다는 것을 알고 있습니다. Lambda 함수는 다음 작업을 수행합니다.

      • currentReservation 세션 속성을 미리 채워진 슬롯 값으로 업데이트

      • dialogAction.typeElicitSlot으로 설정

      • 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?" } } }
    4. Amazon Lex는 다음 응답을 반환합니다.

      차량 예약 의사를 보여주는 JSON 응답과 Driver Age 슬롯을 유도하는 메시지

      클라이언트가 "운전자의 나이는 몇살인가요?"라는 메시지를 표시하고 대화를 계속합니다.