我正在我的android应用中使用Dialogflow Java客户端库,以运行以下链接中给出的检测意图API。
我稍微修改了上面链接中给出的代码,以在发送检测意图请求之前首先对客户端进行身份验证。我的示例代码如下:
SessionsSettings sessionsSettings = SessionsSettings.newBuilder().setCredentialsProvider(credentialsProvider).build();
SessionsClient sessionsClient = SessionsClient.create(sessionsSettings);
SessionName session = SessionName.of(PROJECT_ID, sessionId);
System.out.println("Session Path: " + session.toString());
TextInput.Builder textInput = TextInput.newBuilder().setText(text).setLanguageCode(langCode);
QueryInput queryInput=QueryInput.newBuilder().setText(textInput).build();
DetectIntentResponse response = sessionsClient.detectIntent(session, queryInput);
其中
CredentialsProvider credentialsProvider = new CredentialsProvider() {
@Override
public Credentials getCredentials() throws IOException {
InputStream fileStream = appContext.getApplicationContext().getAssets().open("MyDialogflowProject-4cxxxxx.json");
return ServiceAccountCredentials.fromStream(fileStream);
}
};
但是我收到以下错误
com.google.api.gax.rpc.UnauthenticatedException: io.grpc.StatusRuntimeException:未经授权:要求凭据 具有PRIVACY_AND_INTEGRITY安全级别的通道。观察到的安全性 级别:无 com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:73)
在这种情况下,谁能告诉我如何设置SessionSettings的安全级别?
答案 0 :(得分:0)
尝试更新您正在使用的库版本。在传输层上,应设置安全级别。
例如,我的hello world项目中的gradle依赖关系正在与dialogflow v2一起使用:
dependencies {
compile ("com.google.api.grpc:proto-google-common-protos:1.12.0")
compile ("io.grpc:grpc-netty:1.14.0")
compile ("io.grpc:grpc-protobuf:1.14.0")
compile ("io.grpc:grpc-stub:1.14.0")
compile ("com.google.auth:google-auth-library-oauth2-http:0.10.0")
compile ("com.google.cloud:google-cloud-storage:1.38.0")
compile ("io.netty:netty-tcnative-boringssl-static:2.0.12.Final")
compile ("com.google.cloud:google-cloud-dialogflow:0.55.1-alpha")
}
答案 1 :(得分:0)
就我而言,我发现我过去已经将IntelliJ环境变量设置为FIRESTORE_EMULATOR_HOST=localhost:8080
以使用Firebase模拟器。
后来,我尝试不删除该变量就将数据推送到Cloud Firestore,但是尝试失败,并显示错误PRIVACY_AND_INTEGRITY
。
一段时间后,我找到了本地主机设置并将其删除。删除后,我就可以将数据推送到云中了。