

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Java 應用程式與 Amazon Lex V2 機器人互動
<a name="deploy-java"></a>

[適用於 Java 的 AWS SDK 2.0 ](https://github.com/aws/aws-sdk-java-v2)提供您可以從 Java 應用程式用來與機器人互動的界面。使用適用於 Java 的 SDK 為使用者建置用戶端應用程式。

下列應用程式會與您在 中建立的 OrderFlowers 機器人互動[練習 1：從範本建立聊天機器人](exercise-1.md)。它使用`LexRuntimeV2Client`適用於 Java 的 開發套件的 來呼叫 [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。
+ region – 如果您的機器人不在美國東部 （維吉尼亞北部） 區域，請務必變更區域。

應用程式使用名為 的函數`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;
    }
}
```