Java Alexa自定义技能重复出现响应的解决方案

Java Alexa自定义技能重复出现响应的解决方案,java,aws-lambda,alexa,alexa-skills-kit,alexa-skill,Java,Aws Lambda,Alexa,Alexa Skills Kit,Alexa Skill,我正在建立一种定制的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
技能 在其中,我可以询问用户的姓名并重复它。(工作正常)。 现在,下一部分是确认用户的姓名

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.
我已经检查了API文档,但没有找到与此案例相关的任何意图


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

恐怕不可能让Alexa每10秒问一次问题,直到用户确认为止

我想您使用的是confirmSlotDirective来确认用户名

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.
confirmSlotDirective或Alexa中的任何确认指令仅与确认消息中的同意不同意的词语一起使用。e、 g.是/否

解决方案:

1)如果您已经询问了用户的姓名(例如“John”),请不要再询问。简单地让Alexa说:

Alexa:“你的名字是约翰,对吗?”或者“你说的是约翰?请确认?”

用户:可以说是/否进行确认

注意:Alexa只识别有限的一组国际名称


2)获取用户名的更好方法是使用Alexa的,这样你就不用担心Alexa无法识别用户名,更不用说确认用户名了。

当用户没有响应时,每10秒重新启动一次,不确定我们是否能做到

但我们可以实现是/否部分。一种方法是使用状态。在本例中,我使用模块进行状态管理

考虑以下名为“确认问题意图”的意图。它将状态设置为“确认名称”

现在,启用/添加两个内置意图:AMAZON.yesint和AMAZON.nocontent。 考虑下面的亚马逊 在处理程序函数中。它检查是否存在名为“确认名称”的状态。如果它存在,它将以“请确认您的名字为‘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.YesInt为例, 在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();
  }
};

因此,您可以使用“状态”来确定用户在哪种情况下做出响应,然后提供正确的响应。

@shardha,谢谢让我也应用这个,如果可能的话,您可以分享一段Java吗?@mohitsharma抱歉,我对Java知之甚少:)好的,我还有一个例子,就是以编程方式使用alexa skill support DropIn。Alexa 1在其他位置向Alexa 2发送消息>>感谢您的回复。我想这样试试
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();
  }
};