Lambda 함수 입력 이벤트 및 응답 형식 - Amazon Lex V1

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

 

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

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

Lambda 함수 입력 이벤트 및 응답 형식

이 단원에서는 Amazon Lex가 Lambda 함수에 제공하는 이벤트 데이터의 구조에 대해 설명합니다. 이 정보를 사용하여 코드에 입력된 내용을 분석합니다. 또한 Lambda 함수가 반환할 것으로 Amazon Lex가 예상하는 응답 형식에 대해 설명합니다.

입력 이벤트 형식

다음은 Lambda 함수로 전달되는 Amazon Lex 이벤트의 일반적인 형식을 나타냅니다. 이 정보는 Lambda 함수를 작성할 때 사용합니다.

참고

messageVersion에서 해당하는 내용을 변경하지 않아도 입력 형식을 변경할 수 있습니다. 새 필드가 있는 경우 코드에서 오류가 발생하면 안 됩니다.

{ "currentIntent": { "name": "intent-name", "nluIntentConfidenceScore": score, "slots": { "slot name": "value", "slot name": "value" }, "slotDetails": { "slot name": { "resolutions" : [ { "value": "resolved value" }, { "value": "resolved value" } ], "originalValue": "original text" }, "slot name": { "resolutions" : [ { "value": "resolved value" }, { "value": "resolved value" } ], "originalValue": "original text" } }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)" }, "alternativeIntents": [ { "name": "intent-name", "nluIntentConfidenceScore": score, "slots": { "slot name": "value", "slot name": "value" }, "slotDetails": { "slot name": { "resolutions" : [ { "value": "resolved value" }, { "value": "resolved value" } ], "originalValue": "original text" }, "slot name": { "resolutions" : [ { "value": "resolved value" }, { "value": "resolved value" } ], "originalValue": "original text" } }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)" } ], "bot": { "name": "bot name", "alias": "bot alias", "version": "bot version" }, "userId": "User ID specified in the POST request to Amazon Lex.", "inputTranscript": "Text used to process the request", "invocationSource": "FulfillmentCodeHook or DialogCodeHook", "outputDialogMode": "Text or Voice, based on ContentType request header in runtime API request", "messageVersion": "1.0", "sessionAttributes": { "key": "value", "key": "value" }, "requestAttributes": { "key": "value", "key": "value" }, "recentIntentSummaryView": [ { "intentName": "Name", "checkpointLabel": Label, "slots": { "slot name": "value", "slot name": "value" }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)", "dialogActionType": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close", "fulfillmentState": "Fulfilled or Failed", "slotToElicit": "Next slot to elicit" } ], "sentimentResponse": { "sentimentLabel": "sentiment", "sentimentScore": "score" }, "kendraResponse": { Complete query response from Amazon Kendra }, "activeContexts": [ { "timeToLive": { "timeToLiveInSeconds": seconds, "turnsToLive": turns }, "name": "name", "parameters": { "key name": "value" } } ] }

다음은 이벤트 필드에 대한 추가 정보입니다.

  • currentIntent - 의도 name, slots, slotDetailsconfirmationStatus 필드를 제공합니다.

     

    nluIntentConfidenceScore은 Amazon Lex가 현재 의도가 사용자의 현재 의도와 가장 잘 일치하는 의도라는 확신입니다.

     

    slots는 의도에 대해 구성된 슬롯 이름의 맵으로, 슬롯 이름은 사용자 대화에서 Amazon Lex가 인식한 슬롯 값으로 매핑됩니다. 슬롯 값은 사용자가 값을 제공할 때까지 null을 유지합니다.

     

    입력 이벤트의 슬롯 값이 슬롯에 대해 구성된 값 중 하나와 일치하지 않을 수 있습니다. 예를 들어, 사용자가 "어떤 색상의 자동차를 원하시나요?"라는 프롬프트에 "피자"로 응답하면, Amazon Lex는 "피자"를 슬롯 값으로 반환합니다. 함수는 값이 컨텍스트 내에서 적절한지 확인해야 합니다.

     

    slotDetails는 슬롯 값에 대한 추가 정보를 제공합니다. resolutions 어레이는 슬롯에 대해 인식된 추가 값 목록을 포함합니다. 각 슬롯은 값을 최대 5개까지 보유할 수 있습니다.

     

    originalValue 필드에는 사용자가 슬롯에 대해 입력한 값이 들어 있습니다. 슬롯 유형이 최상위 확인 값을 슬롯 값으로 반환하도록 구성된 경우, originalValueslots 필드의 값과 다를 수 있습니다.

     

    confirmationStatus는 확인 프롬프트에 대한 사용자 응답을 제공합니다(있는 경우). 예를 들어, Amazon Lex가 "라지 사이즈 피자를 주문을 원하시나요?"라고 묻는 경우 사용자 응답에 따라 이 필드의 값은 Confirmed 또는 Denied일 수 있습니다. 그렇지 않은 경우 이 필드 값은 None입니다.

     

    사용자가 의도를 확인하면 Amazon Lex는 이 필드를 Confirmed로 설정합니다. 사용자가 의도를 거부하면 Amazon Lex는 이 값을 Denied로 설정합니다.

     

    확인 응답에서 사용자 표현은 슬롯 업데이트를 제공할 수 있습니다. 예를 들어, 사용자가 "네, 미디엄으로 사이즈 변경해주세요."라고 말할 수 있습니다. 이 경우 후속 Lambda 이벤트는 PizzaSizemedium으로 설정하여 슬롯 값을 업데이트했습니다. Amazon Lex는 confirmationStatusNone으로 설정하는데, 이는 사용자가 일부 슬롯 데이터를 수정하여 Lambda 함수가 사용자 데이터 검증을 수행해야 하기 때문입니다.

     

  • alternativeIntents – 신뢰도 점수를 활성화하면 Amazon Lex는 최대 4개의 대체 의도를 반환합니다. 각 의도에는 사용자의 말을 바탕으로 Amazon Lex가 해당 의도가 올바른 의도라고 확신하는 수준을 나타내는 점수가 포함됩니다.

     

    대체 의도의 콘텐츠는 currentIntent 필드의 콘텐츠와 동일합니다. 자세한 내용은 신뢰도 점수 사용을 참조하세요.

     

  • – 요청을 처리한 봇에 대한 정보.

    • name – 요청을 처리한 봇의 이름.

    • alias – 요청을 처리한 봇 버전의 별칭.

    • version – 요청을 처리한 봇의 버전.

     

  • userId – 이 값은 클라이언트 애플리케이션에서 제공합니다. Amazon Lex는 Lambda 함수에 이 값을 전달합니다.

     

  • inputTranscript – 요청을 처리하는 데 사용되는 텍스트.

    입력이 텍스트인 경우 inputTranscript 필드에는 사용자가 입력한 텍스트가 표시됩니다.

     

    입력이 오디오 스트림인 경우 inputTranscript 필드에는 오디오 스트림에서 추출한 텍스트가 포함됩니다. 이 텍스트는 의도 및 슬롯 값을 인식하기 위해 실제로 처리되는 텍스트입니다.

     

  • invocationSource - Amazon Lex가 Lambda 함수를 호출하는 이유를 나타내기 위해 이를 다음 값 중 하나로 설정합니다.

    • DialogCodeHook – 는 이 값을 설정하여 함수를 초기화하고 사용자의 데이터 입력을 확인하도록 Lambda 함수에 지시합니다.

       

      의도가 Lambda 함수를 초기화 및 확인 코드 후크로 호출하도록 구성된 경우 Amazon Lex가 의도를 이해한 후 Amazon Lex는 각 사용자 입력(표현)에 대해 지정된 Lambda 함수를 호출합니다.

      참고

      의도가 명확하지 않은 경우, Amazon Lex는 Lambda 함수를 호출할 수 없습니다.

       

    • FulfillmentCodeHook - Amazon Lex는 이 값을 설정하여 의도를 이행하도록 Lambda 함수에 지시합니다.

       

      의도가 Lambda 함수를 이행 코드 후크로 호출하도록 구성된 경우 Amazon Lex는 의도를 이행하기 위한 모든 슬롯 데이터가 확보된 후에만 invocationSource를 이 값으로 설정합니다.

       

    의도 구성에 사용자 데이터를 초기화 및 확인하고 의도를 이행하기 위한 별개의 Lambda 함수 두 개가 있을 수 있습니다. Lambda 함수 하나를 사용하여 두 작업을 모두 수행할 수도 있습니다. 이 경우 Lambda 함수가 올바른 코드 경로를 따르도록 invocationSource 값을 사용할 수 있습니다.

     

  • outputDialogMode - 각 사용자 입력에 대해 클라이언트는 런타임 API 작업인 PostContent 또는 PostText 중 하나를 사용하여 Amazon Lex에 요청을 보냅니다. Amazon Lex는 API 요청 파라미터에서 클라이언트(사용자)에 대한 응답이 텍스트인지 음성인지 판단하고, 그에 따라 이 필드를 설정합니다.

     

    Lambda 함수는 이 정보를 사용하여 적절한 메시지를 생성할 수 있습니다. 예를 들어 클라이언트가 음성 응답을 기대하는 경우, 함수는 텍스트 대신에 음성 합성 마크업 언어(SSML)를 반환할 수 있습니다.

     

  • messageVersion - Lambda 함수로 들어가는 이벤트 데이터의 형식과 Lambda 함수의 예상 응답 형식을 식별하는 메시지 버전입니다.

    참고

    의도를 정의할 때 이 값을 구성합니다. 현재 구현에서는 메시지 버전 1.0만 지원됩니다. 따라서 콘솔은 기본값을 1.0으로 가정하며 이는 메시지 버전에 표시되지 않습니다.

  • sessionAttributes – 클라이언트가 요청에서 전송하는 애플리케이션별 세션 속성입니다. Amazon Lex가 클라이언트에 대한 응답에 이 세션 속성을 포함시키도록 하려는 경우, Lambda 함수는 응답에서 이 세션 속성을 다시 Amazon Lex에 전송해야 합니다. 자세한 정보는 Setting Session Attributes을 참조하세요.

     

  • requestAttributes – 클라이언트가 요청에서 전송하는 요청별 속성입니다. 전체 세션에서 유지할 필요가 없는 정보를 전달하려면 요청 속성을 사용합니다. 요청 속성이 존재하지 않는 경우, 값은 null이 됩니다. 자세한 정보는 Setting Request Attributes을 참조하세요.

     

  • recentIntentSummaryView – 의도 상태에 대한 정보입니다. 사용된 의도 중 마지막 3개에 대한 정보를 볼 수 있습니다. 이 정보를 사용하여 의도의 값을 설정하거나 이전 의도로 돌아갈 수 있습니다. 자세한 내용은 Amazon Lex API로 세션 관리을 참조하세요.

     

  • sentimentResponse – 마지막 표현에 대한 Amazon Comprehend 감정 분석의 결과입니다. 이 정보를 사용하여 사용자가 표현한 감정에 따라 봇의 대화 흐름을 관리할 수 있습니다. 자세한 내용은 감정 분석을 참조하세요.

     

  • kendraResponse – Amazon Kendra 인덱스에 대한 쿼리 결과. 해당 의도가 AMAZON.KendraSearchIntent 기본 제공 의도를 확장하는 경우에 한해 이행 코드 후크에 대한 입력에만 표시됩니다. 이 필드에는 Amazon Kendra 검색의 전체 응답이 포함됩니다. 자세한 내용은 AMAZON.KendraSearchIntent을 참조하세요.

     

  • activeContexts – 사용자와의 대화가 진행되는 동안 활성화되는 하나 이상의 컨텍스트.

    • timeToLive — 컨텍스트가 활성 상태로 유지될 때까지 사용자와 대화하는 시간 또는 턴 수.

    • name – 컨텍스트의 이름.

    • 파라미터는 컨텍스트를 활성화한 의도의 슬롯 이름과 값을 포함하는 키/값 쌍의 목록입니다.

    자세한 내용은 의도 컨텍스트 설정을 참조하세요.

응답 형식

Amazon Lex는 Lambda 함수에서 다음 형식의 응답을 기대합니다.

{ "sessionAttributes": { "key1": "value1", "key2": "value2" ... }, "recentIntentSummaryView": [ { "intentName": "Name", "checkpointLabel": "Label", "slots": { "slot name": "value", "slot name": "value" }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)", "dialogActionType": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close", "fulfillmentState": "Fulfilled or Failed", "slotToElicit": "Next slot to elicit" } ], "activeContexts": [ { "timeToLive": { "timeToLiveInSeconds": seconds, "turnsToLive": turns }, "name": "name", "parameters": { "key name": "value" } } ], "dialogAction": { "type": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close", Full structure based on the type field. See below for details. } }

응답은 두 개의 필드로 구성되어 있습니다. sessionAttributes, recentIntentSummaryViewactiveContexts필드는 선택 사항이고, dialogAction 필드는 필수입니다. dialogAction 필드의 내용은 type 필드의 값에 따라 달라집니다. 자세한 내용은 dialogAction을 참조하세요.

sessionAttributes

선택 사항 sessionAttributes 필드를 포함시킬 경우 비워둘 수 있습니다. Lambda 함수가 세션 속성을 반환하지 않으면 API 또는 Lambda 함수를 통해 전달된 마지막으로 알려진 sessionAttributes이 유지됩니다. 자세한 내용은 PostContentPostText작업을 참조하십시오.

"sessionAttributes": { "key1": "value1", "key2": "value2" }

recentIntentSummaryView

선택 사항. 포함된 경우 하나 이상의 최근 의도에 대한 값을 설정합니다. 최대 3개의 의도에 대한 정보를 포함할 수 있습니다. 예를 들어, 현재 의도에서 수집한 정보를 기반으로 이전 의도의 값을 설정할 수 있습니다. 요약에 있는 정보는 의도에 대해 유효해야 합니다. 예를 들어 의도 이름은 봇의 의도여야 합니다. 요약 보기에 슬롯 값을 포함하는 경우 슬롯이 의도에 있어야 합니다. 응답에 recentIntentSummaryView를 포함하지 않는 경우 최근 의도에 대한 모든 값이 변경되지 않고 그대로 유지됩니다. 자세한 내용은 PutSession 작업 또는 IntentSummary 데이터 형식을 참조하십시오.

"recentIntentSummaryView": [ { "intentName": "Name", "checkpointLabel": "Label", "slots": { "slot name": "value", "slot name": "value" }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)", "dialogActionType": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close", "fulfillmentState": "Fulfilled or Failed", "slotToElicit": "Next slot to elicit" } ]

activeContexts

선택 사항. 포함된 경우, 하나 이상의 컨텍스트에 대한 값을 설정합니다. 예를 들어, 컨텍스트를 포함하여 해당 컨텍스트를 입력으로 사용하는 하나 이상의 의도를 대화의 다음 단계에서 인식할 수 있도록 만들 수 있습니다.

응답에 포함되지 않은 모든 활성 컨텍스트의 time-to-live 값은 감소하므로 다음 요청에서도 여전히 활성 상태일 수 있습니다.

입력 이벤트에 포함된 컨텍스트의 time-to-live를 0으로 지정하면 다음 요청 시 해당 컨텍스트가 비활성화됩니다.

자세한 내용은 의도 컨텍스트 설정을 참조하세요.

dialogAction

필수 사항. dialogAction 필드는 Amazon Lex에 일련의 다음 조치를 지시하고, Amazon Lex가 클라이언트에 응답을 반환한 후 사용자로부터 무엇을 기대하는지를 설명합니다.

type 필드는 일련의 다음 조치를 나타냅니다. 또한 이 필드는 Lambda 함수가 dialogAction 값의 일부로 제공해야 하는 다른 필드를 결정합니다.

  • Close — 사용자의 응답을 기대하지 않도록 Amazon Lex에 알립니다. 예를 들어 "피자 주문이 완료되었습니다"에는 응답이 필요 없습니다.

     

    fulfillmentState 필드는 필수 사항입니다. Amazon Lex는 이 값을 사용하여 클라이언트 애플리케이션에 대한 PostContent 또는 PostText 응답의 dialogState 필드를 설정합니다. messageresponseCard 필드는 선택 사항입니다. 사용자가 메시지를 지정하지 않으면 Amazon Lex는 의도에 대해 구성된 종료 메시지 또는 후속 메시지를 사용합니다.

    "dialogAction": { "type": "Close", "fulfillmentState": "Fulfilled or Failed", "message": { "contentType": "PlainText or SSML or CustomPayload", "content": "Message to convey to the user. For example, Thanks, your pizza has been ordered." }, "responseCard": { "version": integer-value, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title", "subTitle":"card-sub-title", "imageUrl":"URL of the image to be shown", "attachmentLinkUrl":"URL of the attachment to be associated with the card", "buttons":[ { "text":"button-text", "value":"Value sent to server on button click" } ] } ] } }
  • ConfirmIntent — 사용자가 현재 의도를 확정하거나 거부하기 위해 예 또는 아니요 대답을 제공할 것으로 예상된다고 Amazon Lex에 알립니다.

     

    intentNameslots 필드를 포함시켜야 합니다. slots 필드에는 지정된 의도에 대해 입력된 각 슬롯에 대한 항목이 포함되어야 합니다. 입력되지 않은 슬롯의 slots 필드에는 항목을 포함시킬 필요가 없습니다. 해당 의도의 confirmationPrompt 필드가 null인 경우 message 필드를 포함해야 합니다. Lambda 함수가 반환한 message 필드의 내용은 의도에 지정된 confirmationPrompt보다 우선합니다. responseCard 필드는 선택 사항입니다.

    "dialogAction": { "type": "ConfirmIntent", "message": { "contentType": "PlainText or SSML or CustomPayload", "content": "Message to convey to the user. For example, Are you sure you want a large pizza?" }, "intentName": "intent-name", "slots": { "slot-name": "value", "slot-name": "value", "slot-name": "value" }, "responseCard": { "version": integer-value, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title", "subTitle":"card-sub-title", "imageUrl":"URL of the image to be shown", "attachmentLinkUrl":"URL of the attachment to be associated with the card", "buttons":[ { "text":"button-text", "value":"Value sent to server on button click" } ] } ] } }
  • Delegate — 봇 구성에 따라 일련의 다음 조치를 선택하도록 Amazon Lex에 지시합니다. 응답에 세션 속성이 없을 경우 Amazon Lex는 기존 속성을 유지합니다. 슬롯 값이 nul)이 되게 하려면 요청에 슬롯 필드를 포함할 필요가 없습니다. 이행 함수가 슬롯을 제거하지 않고 Delegate 대화 작업을 반환하면 DependencyFailedException 예외가 발생합니다.

    kendraQueryRequestPayloadkendraQueryFilterString 필드는 선택 사항이며 해당 의도가 AMAZON.KendraSearchIntent 기본 제공 의도에서 파생된 경우에만 사용됩니다. 자세한 내용은 AMAZON.KendraSearchIntent를 참조하십시오.

    "dialogAction": { "type": "Delegate", "slots": { "slot-name": "value", "slot-name": "value", "slot-name": "value" }, "kendraQueryRequestPayload": "Amazon Kendra query", "kendraQueryFilterString": "Amazon Kendra attribute filters" }
  • ElicitIntent — 사용자가 의도를 포함하는 표현으로 응답할 것으로 예상된다고 Amazon Lex에 알립니다. 예를 들어 OrderPizzaIntent를 나타내는 "피자가 먹고 싶어요"입니다. 반면에 표현 "라지"는 Amazon Lex가 사용자의 의도를 유추하기에 부족합니다.

     

    messageresponseCard 필드는 선택 사항입니다. 사용자가 메시지를 제공하지 않으면 Amazon Lex는 봇의 분류 프롬프트 중 하나를 사용합니다. 확인 프롬프트가 정의되어 있지 않으면 Amazon Lex는 400 잘못된 요청 예외를 반환합니다.

    { "dialogAction": { "type": "ElicitIntent", "message": { "contentType": "PlainText or SSML or CustomPayload", "content": "Message to convey to the user. For example, What can I help you with?" }, "responseCard": { "version": integer-value, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title", "subTitle":"card-sub-title", "imageUrl":"URL of the image to be shown", "attachmentLinkUrl":"URL of the attachment to be associated with the card", "buttons":[ { "text":"button-text", "value":"Value sent to server on button click" } ] } ] } }
  • ElicitSlot — 사용자가 응답에 슬롯 값을 제공할 것으로 예상된다고 Amazon Lex에 알립니다.

     

    intentName, slotToElicitslots필드는 필수 사항입니다. messageresponseCard 필드는 선택 사항입니다. 사용자가 메시지를 지정하지 않으면 Amazon Lex는 슬롯에 대해 구성된 슬롯 유도 프롬프트 중 하나를 사용합니다.

    "dialogAction": { "type": "ElicitSlot", "message": { "contentType": "PlainText or SSML or CustomPayload", "content": "Message to convey to the user. For example, What size pizza would you like?" }, "intentName": "intent-name", "slots": { "slot-name": "value", "slot-name": "value", "slot-name": "value" }, "slotToElicit" : "slot-name", "responseCard": { "version": integer-value, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title", "subTitle":"card-sub-title", "imageUrl":"URL of the image to be shown", "attachmentLinkUrl":"URL of the attachment to be associated with the card", "buttons":[ { "text":"button-text", "value":"Value sent to server on button click" } ] } ] } }