/*
* Copyright 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.
*/
/*
* Do not modify this file. This file is generated from the runtime.lex-2016-11-28.normal.json service model.
*/
using System;
using System.Runtime.ExceptionServices;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Net;
using Amazon.Lex.Model;
using Amazon.Lex.Model.Internal.MarshallTransformations;
using Amazon.Lex.Internal;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
using Amazon.Runtime.Internal.Auth;
using Amazon.Runtime.Internal.Transform;
namespace Amazon.Lex
{
///
/// Implementation for accessing Lex
///
/// 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 partial class AmazonLexClient : AmazonServiceClient, IAmazonLex
{
private static IServiceMetadata serviceMetadata = new AmazonLexMetadata();
#region Constructors
///
/// Constructs AmazonLexClient with the credentials loaded from the application's
/// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
///
/// Example App.config with credentials set.
///
/// <?xml version="1.0" encoding="utf-8" ?>
/// <configuration>
/// <appSettings>
/// <add key="AWSProfileName" value="AWS Default"/>
/// </appSettings>
/// </configuration>
///
///
///
public AmazonLexClient()
: base(FallbackCredentialsFactory.GetCredentials(), new AmazonLexConfig()) { }
///
/// Constructs AmazonLexClient with the credentials loaded from the application's
/// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
///
/// Example App.config with credentials set.
///
/// <?xml version="1.0" encoding="utf-8" ?>
/// <configuration>
/// <appSettings>
/// <add key="AWSProfileName" value="AWS Default"/>
/// </appSettings>
/// </configuration>
///
///
///
/// The region to connect.
public AmazonLexClient(RegionEndpoint region)
: base(FallbackCredentialsFactory.GetCredentials(), new AmazonLexConfig{RegionEndpoint = region}) { }
///
/// Constructs AmazonLexClient with the credentials loaded from the application's
/// default configuration, and if unsuccessful from the Instance Profile service on an EC2 instance.
///
/// Example App.config with credentials set.
///
/// <?xml version="1.0" encoding="utf-8" ?>
/// <configuration>
/// <appSettings>
/// <add key="AWSProfileName" value="AWS Default"/>
/// </appSettings>
/// </configuration>
///
///
///
/// The AmazonLexClient Configuration Object
public AmazonLexClient(AmazonLexConfig config)
: base(FallbackCredentialsFactory.GetCredentials(config), config){}
///
/// Constructs AmazonLexClient with AWS Credentials
///
/// AWS Credentials
public AmazonLexClient(AWSCredentials credentials)
: this(credentials, new AmazonLexConfig())
{
}
///
/// Constructs AmazonLexClient with AWS Credentials
///
/// AWS Credentials
/// The region to connect.
public AmazonLexClient(AWSCredentials credentials, RegionEndpoint region)
: this(credentials, new AmazonLexConfig{RegionEndpoint = region})
{
}
///
/// Constructs AmazonLexClient with AWS Credentials and an
/// AmazonLexClient Configuration object.
///
/// AWS Credentials
/// The AmazonLexClient Configuration Object
public AmazonLexClient(AWSCredentials credentials, AmazonLexConfig clientConfig)
: base(credentials, clientConfig)
{
}
///
/// Constructs AmazonLexClient with AWS Access Key ID and AWS Secret Key
///
/// AWS Access Key ID
/// AWS Secret Access Key
public AmazonLexClient(string awsAccessKeyId, string awsSecretAccessKey)
: this(awsAccessKeyId, awsSecretAccessKey, new AmazonLexConfig())
{
}
///
/// Constructs AmazonLexClient with AWS Access Key ID and AWS Secret Key
///
/// AWS Access Key ID
/// AWS Secret Access Key
/// The region to connect.
public AmazonLexClient(string awsAccessKeyId, string awsSecretAccessKey, RegionEndpoint region)
: this(awsAccessKeyId, awsSecretAccessKey, new AmazonLexConfig() {RegionEndpoint=region})
{
}
///
/// Constructs AmazonLexClient with AWS Access Key ID, AWS Secret Key and an
/// AmazonLexClient Configuration object.
///
/// AWS Access Key ID
/// AWS Secret Access Key
/// The AmazonLexClient Configuration Object
public AmazonLexClient(string awsAccessKeyId, string awsSecretAccessKey, AmazonLexConfig clientConfig)
: base(awsAccessKeyId, awsSecretAccessKey, clientConfig)
{
}
///
/// Constructs AmazonLexClient with AWS Access Key ID and AWS Secret Key
///
/// AWS Access Key ID
/// AWS Secret Access Key
/// AWS Session Token
public AmazonLexClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken)
: this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonLexConfig())
{
}
///
/// Constructs AmazonLexClient with AWS Access Key ID and AWS Secret Key
///
/// AWS Access Key ID
/// AWS Secret Access Key
/// AWS Session Token
/// The region to connect.
public AmazonLexClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, RegionEndpoint region)
: this(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, new AmazonLexConfig{RegionEndpoint = region})
{
}
///
/// Constructs AmazonLexClient with AWS Access Key ID, AWS Secret Key and an
/// AmazonLexClient Configuration object.
///
/// AWS Access Key ID
/// AWS Secret Access Key
/// AWS Session Token
/// The AmazonLexClient Configuration Object
public AmazonLexClient(string awsAccessKeyId, string awsSecretAccessKey, string awsSessionToken, AmazonLexConfig clientConfig)
: base(awsAccessKeyId, awsSecretAccessKey, awsSessionToken, clientConfig)
{
}
#endregion
#region Overrides
///
/// Creates the signer for the service.
///
protected override AbstractAWSSigner CreateSigner()
{
return new AWS4Signer();
}
///
/// Customizes the runtime pipeline.
///
/// Runtime pipeline for the current client.
protected override void CustomizeRuntimePipeline(RuntimePipeline pipeline)
{
pipeline.RemoveHandler();
pipeline.AddHandlerAfter(new AmazonLexEndpointResolver());
}
///
/// Capture metadata for the service.
///
protected override IServiceMetadata ServiceMetadata
{
get
{
return serviceMetadata;
}
}
#endregion
#region Dispose
///
/// Disposes the service client.
///
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
#endregion
#region DeleteSession
internal virtual DeleteSessionResponse DeleteSession(DeleteSessionRequest request)
{
var options = new InvokeOptions();
options.RequestMarshaller = DeleteSessionRequestMarshaller.Instance;
options.ResponseUnmarshaller = DeleteSessionResponseUnmarshaller.Instance;
return Invoke(request, options);
}
///
/// Removes session information for a specified bot, alias, and user ID.
///
/// Container for the necessary parameters to execute the DeleteSession service method.
///
/// A cancellation token that can be used by other objects or threads to receive notice of cancellation.
///
///
/// The response from the DeleteSession service method, as returned by Lex.
///
/// Request validation failed, there is no usable message in the context, or the bot
/// build failed, is still in progress, or contains unbuilt changes.
///
///
/// Two clients are using the same AWS account, Amazon Lex bot, and user ID.
///
///
/// Internal service error. Retry the call.
///
///
/// Exceeded a limit.
///
///
/// The resource (such as the Amazon Lex bot or an alias) that is referred to is not found.
///
/// REST API Reference for DeleteSession Operation
public virtual Task DeleteSessionAsync(DeleteSessionRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
{
var options = new InvokeOptions();
options.RequestMarshaller = DeleteSessionRequestMarshaller.Instance;
options.ResponseUnmarshaller = DeleteSessionResponseUnmarshaller.Instance;
return InvokeAsync(request, options, cancellationToken);
}
#endregion
#region GetSession
internal virtual GetSessionResponse GetSession(GetSessionRequest request)
{
var options = new InvokeOptions();
options.RequestMarshaller = GetSessionRequestMarshaller.Instance;
options.ResponseUnmarshaller = GetSessionResponseUnmarshaller.Instance;
return Invoke(request, options);
}
///
/// Returns session information for a specified bot, alias, and user ID.
///
/// Container for the necessary parameters to execute the GetSession service method.
///
/// A cancellation token that can be used by other objects or threads to receive notice of cancellation.
///
///
/// The response from the GetSession service method, as returned by Lex.
///
/// Request validation failed, there is no usable message in the context, or the bot
/// build failed, is still in progress, or contains unbuilt changes.
///
///
/// Internal service error. Retry the call.
///
///
/// Exceeded a limit.
///
///
/// The resource (such as the Amazon Lex bot or an alias) that is referred to is not found.
///
/// REST API Reference for GetSession Operation
public virtual Task GetSessionAsync(GetSessionRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
{
var options = new InvokeOptions();
options.RequestMarshaller = GetSessionRequestMarshaller.Instance;
options.ResponseUnmarshaller = GetSessionResponseUnmarshaller.Instance;
return InvokeAsync(request, options, cancellationToken);
}
#endregion
#region PostContent
internal virtual PostContentResponse PostContent(PostContentRequest request)
{
var options = new InvokeOptions();
options.RequestMarshaller = PostContentRequestMarshaller.Instance;
options.ResponseUnmarshaller = PostContentResponseUnmarshaller.Instance;
return Invoke(request, options);
}
///
/// 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 PostContent
operation supports audio input at 8kHz and 16kHz. You
/// can use 8kHz audio to achieve higher speech recognition accuracy in telephone audio
/// applications.
///
///
///
/// 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,
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 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 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:
///
/// -
///
/// If the message is to elicit slot data, Amazon Lex returns the following context information:
///
///
///
-
///
///
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
///
///
-
///
/// If the message is a confirmation prompt, the
x-amz-lex-dialog-state
/// header is set to Confirmation
and the x-amz-lex-slot-to-elicit
/// header is omitted.
///
/// -
///
/// If the message is a clarification prompt configured for the intent, indicating that
/// the user intent is not understood, the
x-amz-dialog-state
header is set
/// to ElicitIntent
and the x-amz-slot-to-elicit
header is omitted.
///
///
///
///
/// In addition, Amazon Lex also returns your application-specific sessionAttributes
.
/// For more information, see Managing
/// Conversation Context.
///
///
/// Container for the necessary parameters to execute the PostContent service method.
///
/// A cancellation token that can be used by other objects or threads to receive notice of cancellation.
///
///
/// The response from the PostContent service method, as returned by Lex.
///
/// Either the Amazon Lex bot is still building, or one of the dependent services (Amazon
/// Polly, AWS Lambda) failed with an internal service error.
///
///
/// Request validation failed, there is no usable message in the context, or the bot
/// build failed, is still in progress, or contains unbuilt changes.
///
///
/// Two clients are using the same AWS account, Amazon Lex bot, and user ID.
///
///
/// One of the dependencies, such as AWS Lambda or Amazon Polly, threw an exception.
/// For example,
///
/// -
///
/// If Amazon Lex does not have sufficient permissions to call a Lambda function.
///
///
-
///
/// If a Lambda function takes longer than 30 seconds to execute.
///
///
-
///
/// If a fulfillment Lambda function returns a
Delegate
dialog action without
/// removing any slot values.
///
///
///
///
/// Internal service error. Retry the call.
///
///
/// Exceeded a limit.
///
///
/// This exception is not used.
///
///
/// The accept header in the request does not have a valid value.
///
///
/// The resource (such as the Amazon Lex bot or an alias) that is referred to is not found.
///
///
/// The input speech is too long.
///
///
/// The Content-Type header (PostContent
API) has an invalid value.
///
/// REST API Reference for PostContent Operation
public virtual Task PostContentAsync(PostContentRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
{
var options = new InvokeOptions();
options.RequestMarshaller = PostContentRequestMarshaller.Instance;
options.ResponseUnmarshaller = PostContentResponseUnmarshaller.Instance;
return InvokeAsync(request, options, cancellationToken);
}
#endregion
#region PostText
internal virtual PostTextResponse PostText(PostTextRequest request)
{
var options = new InvokeOptions();
options.RequestMarshaller = PostTextRequestMarshaller.Instance;
options.ResponseUnmarshaller = PostTextResponseUnmarshaller.Instance;
return Invoke(request, options);
}
///
/// 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 message
to convey to the user
/// an optional responseCard
to display. 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, 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 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:
///
/// -
///
/// If the message is to elicit slot data, Amazon Lex returns the following context information:
///
///
-
///
///
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
///
///
-
///
/// If the message is a confirmation prompt, the
dialogState
is set to ConfirmIntent
/// and SlotToElicit
is set to null.
///
/// -
///
/// If the message is a clarification prompt (configured for the intent) that indicates
/// that user intent is not understood, the
dialogState
is set to ElicitIntent
/// and slotToElicit
is set to null.
///
///
///
/// In addition, Amazon Lex also returns your application-specific sessionAttributes
.
/// For more information, see Managing
/// Conversation Context.
///
///
/// Container for the necessary parameters to execute the PostText service method.
///
/// A cancellation token that can be used by other objects or threads to receive notice of cancellation.
///
///
/// The response from the PostText service method, as returned by Lex.
///
/// Either the Amazon Lex bot is still building, or one of the dependent services (Amazon
/// Polly, AWS Lambda) failed with an internal service error.
///
///
/// Request validation failed, there is no usable message in the context, or the bot
/// build failed, is still in progress, or contains unbuilt changes.
///
///
/// Two clients are using the same AWS account, Amazon Lex bot, and user ID.
///
///
/// One of the dependencies, such as AWS Lambda or Amazon Polly, threw an exception.
/// For example,
///
/// -
///
/// If Amazon Lex does not have sufficient permissions to call a Lambda function.
///
///
-
///
/// If a Lambda function takes longer than 30 seconds to execute.
///
///
-
///
/// If a fulfillment Lambda function returns a
Delegate
dialog action without
/// removing any slot values.
///
///
///
///
/// Internal service error. Retry the call.
///
///
/// Exceeded a limit.
///
///
/// This exception is not used.
///
///
/// The resource (such as the Amazon Lex bot or an alias) that is referred to is not found.
///
/// REST API Reference for PostText Operation
public virtual Task PostTextAsync(PostTextRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
{
var options = new InvokeOptions();
options.RequestMarshaller = PostTextRequestMarshaller.Instance;
options.ResponseUnmarshaller = PostTextResponseUnmarshaller.Instance;
return InvokeAsync(request, options, cancellationToken);
}
#endregion
#region PutSession
internal virtual PutSessionResponse PutSession(PutSessionRequest request)
{
var options = new InvokeOptions();
options.RequestMarshaller = PutSessionRequestMarshaller.Instance;
options.ResponseUnmarshaller = PutSessionResponseUnmarshaller.Instance;
return Invoke(request, options);
}
///
/// 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.
///
///
/// Container for the necessary parameters to execute the PutSession service method.
///
/// A cancellation token that can be used by other objects or threads to receive notice of cancellation.
///
///
/// The response from the PutSession service method, as returned by Lex.
///
/// Either the Amazon Lex bot is still building, or one of the dependent services (Amazon
/// Polly, AWS Lambda) failed with an internal service error.
///
///
/// Request validation failed, there is no usable message in the context, or the bot
/// build failed, is still in progress, or contains unbuilt changes.
///
///
/// Two clients are using the same AWS account, Amazon Lex bot, and user ID.
///
///
/// One of the dependencies, such as AWS Lambda or Amazon Polly, threw an exception.
/// For example,
///
/// -
///
/// If Amazon Lex does not have sufficient permissions to call a Lambda function.
///
///
-
///
/// If a Lambda function takes longer than 30 seconds to execute.
///
///
-
///
/// If a fulfillment Lambda function returns a
Delegate
dialog action without
/// removing any slot values.
///
///
///
///
/// Internal service error. Retry the call.
///
///
/// Exceeded a limit.
///
///
/// The accept header in the request does not have a valid value.
///
///
/// The resource (such as the Amazon Lex bot or an alias) that is referred to is not found.
///
/// REST API Reference for PutSession Operation
public virtual Task PutSessionAsync(PutSessionRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken))
{
var options = new InvokeOptions();
options.RequestMarshaller = PutSessionRequestMarshaller.Instance;
options.ResponseUnmarshaller = PutSessionResponseUnmarshaller.Instance;
return InvokeAsync(request, options, cancellationToken);
}
#endregion
}
}