Dialogflow Webhook(Webhook调用失败。错误:500内部服务器错误)

时间:2018-06-05 21:03:00

标签: javascript node.js google-cloud-platform dialogflow

我已按照本教程的代码(https://dialogflow.com/docs/getting-started/basic-fulfillment-conversation)将API结果返回到对话框流程。但是我的webhook一直在失败。有人可以帮我找出原因吗?

这是失败的对话之一: enter image description here

这是我的代码:

'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函数和名称节点服务器的检索是正确的,因为他们在调试时记录了正确的输出。

诊断信息: enter image description here

enter image description here

enter image description here

enter image description here

2 个答案:

答案 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团队必须手动重启服务器或类似的东西。

enter image description here