0

我目前正在为 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");
            }
        }
}

这是我的交互模型

任何帮助都将受到高度赞赏,因为我已经研究了几天的文档和示例,但我无法让它发挥作用。

此致

4

1 回答 1

0

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

很可能您忘记将DelegateDirective(via speechletResponse.setDirectives(...)) 发回给亚马逊,告诉 Alexa 小心收集插槽值。但这只有在您发送代码时才能得到解答。我还想看看亚马逊的 Dialog Java 示例,但还没有找到。

如果您正在使用此对话框模型,您也不需要 if elses,因为 Alexa 会识别自己缺少哪些插槽。您必须在交互模型中用“是”标记“是否需要此插槽才能实现意图”。比您也不需要创建自己的询问响应,而只需在交互模型中为您的 4 个插槽提供话语。

于 2017-06-19T09:14:05.900 回答