如何从部署Alexa技能的另一个处理程序中调用处理程序?

问题描述 投票:0回答:1

大家好,

目前,我正在研究Alexa技能,但是我有一个问题,我需要从另一个人中调用处理程序。

我读了几篇文章,但是对我的问题没有明确的答案。我有一个处理程序“ AskForEmployeeInformation_Handler”,它处理几个意图,这些意图回答有关一个人的几个问题。但是,如果用户仅说姓或名而不是全名,则Alexa会提示是否有人与给定名称匹配。用户现在应该说出建议的名称之一。在说出该名称时,将调用另一个处理程序“ SetName_Handler”,该处理程序将所选名称设置为会话属性。现在,我想再次在return语句中调用“ 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个回答
0
投票

我认为您最好的选择是将逻辑与处理程序分开。我从来没有见过需要从另一个调用另一个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

© www.soinside.com 2019 - 2024. All rights reserved.