您无权执行此操作.无效的访问令牌对话流 v2



>我正在尝试使用 DialogFlow v2 端点,但由于某种原因我收到未授权的消息,最终我能够使用以下命令生成访问令牌:

最初,我运行它是为了授权我的本地机器的服务,以便能够授权该服务:gcloud auth activate-service-account --key-file=<service-account-key-file.json>然后我通过以下命令获取访问令牌:gcloud auth print-access-token我附加在以下代码上的访问令牌:

fetch(configs.baseUrl + "query?v=20150910", {
body: JSON.stringify({query: text, lang: "en", sessionId: "somerandomthing"}),
headers: {
'content-type': 'application/json',
"Authorization": "Bearer " + accessToken,
},
method: 'POST',
})
.then(response => response.json())
.then(data => {
console.log(data.result.fulfillment.speech);
return data.result.fulfillment.speech;
})
.catch(error => console.error(error))

我不知道这是否是实现与 DialogFlow V2 通信的正确方法? 如果您能让我知道我做错了什么以及为什么我说我没有授权,因为我是通过上述命令授权并能够获得访问令牌的,请问!

编辑:

经过一些更改,我的代码最终如下所示:

fetch("https://dialogflow.googleapis.com/v2beta1/projects/xxx/agent/sessions/xxx/:detectIntent", {
body: JSON.stringify({queryInput: "Hello"}),
headers: {
'content-type': 'application/json',
"Authorization": "Bearer xxxx",
},
method: 'POST',
})
.then(response => response.json())
.then(data => {
console.log(data.result.fulfillment.speech);
return data.result.fulfillment.speech;
})
.catch(error => console.error(error))

我收到的新错误消息是:

{
"error": {
"code": 400,
"message": "Invalid value at 'query_input' (type.googleapis.com/google.cloud.dialogflow.v2beta1.QueryInput), "Hello"",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "query_input",
"description": "Invalid value at 'query_input' (type.googleapis.com/google.cloud.dialogflow.v2beta1.QueryInput), "Saanko yhteystiedot?""
}
]
}
]
}
}

你没有显示你正在使用的baseUrl,但它看起来像V1 API,而不是V2 API。应将代码迁移到 V2。

另请记住,访问令牌会过期,因此您需要定期生成一个新令牌。您不能请求"长期"令牌(这被认为是不安全的(,但应该在前一个令牌过期之前gcloud auth print-access-token代码调用(或使用库执行相同的操作(。

将代码移动到 V2 后,根据代码进行更新

queryInput参数不直接采用字符串。它必须设置为 QueryInput 对象。这是一个枚举,因此只能设置指定的字段之一。看起来您想要需要文本输入对象的text字段。

因此,您的body参数可能设置如下:

var body = {
queryInput: {
text: {
text: "Hello",
language: "en-US"
}
}
};
var bodyStr = JSON.stringify(body);

,然后设置您的request()选项。

Because you have put wrong URL in your project.
Open below image and see which URL use for posturl in your project

https://i.stack.imgur.com/3ym9n.png

最新更新