【问题标题】:Unable to authenticate REST API request on dialogflow v2 and v2beta1无法在 dialogflow v2 和 v2beta1 上验证 REST API 请求
【发布时间】:2019-07-16 04:17:56
【问题描述】:

【问题讨论】:

标签: c# authentication dialogflow-es gcloud


【解决方案1】:

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

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

注意:您的项目将有一个现有的服务帐户,但不应更改此帐户。要获得额外的客户端和开发人员 API 访问权限,您应该创建一个新的服务帐户。

  1. 请先登录到您的 Dialogflow 控制台并选择适当的项目(仅当您有多个项目时)。进入Dialogflow的设置,点击服务账号链接,如下图:

注意:还要确保启用测试版功能和 API。

  1. 现在这会将您重定向到您的 GCP 服务帐户页面。从那里您需要单击导航菜单(左上角)并选择 APIs & Services > Credentials。

  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));

【讨论】:

    【解决方案2】:

    问题是您必须但不验证呼叫。

    建议您在与 Google 的服务交互时考虑使用 Google 提供的客户端库。手工制作 URL、零碎的身份验证、日志记录等,以及通过不断发展的 API 维护货币,将会给您带来数不胜数的工作。

    使用 SDK 更简单、推荐且通常受支持,而且这些都可以保证工作。

    查看 DialogFlow:

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

    基于 REST(所谓的 API 客户端)的库适用于 所有 Google 服务的同一组语言。对于 Google Cloud Platform 服务,还提供了更多惯用的库。这些称为云客户端库。

    【讨论】:

      猜你喜欢
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多