我正在尝试将 DialogFlow API v2 与 Unity 结合使用。
由于 Unity 还没有官方 SDK,所以我使用了 Grpc beta unity SDK 以及使用 Grpc 工具中的 Protobuf 和 protoc 创建的生成的 C# 代码
Grpc beta unity sdk 隐藏在此链接中。https://packages.grpc.io/ https://packages.grpc.io/只需单击构建 ID,您就会找到构建的 Unity 包。
我导入了 Google.Apis.Auth.OAuth2 和 Grpc.Auth,它们未包含在官方 Grpc unity beta sdk 中。
然后我编写了这段代码,除了等待responseStream.MoveNext()被卡住之外,它似乎工作正常。
我相信主要原因是我不确定在哪里设置终点的路径,即“/v2/projects/project-id/agent/intents”
GoogleCredential credential = GoogleCredential.FromJson(privateKey);
Grpc.Core.Channel channel = new Grpc.Core.Channel("dialogflow.googleapis.com", credential.ToChannelCredentials());
var client = new SessionsClient(channel);
CallOptions options = new CallOptions();
var duplexStream = client.StreamingDetectIntent();
var responseHandlerTask = System.Threading.Tasks.Task.Run(async () =>
{
IAsyncEnumerator<StreamingDetectIntentResponse> responseStream = duplexStream.ResponseStream;
while (await responseStream.MoveNext())//stuck here
{
StreamingDetectIntentResponse response = responseStream.Current;
}
// The response stream has completed
});
// Send requests to the server
bool done = false;
while (!done)
{
// Initialize a request
var queryInput = new QueryInput();
queryInput.AudioConfig = new InputAudioConfig();
queryInput.AudioConfig.LanguageCode = "ja";
queryInput.AudioConfig.SampleRateHertz = 141000;
queryInput.AudioConfig.AudioEncoding = AudioEncoding.Linear16;
StreamingDetectIntentRequest request = new StreamingDetectIntentRequest
{
Session = "",
QueryInput = queryInput,
};
var bytes = File.ReadAllBytes("test.wav");
request.InputAudio = Google.Protobuf.ByteString.CopyFrom(bytes);
try
{
await duplexStream.RequestStream.WriteAsync(request);
}
catch (System.Exception e)
{
context.Post(state =>
{
Debug.LogErrorFormat("{0}\n{1}\n{2}\n{3}", e.Message, e.HelpLink, e.Source, e.StackTrace);
}, null);
}
done = true;
}
await duplexStream.RequestStream.CompleteAsync();
await responseHandlerTask;
感谢您的提前。