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 支持。
我正在尝试在 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 支持。