无法在dialogflow v2和v2beta1上认证REST API请求

时间:2019-07-16 04:17:56

标签: c# authentication dialogflow gcloud

2 个答案:

答案 0 :(得分:0)

问题在于您必须但不对呼叫进行身份验证。

我建议您在与Google的服务进行交互时考虑使用Google提供的客户端库。手工制作URL,零碎身份验证,日志记录等,并使用不断发展的API保持通俗易懂,这将使您工作量大增。

使用SDK更为简单,推荐并经常受其支持,并且保证它们可以正常工作。

查看DialogFlow:

https://cloud.google.com/dialogflow/docs/reference/libraries/overview

基于

REST的(所谓的API客户端)库可用于Google 所有服务的相同语言集。对于Google Cloud Platform服务,也可以使用更多惯用的库。这些称为云客户端库。

答案 1 :(得分:0)

API的V2 / V2beta1依靠Google Cloud Platform服务帐户进行身份验证,而不是以前使用的客户端和开发者访问令牌。

生成服务帐户密钥 为了使用V2 API,您将需要创建一个新的服务帐户并获取与该服务帐户关联的私钥。创建服务帐户后,密钥将作为JSON文件下载。

警告:您的项目将有一个现有的服务帐户,但是不应更改。要获得其他客户端和开发者API访问权限,您应该创建一个新的服务帐户。

  1. 请首先登录Dialogflow控制台并选择适当的项目(仅当您有多个项目时)。转到Dialogflow的设置,然后单击服务帐户链接,如下所示:

注意:还请确保启用Beta功能和API。

  1. 现在,这会将您重定向到GCP服务帐户页面。从那里,您需要单击导航菜单(左上角),然后选择API和服务>凭据。

  2. 现在,单击“创建凭据”,然后选择“服务帐户密钥”。 注意:请注意,如果您有多个项目链接到GCP,请从下拉菜单中选择适当的项目,然后从“全部”标签而不是“最近”标签中选择您的项目。

  3. 现在从下拉列表中选择“新服务帐户”。为该服务帐户命名,请确保选择角色为“所有者”。选择JSON(默认情况下处于选中状态)。

  4. 现在单击“创建”按钮。您的JSON密钥文件将下载到您的系统中。

  5. 现在使用此JSON密钥文件来验证您的请求。

现在从Visual Studio上的nuget软件包管理器中下载V2 / V2Beta1 API。

请参考以下代码:

var rFile = GoogleCredential.FromFile(jsonkeyfilepath);
        var scopeC = rFile.CreateScoped(DialogflowService.Scope.CloudPlatform);
        var response = new DialogflowService(new BaseClientService.Initializer
        {
            HttpClientInitializer = scopeC,
            ApplicationName = "project-name-here"
        }).Projects.Agent.Sessions.DetectIntent(
                    new GoogleCloudDialogflowV2beta1DetectIntentRequest
                    {
                        QueryInput = new GoogleCloudDialogflowV2beta1QueryInput
                        {
                            Text = new GoogleCloudDialogflowV2beta1TextInput
                            {
                                Text = "your text here",
                                LanguageCode = "en-US"
                            }
                        }
                    },
                    $"projects/projectid/agent/sessions/34141414")
                    .Execute();
        return (JsonConvert.SerializeObject(response.QueryResult));