/* * Copyright 2010-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazonaws.services.lexrts; import java.util.*; import com.amazonaws.*; import com.amazonaws.auth.*; import com.amazonaws.handlers.*; import com.amazonaws.http.*; import com.amazonaws.internal.*; import com.amazonaws.metrics.*; import com.amazonaws.transform.*; import com.amazonaws.util.*; import com.amazonaws.util.AWSRequestMetrics.Field; import com.amazonaws.services.lexrts.model.*; import com.amazonaws.services.lexrts.model.transform.*; import com.amazonaws.services.lexrts.internal.AmazonLexV4Signer; /** * Client for accessing Amazon Lex Runtime Service. All service calls made using * this client are blocking, and will not return until the service call * completes. *
*
* Amazon Lex provides both build and runtime endpoints. Each endpoint provides * a set of operations (API). Your conversational bot uses the runtime API to * understand user utterances (user input text or voice). For example, suppose a * user says "I want pizza", your bot sends this input to Amazon Lex using the * runtime API. Amazon Lex recognizes that the user request is for the * OrderPizza intent (one of the intents defined in the bot). Then Amazon Lex * engages in user conversation on behalf of the bot to elicit required * information (slot values, such as pizza size and crust type), and then * performs fulfillment activity (that you configured when you created the bot). * You use the build-time API to create and manage your Amazon Lex bot. For a * list of build-time operations, see the build-time API, . *
*/ public class AmazonLexRuntimeClient extends AmazonWebServiceClient implements AmazonLexRuntime { /** Custom Signer */ private static final String CUSTOM_SIGNER = "AmazonLexV4Signer"; static { SignerFactory.registerSigner(CUSTOM_SIGNER, AmazonLexV4Signer.class); } /** Provider for AWS credentials. */ private AWSCredentialsProvider awsCredentialsProvider; /** * List of exception unmarshallers for all Amazon Lex Runtime Service * exceptions. */ protected List* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @see DefaultAWSCredentialsProviderChain */ @Deprecated public AmazonLexRuntimeClient() { this(new DefaultAWSCredentialsProviderChain(), new ClientConfiguration()); } /** * Constructs a new client to invoke service methods on AmazonLexRuntime. A * credentials provider chain will be used that searches for credentials in * this order: *
* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param clientConfiguration The client configuration options controlling * how this client connects to AmazonLexRuntime (ex: proxy * settings, retry counts, etc.). * @see DefaultAWSCredentialsProviderChain */ @Deprecated public AmazonLexRuntimeClient(ClientConfiguration clientConfiguration) { this(new DefaultAWSCredentialsProviderChain(), clientConfiguration); } /** * Constructs a new client to invoke service methods on AmazonLexRuntime * using the specified AWS account credentials. *
* The client requests are authenticated using the {@link AWSCredentials} * provided in this constructor. Static AWSCredentials can be passed for * quick testing. However, it is strongly recommended to use Amazon Cognito * vended temporary credentials for use in production. This can be achieved * by using {@link AWSMobileClient}. Please see * https://aws-amplify.github.io/docs/android/authentication for * instructions on how to enable {@link AWSMobileClient}. * *
* AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() { * @Override * public void onResult(final UserStateDetails details) { * AmazonLexRuntimeClient client = new AmazonLexRuntimeClient(AWSMobileClient.getInstance()); * } * * @Override * public void onError(final Exception e) { * e.printStackTrace(); * } * }); **
* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentials The AWS credentials (access key ID and secret key) * to use when authenticating with AWS services. */ public AmazonLexRuntimeClient(AWSCredentials awsCredentials) { this(awsCredentials, new ClientConfiguration()); } /** * Constructs a new client to invoke service methods on AmazonLexRuntime * using the specified AWS account credentials and client configuration * options. *
* The client requests are authenticated using the {@link AWSCredentials} * provided in this constructor. Static AWSCredentials can be passed for * quick testing. However, it is strongly recommended to use Amazon Cognito * vended temporary credentials for use in production. This can be achieved * by using {@link AWSMobileClient}. Please see * https://aws-amplify.github.io/docs/android/authentication for * instructions on how to enable {@link AWSMobileClient}. * *
* AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() { * @Override * public void onResult(final UserStateDetails details) { * AmazonLexRuntimeClient client = new AmazonLexRuntimeClient(AWSMobileClient.getInstance()); * } * * @Override * public void onError(final Exception e) { * e.printStackTrace(); * } * }); **
* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentials The AWS credentials (access key ID and secret key) * to use when authenticating with AWS services. * @param clientConfiguration The client configuration options controlling * how this client connects to AmazonLexRuntime (ex: proxy * settings, retry counts, etc.). */ public AmazonLexRuntimeClient(AWSCredentials awsCredentials, ClientConfiguration clientConfiguration) { this(new StaticCredentialsProvider(awsCredentials), clientConfiguration); } /** * Constructs a new client to invoke service methods on AmazonLexRuntime * using the specified AWS account credentials provider. *
* The client requests are authenticated using the {@link AWSCredentials} * provided by the {@link AWSCredentialsProvider}. Static AWSCredentials can * be passed for quick testing. However, it is strongly recommended to use * Amazon Cognito vended temporary credentials for use in production. This * can be achieved by using {@link AWSMobileClient}. Please see * https://aws-amplify.github.io/docs/android/authentication for * instructions on how to enable {@link AWSMobileClient}. * *
* AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() { * @Override * public void onResult(final UserStateDetails details) { * AmazonLexRuntimeClient client = new AmazonLexRuntimeClient(AWSMobileClient.getInstance()); * } * * @Override * public void onError(final Exception e) { * e.printStackTrace(); * } * }); **
* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentialsProvider The AWS credentials provider which will * provide credentials to authenticate requests with AWS * services. */ public AmazonLexRuntimeClient(AWSCredentialsProvider awsCredentialsProvider) { this(awsCredentialsProvider, new ClientConfiguration()); } /** * Constructs a new client to invoke service methods on AmazonLexRuntime * using the specified AWS account credentials provider and client * configuration options. *
* The client requests are authenticated using the {@link AWSCredentials} * provided by the {@link AWSCredentialsProvider}. Static AWSCredentials can * be passed for quick testing. However, it is strongly recommended to use * Amazon Cognito vended temporary credentials for use in production. This * can be achieved by using {@link AWSMobileClient}. Please see * https://aws-amplify.github.io/docs/android/authentication for * instructions on how to enable {@link AWSMobileClient}. * *
* AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() { * @Override * public void onResult(final UserStateDetails details) { * AmazonLexRuntimeClient client = new AmazonLexRuntimeClient(AWSMobileClient.getInstance()); * } * * @Override * public void onError(final Exception e) { * e.printStackTrace(); * } * }); **
* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentialsProvider The AWS credentials provider which will * provide credentials to authenticate requests with AWS * services. * @param clientConfiguration The client configuration options controlling * how this client connects to AmazonLexRuntime (ex: proxy * settings, retry counts, etc.). */ public AmazonLexRuntimeClient(AWSCredentialsProvider awsCredentialsProvider, ClientConfiguration clientConfiguration) { this(awsCredentialsProvider, clientConfiguration, new UrlHttpClient(clientConfiguration)); } /** * Constructs a new client to invoke service methods on AmazonLexRuntime * using the specified AWS account credentials provider, client * configuration options and request metric collector. *
* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentialsProvider The AWS credentials provider which will * provide credentials to authenticate requests with AWS * services. * @param clientConfiguration The client configuration options controlling * how this client connects to AmazonLexRuntime (ex: proxy * settings, retry counts, etc.). * @param requestMetricCollector optional request metric collector */ @Deprecated public AmazonLexRuntimeClient(AWSCredentialsProvider awsCredentialsProvider, ClientConfiguration clientConfiguration, RequestMetricCollector requestMetricCollector) { super(adjustClientConfiguration(clientConfiguration), requestMetricCollector); this.awsCredentialsProvider = awsCredentialsProvider; init(); } /** * Constructs a new client to invoke service methods on AmazonLexRuntime * using the specified AWS account credentials provider, client * configuration options and request metric collector. *
* The client requests are authenticated using the {@link AWSCredentials} * provided by the {@link AWSCredentialsProvider}. Static AWSCredentials can * be passed for quick testing. However, it is strongly recommended to use * Amazon Cognito vended temporary credentials for use in production. This * can be achieved by using {@link AWSMobileClient}. Please see * https://aws-amplify.github.io/docs/android/authentication for * instructions on how to enable {@link AWSMobileClient}. * *
* AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() { * @Override * public void onResult(final UserStateDetails details) { * AmazonLexRuntimeClient client = new AmazonLexRuntimeClient(AWSMobileClient.getInstance()); * } * * @Override * public void onError(final Exception e) { * e.printStackTrace(); * } * }); **
* All service calls made using this new client object are blocking, and
* will not return until the service call completes.
*
* @param awsCredentialsProvider The AWS credentials provider which will
* provide credentials to authenticate requests with AWS
* services.
* @param clientConfiguration The client configuration options controlling
* how this client connects to AmazonLexRuntime (ex: proxy
* settings, retry counts, etc.).
* @param httpClient A http client
*/
public AmazonLexRuntimeClient(AWSCredentialsProvider awsCredentialsProvider,
ClientConfiguration clientConfiguration, HttpClient httpClient) {
super(adjustClientConfiguration(clientConfiguration), httpClient);
this.awsCredentialsProvider = awsCredentialsProvider;
init();
}
private void init() {
jsonErrorUnmarshallers = new ArrayList
* Removes session information for a specified bot, alias, and user ID.
*
* Returns session information for a specified bot, alias, and user ID.
*
* Sends user input (text or speech) to Amazon Lex. Clients use this API to
* send text and audio requests to Amazon Lex at runtime. Amazon Lex
* interprets the user input using the machine learning model that it built
* for the bot.
*
* The
* In response, Amazon Lex returns the next message to convey to the user.
* Consider the following example messages:
*
* For a user input "I would like a pizza," Amazon Lex might return a
* response with a message eliciting slot data (for example,
*
* After the user provides all of the pizza order information, Amazon Lex
* might return a response with a message to get user confirmation:
* "Order the pizza?".
*
* After the user replies "Yes" to the confirmation prompt, Amazon Lex might
* return a conclusion statement:
* "Thank you, your cheese pizza has been ordered.".
*
* Not all Amazon Lex messages require a response from the user. For
* example, conclusion statements do not require a response. Some messages
* require only a yes or no response. In addition to the
*
* If the message is to elicit slot data, Amazon Lex returns the following
* context information:
*
*
*
*
*
* If the message is a confirmation prompt, the
*
* If the message is a clarification prompt configured for the intent,
* indicating that the user intent is not understood, the
*
* In addition, Amazon Lex also returns your application-specific
*
* Sends user input to Amazon Lex. Client applications can use this API to
* send requests to Amazon Lex at runtime. Amazon Lex then interprets the
* user input using the machine learning model it built for the bot.
*
* In response, Amazon Lex returns the next
* For a user input "I would like a pizza", Amazon Lex might return a
* response with a message eliciting slot data (for example, PizzaSize):
* "What size pizza would you like?"
*
* After the user provides all of the pizza order information, Amazon Lex
* might return a response with a message to obtain user confirmation
* "Proceed with the pizza order?".
*
* After the user replies to a confirmation prompt with a "yes", Amazon Lex
* might return a conclusion statement:
* "Thank you, your cheese pizza has been ordered.".
*
* Not all Amazon Lex messages require a user response. For example, a
* conclusion statement does not require a response. Some messages require
* only a "yes" or "no" user response. In addition to the
*
* If the message is to elicit slot data, Amazon Lex returns the following
* context information:
*
*
*
*
*
* If the message is a confirmation prompt, the
* If the message is a clarification prompt (configured for the intent) that
* indicates that user intent is not understood, the
*
* In addition, Amazon Lex also returns your application-specific
*
* Creates a new session or modifies an existing session with an Amazon Lex
* bot. Use this operation to enable your application to set the state of
* the bot.
*
* For more information, see Managing Sessions.
*
* Response metadata is only cached for a limited period of time, so if you
* need to access this extra diagnostic information for an executed request,
* you should use this method to retrieve it as soon as possible after
* executing the request.
*
* @param request The originally executed request
* @return The response metadata for the specified request, or null if none
* is available.
* @deprecated ResponseMetadata cache can hold up to 50 requests and
* responses in memory and will cause memory issue. This method
* now always returns null.
*/
@Deprecated
public ResponseMetadata getCachedResponseMetadata(AmazonWebServiceRequest request) {
return client.getResponseMetadataForRequest(request);
}
private PostContent
operation supports audio input at 8kHz and
* 16kHz. You can use 8kHz audio to achieve higher speech recognition
* accuracy in telephone audio applications.
*
*
* PizzaSize
): "What size pizza would you like?".
* message
, Amazon Lex provides additional context about the
* message in the response that you can use to enhance client behavior, such
* as displaying the appropriate client user interface. Consider the
* following examples:
*
*
*
*
* x-amz-lex-dialog-state
header set to ElicitSlot
* x-amz-lex-intent-name
header set to the intent name in the
* current context
* x-amz-lex-slot-to-elicit
header set to the slot name for
* which the message
is eliciting information
* x-amz-lex-slots
header set to a map of slots configured for
* the intent with their current values
* x-amz-lex-dialog-state
header is set to
* Confirmation
and the x-amz-lex-slot-to-elicit
* header is omitted.
* x-amz-dialog-state
header is set to
* ElicitIntent
and the x-amz-slot-to-elicit
* header is omitted.
* sessionAttributes
. For more information, see Managing Conversation Context.
* message
to convey
* to the user an optional responseCard
to display. Consider
* the following example messages:
*
*
* message
, Amazon Lex provides additional context about the
* message in the response that you might use to enhance client behavior,
* for example, to display the appropriate client user interface. These are
* the slotToElicit
, dialogState
,
* intentName
, and slots
fields in the response.
* Consider the following examples:
*
*
*
*
* dialogState
set to ElicitSlot
* intentName
set to the intent name in the current context
* slotToElicit
set to the slot name for which the
* message
is eliciting information
* slots
set to a map of slots, configured for the intent, with
* currently known values
* dialogState
is
* set to ConfirmIntent and SlotToElicit
is set to null.
* dialogState
is set to ElicitIntent and
* slotToElicit
is set to null.
* sessionAttributes
. For more information, see Managing Conversation Context.
*