我的dialogflow应用程序的后端使用actions-on-google sdk . 它向另一台服务器发出请求 . 所以,我不得不退还承诺 . 它与谷歌助手完美配合,但对话框无法处理它 . aws-sam-cli也不能这样做(我的后端是一个aws lambda函数) .
-
如何实现我可以在本地和对话框流程控制台中测试我的功能而不会破坏谷歌助手的功能?
例:
return myAsyncTask(conv).then(() => {
conv.ask(new SimpleResponse('Hello World');
});
在dialogflow控制台中,响应字段包含“不可用” . 答案是这样的:
{
"payload": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "MyText",
"displayText": "MyDisplayText"
}
}
]
},
"userStorage": "{\"data\":{}}"
}
},
"outputContexts": [
...
]
}
履行字段未填写 . 这也可能是一个错误 . 但我不知道如何填补它 .
在aws-cli中我收到此错误:
(node:1)UnhandledPromiseRejectionWarning:未处理的promise promise(拒绝id:1):TypeError:无法将undefined或null转换为object
并且响应为空 .
1 回答
首先 - 它不应该使用承诺 . 事实上,你应该使用它们,所以你在那里领先一步 .
由于它适用于Google模拟器上的操作,这意味着您的代码可以发回有效且有意义的结果 .
部分问题在于您发回的内容是针对Google智能助理的 - 而不是针对Dialogflow测试人员 . 因此,您发回特定于助理的内容并不奇怪,但通用Dialogflow测试工具无法处理任何内容 . 这可能意味着您正在使用actions-on-google node.js库,这不是问题 .
aws-cli的错误表明您没有在测试过程中发送有效请求,因此您的代码(或者,更有可能的是,google上的操作库)会因格式错误的输入而瘫痪 . 要调试它,请检查aws-lambda日志以查看正在引起的错误,并可能记录您在函数中获得的请求 .