Java有Alexa Custom Skill要求缺少插槽

时间:2017-05-26 16:12:17

标签: java alexa alexa-skills-kit alexa-skill alexa-slot

我目前正在为Java中的Alexa构建自定义技能。

我希望Alexa使用现有的Exchange Server设置约会。

对于约会,我希望Alexa检查名称,用户给出日期和时间。我这样做是使用if语句,如:

if(date.getValue()== null){ return askResponse("请给出约会以创建约会")

Alexa要求丢失的插槽会发生什么,但是当我回答这个技能时就退出了。我不知道如何让Alexa认出我的回应。

代码如下:

public SpeechletResponse getTerminResponse(Slot name, Slot date, Slot time, Session session, IntentRequest request) throws Exception {

    if(time.getValue() == null) {
            return askResponse("Please insert time");
        } else if (date.getValue() == null) {
            return askResponse("Please insert date");
        } else if (name.getValue() == null) {
            return askResponse("Please insert name");
        } else {

            try {

                String[] datumArray = date.getValue().split("-");
                String[] zeitArray = time.getValue().split(":");

                Date startDate = new Date((Integer.parseInt(datumArray[0])-1900), (Integer.parseInt(datumArray[1])-1), (Integer.parseInt(datumArray[2])), (Integer.parseInt(zeitArray[0])), (Integer.parseInt(zeitArray[1])), 0);
                Date endDate = new Date((Integer.parseInt(datumArray[0])-1900), (Integer.parseInt(datumArray[1])-1), (Integer.parseInt(datumArray[2])), (Integer.parseInt(zeitArray[0]))+1, (Integer.parseInt(zeitArray[1])), 0);

                System.out.println(startDatum.toString());
                System.out.println(endDatum.toString());
                ExchangeHelper eh = new ExchangeHelper();
                eh.createMeeting(name.getValue(), "Test", startDate, endDate);

                return getTellSpeechletResponse("Appointment created successfully");    

            } catch (Exception e) {
                System.out.println(e);
                return askResponse("Failed to create appointment");
            }
        }
}

这是我的Interaction Model

任何帮助都会受到高度赞赏,因为我几天来一直在研究文档和示例,但我无法让它工作。

祝你好运

1 个答案:

答案 0 :(得分:0)

你能给出getTellSpeechletResponse的代码吗? 根据您附上的图片,您正在使用" new"对话模型,以便亚马逊为您收集所有的插槽。 https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/dialog-interface-reference#directives

很可能您忘记将DelegateDirective(通过speechletResponse.setDirectives(...))发送回亚马逊,告诉Alexa注意收集广告位值。但是只有在发送代码时才能回答这个问题。我还希望看到亚马逊的一个Dialog Java示例,但尚未找到。

如果您正在使用此对话框模型,那么您也不需要if elses,因为alexa会识别哪些插槽缺失。你必须标记这个"这个插槽是否需要满足意图"在交互模型中使用yes。比你还不需要创建自己的问答案,只是为你的4个插槽提供交互模型中的话语。