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 섹션을 참조하십시오.
-
사용자: 꽃을 주문하고 싶습니다.
-
클라이언트(콘솔)는 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 함수는 이를 나중에 초기화합니다.
-
-
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
정보
-
-
이때 모든 슬롯 값은 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에 다음에 해야 할 조치를 지시합니다.
-
-
dialogAction.type
에 따라 Amazon Lex는 일련의 다음 조치를 결정합니다. 슬롯이 하나도 채워지지 않았기 때문에FlowerType
슬롯의 값을 유도하기로 결정합니다. 이 슬롯의 값 유도 프롬프트 중 하나("어떤 꽃을 주문하고 싶으세요?")를 선택하고, 클라이언트에 다음 응답을 다시 보냅니다.클라이언트는 응답에 메시지를 표시합니다.
-
-
사용자: 장미
-
클라이언트(콘솔)는 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
는 비어있습니다. -
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
슬롯을 장미로 업데이트했습니다.
-
-
DialogCodeHook
의invocationSource
값에 따라 Lambda 함수는 사용자 데이터 검증을 수행합니다.roses
를 유효한 슬롯 값으로 인식하고(그리고Price
를 세션 속성으로 설정), Amazon Lex에 다음 응답을 반환합니다.{ "sessionAttributes": { "Price": 25 }, "dialogAction": { "type": "Delegate", "slots": { "PickupTime": null, "FlowerType": "roses", "PickupDate": null } } }
다음을 참고합니다.
-
sessionAttributes
– Lambda 함수가 (장미의)Price
를 세션 속성으로 추가했습니다. -
dialogAction.type
–Delegate
로 설정됩니다. 사용자 데이터가 유효했으므로 Lambda 함수는 Amazon Lex에 일련의 다음 조치를 선택하라고 지시합니다.
-
-
dialogAction.type
에 따라 Amazon Lex는 일련의 다음 조치를 선택합니다. Amazon Lex는 더 많은 슬롯 데이터가 필요함을 알고 의도 구성에 따라 우선 순위가 가장 높은 채워지지 않은 다음 슬롯(PickupDate
)을 선택합니다. 의도 구성에 따라 Amazon Lex 이 슬롯에 대한 프롬프트 메시지 중 하나("언제 체크인 예정인가요?")를 선택하고, 클라이언트에 다음 응답을 다시 보냅니다.클라이언트는 응답에 단순히 "언제 장미를 픽업하고 싶으세요?" 메시지를 표시합니다.
-
-
사용자: 내일
-
클라이언트(콘솔)는 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
는 사용자 입력이며, 클라이언트는 서비스에 다시 세션 속성을 전달합니다. -
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 함수에 전달합니다. -
DialogCodeHook
의invocationSource
값에 따라 Lambda 함수는 사용자 데이터 검증을 수행합니다.PickupDate
슬롯 값이 유효함을 인식하고 Amazon Lex에 다음 응답을 반환합니다.{ "sessionAttributes": { "Price": 25 }, "dialogAction": { "type": "Delegate", "slots": { "PickupTime": null, "FlowerType": "roses", "PickupDate": "2017-01-05" } } }
다음을 참고합니다.
-
sessionAttributes
– 변경 사항이 없습니다. -
dialogAction.type
–Delegate
로 설정됩니다. 사용자 데이터가 유효했으므로 Lambda 함수는 Amazon Lex에 일련의 다음 조치를 선택하라고 지시합니다.
-
-
dialogAction.type
에 따라 Amazon Lex는 일련의 다음 조치를 선택합니다. Amazon Lex는 더 많은 슬롯 데이터가 필요함을 알고 의도 구성에 따라 우선 순위가 가장 높은 채워지지 않은 다음 슬롯(PickupTime
)을 선택합니다. Amazon Lex는 프롬프트 메시지 중 하나를 선택합니다 ("2017-01-05 몇 시에 장미를 배송하시겠습니까?") 이 슬롯의 경우 인텐트 구성에 따라 다음 응답을 클라이언트에 다시 보냅니다.클라이언트는 응답에 "2017-01-05 몇 시에 장미를 배송하시겠습니까?" 메시지를 표시합니다.
-
-
사용자: 오후 4시
-
클라이언트(콘솔)는 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
를 전달합니다. -
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
를 업데이트했습니다. -
DialogCodeHook
의invocationSource
값에 따라 Lambda 함수는 사용자 데이터 검증을 수행합니다.PickupDate
슬롯 값이 유효함을 인식하고 Amazon Lex에 다음 응답을 반환합니다.{ "sessionAttributes": { "Price": 25 }, "dialogAction": { "type": "Delegate", "slots": { "PickupTime": "16:00", "FlowerType": "roses", "PickupDate": "2017-01-05" } } }
다음을 참고합니다.
-
sessionAttributes
– 세션 속성의 변경 사항이 없습니다. -
dialogAction.type
–Delegate
로 설정됩니다. 사용자 데이터가 유효했으므로 Lambda 함수는 Amazon Lex에 일련의 다음 조치를 선택하라고 지시합니다.
-
-
이때 Amazon Lex는 슬롯 데이터가 모두 있음을 압니다. 이 의도는 확인 프롬프트로 구성됩니다. 따라서 Amazon Lex는 의도를 이행하기 전에 확인을 요청하는 다음 응답을 사용자에게 보냅니다.
클라이언트는 단순히 응답에 메시지를 표시하고 사용자 응답을 기다립니다.
-
-
사용자: 예
-
클라이언트(콘솔)는 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" } } -
Amazon Lex는 현재 의도를 확인하는 컨텍스트에서
inputText
를 해석합니다. Amazon Lex는 사용자가 주문을 진행하기를 원한다고 이해합니다. 이때 Amazon Lex는 다음 이벤트를 보내 의도를 이행하도록 Lambda 함수를 호출합니다. 함수에 보내는 이벤트에서invocationSource
를FulfillmentCodeHook
로 설정합니다. Amazon Lex는 또한 다음과 같아confirmationStatus
을Confirmed
로 설정합니다.{ "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 함수에 지시합니다. -
confirmationStatus
–Confirmed
로 설정됩니다.
-
-
이때 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
를 포함합니다.
-
-
Amazon Lex는
fulfillmentState
를 검토하고 클라이언트에 다음 응답을 다시 보냅니다.그런 다음 Amazon Lex는 클라이언트에 다음을 반환합니다.
참고:
-
dialogState
– Amazon Lex는 이 값을fulfilled
로 설정합니다. -
message
– Lambda 함수가 제공한 동일한 메시지입니다.
클라이언트가 이 메시지를 표시합니다.
-
-
-
이제 봇을 다시 테스트합니다. 새 (사용자) 컨텍스트를 설정하려면 테스트 창에서 지우기 링크를 선택합니다. 이제
OrderFlowers
의도에 대한 유효하지 않은 슬롯 데이터를 제공합니다. 이때 Lambda 함수는 데이터 검증을 수행하고, 잘못된 슬롯 데이터 값을 null로 재설정한 다음, 유효한 데이터를 묻는 메시지를 사용자에게 표시하라고 Amazon Lex에 요청합니다. 예를 들어, 다음을 시도합니다.-
재스민을 꽃 유형으로 입력(재스민은 지원되는 꽃 유형이 아님)
-
어제를 꽃을 찾아갈 날로 입력
-
주문 후 "예"를 회신하는 대신에 다른 꽃 유형을 입력하여 주문을 확인. 이에 대한 응답으로 Lambda 함수는 세션 속성의
Price
를 업데이트하여 꽃 주문의 누계를 유지합니다.
Lambda 함수는 이행 활동도 수행합니다.
-