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

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

 

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

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

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

이 섹션에서는 클라이언트가 음성으로 요청을 보낼 때 클라이언트와 간의 정보 흐름에 대해 설명합니다. 자세한 내용은 PostContent을 참조하세요.

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

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

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream

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

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

      • 요청 헤더

        • x-amz-lex-session-attributes – base64 인코딩 값은 "{}"를 나타냅니다. 클라이언트가 첫 번째 요청을 한 경우 세션 속성이 없습니다.

        • Content-Type – 오디오 형식을 반영합니다.

      • 요청 본문 – 사용자 입력 오디오 스트림("꽃을 주문하고 싶습니다").

      참고

      사용자가 말하기 대신에 PostContent API에 텍스트("꽃을 주문하고 싶습니다") 보내기를 선택하는 경우, 요청 본문이 사용자 입력입니다. Content-Type 헤더는 그에 따라 설정됩니다.

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "text/plain; charset=utf-8" Accept: accept Request body input stream
    2. 입력 스트림에서 Amazon Lex는 의도(OrderFlowers)를 감지합니다. 그런 다음 의도의 슬롯 중 하나(이 경우 FlowerType)와 해당 값 유도 프롬프트 중 하나를 선택한 다음, 다음 헤더가 포함된 응답을 보냅니다.

      x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:I would like to order some flowers. x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:What type of flowers would you like to order? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:FlowerType x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjpudWxsLCJQaWNrdXBEYXRlIjpudWxsfQ==

      헤더 값은 다음 정보를 제공합니다.

      • x-amz-lex-input-transcript – 요청에 있는 오디오(사용자 입력) 전사(transcript) 기록 제공

      • x-amz-lex-message – 응답에서 반환된 오디오 Amazon Lex의 기록 제공

      • x-amz-lex-slots – 슬롯 및 값의 base64 인코딩된 버전:

        {"PickupTime":null,"FlowerType":null,"PickupDate":null}
      • x-amz-lex-session-attributes – 세션 속성({})의 base64 인코딩된 버전

      클라이언트는 응답 본문에서 오디오를 재생합니다.

  2. 사용자의 말: 장미

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

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream ("roses")

      요청 본문은 사용자 입력 오디오 스트림(장미)입니다. sessionAttributes는 비어있습니다.

    2. Amazon Lex는 현재 의도의 맥락에서 입력 스트림을 해석합니다(이 사용자에게 FlowerType 슬롯에 관한 정보를 요청했음을 기억). Amazon Lex는 먼저 현재 의도의 슬롯 값을 업데이트합니다. 그런 다음 또 다른 슬롯(PickupDate)과 해당 프롬프트 메시지 중 하나(언제 장미를 픽업하고 싶으세요?)를 선택하고 다음 헤더가 포함된 응답을 반환합니다.

      x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:roses x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:When do you want to pick up the roses? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:PickupDate x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6bnVsbH0=

      헤더 값은 다음 정보를 제공합니다.

      • x-amz-lex-slots – 슬롯 및 값의 base64 인코딩된 버전:

        {"PickupTime":null,"FlowerType":"roses","PickupDate":null}
      • x-amz-lex-session-attributes – 세션 속성({})의 base64 인코딩된 버전

      클라이언트는 응답 본문에서 오디오를 재생합니다.

  3. 사용자의 말: 내일

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

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream ("tomorrow")

      요청 본문은 사용자 입력 오디오 스트림("내일")입니다. sessionAttributes는 비어있습니다.

    2. Amazon Lex는 현재 의도의 맥락에서 입력 스트림을 해석합니다(이 사용자에게 PickupDate 슬롯에 관한 정보를 요청했음을 기억). Amazon Lex는 현재 의도의 슬롯(PickupDate) 값을 업데이트합니다. 그런 다음 (PickupTime)의 값을 유도할 또 다른 슬롯과 값 유도 프롬프트 중 하나(2017-03-18의 언제 장미를 픽업하고 싶으세요?)를 선택하고, 다음 헤더가 포함된 응답을 반환합니다.

      x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:tomorrow x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:When do you want to pick up the roses on 2017-03-18? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:PickupTime x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ== x-amzn-RequestId:3a205b70-0b69-11e7-b447-eb69face3e6f

      헤더 값은 다음 정보를 제공합니다.

      • x-amz-lex-slots – 슬롯 및 값의 base64 인코딩된 버전:

        {"PickupTime":null,"FlowerType":"roses","PickupDate":"2017-03-18"}
      • x-amz-lex-session-attributes – 세션 속성({})의 base64 인코딩된 버전

      클라이언트는 응답 본문에서 오디오를 재생합니다.

  4. 사용자의 말: 오후 6시

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

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "text/plain; charset=utf-8" Accept: "audio/mpeg" Request body input stream ("6 pm")

      요청 본문은 사용자 입력 오디오 스트림("오후 6시")입니다. sessionAttributes는 비어있습니다.

    2. Amazon Lex는 현재 의도의 맥락에서 입력 스트림을 해석합니다(이 사용자에게 PickupTime 슬롯에 관한 정보를 요청했음을 기억). 먼저 현재 의도의 슬롯 값을 업데이트합니다.

      이제 Amazon Lex는 모든 슬롯에 대한 정보를 갖고 있음을 감지합니다. 그러나 OrderFlowers 의도는 확인 메시지로 구성됩니다. 따라서 Amazon Lex는 의도를 이행하기 전에 사용자의 명시적 확인이 필요합니다. 따라서 꽃을 주문하기 전에 확인을 요청하는 다음 헤더가 포함된 응답을 보냅니다.

      x-amz-lex-dialog-state:ConfirmIntent x-amz-lex-input-transcript:six p. m. x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:Okay, your roses will be ready for pickup by 18:00 on 2017-03-18. Does this sound okay? x-amz-lex-session-attributes:e30= x-amz-lex-slots:eyJQaWNrdXBUaW1lIjoiMTg6MDAiLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ== x-amzn-RequestId:083ca360-0b6a-11e7-b447-eb69face3e6f

      헤더 값은 다음 정보를 제공합니다.

      • x-amz-lex-slots – 슬롯 및 값의 base64 인코딩된 버전:

        {"PickupTime":"18:00","FlowerType":"roses","PickupDate":"2017-03-18"}
      • x-amz-lex-session-attributes – 세션 속성({})의 base64 인코딩된 버전

      클라이언트는 응답 본문에서 오디오를 재생합니다.

  5. 사용자의 말: 예

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

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream ("Yes")

      요청 본문은 사용자 입력 오디오 스트림("예")입니다. sessionAttributes는 비어있습니다.

    2. Amazon Lex는 입력 스트림을 해석하여 사용자가 주문을 진행하기를 원한다고 이해합니다. OrderFlowers 의도는 이행 활동인 ReturnIntent로 구성됩니다. 이것은 의도 데이터를 모두 클라이언트에 다시 반환하라고 Amazon Lex에 지시합니다. Amazon Lex는 다음이 포함된 응답을 반환합니다.

      x-amz-lex-dialog-state:ReadyForFulfillment x-amz-lex-input-transcript:yes x-amz-lex-intent-name:OrderFlowers x-amz-lex-session-attributes:e30= x-amz-lex-slots:eyJQaWNrdXBUaW1lIjoiMTg6MDAiLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ==

      x-amz-lex-dialog-state 응답 헤더는 ReadyForFulfillment로 설정되어 있습니다. 그러면 클라이언트는 의도를 이행할 수 있습니다.

  6. 이제 봇을 다시 테스트합니다. 새 (사용자) 컨텍스트를 설정하려면 콘솔에서 지우기 링크를 선택합니다. OrderFlowers 의도에 대한 데이터를 제공하고, 일부 유효하지 않은 데이터를 포함시킵니다. 예:

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

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

    사용자 데이터를 초기화 및 검증할 코드가 없으므로 봇은 이러한 값을 수락합니다. 다음 섹션에서는 Lambda 함수를 추가하여 이를 수행합니다. 다음은 Lambda 함수에 대한 참고 사항입니다.

    • 각 사용자의 입력 후 슬롯 데이터를 검증합니다. 마지막에 의도를 이행합니다. 즉, 단순히 클라이언트에게 슬롯 데이터를 반환하는 것이 아니라 봇이 꽃 주문을 처리하고 사용자에게 메시지를 반환하는 것입니다. 자세한 내용은 Lambda 함수 사용 섹션을 참조하세요.

    • 세션 속성도 설정합니다. 세션 속성에 대한 자세한 내용은 PostText 섹션을 참조하십시오.

      시작하기 섹션을 완료한 후 추가 연습(추가 예제: Amazon Lex 봇 생성)을 할 수 있습니다. 여행 예약에서는 세션 속성을 사용하여 의도 전반에 걸쳐 정보를 공유함으로써 사용자와의 동적 대화에 참여합니다.

다음 단계

3단계: Lambda 함수 만들기(콘솔)