我正在尝试在DialogFlow中创建一个聊天机器人,以检查您的保险索赔状态。
我已经建立了对外部API(模拟)的调用,并且我使用了Promise等待响应,然后返回它。但是,尽管从模拟API获取了正确的数据,我还是始终从DF获得[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);
这里是日志的输出:
问题是,尽管您通过Promise进行所有处理,但没有在处理程序中返回该Promise。该库需要Promise,因此它知道正在进行一个异步操作,并且应该等待该操作完成后再发送回复。
幸运的是,您可以通过在return
之前添加callClaimsApi
语句来完成此操作。
您可能还希望研究使用axios之类的库来进行http调用,因为它内置了诺言支持。
根据文档,Dialogflow的等待时间为5秒。如果您可以优化代码,那就太好了。有一些技巧可以使DF使用“跟进”事件等待更长的时间,或者使用一种意图来请求->对用户进行确认(例如,您可以等待3秒吗?是/否)->此时,该请求将可用,因此您可以在下一条消息中发送它。您可以检查his post for me info