Аутентификация в Dialogflow API V2 с использованием C#

#c# #dialogflow-es #actions-on-google

#c# #dialogflow-es #действия в Google

Вопрос:

У меня есть проект .NET Web API для API выполнения в качестве нашего webhook в моем агенте Dialogflow. В нашем методе Post контроллера, после получения запроса от Dialogflow, я реализую явную аутентификацию, как показано в документации Google Cloud для C #.

 //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 довольно запутанны, поскольку при наличии AuthExplicit(), который использует ProjectID, он использует его в качестве параметра для сегментов и выводит это только на консоль.

Это работает нормально, пока мы не протестируем ключ учетной записи службы с другим агентом. Ожидаемый результат заключается в том, что аутентификация завершится неудачей, но каким-то образом она все равно проходит.

Как только метод Post пройдет через метод AuthExplicit(), он вернет только логическое значение. Правильный ли это способ аутентификации? Или нужно вызвать что-то еще?

Ответ №1:

Разница с кодом заключается в том, что после получения клиента, когда мы вызываем метод AnalyzeSentiment(), он ничего не делает,

client.AnalyzeSentiment() Возвращает ли пустой ответ? Зависает ли вызов навсегда?

Это работает нормально, пока мы не протестируем ключ учетной записи службы с другим агентом.

Что такое другой агент? Другой заголовок User-Agent?

Как только метод Post пройдет через метод AuthExplicit(), он вернет только логическое значение. Правильный ли это способ аутентификации? Или нужно вызвать что-то еще?

К чему относится «метод Post»? Что такое «это», которое возвращало бы только логическое значение?