【问题标题】:How to call a handler from another handler deploying an Alexa Skill?如何从另一个部署 Alexa Skill 的处理程序调用处理程序?
【发布时间】:2020-04-24 02:50:29
【问题描述】:

大家好,

我目前正在研究 Alexa Skill,但我遇到了一个问题,我需要从另一个人那里调用处理程序。

我阅读了几篇帖子,但我的问题没有明确的答案。我有一个处理程序“AskForEmployeeInformation_Handler”,它处理几个意图,回答关于一个人的几个问题。但是,如果用户只说出姓氏或名字而不是全名,那么 Alexa 会提示是否有人与给定的名字匹配。用户现在应该说出建议的名称之一。在说出这个名称时,会调用另一个处理程序“SetName_Handler”,它将所选名称设置为会话属性。现在我想在返回语句中再次调用“AskForEmployeeInformation_Handler”,因为它包含提示所需信息的整个逻辑。

我看到了一些调用处理程序的解决方案,就像您在以下代码中看到的那样,并且执行了逻辑,但是 Alexa 没有说任何话,也没有向用户提示答案。

您知道我可以做些什么来解决这个问题吗?

感谢您的帮助。

const SetName_Handler = {
  canHandle(handlerInput){
    const request = handlerInput.requestEnvelope.request;
    let sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
    return sessionAttributes.event === 'AskForEmployee_Name' || sessionAttributes.event === 'AskForPhoneNumber_Name' || sessionAttributes.event === 'AskForRole_Name';
  },
  handle(handlerInput) {
    const request = handlerInput.requestEnvelope.request;
    const responseBuilder = handlerInput.responseBuilder;
    let sessionAttributes = handlerInput.attributesManager.getSessionAttributes();

    let say = '';
    let slotValues = getSlotValues(request.intent.slots); 
    console.log('***** slotValues: ' +  JSON.stringify(slotValues, null, 2));

     //save person for the session - maybe for further questions
     sessionAttributes['employeeSurname'] = slotValues.employeeSurname.resolved;
     sessionAttributes['employeeName'] = slotValues.employeeName.resolved;

     handlerInput.attributesManager.setSessionAttributes(sessionAttributes); 

     return AskForEmployeeInformation_Handler.handle(handlerInput; 
  }
};

【问题讨论】:

    标签: node.js aws-lambda handler alexa-skills-kit alexa-skill


    【解决方案1】:

    我认为最好的办法是将逻辑与处理程序分开。我从未见过需要从另一个 Intent 调用另一个 Intent 的 handle 方法,我发现这会增加复杂性和奇怪的错误。

    一旦您的技能需要了解会话状态和上下文(例如,用户在调用此 IntentHandler 之前所做的事情),扁平的 IntentHandler 做事方式就是灾难的根源。

    相反,您可能会发现确认插槽的对话框界面方式正是您正在寻找的:https://developer.amazon.com/en-US/docs/alexa/custom-skills/dialog-interface-reference.html

    查看这篇文章,全面了解为什么/如何在 Alexa 应用程序中管理状态和上下文:https://medium.com/hackernoon/lessons-learned-moving-from-web-to-voice-development-35daa1d301db

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多