dialogflow 返回空响应,尽管有数据

dialogflow returning an empty response, despite having the data

我正在尝试在 DialogFlow 中创建一个聊天机器人来检查您的保险索赔状态。

我已经设置了对外部 API(模拟)的调用,我使用承诺等待响应然后 return 它。但是,尽管从模拟 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);    

这是日志的输出:

根据文档,Dialogflow 的等待时间为 5 秒。如果您可以优化您的代码,那将是很棒的。有一些技巧可以让 DF 使用 Follow-Up 事件等待更长的时间,或者使用一个意图来请求 -> 通过一些确认来响应用户(例如,你能等 3 秒吗?Yes/No) -> 通过这个请求可用的时间,以便您可以在下一条消息中发送它。
您可以查看

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

幸运的是,在您的情况下,您可以通过在 callClaimsApi.

之前添加 return 语句来做到这一点

您可能还希望研究使用 axios 等库来执行 http 调用,因为它内置了 promise 支持。