我已按照本教程的代码(https://dialogflow.com/docs/getting-started/basic-fulfillment-conversation)将API结果返回到对话框流程。但是我的webhook一直在失败。有人可以帮我找出原因吗?
这是我的代码:
'use strict';
const http = require('http');
exports.Hadoop = (req, res) => {
// Get name node server from the request
let nameNodeServer = req.body.queryResult.parameters['nameNodeServer']; // nameNodeServer is a required param
// Call the Hadoop API
getNameNodeInfo(nameNodeServer).then(function(output) {
res.json({ 'fulfillmentText': output }); // Return the results to Dialogflow
}).catch(() => {
res.json({ 'fulfillmentText': 'getNameNodeInfo() Error'- });
});
};
function getNameNodeInfo (nameNodeServer) {
return new Promise((resolve, reject) => {
// Create url for the HTTP request to get the name node info
let url = 'http://' + nameNodeServer + '[rest of url]';
// Make the HTTP request to get the name node info
http.get(url, (res) => {
let body = ''; // var to store the response chunks
res.on('data', (chunk) => {body += chunk; });
res.on('end', () => {
// After all the data has been received, parse the JSON for desired data
let response = JSON.parse(body);
let beans = response['beans'][0];
// Create response
let output = `Percent Used: ${beans['PercentUsed']}`;
// Resolve the promise with the output text
console.log(output);
resolve(output);
});
res.on('error', (error) => {
console.log(`Error calling the Hadoop API: ${error}`);
reject();
});
});
});
}
我相信getNameNodeInfo函数和名称节点服务器的检索是正确的,因为他们在调试时记录了正确的输出。
答案 0 :(得分:3)
我联系了Dialogflow的某人,这是他们的回应。
感谢您提供所有信息。我观察过你的 您使用http请求而不是https的代码。服务 必须使用HTTPS,并且必须可以公开访问URL 实现功能。 Dialogflow不支持自签名 SSL证书。有关SSL设置的信息,请参阅: https://developers.google.com/web/fundamentals/security/encrypt-in-transit/enable-https
答案 1 :(得分:0)
我们遇到了一些不同但相关的问题:
Internal Server Error
(在运行代理程序时)。
“status”: {
“code”: 500,
“errorType”: “internal_server_error”,
“errorDetails”: “Internal Server Error”
},
此错误不是由我们引入的任何更改引起的。我们正在应用的开发版本中使用该代理,一天早晨它停止工作。
我们通过创建.zip并将其还原到新代理中进行了测试。新的代理可以正常工作,但是我们将继续在代理上将500错误挂接到我们的开发应用程序中。我们提交了一个帮助请求,并在一夜之间解决了该错误。我们怀疑DialogFlow团队必须手动重启服务器或类似的东西。