【发布时间】:2018-08-31 22:10:19
【问题描述】:
我正在使用 this template from Amazon for a trivia game 构建 Alexa 按钮技能。在游戏中,Alexa 提出问题,用户以来自插槽类型“answers”的答案进行响应,该类型具有模板中的以下值:
fox,
wolf,
cat,
etc.
我希望用户能够用数字而不是单词来回答琐事问题。
我复制了交互模型并将 Lambda 函数连接到我的 Alexa 技能(根据自述文件)。当我在不更改任何代码的情况下对其进行测试时,它工作正常。对话框是这样的:
- Alexa:欢迎使用Beginning Addition。该游戏最多支持 4 名玩家。有多少玩家?
- 用户:两个
- Alexa:好的。玩家们,现在按下你们的按钮,我会知道你们将使用哪些按钮。
设备日志中的调试信息显示 Alexa 认为用户正在响应 PlayerCount 意图,这是正确的:
"request": {
"type": "IntentRequest",
"intent": {
"name": "PlayerCount",
"confirmationStatus": "NONE",
"slots": {
"players": {
"name": "players",
"value": "2",
"confirmationStatus": "NONE"
}
}
}
}
当我将 AnswerQuestionIntent 和 AnswerOnlyIntent 的槽类型更改为“AMAZON.NUMBER”(而不是槽类型“answers”)时,对话框如下所示:
- Alexa:欢迎使用Beginning Addition。该游戏最多支持 4 名玩家。有多少玩家?
- 用户:两个
- Alexa:抱歉,我没听懂。请再说一遍!
(注意:如果用户回复任何其他内容,Alexa 将重新提示“欢迎来到 Better with Buttons Trivia。此游戏最多支持 4 名玩家。有多少玩家?”)
查看设备日志中的调试信息,我可以看到 Alexa 认为意图是 AnswerOnlyIntent,而不是 PlayerCount:
"request": {
"type": "IntentRequest",
"intent": {
"name": "AnswerOnlyIntent",
"confirmationStatus": "NONE",
"slots": {
"answers": {
"name": "answers",
"value": "2",
"confirmationStatus": "NONE"
}
}
}
}
为什么 Alexa 认为用户想要 AnswerOnlyIntent?
根据 CloudWatch 日志,处理响应的不是 AnswerHandler,而是设置为重新提示用户的 Global DefaultHandler。 AnswerHandler 应该只在以下条件下运行:
return requestEnvelope.request.type === 'IntentRequest' &&
(requestEnvelope.request.intent.name === 'AnswerQuestionIntent' ||
requestEnvelope.request.intent.name === 'AnswerOnlyIntent') &&
validPlayerCount &&
(sessionAttributes.STATE === settings.STATE.BUTTON_GAME_STATE ||
sessionAttributes.STATE === settings.STATE.BUTTONLESS_GAME_STATE);
如果满足以下条件,PlayerCountHandler 返回 canHandle:
return requestEnvelope.request.type === 'IntentRequest' &&
(requestEnvelope.request.intent.name === 'PlayerCount' ||
requestEnvelope.request.intent.name === 'PlayerCountOnly') &&
attributesManager.getSessionAttributes().STATE === settings.STATE.START_GAME_STATE;
【问题讨论】:
-
嗨 Olivia,Cicil 的回答很到位。您需要做的是稍微修改技能:为仅数字答案提供更通用的处理程序。然后,根据状态 - 如果要查找玩家数量,请以这种方式使用答案;如果要寻找问题的答案,请以这种方式使用答案
标签: node.js alexa alexa-skills-kit alexa-skill alexa-slot