无法对 dialogflow v2 和 v2beta1 上的 REST API 请求进行身份验证

Unable to authenticate REST API request on dialogflow v2 and v2beta1

Authorisation issue when we use this code to connect to dialogflow

问题是您必须但未对呼叫进行身份验证。

我鼓励您在与 Google 的服务交互时考虑使用 Google-provided 客户端库。 Hand-crafting URL、零散的身份验证、日志记录等,以及随着 API 的发展而保持流通,这会给您带来数不清的工作。

使用 SDK 更简单、推荐且经常受支持,并且保证有效。

查看 DialogFlow:

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

REST-based (so-called API 客户端) all Google 的同一套语言的库可用服务。对于 Google 云平台服务,还提供了更多惯用的库。这些称为云客户端库。

API 的

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

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

注意:您的项目将有一个现有的服务帐户,但这不应更改。对于其他客户和开发人员 API 访问权限,您应该创建一个新的服务帐户。

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

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

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

  2. 现在单击创建凭据和 select 服务帐户密钥。 注意:请注意,如果您有多个项目 link 已添加到您的 GCP,请从下拉列表中选择合适的项目,然后从所有选项卡而不是最近选项卡中选择您的项目。

  3. 现在从下拉列表中选择新服务帐户。为该服务帐户命名,并确保 select 角色为 Owner。 Select JSON(默认 selected)。

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