在使用简单的jquery之前,我一直在使用DialogFlow v1,它非常直接地工作!
既然我必须切换到V2,我仍然坚持如何保持某种方式相同的代码,但只是修改V2!
我一直在看这个V2的客户端库: https://github.com/dialogflow/dialogflow-nodejs-client-v2#using-the-client-library
但我不想使用Node.js我只是不想像节点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的访问令牌,我们如何处理http调用的auth?
我真的很困惑新的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)
我在哪里获得访问令牌?
我已经完成了这一部分:gcloud auth activate-service-account --key-file =我不知道激活后它在做什么!我希望我能从这里获得一些访问令牌,但似乎没有任何消息说明激活服务......
答案 0 :(得分:1)
首先,Dialogflow V1 API不会很快消失。他们没有明确的时间表来停止API。如果他们决定,将在截止日期之前通知开发人员(由他们的支持小组确认)。我猜您应该可以在那之前使用它。
但是,如果您决定像使用V1一样将Dialogflow V2 API与浏览器AJAX一起使用,则没有简单的方法,除非您具有访问令牌。我遇到了同样的问题,并发现如果不使用其客户端库(SDK)或“ google-oauth-jwt”就无法完成。在我的示例中,我使用了nodejs-google-oauth-jwt程序包,该程序包为用于浏览器AJAX调用的应用程序提供“访问令牌”。如果您要在客户端上处理逻辑,则不必使用他们的nodejs SDK库。
设置说明:
1。从dialogflow帐户的V1配置V2 API,请遵循迁移指南。下载具有唯一电子邮件和键值的JSON文件。您可能想通过注册域来授予对应用程序的访问权限。
2。创建一个nodejs应用程序,并使用“ google-oauth-jwt”获取访问令牌。同样,将此作为一项服务来进行调用,以便在进行任何ajax调用之前先准备好访问令牌。这是示例代码:
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应用程序获得的访问令牌进行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});
}
});