我目前正在为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");
}
}
}
任何帮助都会受到高度赞赏,因为我几天来一直在研究文档和示例,但我无法让它工作。
祝你好运
答案 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个插槽提供交互模型中的话语。