gpt4 book ai didi

java - 解决 Alexa 自定义技能重复出现响应的问题

转载 作者:行者123 更新时间:2023-11-30 01:55:04 40 4
gpt4 key购买 nike

我正在构建自定义 Alexa 技能我可以在其中询问用户的姓名并重复。 (工作正常)。现在,下一部分是确认用户的名称。

Alexa: "Please confirm your name!"<br>
User:"-"

Alexa: "Please confirm your name!"<br>
User: "No"

Alexa: "Please confirm your name!"<br>
**User: "Yes I confirm"**
End.

现在我正在尝试实现上述行为,因为Alexa 应每 10 秒提示一次“请确认您的名字!”,直到用户响应

"Yes, I confirm".

我检查了 API 文档,但没有找到与此案例相关的任何 Intent。

请分享一些信息或解决方案。

最佳答案

当用户没有响应时每 10 秒重新提示一次,不确定我们是否可以这样做。

但是我们可以实现“是/否”部分。做到这一点的一种方法是使用状态。在此示例中,我使用 node-cache状态管理模块。

考虑下面名为“ConfirmationQuestionIntent”的 intent 。它将状态设置为“confirm-name”。

const ConfirmationQuestionIntentHandler = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === "IntentRequest" &&
handlerInput.requestEnvelope.request.intent.name === "ConfirmationQuestionIntent"
);
},
handle(handlerInput) {
const speechText = "Please confirm your name as 'John'.";
myCache.set('state','confirm-name');
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};

现在,启用/添加两个内置 intent :AMAZON.YesIntent 和 AMAZON.NoIntent。考虑下面的 AMAZON.NoIntent,在处理函数中。它检查是否存在任何名为“confirm-name”的状态。如果存在,它会回复“请确认您的名字为‘John’”。如果没有,则使用默认响应进行响应。

const NoBuiltInIntent = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === "IntentRequest" &&
handlerInput.requestEnvelope.request.intent.name === "AMAZON.NoIntent"
);
},

handle(handlerInput) {
const state = myCache.get("state");
let speechText = "I didn't get this!. Could you please rephrase.";
if(state === "confirm-name") speechText = "Please confirm your name as 'John'.";
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};

考虑下面的 AMAZON.YesIntent,在handle函数中,它检查是否存在名为“confirm-name”的状态。如果是,则它会回复“感谢您的确认”并从缓存中删除该状态。如果不是,那么它会要求用户重新措辞。

const YesBuiltInIntent = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === "IntentRequest" &&
handlerInput.requestEnvelope.request.intent.name === "AMAZON.YesIntent"
);
},

handle(handlerInput) {
const state = myCache.get("state");
let speechText = "I didn't get this!. Could you please rephrase.";
if(state === "confirm-name") speechText = "Thanks for the confirmation.";
myCache.del('state');
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};

因此,您可以使用“状态”来识别用户正在响应的场景,然后提供正确的响应。

关于java - 解决 Alexa 自定义技能重复出现响应的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54807467/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com