gpt4 book ai didi

javascript - 如何使用简单的 ajax jQuery 对 DialogFlow V2 进行 http 调用?

转载 作者:行者123 更新时间:2023-12-01 02:00:30 24 4
gpt4 key购买 nike

在使用简单的 jquery 之前,我一直在使用 DialogFlow v1,它的工作非常直接!

现在我必须切换到 V2,我陷入了如何保持相同代码但仅使用 V2 进行修改的困境!

我一直在查看这个 V2 客户端库: https://github.com/dialogflow/dialogflow-nodejs-client-v2#using-the-client-library

但我不想使用 Node.js,我只是不想做像 Node server.js 这样的事情来运行应用程序,而且我不确定是否可以将 jQuery 与 Node.js 混合使用。

我以前的代码 v1 看起来像这样:

fetch(url, {
body: JSON.stringify(data),
// cache: 'no-cache',
// credentials: 'same-origin',
headers: {
'content-type': 'application/json',
"Authorization": "Bearer " + configs.accessToken,
},
method: 'POST',
mode: 'cors',
redirect: 'follow',
referrer: 'no-referrer',
})
.then(response => response.json()) // parses response to JSON

好吧,我切换到 ES6 来为对话流发出 http 请求,但我希望将相同的代码用于 V2,这可能吗?另外,我再也看不到 v2 的访问 token ,我们该如何处理 http 调用的身份验证?

我对新的 V2 感到非常困惑,自从我们切换到企业版帐户以来,我们必须使用 v2,这有点糟糕!

编辑:我正在从文档中检查这个示例:

  POST https://dialogflow.googleapis.com/v2beta1/projects/project-name/agent/intents

Headers:
Authorization: Bearer $(gcloud auth print-access-token)
Content-Type: application/json

POST body:
{
'displayName': 'StartStopwatch',
'priority': 500000,
'mlEnabled': true,
'trainingPhrases': [
{
'type': 'EXAMPLE',
'parts': [
{
'text': 'start stopwatch'
}
]
}
],
'action': 'start',
'messages': [
{
'text': {
'text': [
'Stopwatch started'
]
}
}
],
}

但我对这部分感到困惑:Authorization: Bearer $(gcloud auth print-access-token) 我在哪里获得访问 token ?

我已经完成了这部分:gcloud auth activate-service-account --key-file=,我不知道激活后它在做什么!我希望我能从中取回一些访问 token ,但似乎没有什么,只有一条消息说已激活服务...

最佳答案

要像 V1 一样将 Dialogflow V2 API 与浏览器 AJAX 结合使用,没有简单的方法,除非您拥有访问 token 。我遇到了同样的问题,并发现如果不使用他们的客户端库(SDK)或“google-oauth-jwt”就无法完成。在我的示例中,我使用了 nodejs - google-oauth-jwt 包,它为我的应用程序提供“访问 token ”,该应用程序用于浏览器 AJAX 调用。您不必使用他们的 Nodejs SDK 库,以防您在客户端处理逻辑。

设置说明:

1.在dialogflow帐户上从V1配置V2 API,按照迁移指南进行操作。下载具有唯一电子邮件地址和键值的 JSON 文件。您可能希望通过注册域来授予对您的应用程序的访问权限。

2.创建一个nodejs应用程序并使用“google-oauth-jwt”获取访问 token 。另外,将其作为一项服务来预先调用它,以便在进行任何 ajax 调用之前准备好访问 token 。这是示例代码:

app.get("/your_sample_web_service_to_get_access_token", (req, res, next) => {
new Promise((resolve) => {
tokens.get({
//find this email value from the downloaded json
email: 'xxx@xxx.iam.gserviceaccount.com',
//find this key value from the downloaded json
key: '-----BEGIN PRIVATE KEY-----xxx',
//specify the scopes you wish to access: as mentioned in dialogflow documentation
scopes: ['https://www.googleapis.com/auth/cloud-platform']
},
(err, token) => {
//rest api response
res.json({
"access_token": token
});
resolve(token);
}
);
});
});

3.在客户端 JavaScript 中,使用从上述 Nodejs 应用程序获取的访问 token 进行 AJAX 调用。这是示例代码:

app.service('chatbot', function ($http, $rootScope) {
this.callAPI = function (user_entered_query) {
//I used detectintent REST API endpoint: find the project name from your account.
var endpoint = "https://dialogflow.googleapis.com/v2/projects/xxx/agent/sessions/123456789:detectIntent";
var data = JSON.stringify({queryParams:{}, query_input:{text:{text:user_entered_query,language_code:"en-US"}},outputAudioConfig:{},inputAudio:""});
var headers = {
//use the token from nodejs service
"Authorization": "Bearer " +$rootScope.token
};
return $http.post(_url, _data, {"headers": headers});
}
});

关于javascript - 如何使用简单的 ajax jQuery 对 DialogFlow V2 进行 http 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50633291/

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