Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在LUIS对话框中调用QnAMaker_Node.js_Rest_Botframework_Azure Language Understanding_Azure Bot Service - Fatal编程技术网

Node.js 在LUIS对话框中调用QnAMaker

Node.js 在LUIS对话框中调用QnAMaker,node.js,rest,botframework,azure-language-understanding,azure-bot-service,Node.js,Rest,Botframework,Azure Language Understanding,Azure Bot Service,我有一个QnA机器人和一个路易斯机器人。当QnA对话框被触发以获得响应时,我想在我的LUIS对话框中发出post请求。我测试了它,只是问了一个问题:您好,哪个应该回答您好 我不确定我的端口是否正确,因为我是从另一个类似的stackoverflow问题得到它的,所以这可能就是我的错误所在。我也尝试过没有任何端口 当我问问题时,我得到一个错误:error:read ECONNRESET 我在Azure机器人服务上运行这个,我怀疑这可能是这个小错误的原因 这是我的密码: var request = r

我有一个QnA机器人和一个路易斯机器人。当QnA对话框被触发以获得响应时,我想在我的LUIS对话框中发出post请求。我测试了它,只是问了一个问题:您好,哪个应该回答您好

我不确定我的端口是否正确,因为我是从另一个类似的stackoverflow问题得到它的,所以这可能就是我的错误所在。我也尝试过没有任何端口

当我问问题时,我得到一个错误:
error:read ECONNRESET

我在Azure机器人服务上运行这个,我怀疑这可能是这个小错误的原因

这是我的密码:

var request = require('request');
var http = require('http');

var options = {
  host:'westus.api.cognitive.microsoft.com',
  path:'/qnamaker/v2.0/knowledgebases/<kb-key>/generateAnswer',
  port:443,
  method:'POST',
  headers:{
    'Ocp-Apim-Subscription-Key':<sub-key>,
    'Content-Type':'application/json'
  }
};
//http POST request
var reqPost = http.request(options,function(res){
    res.setEncoding('utf-8');

    var responseString = '';

    res.on('data',function(chunk){
        responseString += chunk;
    });

    res.on('end', function () {
       session.send(responseString); 
    });
});
//LUIS dialog when question is asked. 
bot.dialog('qnaReq', function (session, args) {
    //call QnA Bot and ask that bot the question
    reqPost.write({"question":"hi"}); //Just testing "hi" for now.
    reqPost.end();
    reqPost.on('error',function(e){
        session.send('error: ' + e);
    });
}).triggerAction({
    matches: 'QnA'
});
var request=require('request');
var http=require('http');
变量选项={
主持人:'westus.api.cognitive.microsoft.com',
路径:'/qnamaker/v2.0/knowledgebase//generateAnswer',
港口:443,
方法:'POST',
标题:{
“Ocp Apim订阅密钥”:,
“内容类型”:“应用程序/json”
}
};
//http POST请求
var reqPost=http.request(选项、函数(res){
res.setEncoding('utf-8');
var responseString='';
res.on('data',函数(块){
responseString+=组块;
});
res.on('end',function(){
会话。发送(应答);
});
});
//当被问到问题时,LUIS对话。
bot.dialog('qnaReq',函数(会话,参数){
//打电话给QnA机器人,向该机器人提问
write({“问题”:“hi”});//现在只测试“hi”。
reqPost.end();
请求发布(错误),功能(e){
session.send('错误:'+e);
});
}).触发作用({
比赛:“QnA”
});

这是您完整的机器人程序代码吗?如果是这样,则表明您尚未实例化
botbuilder
模块,并且您尚未将
bot
对象初始化为通用bot并将其绑定到连接器。@NilsW不,这不是我的全部代码。botbuilder已导入,所有对话框和普通对话框都能完美工作。我只是对这个有POST请求的特定对话框有一个问题。我只发布了我的应用程序特有的代码。您是否尝试过在bot应用程序外部测试QnAMaker API调用以验证它是否正常工作?奇怪的是,您似乎已经将
请求
模块导入到了代码中,但您没有使用它来发出API请求。尝试使用
request
模块而不是
http.request
。将请求包含在代码示例中是我的错误。我的代码使用它在不同的对话框中调用另一个api。我不完全确定如何在应用程序外部测试QnAMaker API调用。我不明白该把{“问题”:“嗨”}这是一个参数吗?因为我试着在Hull.it上测试它,结果发现badArgument是一个错误,所以我知道我做错了什么there@NilsW我已经通过了{“问题”:“你好”}作为我的帖子的主体,并得到了预期的结果:{“答案”:[{“答案”:“你好”,“问题”:[“你好”,“你好”,“你好”],“分数”:98.814691264718775}]}