ErrorCode LexInteractor::PostContent()

in lex_common/src/lex_common.cpp [117:157]


ErrorCode LexInteractor::PostContent(
  const LexRequest & request,
  LexResponse & response)
{
  Aws::LexRuntimeService::Model::PostContentRequest post_content_request;
  post_content_request.WithBotAlias(lex_configuration_->bot_alias.c_str())
  .WithBotName(lex_configuration_->bot_name.c_str())
  .WithAccept(request.accept_type.c_str())
  .WithUserId(lex_configuration_->user_id.c_str());

  post_content_request.SetContentType(request.content_type.c_str());
  auto io_stream = Aws::MakeShared<Aws::StringStream>(kAllocationTag);

  if (!request.audio_request.empty()) {
    std::copy(request.audio_request.begin(),
      request.audio_request.end(), std::ostream_iterator<unsigned char>(*io_stream));
  } else {
    *io_stream << request.text_request;
  }
  post_content_request.SetBody(io_stream);
  AWS_LOGSTREAM_DEBUG(__func__, "PostContentRequest " << post_content_request);
  auto post_content_result = lex_runtime_client_->PostContent(post_content_request);
  ErrorCode result_code;
  if (post_content_result.IsSuccess()) {
    auto & result = post_content_result.GetResult();
    AWS_LOGSTREAM_DEBUG(__func__, "PostContentResult succeeded: " << result.GetMessage());
    result_code = CopyResult(result, response);

  } else {
    bool is_retryable = post_content_result.GetError().ShouldRetry();
    result_code = is_retryable ? RETRY_POST_CONTENT : FAILED_POST_CONTENT;
    AWS_LOGSTREAM_ERROR(__func__,
      "Aws Lex Error Has Occurred during LexRuntimeService->PostContent" << std::endl <<
      "PostContentResult failed: " << std::endl <<
      post_content_result.GetError() << std::endl <<
      "Request which caused error: " << std::endl <<
      post_content_request
    );
  }
  return result_code;
}