2017-06-04 9 views
0

Der Server antwortet nicht, wenn ein GRPC-Aufruf an "embeddedassistant.googleapis.com" erfolgt. Ich sehe die Anfrage am Google-Server-Ende empfangen, wenn ich die Google API-Weboberfläche überprüfe. Ich legte die Anfrage mit der richtigen Konfiguration (wenn ich falsche Konfiguration einstellen, bekomme ich Fehlermeldung vom Server). Gibt es etwas, was mir hier fehlt?Google Assistant gRPC-Anruf hängt

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 ""; 
} 
+0

Haben Sie einen Blick auf dieses bi-direktional gRPC Beispiel Streaming: https://github.com/grpc/grpc/blob/v1.3.2/ Beispiele/cpp/route_guide/route_guide_client.cC# L169, es ist für eine andere API, aber es kann Ihnen helfen, den Kontrollfluss herauszufinden. – proppy

Antwort

0

Warum haben Sie den conversation_state auf "a" gesetzt. Es sollte in Bytes oder leer sein. Sie müssen je nach Situation auch Audiodaten senden. Sie können dies tun, indem Sie die ALSA-Sound-API in C++ in Ihren Code einfügen.

Der conversation_state-Wert wurde in der vorherigen ConverseResponse zurückgegeben. Auslassen (setzen Sie das Feld nicht), wenn keine vorherige ConverseResponse vorhanden war. Wenn es eine vorherige ConverseResponse gab, lassen Sie dieses Feld nicht aus; Dadurch wird diese Konversation beendet (und diese neue Anfrage startet eine neue Konversation).

Sie können von hier aus sehen: - https://developers.google.com/assistant/sdk/reference/rpc/google.assistant.embedded.v1alpha1

Verwandte Themen