Вызов gRPC Google Ассистента завис

Сервер не отвечает на вызов GRPC на «embeddedassistant.googleapis.com». Когда я проверяю веб-интерфейс Google API, я вижу, что на стороне сервера Google поступает запрос. Я установил запрос с правильной конфигурацией (когда я установил неправильную конфигурацию, я получаю сообщение об ошибке с сервера). Что мне здесь не хватает?

  std::string Converse(const std::string& user) {

   AudioInConfig audio_in_config;
   audio_in_config.set_encoding(google::assistant::embedded::v1alpha1::AudioInConfig_Encoding_FLAC);
   audio_in_config.set_sample_rate_hertz(16000);

   AudioOutConfig audio_out_config;
   audio_out_config.set_encoding(google::assistant::embedded::v1alpha1::AudioOutConfig_Encoding_MP3);
   audio_out_config.set_sample_rate_hertz(16000);
   audio_out_config.set_volume_percentage(50);

   ConverseState converse_state;
   const char * conversation_state = "a";
   converse_state.set_conversation_state(conversation_state);

   ConverseConfig config;
   config.set_allocated_audio_in_config(&audio_in_config);
   config.set_allocated_audio_out_config(&audio_out_config);
   config.set_allocated_converse_state(&converse_state);

   ConverseRequest request;
   request.set_allocated_config(&config);

   ConverseResponse reply;

   ClientContext context;

   auto status = stub_->Converse(&context, request, &reply);

   config.release_audio_in_config();
   config.release_audio_out_config();
   config.release_converse_state();
   request.release_config();
   // Act upon its status.
   if (status.ok()) {
     return reply.result().conversation_state();
   } else {
     std::cout << "Error: " << status.error_code() << ": " << status.error_message()
            << std::endl;
     return "RPC failed";
   }
   return "";
 }

person Vamsi    schedule 04.06.2017    source источник
comment
Вы видели этот пример двунаправленной потоковой передачи gRPC: github.com/grpc/grpc/blob/v1.3.2/examples/cpp/route_guide/, он для другого API, но может помочь вам разобраться в потоке управления.   -  person proppy    schedule 07.06.2017


Ответы (1)


Зачем вы установили для параметра talk_state значение "a". Он должен быть в байтах или пустым. Вам также необходимо отправить записанные аудиоданные, в зависимости от ситуации. Вы можете сделать это, включив в свой код звуковой API ALSA на C ++.

Значение context_state, возвращенное в предыдущем ConverseResponse. Пропустить (не устанавливать поле), если ранее не было ConverseResponse. Если ранее был ConverseResponse, не пропускайте это поле; это завершит беседу (и этот новый запрос запустит новую беседу).

Вы можете увидеть здесь: - https://developers.google.com/assistant/sdk/reference/rpc/google.assistant.embedded.v1alpha1.

person alihaqnawaz.965    schedule 08.07.2017