Javascript dialogflow返回空响应,尽管有数据
我正在尝试在DialogFlow中创建一个聊天机器人,用于检查您的保险索赔状态 我已经设置了对外部API(mock)的调用,我使用承诺等待响应,然后返回它。然而,尽管从模拟API获得了正确的数据,我还是始终从DF获得Javascript dialogflow返回空响应,尽管有数据,javascript,node.js,promise,dialogflow-es,dialogflow-es-fulfillment,Javascript,Node.js,Promise,Dialogflow Es,Dialogflow Es Fulfillment,我正在尝试在DialogFlow中创建一个聊天机器人,用于检查您的保险索赔状态 我已经设置了对外部API(mock)的调用,我使用承诺等待响应,然后返回它。然而,尽管从模拟API获得了正确的数据,我还是始终从DF获得[empty response]。只是时间太长了吗 以下是相关代码: var callClaimsApi = new Promise((resolve, reject)=>{ try{ https.get('https://MOCKAPIU
[empty response]
。只是时间太长了吗
以下是相关代码:
var callClaimsApi = new Promise((resolve, reject)=>{
try{
https.get('https://MOCKAPIURL.COM', (res) => {
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
resolve(JSON.parse(rawData));
});
});} catch(e){reject(e.message);}
});
function checkClaims(agent){
callClaimsApi
.then(function(fulfillment){
console.log("fulfillment name: " + fulfillment.name);
agent.add("It looks like you want to find a claim for " + fulfillment.name);
})
.catch(function(error){console.log(error);});
}
intentMap.set('checkClaims', checkClaims);
以下是日志的输出:
根据文档,Dialogflow的等待时间为5秒。如果你能优化你的代码,那就太棒了。有一些技巧可以让DF使用后续事件等待更长的时间,或者使用一个意向请求->通过一些确认来响应用户(例如,您可以等待3秒钟吗?是/否)->此时请求将可用,以便您可以在下一条消息中发送它。
您可以检查问题是,尽管您通过承诺进行所有处理,但您没有在处理程序中返回该承诺。库需要承诺,这样它就知道有一个异步操作正在进行,并且应该等到该操作完成后再发送回复 幸运的是,在您的情况下,您可以通过在
callClaimsApi
之前添加return
语句来实现这一点
您可能还希望研究使用诸如http调用之类的库,因为它具有内置的promise支持。我认为问题在于API调用花费的时间太长,DialogFlow想要响应并且不等待。所以,我想我要么需要加快我的通话速度,要么想办法让DialogFlow等待,无论是在代码中还是在设置中,如果可能的话……看起来通话需要2-3秒,所以这比5秒的等待时间要短,不确定为什么会失败很好,我会在这个周末测试,让你知道它是否有效。谢谢在我发布这个问题之后,在您回答之前,我已经尝试过Axios,但是这不起作用,但是您上面的解决方案符合我的要求。重要的是返回上下文。Axios只是使在基于承诺的环境中进行http调用变得更容易。很高兴有帮助!我必须检查我的历史记录,我想知道是否应该返回axios.call(XYZ).then(doThing.catch())