对话流返回空响应,尽管有数据

问题描述 投票:1回答:2

我正在尝试在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);    

这里是日志的输出:

error messages

javascript node.js promise dialogflow dialogflow-fulfillment
2个回答
1
投票

问题是,尽管您通过Promise进行所有处理,但没有在处理程序中返回该Promise。该库需要Promise,因此它知道正在进行一个异步操作,并且应该等待该操作完成后再发送回复。

幸运的是,您可以通过在return之前添加callClaimsApi语句来完成此操作。

您可能还希望研究使用axios之类的库来进行http调用,因为它内置了诺言支持。


1
投票

根据文档,Dialogflow的等待时间为5秒。如果您可以优化代码,那就太好了。有一些技巧可以使DF使用“跟进”事件等待更长的时间,或者使用一种意图来请求->对用户进行确认(例如,您可以等待3秒吗?是/否)->此时,该请求将可用,因此您可以在下一条消息中发送它。您可以检查his post for me info

© www.soinside.com 2019 - 2024. All rights reserved.