use of com.amazonaws.services.lexrts.model.PostContentRequest in project aws-sdk-android by aws-amplify.
the class InteractionClient method carryOnWithText.
/**
* Accepts user's response as {@link String}.
*/
private void carryOnWithText(final String text, final Map<String, String> sessionAttributes, final Map<String, String> requestAttributes, final ResponseType mode) {
// Ensure the client is not pre-occupied with a request.
checkBusyState();
// Send user's response to Amazon Lex service as a text.
final InteractionClient client = this;
new Thread(new Runnable() {
@Override
public void run() {
final Handler handler = new Handler(context.getMainLooper());
Runnable returnCallback;
try {
final PostContentRequest request = CreateLexServiceRequest.generatePostContentRequest(sessionAttributes, requestAttributes, interactionConfig, credentialsProvider, mode, text);
final PostContentResult result = amazonlex.postContent(request);
processResponseAudioPlayback(handler, result, client, mode, ResponseType.TEXT);
} catch (final Exception e) {
returnCallback = new Runnable() {
@Override
public void run() {
interactionListener.onInteractionError(null, e);
}
};
handler.post(returnCallback);
} finally {
setBusyState(NOT_BUSY);
}
}
}).start();
}
use of com.amazonaws.services.lexrts.model.PostContentRequest in project aws-sdk-android by aws-amplify.
the class InteractionClient method carryOnWithMic.
/**
* Starts listening for the user to speak, through the microphones. The voice interaction client
* detects the start and end of speech.
*/
private void carryOnWithMic(final Map<String, String> sessionAttributes, final Map<String, String> requestAttributes, final ResponseType mode) {
// Ensure that the client is not pre-occupied with another dlalog
checkBusyState();
// Send user's response to Amazon Lex service as an audio-stream.
final InteractionClient client = this;
new Thread(new Runnable() {
@Override
public void run() {
final Handler handler = new Handler(context.getMainLooper());
Runnable returnCallBack;
try {
// Create a new voice interaction client.
if (AudioEncoding.LPCM.equals(interactionConfig.getAudioEncoding())) {
audioEncoder = new BufferedAudioEncoder(new L16PcmEncoder());
} else {
audioEncoder = new BufferedAudioEncoder(new OpusEncoder());
}
// Set time-out limits for mic audio.
audioTimeouts = new AudioTimeouts(interactionConfig.getNoSpeechTimeoutInterval(), interactionConfig.getMaxSpeechTimeoutInterval());
// Set VAD configuration.
vadConfig = new DnnVADConfig(interactionConfig.getLrtThreshold(), interactionConfig.getStartPointingThreshold(), interactionConfig.getEndPointingThreshold());
lexAudioRecorder = new LexAudioRecorderBuilder(context).audioEncoder(audioEncoder).audioTimeouts(audioTimeouts).dnnVADConfig(vadConfig).build();
// Calculate the maximum buffer size for pipes.
final int maxTotalAudioLengthInMills = audioTimeouts.getNoSpeechTimeout() + audioTimeouts.getMaxSpeechTimeout();
final int pipeSize = AudioRecorder.DEFAULT_SAMPLE_RATE * (int) TimeUnit.MILLISECONDS.toSeconds(maxTotalAudioLengthInMills) * (SAMPLE_SIZE / Byte.SIZE);
final InputStream audioInStream = new BufferedInputStream(lexAudioRecorder.getConsumerStream(), pipeSize);
final PostContentRequest request = CreateLexServiceRequest.generatePostContentRequest(sessionAttributes, requestAttributes, interactionConfig, credentialsProvider, mode, audioInStream, audioEncoder.getMediaType().toString());
// Start the speech listener, service api's will be called only when the speech frames are detected.
startListening(handler, microphoneListener, lexAudioRecorder, request, client, mode);
} catch (final Exception e) {
returnCallBack = new Runnable() {
@Override
public void run() {
interactionListener.onInteractionError(null, e);
}
};
handler.post(returnCallBack);
} finally {
setBusyState(NOT_BUSY);
}
}
}).start();
}
use of com.amazonaws.services.lexrts.model.PostContentRequest in project aws-sdk-android by aws-amplify.
the class CreateLexServiceRequest method generatePostContentRequest.
/**
* Creates a request to post speech input to the Amazon Lex service.
*
* @param sessionAttributes Session attributes for this current transaction.
* @param requestAttributes Attributes to add to the current request
* @param audioStream audio as {@link InputStream}.
* @return {@link PostContentRequest}.
*/
public static PostContentRequest generatePostContentRequest(Map<String, String> sessionAttributes, Map<String, String> requestAttributes, InteractionConfig interactionConfig, AWSCredentialsProvider credentialsProvider, ResponseType mode, InputStream audioStream, String contentType) {
final PostContentRequest request = generateRequestInternal(sessionAttributes, requestAttributes, interactionConfig, credentialsProvider, mode);
// Set input and content type.
request.setInputStream(audioStream);
request.setContentType(contentType);
return request;
}
use of com.amazonaws.services.lexrts.model.PostContentRequest in project aws-sdk-android by aws-amplify.
the class CreateLexServiceRequest method generatePostContentRequest.
/**
* Creates a request to post text input to the Amazon Lex service.
*
* @param sessionAttributes Session attributes for this current transaction.
* @param requestAttributes Attributes to add to the current request
* @param text Input text.
* @return {@link PostContentRequest}.
*/
public static PostContentRequest generatePostContentRequest(Map<String, String> sessionAttributes, Map<String, String> requestAttributes, InteractionConfig interactionConfig, AWSCredentialsProvider credentialsProvider, ResponseType mode, String text) {
final PostContentRequest request = generateRequestInternal(sessionAttributes, requestAttributes, interactionConfig, credentialsProvider, mode);
// Set input and content type.
final byte[] textContent = text.getBytes(StringUtils.UTF8);
request.setInputStream(new ByteArrayInputStream(textContent));
request.setContentType(MediaType.PLAIN_TEXT_UTF_8.toString());
return request;
}
use of com.amazonaws.services.lexrts.model.PostContentRequest in project aws-sdk-android by aws-amplify.
the class CreateLexServiceRequest method generateRequestInternal.
/**
* Utility method for generating a request. Populates the request with a user ID from either interactionConfig or
* the credentialsProvider, which must be an instance of CognitoCredentialsProvider.
*
* @param sessionAttributes Session attributes for this current transaction.
* @param requestAttributes Attributes to add to the current request
* @param interactionConfig The configuration for the interaction, which must contain the user ID if
* credentialsProvider is not an instance of CognitoCredentialsProvider.
* @param credentialsProvider The credentialsProvider to obtain the Cognito IdentityId. If the user ID is not set in
* interactionConfig, credentialsProvider must be an instance of CognitoCredentialsProvider
* @param mode The desired response type
* @return a PostContentRequest with attributes and user ID, but no content
*/
private static PostContentRequest generateRequestInternal(Map<String, String> sessionAttributes, Map<String, String> requestAttributes, InteractionConfig interactionConfig, AWSCredentialsProvider credentialsProvider, ResponseType mode) {
final PostContentRequest request = new PostContentRequest();
request.setBotName(interactionConfig.getBotName());
request.setBotAlias(interactionConfig.getBotAlias());
request.setAccept(mode.toString());
final Map<String, String> newSessionAttributes = new HashMap<String, String>();
newSessionAttributes.putAll(interactionConfig.getGlobalSessionAttributes());
if (sessionAttributes != null) {
newSessionAttributes.putAll(sessionAttributes);
}
request.setSessionAttributes(mapToBase64(newSessionAttributes));
// Set the request attributes
if (requestAttributes != null) {
request.setRequestAttributes(mapToBase64(requestAttributes));
}
if (interactionConfig.getUserId() == null || interactionConfig.getUserId().isEmpty()) {
final CognitoCredentialsProvider cognitoCredentialsProvider = (CognitoCredentialsProvider) credentialsProvider;
request.setUserId(cognitoCredentialsProvider.getIdentityId());
} else {
request.setUserId(interactionConfig.getUserId());
}
return request;
}
Aggregations