我在DialogFlow的官方网站上使用Node.js找到了这个示例,它运行良好,但我不知道如何将其集成到我的web应用程序中。
我可以将它集成到我的其他javascript jquery代码中吗?这里我需要运行节点index.js,但是如果我与代码集成,我还需要这样做吗?
const projectId = 'xxx'; //https://dialogflow.com/docs/agents#settings
const sessionId = 'xxxxx';
const query = 'Hello';
const languageCode = 'en-US';
// Instantiate a DialogFlow client.
const dialogflow = require('dialogflow');
const sessionClient = new dialogflow.SessionsClient();
// Define session path
const sessionPath = sessionClient.sessionPath(projectId, sessionId);
console.log(sessionPath);
// The text query request.
const request = {
session: sessionPath,
queryInput: {
text: {
text: query,
languageCode: languageCode,
},
},
};
// Send request and log result
sessionClient
.detectIntent(request)
.then(responses => {
console.log('Detected intent');
const result = responses[0].queryResult;
console.log(` Query: ${result.queryText}`);
console.log(` Response: ${result.fulfillmentText}`);
if (result.intent) {
console.log(` Intent: ${result.intent.displayName}`);
} else {
console.log(` No intent matched.`);
}
})
.catch(err => {
console.error('ERROR:', err);
});
DialogFlow 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
正如其他人以前在这里所说的,访问令牌有一个小时的持续时间,之后它就变得无用了。因此,为了请求访问令牌,需要对API进行一次调用(在我的例子中是http调用),每小时一次,然后按照Satheesh的解释使用它。https://developers.google.com/identity/protocols/oauth2ServiceAccount中给出了有关如何生成进行调用的签名以及以后使用该签名的说明。
一旦使用私钥和必须使用的电子邮件(不是您的电子邮件,而是由服务帐户生成的电子邮件)从服务帐户获得json文件,您就可以使用jsrsasign库(纯javascript)来生成json Web签名(JWS),从而生成json Web令牌(JWT),进行http调用以获取访问令牌所需的json Web令牌。
然后,按照上面Satheesh所描述的那样使用它,通过jQuery调用Dialogflow V2。
我用来实现这一点的代码是下一个:
function _genJWS() {
var header = '{"alg":"RS256","typ":"JWT"}';
var claimSet = jwtClaimSet();
var privateKey = jwtPrivateKey();
var sHead = newline_toDos(header);
var head = KJUR.jws.JWS.readSafeJSONString(sHead);
var sPayload = newline_toDos(claimSet);
var sPemPrvKey = privateKey;
var jws = new KJUR.jws.JWS();
var sResult = null;
try {
prv = KEYUTIL.getKey(sPemPrvKey);
sResult = KJUR.jws.JWS.sign(head.alg, sHead, sPayload, prv);
} catch (ex) {
alert("Error: " + ex);
}
return sResult;
}
function _requestAccessToken() {
var access_token = accessToken;
var assertion = _genJWS();
console.log('Assertion: ' + assertion);
jQuery.ajax({
type: "POST",
url: "https://www.googleapis.com/oauth2/v4/token",
contentType: "application/x-www-form-urlencoded",
dataType: "json",
data: "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=" + assertion,
success: function(response) {
console.log("success");
console.log(response);
access_token = response.access_token;
console.log(access_token);
},
error: function() {
console.log("Error");
}
});
return access_token;
}
然后使用该访问令牌对DialogFlow进行HTTP调用。
希望能有所帮助。
问题内容: 有什么方法可以使用AngularJS进行同步调用吗? AngularJS文档不是很明确,也不是为了找出一些基本内容而扩展。 在服务上: 问题答案: 不是现在。如果查看源代码(从2012年10月开始),您会发现对XHR open的调用实际上是硬编码为异步的(第三个参数为true): 您需要编写自己的执行同步调用的服务。通常,由于JavaScript执行的性质,您通常不需要执行此操作,最终
问题内容: 我是ReactiveX for Java的新手,我有以下代码块可以进行外部http调用,但它不是异步的。我们正在使用rxjava 1.2和Java 1.8 我有以下在网上找到的代码块,但我无法完全理解它,以及如何将其应用于代码库。 问题答案: 如果我对您的理解正确,则需要使用类似的方法包装现有的内容 代码的简短说明: 它计划在 对成功案例和错误案例的转换最少。它也发生在调度程序上,但是
问题内容: 好的,这里是twitter API, 任何人都可以给我有关如何使用Meteor调用此API或链接的任何提示吗 更新:: 这是我尝试过的代码,但未显示任何响应 问题答案: 您要定义checkTwitter Meteor.method 内部 客户范围的块。因为您不能从客户端调用跨域(除非使用jsonp),所以您必须将此块放在一个块中。 顺便说一句,每个文档,在客户端的checkTwitte
我使用postman测试了一个API。使用postman,我设法生成了一个令牌。 从postman那里,我通过一个get请求,使用以下内容和以下详细信息获取了用户的所有数据: 在授权类型下,我选择了“无记名令牌”并将令牌粘贴在其各自的字段中。 当我单击发送时,我得到了一个用户数据的成功响应。 在PHP中,如何在PHP函数中执行相同的api调用(使用id、电子邮件和令牌)? 我试过这个: 但当我查看
RestTemplate文档中的Spring注意: 注意:从5.0开始,这个类处于维护模式,只接受微小的更改请求和bug。请考虑使用org.springframework.web.reactive.client.WebClient,它具有更现代的API,支持同步、异步和流场景。 https://docs.spring.io/spring-framework/docs/current/javadoc
我搜索了许多网站和文档,但异步调用使用的代码相同。但不确定为什么它不起作用。如果我错过了什么,有人能帮我吗?