答案 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访问权限,您应该创建一个新的服务帐户。
注意:还请确保启用Beta功能和API。
现在,这会将您重定向到GCP服务帐户页面。从那里,您需要单击导航菜单(左上角),然后选择API和服务>凭据。
现在,单击“创建凭据”,然后选择“服务帐户密钥”。 注意:请注意,如果您有多个项目链接到GCP,请从下拉菜单中选择适当的项目,然后从“全部”标签而不是“最近”标签中选择您的项目。
现在从下拉列表中选择“新服务帐户”。为该服务帐户命名,请确保选择角色为“所有者”。选择JSON(默认情况下处于选中状态)。
现在单击“创建”按钮。您的JSON密钥文件将下载到您的系统中。
现在使用此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));