Как добавить проверку значения слота в навыке alexa

У меня есть одно намерение в моем умении NoteMyDetail, в котором есть три обязательных слота: name, age, gender. У меня есть различные высказывания, такие как «запишите мои данные», «запишите мое имя как {name}» и т. Д. Поэтому, если я скажу «запишите мои данные» он один за другим запрашивает все значения, и если я скажу «запишите мое имя как Джо», он запросит только возраст и пол.

Теперь проблема, с которой я столкнулся, заключается в том, как добавить проверки для этих слотов, потому что, когда Алекса спрашивает: «сколько вам лет», и я отвечаю, что меня зовут Джо или какой-то тарабарщину, она отправляет «?» в значении слота.

Как мне убедиться, что значение является числом только для возраста?

РЕДАКТИРОВАТЬ: Итак, я использовал код ссылки: https://gist.github.com/stormbytes/7ee3a05aa03c0ada0621dde746f2a6f9#file-index-js-L31

У меня есть слоты по мере необходимости, поэтому он запрашивает все значения, а затем проверяет значение, которое нарушает поток, поэтому я сделал значения слотов как необязательные и проверил, если значение определено / не определено. Я получаю следующий ответ в симуляторе, но он говорит: «Возникла проблема с ответом запрошенного навыка»

{
"body": {
    "version": "1.0",
    "response": {
        "outputSpeech": {
            "type": "SSML",
            "ssml": "<speak> Sorry I did not get the age, please say it again </speak>"
        },
        "directives": [
            {
                "type": "Dialog.ElicitSlot",
                "slotToElicit": "ageValue"
            }
        ],
        "reprompt": {
            "outputSpeech": {
                "type": "SSML",
                "ssml": "<speak> Please tell me your age </speak>"
            }
        },
        "shouldEndSession": false
    },
    "sessionAttributes": {},
    "userAgent": "ask-nodejs/1.0.25 Node/v6.10.3"
}
}

person Harsh Butani    schedule 11.06.2018    source источник
comment
Вы можете использовать Подтверждение. Если нет, вы можете отредактировать лямбда-функцию для проверки. Верните ответ, как будто это должно быть число, и перезапустите свой навык.   -  person Nikhil Wagh    schedule 11.06.2018
comment
Я не хочу перезапускать навык, поскольку пользователь уже добавил бы значения для имени и т. Д., И, перезапустив навык, пользователю придется снова ввести значение для имени. Кроме того, если это третий слот, то есть пол, тогда нужно будет снова добавить имя и возраст. Причина, по которой я не могу использовать подтверждение, заключается в том, что если пользователь говорит, что меня зовут Джо для возрастного интервала, а затем подтверждает это. Это вызовет проблему, так как я хочу, чтобы возраст был только числом   -  person Harsh Butani    schedule 11.06.2018
comment
В этом случае вы можете использовать директиву Dialog.ElicitSlot. См. Это: developer.amazon.com/docs/custom -скиллы /. Вы можете просить Age сколько угодно раз.   -  person Nikhil Wagh    schedule 11.06.2018
comment
Спасибо за ваши быстрые ответы @NikhilWagh .. но я новичок в развитии навыков Alexa, есть ли какой-нибудь пример ElicitSlot, поскольку отправленная вами ссылка объясняет, что делать, но не как это делать.   -  person Harsh Butani    schedule 11.06.2018
comment
Какой язык вы используете для своей лямбда-функции?   -  person Nikhil Wagh    schedule 11.06.2018
comment
Я нашел эту ссылку, чтобы проверить, существует ли значение слота или нет: github.com/alexa/alexa-cookbook/blob/master/handling-responses/ Что должно произойти, если функция isSlotValid не возвращает значение: я имею в виду, как использовать Dialog .ElicitSlot там. А что, если вызывается резервное намерение, как сохранить уже полученные значения слота?   -  person Harsh Butani    schedule 11.06.2018
comment
Я использую Node js   -  person Harsh Butani    schedule 11.06.2018
comment
См. Это: gist.github.com/stormbytes/ Если вы хотите объяснения, я могу вам это дать.   -  person Nikhil Wagh    schedule 11.06.2018
comment
@NikhilWagh Спасибо за ссылку .. очень полезно. Я обновил вопрос, так как в комментарии есть ограничение на количество символов. Пожалуйста, проверьте.   -  person Harsh Butani    schedule 11.06.2018
comment
Почему slotToElicit : sugarlevel, а не age?   -  person Nikhil Wagh    schedule 11.06.2018
comment
К сожалению, это ageValue (название слота) было моей опечаткой, но она по-прежнему дает те же результаты :(   -  person Harsh Butani    schedule 11.06.2018
comment
Пожалуйста, проверьте свой DeviceLog в тестовом симуляторе Alexa. Вы сможете найти CaptureDebugger. Возможно, вы сможете выяснить, что именно идет не так. Поскольку, если вы получили такой ответ, ошибки быть не должно.   -  person Nikhil Wagh    schedule 11.06.2018
comment
тип: INVALID_RESPONSE, сообщение: Запрошенный навык еще не настроен для поддержки диалогов. Обновите конфигурацию навыка в консоли разработчика. . . . Нужно ли нам иметь хотя бы одно обязательное поле для реализации Директивы диалога, потому что она работала, когда я пометил слоты как требуемый?   -  person Harsh Butani    schedule 11.06.2018
comment
Нет, это не так. Вы можете показать мне свой intentSchema? Загрузите его в git и вставьте ссылку.   -  person Nikhil Wagh    schedule 11.06.2018
comment
нет, выдает ту же ошибку :(   -  person Harsh Butani    schedule 12.06.2018
comment
Ok. Попробуйте сделать один из своих слотов по мере необходимости, а затем попробуйте. Ответ вроде хороший, поэтому единственное, что мы можем сделать, - это метод проб и ошибок.   -  person Nikhil Wagh    schedule 12.06.2018
comment
Да, если у нас есть необходимый слот (любой), похоже, он работает нормально. Также в документации они заявили требования для использования Директивы диалога, в которой говорится, что вам нужны требуемые слоты.   -  person Harsh Butani    schedule 12.06.2018


Ответы (1)


Это типичный случай, когда вы можете использовать недавно выпущенную функцию под названием Проверка места. Все, что вам нужно сделать, это перейти на страницу, где вы определили свой слот, как требуется, и щелкнуть вкладку Validations:

введите описание изображения здесь

и добавьте правило проверки. В вашем случае, когда вы имеете дело с возрастом, скорее всего, и AMAZON.Number, вы можете установить два правила: одно для нижнего предела возраста (например, 0), а другое - для верхнего предела ( например, 100). Взгляните на мой пример, использующий числовой слот под названием ownedMiles:

введите описание изображения здесь

Как только вы это сделаете, все, что не является числом в диапазоне, определенном правилами проверки, вызовет озвучивание предоставленного запроса в проверке, и Alexa попытается снова собрать значение.

person German    schedule 28.08.2019