我将ASK SDK V2用于node.js来开发alexa技能。根据文档,我们需要添加Inprogress以及Completed对话框处理程序以实现对话框委托。它工作正常,但是响应在某种程度上超越了我期望的响应。
进行中的意图处理程序:
const InProgressGetAuthors = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'GetAuthors' &&
handlerInput.requestEnvelope.request.dialogState !== 'COMPLETED';
},
handle(handlerInput) {
const currentIntent = handlerInput.requestEnvelope.request.intent;
if (handlerInput.requestEnvelope.request.dialogState === "STARTED") {
return handlerInput.responseBuilder
.addDelegateDirective(currentIntent)
.getResponse();
} else if (handlerInput.requestEnvelope.request.dialogState !== 'COMPLETED') {
return handlerInput.responseBuilder
.addDelegateDirective()
.getResponse();
} else {
return currentIntent;
}
}
}
完成的意图处理程序:
const CompletedGetAuthors = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'GetAuthors';
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak(author_propmt)
.reprompt(author_propmt)
.withStandardCard(
author_title,
author_copy,
author.imageUrl,
author.imageUrl
)
.withShouldEndSession(false)
.getResponse();
}
}
在完成的意图处理程序中,我将在响应中发送卡片。它确实会说出文字,但不会显示卡。
响应对象:
{
"body": {
"version": "1.0",
"response": {
"directives": [
{
"type": "Dialog.Delegate"
}
]
},
"sessionAttributes": {},
"userAgent": "ask-node/2.0.9 Node/v6.10.3"
}
}
如果您查看响应正文,则该卡丢失。我究竟做错了什么 ?有人可以让我知道吗?
谢谢
答案 0 :(得分:0)
对于任何面临此问题的人,请在Inprogress Intent处理程序中添加以下条件:
handlerInput.requestEnvelope.request.dialogState !== 'COMPLETED' &&
handlerInput.requestEnvelope.request.dialogState !== 'IN_PROGRESS';
该卡片现在正在显示。
谢谢