У Java есть Alexa Custom Skill, запрашивающая недостающие слоты

В настоящее время я создаю специальный навык для Alexa на Java.

Я хочу, чтобы Алекса назначила встречу с помощью существующего сервера Exchange.

Для встречи я хочу, чтобы Алекса проверила, указаны ли имя, дата и время пользователем. Я делаю это с помощью операторов if, например:

if (date.getValue () == null) {return askResponse («Укажите дату, чтобы назначить встречу»)

Происходит то, что Алекса запрашивает недостающий слот, но когда я отвечаю, навык просто исчезает. Я не знаю, как заставить Алекса распознать мой ответ.

Код выглядит следующим образом:

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");
            }
        }
}

Вот моя модель взаимодействия

Любая помощь была бы очень признательна, так как я исследовал документацию и примеры в течение нескольких дней, и я просто не могу заставить ее работать.

С наилучшими пожеланиями


person MCR    schedule 26.05.2017    source источник
comment
вы можете разместить свою модель взаимодействия на портале разработчика? (модель взаимодействия, пользовательские слоты, высказывания)   -  person Taís Bellini    schedule 26.05.2017
comment
@ TaísBellini Я отредактировал свой исходный пост, потому что не знаю, как добавлять изображения к комментариям. Извините, пожалуйста, за немецкие намерения и слоты, Datum означает дату, Zeit означает время, а Имя самоочевидно, я полагаю;)   -  person MCR    schedule 26.05.2017
comment
Хорошо, этот интерфейс для меня в новинку. Вы можете поместить подсказки Пожалуйста, вставьте время и т. Д. Прямо в этот конструктор навыков, не нужно вводить код. Ты сделал это? Если вы щелкнете по слоту, вы должны увидеть поле «Подсказки», оно будет работать за вас. Я предполагаю, что сейчас, поскольку вы обрабатываете это в коде, ваши высказывания не ожидают ответа одного слота как записи, поэтому он закрывается, потому что нет совпадения.   -  person Taís Bellini    schedule 26.05.2017
comment
@ TaísBellini Раньше я заполнял подсказки, теперь я удалил предложения if и начал с операторов try. Всякий раз, когда я оставляю слот пустым с помощью Alexa, блок попытки немедленно остается из-за исключения NullPointerException (что имеет смысл, поскольку слот пуст), и Alexa не запрашивает недостающее значение. Успешно ли он работал раньше?   -  person MCR    schedule 26.05.2017
comment
Я начал использовать его сейчас, и он, похоже, находится в бета-версии, и подсказка на самом деле не появляется, поэтому она не выглядит заслуживающей доверия. Я предлагаю вам добавить высказывания TerminIntent {name}, TerminIntent {date} и т. Д., Чтобы ответы попадали в ваш код, а не закрывали сеанс. Затем в коде вы обрабатываете ответы. Вы можете сохранить то, на что уже был дан ответ, в sessionAttributes.   -  person Taís Bellini    schedule 26.05.2017


Ответы (1)


Можете дать код для getTellSpeechletResponse? Согласно приложенному вами рисунку, вы используете «новую» модель диалога, чтобы Amazon собирал все слоты для вас. https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/dialog-interface-reference#directives

Скорее всего, вы забыли отправить DelegateDirective (через speechletResponse.setDirectives(...)) на Amazon, чтобы сообщить Alexa, чтобы она позаботилась о сборе значений слотов. Но на это можно будет ответить, только отправив код. Я также хотел бы увидеть пример Dialog Java от Amazon, но еще не нашел.

Если вы используете эту диалоговую модель, вам также не нужны if elses, поскольку Alexa сама распознает, какие слоты отсутствуют. Вы должны отметить это «Требуется ли этот слот для выполнения намерения» со знаком «Да» в модели взаимодействия. Кроме того, вам не нужно создавать собственные ответы на вопросы, а просто давать высказывания в модели взаимодействия для ваших 4 слотов.

person timguy    schedule 19.06.2017