

지원 종료 공지: 2025년 9월 15 AWS 일에는 Amazon Lex V1에 대한 지원을 중단할 예정입니다. 2025년 9월 15일 이후에는 Amazon Lex V1 콘솔 또는 Amazon Lex V1 리소스에 더 이상 액세스할 수 없습니다. Amazon Lex V2를 사용하는 경우 대신 [Amazon Lex V2 가이드를](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html) 참조하세요.

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

# 2a단계(선택 사항): 음성 정보 흐름의 세부 정보 검토(콘솔)
<a name="gs-bp-details-postcontent-flow"></a>

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

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

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

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

   1. 입력 스트림에서 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 인코딩된 버전

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

1. 사용자의 말: 장미

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

      ```
      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`는 비어있습니다.

   1. 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 인코딩된 버전

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

1. 사용자의 말: 내일

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

      ```
      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`는 비어있습니다.

   1. 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 인코딩된 버전

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

1. 사용자의 말: 6 pm

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

      ```
      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 pm")입니다. `sessionAttributes`는 비어있습니다.

   1. 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 인코딩된 버전

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

1. 사용자가 "예"라고 한 경우

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

      ```
      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`는 비어있습니다.

   1. 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`로 설정되어 있습니다. 그러면 클라이언트는 의도를 이행할 수 있습니다.

1. 이제 봇을 다시 테스트합니다. 새 (사용자) 컨텍스트를 설정하려면 콘솔에서 **지우기** 링크를 선택합니다. `OrderFlowers` 의도에 대한 데이터를 제공하고, 일부 유효하지 않은 데이터를 포함시킵니다. 예제: 
   + 재스민을 꽃 유형으로 입력(재스민은 지원되는 꽃 유형이 아님)
   + 어제를 꽃을 찾아갈 날로 입력

   사용자 데이터를 초기화 및 검증할 코드가 없으므로 봇은 이러한 값을 수락합니다. 다음 섹션에서는 Lambda 함수를 추가하여 이를 수행합니다. 다음은 Lambda 함수에 대한 참고 사항입니다.
   + 각 사용자의 입력 후 슬롯 데이터를 검증합니다. 마지막에 의도를 이행합니다. 즉, 단순히 클라이언트에게 슬롯 데이터를 반환하는 것이 아니라 봇이 꽃 주문을 처리하고 사용자에게 메시지를 반환하는 것입니다. 자세한 내용은 [Lambda 함수 사용](using-lambda.md)을 참조하세요.
   + 세션 속성도 설정합니다. 세션 속성에 대한 자세한 내용은 [PostText](API_runtime_PostText.md) 섹션을 참조하십시오.

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

**다음 단계**  
[3단계: Lambda 함수 만들기(콘솔)](gs-bp-create-lambda-function.md)