5단계(선택 사항): 정보 흐름의 세부 정보 검토(콘솔) - Amazon Lex V1

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

 

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

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

5단계(선택 사항): 정보 흐름의 세부 정보 검토(콘솔)

이 섹션에서는 함수의 통합을 포함하여 각 사용자 입력에 대한 클라이언트와 Amazon Lex 간의 정보 흐름에 대해 설명합니다.

참고

이 섹션에서는 클라이언트가 PostText 런타임 API를 사용하여 Amazon Lex에 요청을 보내고 그에 따라 요청 및 응답의 세부 정보를 보여 준다고 가정합니다. 클라이언트가 PostContent API를 사용할 때의 클라이언트와 Amazon Lex 간의 정보 흐름의 예는 2a단계(선택 사항): 음성 정보 흐름의 세부 정보 검토(콘솔) 을 참조하십시오.

PostText 런타임 API 및 다음 단계에 나오는 요청 및 응답의 추가 세부 정보에 대한 자세한 내용은 PostText 섹션을 참조하십시오.

  1. 사용자: 꽃을 주문하고 싶습니다.

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

      POST /bot/OrderFlowers/alias/$LATEST/user/ignw84y6seypre4xly5rimopuri2xwnd/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "I would like to order some flowers", "sessionAttributes": {} }

      요청 URI 및 본문 모두 Amazon Lex에 다음 정보를 제공합니다.

      • 요청 URI – 봇 이름(OrderFlowers), 봇 별칭($LATEST), 사용자 이름(사용자를 식별하는 임의 문자열)을 제공합니다. 후행 text는 이것이 PostText API 요청(PostContent가 아님)임을 나타냅니다.

      • 요청 본문 – 사용자 입력(inputText)과 빈 sessionAttributes를 포함합니다. 클라이언트가 첫 번째 요청을 한 경우 세션 속성이 없습니다. Lambda 함수는 이를 나중에 초기화합니다.

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

      { "messageVersion": "1.0", "invocationSource": "DialogCodeHook", "userId": "ignw84y6seypre4xly5rimopuri2xwnd", "sessionAttributes": {}, "bot": { "name": "OrderFlowers", "alias": null, "version": "$LATEST" }, "outputDialogMode": "Text", "currentIntent": { "name": "OrderFlowers", "slots": { "PickupTime": null, "FlowerType": null, "PickupDate": null }, "confirmationStatus": "None" } }

      자세한 내용은 입력 이벤트 형식 섹션을 참조하세요.

      클라이언트가 보낸 정보 외에도 Amazon Lex에는 다음과 같은 데이터가 추가로 포함되어 있습니다.

      • messageVersion - Amazon Lex는 현재 1.0 버전만 지원합니다.

      • invocationSource – Lambda 함수 호출의 목적을 나타냅니다. 이 경우에 목적은 사용자 데이터 초기화 및 검증을 수행하는 것입니다. 이때 Amazon Lex는 사용자가 의도를 이행하기 위한 모든 슬롯 데이터를 제공하지 않았음을 압니다.

      • 모든 슬롯 값이 null로 설정된 currentIntent 정보

    3. 이때 모든 슬롯 값은 null입니다. Lambda 함수가 검증할 것이 없습니다. Lambda 함수는 Amazon Lex에 다음 응답을 반환합니다.

      { "sessionAttributes": {}, "dialogAction": { "type": "Delegate", "slots": { "PickupTime": null, "FlowerType": null, "PickupDate": null } } }

      응답 형식에 대한 자세한 내용은 응답 형식 섹션을 참조하십시오.

      다음을 참고합니다.

      • dialogAction.type – Lambda 함수는 이 값을 Delegate로 설정하여 Amazon Lex에 일련의 다음 조치를 결정할 책임을 위임합니다.

        참고

        Lambda 함수가 사용자 데이터 검증에서 무언가를 감지하면, 다음 단계에 나와 있듯이 Amazon Lex에 다음에 해야 할 조치를 지시합니다.

    4. dialogAction.type에 따라 Amazon Lex는 일련의 다음 조치를 결정합니다. 슬롯이 하나도 채워지지 않았기 때문에 FlowerType 슬롯의 값을 유도하기로 결정합니다. 이 슬롯의 값 유도 프롬프트 중 하나("어떤 꽃을 주문하고 싶으세요?")를 선택하고, 클라이언트에 다음 응답을 다시 보냅니다.

      FlowerType 슬롯에 대한 요청이 포함된 JSON 데이터

      클라이언트는 응답에 메시지를 표시합니다.

  2. 사용자: 장미

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

      POST /bot/OrderFlowers/alias/$LATEST/user/ignw84y6seypre4xly5rimopuri2xwnd/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "roses", "sessionAttributes": {} }

      요청 본문에서 inputText는 사용자 입력입니다. sessionAttributes는 비어있습니다.

    2. Amazon Lex는 먼저 현재 의도의 맥락에서 inputText를 해석합니다. 이 서비스는 특정 사용자에게 FlowerType 슬롯에 대한 정보를 요청했음을 기억합니다. 현재 의도의 슬롯 값을 업데이트하고, 다음 이벤트 데이터로 Lambda 함수를 호출합니다.

      { "messageVersion": "1.0", "invocationSource": "DialogCodeHook", "userId": "ignw84y6seypre4xly5rimopuri2xwnd", "sessionAttributes": {}, "bot": { "name": "OrderFlowers", "alias": null, "version": "$LATEST" }, "outputDialogMode": "Text", "currentIntent": { "name": "OrderFlowers", "slots": { "PickupTime": null, "FlowerType": "roses", "PickupDate": null }, "confirmationStatus": "None" } }

      다음을 참고합니다.

      • invocationSource – 계속 DialogCodeHook입니다(단순히 사용자 데이터를 검증하는 중).

      • currentIntent.slots – Amazon Lex가 FlowerType 슬롯을 장미로 업데이트했습니다.

    3. DialogCodeHookinvocationSource 값에 따라 Lambda 함수는 사용자 데이터 검증을 수행합니다. roses를 유효한 슬롯 값으로 인식하고(그리고 Price를 세션 속성으로 설정), Amazon Lex에 다음 응답을 반환합니다.

      { "sessionAttributes": { "Price": 25 }, "dialogAction": { "type": "Delegate", "slots": { "PickupTime": null, "FlowerType": "roses", "PickupDate": null } } }

      다음을 참고합니다.

      • sessionAttributes – Lambda 함수가 (장미의) Price를 세션 속성으로 추가했습니다.

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

       

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

      PickupData 슬롯을 요청하기 위해 클라이언트에 보낸 JSON 데이터

      클라이언트는 응답에 단순히 "언제 장미를 픽업하고 싶으세요?" 메시지를 표시합니다.

  3. 사용자: 내일

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

      POST /bot/OrderFlowers/alias/$LATEST/user/ignw84y6seypre4xly5rimopuri2xwnd/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "tomorrow", "sessionAttributes": { "Price": "25" } }

      요청 본문에서 inputText는 사용자 입력이며, 클라이언트는 서비스에 다시 세션 속성을 전달합니다.

    2. Amazon Lex는 컨텍스트를 기억합니다. 이를 통해 PickupDate 슬롯에 대한 데이터를 유도했습니다. 이 컨텍스트에서 inputText 값이 PickupDate 슬롯에 대한 것임을 압니다. 그런 다음 Amazon Lex는 다음 이벤트를 보내 Lambda 함수를 호출합니다.

      { "messageVersion": "1.0", "invocationSource": "DialogCodeHook", "userId": "ignw84y6seypre4xly5rimopuri2xwnd", "sessionAttributes": { "Price": "25" }, "bot": { "name": "OrderFlowersCustomWithRespCard", "alias": null, "version": "$LATEST" }, "outputDialogMode": "Text", "currentIntent": { "name": "OrderFlowers", "slots": { "PickupTime": null, "FlowerType": "roses", "PickupDate": "2017-01-05" }, "confirmationStatus": "None" } }

      Amazon Lex는 currentIntent.slots 값을 설정하여 PickupDate를 업데이트했습니다. 또한 이 서비스는 sessionAttributes를 그대로 Lambda 함수에 전달합니다.

    3. DialogCodeHookinvocationSource값에 따라 Lambda 함수는 사용자 데이터 검증을 수행합니다. PickupDate 슬롯 값이 유효함을 인식하고 Amazon Lex에 다음 응답을 반환합니다.

      { "sessionAttributes": { "Price": 25 }, "dialogAction": { "type": "Delegate", "slots": { "PickupTime": null, "FlowerType": "roses", "PickupDate": "2017-01-05" } } }

      다음을 참고합니다.

      • sessionAttributes – 변경 사항이 없습니다.

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

    4. dialogAction.type에 따라 Amazon Lex는 일련의 다음 조치를 선택합니다. Amazon Lex는 더 많은 슬롯 데이터가 필요함을 알고 의도 구성에 따라 우선 순위가 가장 높은 채워지지 않은 다음 슬롯(PickupTime)을 선택합니다. Amazon Lex는 프롬프트 메시지 중 하나를 선택합니다 ("2017-01-05 몇 시에 장미를 배송하시겠습니까?") 이 슬롯의 경우 인텐트 구성에 따라 다음 응답을 클라이언트에 다시 보냅니다.

      PickupTime 슬롯을 요청하는 JSON 데이터

      클라이언트는 응답에 "2017-01-05 몇 시에 장미를 배송하시겠습니까?" 메시지를 표시합니다.

  4. 사용자: 오후 4시

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

      POST /bot/OrderFlowers/alias/$LATEST/user/ignw84y6seypre4xly5rimopuri2xwnd/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "4 pm", "sessionAttributes": { "Price": "25" } }

      요청 본문에서 inputText는 사용자 입력입니다. 클라이언트는 요청에서 sessionAttributes를 전달합니다.

    2. Amazon Lex는 컨텍트스를 이해합니다. PickupTime 슬롯에 대한 데이터를 유도하고 있었음을 이해합니다. 이 컨텍스트에서 inputText 값이 PickupTime슬롯에 대한 것임을 압니다. 그런 다음 Amazon Lex는 다음 이벤트를 보내 Lambda 함수를 호출합니다.

      { "messageVersion": "1.0", "invocationSource": "DialogCodeHook", "userId": "ignw84y6seypre4xly5rimopuri2xwnd", "sessionAttributes": { "Price": "25" }, "bot": { "name": "OrderFlowersCustomWithRespCard", "alias": null, "version": "$LATEST" }, "outputDialogMode": "Text", "currentIntent": { "name": "OrderFlowers", "slots": { "PickupTime": "16:00", "FlowerType": "roses", "PickupDate": "2017-01-05" }, "confirmationStatus": "None" } }

      Amazon Lex는 PickupTime 값을 설정하여 currentIntent.slots를 업데이트했습니다.

    3. DialogCodeHookinvocationSource 값에 따라 Lambda 함수는 사용자 데이터 검증을 수행합니다. PickupDate 슬롯 값이 유효함을 인식하고 Amazon Lex에 다음 응답을 반환합니다.

      { "sessionAttributes": { "Price": 25 }, "dialogAction": { "type": "Delegate", "slots": { "PickupTime": "16:00", "FlowerType": "roses", "PickupDate": "2017-01-05" } } }

      다음을 참고합니다.

      • sessionAttributes – 세션 속성의 변경 사항이 없습니다.

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

    4. 이때 Amazon Lex는 슬롯 데이터가 모두 있음을 압니다. 이 의도는 확인 프롬프트로 구성됩니다. 따라서 Amazon Lex는 의도를 이행하기 전에 확인을 요청하는 다음 응답을 사용자에게 보냅니다.

      주문 확인을 요청하는 JSON 데이터

      클라이언트는 단순히 응답에 메시지를 표시하고 사용자 응답을 기다립니다.

  5. 사용자: 예

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

      POST /bot/OrderFlowers/alias/$LATEST/user/ignw84y6seypre4xly5rimopuri2xwnd/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "yes", "sessionAttributes": { "Price": "25" } }
    2. Amazon Lex는 현재 의도를 확인하는 컨텍스트에서 inputText를 해석합니다. Amazon Lex는 사용자가 주문을 진행하기를 원한다고 이해합니다. 이때 Amazon Lex는 다음 이벤트를 보내 의도를 이행하도록 Lambda 함수를 호출합니다. 함수에 보내는 이벤트에서 invocationSourceFulfillmentCodeHook로 설정합니다. Amazon Lex는 또한 다음과 같아 confirmationStatusConfirmed로 설정합니다.

      { "messageVersion": "1.0", "invocationSource": "FulfillmentCodeHook", "userId": "ignw84y6seypre4xly5rimopuri2xwnd", "sessionAttributes": { "Price": "25" }, "bot": { "name": "OrderFlowersCustomWithRespCard", "alias": null, "version": "$LATEST" }, "outputDialogMode": "Text", "currentIntent": { "name": "OrderFlowers", "slots": { "PickupTime": "16:00", "FlowerType": "roses", "PickupDate": "2017-01-05" }, "confirmationStatus": "Confirmed" } }

      다음을 참고합니다.

      • invocationSource – 이때 Amazon Lex는 이 값을 FulfillmentCodeHook로 설정하여 의도를 이행하라고 Lambda 함수에 지시합니다.

      • confirmationStatusConfirmed로 설정됩니다.

    3. 이때 Lambda 함수는 OrderFlowers 의도를 이행하고, 다음 응답을 반환합니다.

      { "sessionAttributes": { "Price": "25" }, "dialogAction": { "type": "Close", "fulfillmentState": "Fulfilled", "message": { "contentType": "PlainText", "content": "Thanks, your order for roses has been placed and will be ready for pickup by 16:00 on 2017-01-05" } } }

      다음을 참고합니다.

      • dialogAction.type 설정 – Lambda 함수는 이 값을 Close로 설정하여 사용자 응답을 기대하지 않도록 Amazon Lex에 지시합니다.

      • dialogAction.fulfillmentState – Fulfilled로 설정되고, 사용자에게 전달할 적절한 message를 포함합니다.

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

      그런 다음 Amazon Lex는 클라이언트에 다음을 반환합니다.

      확인 프롬프트에 대한 JSON 데이터

      참고:

      • dialogState – Amazon Lex는 이 값을 fulfilled로 설정합니다.

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

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

  6. 이제 봇을 다시 테스트합니다. 새 (사용자) 컨텍스트를 설정하려면 테스트 창에서 지우기 링크를 선택합니다. 이제 OrderFlowers 의도에 대한 유효하지 않은 슬롯 데이터를 제공합니다. 이때 Lambda 함수는 데이터 검증을 수행하고, 잘못된 슬롯 데이터 값을 null로 재설정한 다음, 유효한 데이터를 묻는 메시지를 사용자에게 표시하라고 Amazon Lex에 요청합니다. 예를 들어, 다음을 시도합니다.

    • 재스민을 꽃 유형으로 입력(재스민은 지원되는 꽃 유형이 아님)

    • 어제를 꽃을 찾아갈 날로 입력

    • 주문 후 "예"를 회신하는 대신에 다른 꽃 유형을 입력하여 주문을 확인. 이에 대한 응답으로 Lambda 함수는 세션 속성의 Price를 업데이트하여 꽃 주문의 누계를 유지합니다.

    Lambda 함수는 이행 활동도 수행합니다.

다음 단계

6단계: 표현을 추가하도록 의도 구성 업데이트(콘솔)