gpt4 book ai didi

javascript - 您无权执行此操作。无效的访问 token DialogFlow v2

转载 作者:行者123 更新时间:2023-11-30 14:34:24 27 4
gpt4 key购买 nike

我正在尝试使用 DialogFlow v2 端点,但由于某种原因我收到未授权消息,尽管如此我还是能够使用以下命令生成访问 token :

最初我运行它来授权我的本地机器的服务能够授权服务:gcloud auth activate-service-account --key-file=<service-account-key-file.json>然后我通过以下命令获取访问 token :gcloud auth print-access-token以及我在以下代码中附加的访问 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的通信是否正确?请让我知道我做错了什么以及为什么我说我没有被授权,因为我通过上述命令授权并且能够获得访问 token !

编辑:

经过一些修改后,我的代码最终看起来像这样:

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。你应该migrate your code to V2 .

另外请记住,访问 token 会过期,因此您需要定期生成一个新的。您不能请求“长生命周期” token (这被认为是不安全的),但您的代码应该在上一个之前调用 gcloud auth print-access-token (或使用库来做同样的事情)一个过期。

更新 将代码移至 V2 后:

queryInput 参数不直接接受字符串。它必须设置为 QueryInput object .这是一个枚举,因此只能设置指定的字段之一。看起来您想要 text 字段,它需要 TextInput object .

所以你的 body 参数可能是这样设置的:

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

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

关于javascript - 您无权执行此操作。无效的访问 token DialogFlow v2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50638542/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com