如何解决在dialogflow webhook中设置了响应,但返回未设置响应
我正在从dialogflow调用我的dynamodb数据库。以下是意图的代码:
app.intent('Survey ID',(conv) => {
const ans = conv.parameters.any;
let dbread = new aws.DynamoDB.DocumentClient();
let read = function(){
var parameters = {
TableName: "DEV_SURVEY",Key:{
"S_ID": ans
}
};
dbread.get(parameters,function(err,data){
if(err){
console.log("error",JSON.stringify(err,null,2));
conv.close('This is not a valid survey ID');
}
else{
console.log("success",JSON.stringify(data,2));
//conv.add('Hello');
//Adding API here
}
})
}
read();
});
由于在日志中可见内容,因此呼叫数据工作正常。但是响应或在console.log之后编写的任何代码都导致错误。错误是:
错误:未设置任何响应。这是在异步调用中使用的吗?该调用没有作为对意图处理程序的承诺返回?
解决方法
问题恰恰是错误消息所说的-您正在发出异步请求,但没有返回Promise。由于使用的是回调而不是基于Promise的响应,因此这更加复杂。回调确实完成了,所以您可以看到控制台日志,但是到它完成时,原始函数已经返回并试图发送回复给
dbread.get()
返回一个AWS.Request
object,可以用于获取Promise。将对DynamoDB的调用处理移到Promise处理程序中,并返回Promise,它可能看起来像这样:
app.intent('Survey ID',(conv) => {
const ans = conv.parameters.any;
let dbread = new aws.DynamoDB.DocumentClient();
const parameters = {
TableName: "DEV_SURVEY",Key:{
"S_ID": ans
}
};
return dbread.get(parameters).promise()
.then( data => {
console.log("success",JSON.stringify(data,null,2));
conv.add('Hello');
//API here - make sure they continue to use Promises and .then()
})
.catch( err => {
console.log("error",JSON.stringify(err,2));
conv.close('This is not a valid survey ID');
});
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。