

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

# Java 애플리케이션을 사용하여 Amazon Lex V2 봇과 상호 작용
<a name="deploy-java"></a>

[AWS SDK for Java 2.0](https://github.com/aws/aws-sdk-java-v2)은 Java 애플리케이션에서 봇과 상호 작용하는 데 사용할 수 있는 인터페이스를 제공합니다. SDK for Java를 이용한 사용자용 클라이언트 애플리케이션을 빌드합니다.

다음 애플리케이션은 [연습 1: 템플릿에서 챗봇 생성](exercise-1.md)에서 생성한 OrderFlowers 봇과 상호 작용합니다. SDK for Java SDK의 `LexRuntimeV2Client`를 사용하여 봇과 대화를 수행하기 위해 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 작업을 직접 호출합니다.

대화의 출력은 다음과 같습니다.

```
User : I would like to order flowers
Bot  : What type of flowers would you like to order?
User : 1 dozen roses
Bot  : What day do you want the dozen roses to be picked up?
User : Next Monday
Bot  : At what time do you want the dozen roses to be picked up?
User : 5 in the evening
Bot  : Okay, your dozen roses will be ready for pickup by 17:00 on 2021-01-04.  Does this sound okay?
User : Yes
Bot  : Thanks.
```

클라이언트 애플리케이션과 Amazon Lex V2 봇 간에 전송되는 JSON 구조에 대한 내용은 [연습 2: 대화 흐름 검토](exercise-2.md) 단원을 참조하세요.

애플리케이션을 실행하려면 다음 정보를 제공해야 합니다.
+ botId – 봇을 만들 때 봇에 할당된 식별자입니다. Amazon Lex V2 콘솔의 봇 **설정** 페이지에서 봇 ID를 확인할 수 있습니다.
+ botAliasId – 봇 별칭을 만들 때 봇 별칭에 할당된 식별자입니다. Amazon Lex V2 콘솔의 봇 **별칭** 페이지에서 봇 별칭 ID를 확인할 수 있습니다. 목록에서 별칭 ID가 보이지 않는 경우 오른쪽 상단의 톱니바퀴 아이콘을 선택하고 **별칭 ID**를 켜십시오.
+ localeId – 봇에 사용한 로캘의 식별자입니다. 로캘 목록은 [Amazon Lex V2에서 지원하는 언어 및 로캘](how-languages.md) 섹션을 참조하세요.
+ accessKey 및 secretKey – 계정의 인증 키입니다. 키 세트가 없는 경우 AWS Identity and Access Management 콘솔을 사용하여 키를 생성합니다.
+ sessionId – Amazon Lex V2 봇을 사용한 세션의 식별자입니다. 이 경우 코드는 임의의 UUID를 사용합니다.
+ 리전 – 봇이 미국 동부(버지니아 북부) 리전에 없는 경우 리전을 변경해야 합니다.

애플리케이션은 `getRecognizeTextRequest`라는 함수를 사용하여 봇에 대한 개별 요청을 생성합니다. 이 함수는 Amazon Lex V2로 전송하는 데 필요한 파라미터를 사용하여 요청을 빌드합니다.

```
package com.lex.recognizetext.sample;

import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.lexruntimev2.LexRuntimeV2Client;
import software.amazon.awssdk.services.lexruntimev2.model.RecognizeTextRequest;
import software.amazon.awssdk.services.lexruntimev2.model.RecognizeTextResponse;

import java.net.URISyntaxException;
import java.util.UUID;


/**
 * This is a sample application to interact with a bot using RecognizeText API.
 */
public class OrderFlowersSampleApplication {

    public static void main(String[] args) throws URISyntaxException, InterruptedException {
        String botId = "";
        String botAliasId = "";
        String localeId = "en_US";
        String accessKey = "";
        String secretKey = "";
        String sessionId = UUID.randomUUID().toString();
        Region region = Region.US_EAST_1; // pick an appropriate region

        AwsBasicCredentials awsCreds = AwsBasicCredentials.create(accessKey, secretKey);
        AwsCredentialsProvider awsCredentialsProvider = StaticCredentialsProvider.create(awsCreds);

        LexRuntimeV2Client lexV2Client = LexRuntimeV2Client
                .builder()
                .credentialsProvider(awsCredentialsProvider)
                .region(region)
                .build();

        // utterance 1
        String userInput = "I would like to order flowers";
        RecognizeTextRequest recognizeTextRequest = getRecognizeTextRequest(botId, botAliasId, localeId, sessionId, userInput);
        RecognizeTextResponse recognizeTextResponse = lexV2Client.recognizeText(recognizeTextRequest);

        System.out.println("User : " + userInput);
        recognizeTextResponse.messages().forEach(message -> {
            System.out.println("Bot : " + message.content());
        });

        // utterance 2
        userInput = "1 dozen roses";
        recognizeTextRequest = getRecognizeTextRequest(botId, botAliasId, localeId, sessionId, userInput);
        recognizeTextResponse = lexV2Client.recognizeText(recognizeTextRequest);

        System.out.println("User : " + userInput);
        recognizeTextResponse.messages().forEach(message -> {
            System.out.println("Bot : " + message.content());
        });

        // utterance 3
        userInput = "next monday";
        recognizeTextRequest = getRecognizeTextRequest(botId, botAliasId, localeId, sessionId, userInput);
        recognizeTextResponse = lexV2Client.recognizeText(recognizeTextRequest);

        System.out.println("User : " + userInput);
        recognizeTextResponse.messages().forEach(message -> {
            System.out.println("Bot : " + message.content());
        });

        // utterance 4
        userInput = "5 in evening";
        recognizeTextRequest = getRecognizeTextRequest(botId, botAliasId, localeId, sessionId, userInput);
        recognizeTextResponse = lexV2Client.recognizeText(recognizeTextRequest);

        System.out.println("User : " + userInput);
        recognizeTextResponse.messages().forEach(message -> {
            System.out.println("Bot : " + message.content());
        });

        // utterance 5
        userInput = "Yes";
        recognizeTextRequest = getRecognizeTextRequest(botId, botAliasId, localeId, sessionId, userInput);
        recognizeTextResponse = lexV2Client.recognizeText(recognizeTextRequest);

        System.out.println("User : " + userInput);
        recognizeTextResponse.messages().forEach(message -> {
            System.out.println("Bot : " + message.content());
        });
    }

    private static RecognizeTextRequest getRecognizeTextRequest(String botId, String botAliasId, String localeId, String sessionId, String userInput) {
        RecognizeTextRequest recognizeTextRequest = RecognizeTextRequest.builder()
                .botAliasId(botAliasId)
                .botId(botId)
                .localeId(localeId)
                .sessionId(sessionId)
                .text(userInput)
                .build();
        return recognizeTextRequest;
    }
}
```