使用C#

时间:2019-03-21 08:01:18

标签: c# dialogflow actions-on-google

我在Dialogflow代理中将实现API的.NET Web API项目作为我们的Webhook。在控制器的Post方法中,从Dialogflow收到请求后,我实现了显式身份验证,如C#的Google Cloud文档中所示。

//jsonFileName is the name of the serviceAccountKey json generated from the Google Cloud Platform that's encrypted internally
public bool AuthExplicit(string projectId, string jsonFileName)
    {
        try
        {
            string JsonCredential = DecryptHelper.Decrypt(jsonFileName);

            var credential = GoogleCredential.FromJson(JsonCredential).CreateScoped(LanguageServiceClient.DefaultScopes);
            var channel = new Grpc.Core.Channel(
                LanguageServiceClient.DefaultEndpoint.ToString(),
                credential.ToChannelCredentials());
            var client = LanguageServiceClient.Create(channel);
            AnalyzeSentiment(client);

            if (client != null)
            {
                return true;
            }
            else
            {
                return false;
            }

        }

internal void AnalyzeSentiment(LanguageServiceClient client)
        {
            var response = client.AnalyzeSentiment(new Document()
            {
                Content = "Authenticated.",
                Type = Document.Types.Type.PlainText
            });

            var sentiment = response.DocumentSentiment;
            string score = $"Score: {sentiment.Score}";
            string magnitude = $"Magnitude: {sentiment.Magnitude}";
        }

与代码的区别在于,获取客户端后,当我们调用AnalyzeSentiment()方法时,它不会执行任何操作,并且projectId参数从不用于身份验证。 GCP文档非常令人困惑,因为当有一个使用projectId的AuthExplicit()时,它将它用作存储桶的参数,并且仅在控制台上打印出来。

工作正常,直到我们与其他代理测试服务帐户密钥为止。预期的输出是身份验证将失败,但是仍然可以通过。

一旦Post方法通过AuthExplicit()方法,它将仅返回一个布尔值。这是正确的身份验证方法吗?还是还有其他需要调用的东西?

1 个答案:

答案 0 :(得分:0)

  

与代码的区别在于,获取客户端后,当我们调用AnalyzeSentiment()方法时,它什么也没做

client.AnalyzeSentiment()是否返回空响应?通话会永远挂吗?

  

工作正常,直到我们与其他代理测试服务帐户密钥为止。

什么是其他代理?一个不同的User-Agent标头?

  

一旦Post方法通过AuthExplicit()方法,它将仅返回一个布尔值。这是正确的身份验证方法吗?还是还有其他需要调用的东西?

“发布方法”指的是什么?只会返回布尔值的“ it”是什么?